我目前正在評估Spring-db4o集成。聲明式事務支持以及輕鬆提供聲明式配置給我留下了深刻的印象。如何配置與Spring一起使用db4o的索引?
不幸的是,我很難想出如何在特定字段上創建索引。 Spring正在準備tomcat服務器啓動期間的數據庫。這裏是我的彈簧條目:
<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
<property name="configuration" ref="db4oConfiguration" />
<property name="databaseFile" value="/WEB-INF/repo/taxonomy.db4o" />
</bean>
<bean id="db4oConfiguration" class="org.springmodules.db4o.ConfigurationFactoryBean">
<property name="updateDepth" value="5" />
<property name="configurationCreationMode" value="NEW" />
</bean>
<bean id="db4otemplate" class="org.springmodules.db4o.Db4oTemplate">
<constructor-arg ref="objectContainer" />
</bean>
db4oConfiguration不提供任何方法來指定索引。我編寫了一個簡單的ServiceServletListener來設置索引。下面是相關代碼:
Db4o.configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
Db4o.configure().objectClass(com.test.Metadata.class).objectField("value").indexed(true);
我在此表中插入了大約6000行,然後使用SODA查詢根據密鑰檢索行。但表現相當糟糕。要驗證索引是否已正確應用,我運行了以下程序:
private static void indexTest(ObjectContainer db){
for (StoredClass storedClass : db.ext().storedClasses()) {
for (StoredField field : storedClass.getStoredFields()) {
if(field.hasIndex()){
System.out.println("Field "+field.getName()+" is indexed! ");
}else{
System.out.println("Field "+field.getName()+" isn't indexed! ");
}
}
}
}
不幸的是,結果顯示沒有字段被索引。
在類似的上下文中,在OME瀏覽器中,我看到有一個選項可以在每個類的字段上創建索引。如果我將索引變爲true並保存,它似乎是將更改應用於db4o。但是,如果在db4o文件上運行此示例測試,它不會顯示任何索引。
對此的任何指針將不勝感激。