2012-11-26 63 views
3

我目前正在嘗試通過3臺機器上的spring來配置hibernate搜索,目的是使用JMS分佈式索引。由於我們部署我們的軟件的方式,我必須在所有三臺機器上使用相同的配置,但我需要一種方法來將其中的一臺設置爲JMS Master。Spring + Hibernate搜索動態配置

目前Hibernate是被通過Spring配置爲使用以下Bean聲明:

<bean class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
id="productSessionFactory"> 
    <property name="dataSource"> 
     <ref local="productDataSource"/> 
    </property> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
    <property name="entityInterceptor" ref="builderInterceptor"/> 
    <property name="eventListeners"> 
     <map key-type="java.lang.String" value-type="java.lang.Object"> 
      <entry key="save" value-ref="saveEventListener"/> 
     </map> 
    </property> 
</bean> 

在三臺機器,我需要設置的屬性hibernate.search.default.directory_provider對文件系統主之一,並在其他兩個我需要將其設置爲文件系統 - 從屬。

我必須設置在單獨的機器標誌,以識別哪些機器應該是主但是由於所有的配置是XML我不必須添加邏輯以正確地設置參數的任何能力的能力。

有沒有一種方法來設置此參數以編程方式離開剩下的配置?

謝謝!

+0

我一直認爲,在主/從配置是一種痛苦!我喜歡JGroups自動選舉主人的聲音:) –

回答

0

以編程的方式一般是可能的,但我不知道你到底怎麼做,在春季。而不是把你的屬性變成一個配置文件,你就必須動態地構建屬性(或至少部分動態),並把它傳遞給AnnotationSessionFactoryBean。如果我沒有弄錯,那麼Spring SPI中有鉤子可以讓你做到這一點,例如BeanDefinitionRegistryPostProcessor

另一種方法是寫自己的DirectoryProvider。看看org.hibernate.search.store.impl.FSMasterDirectoryProviderorg.hibernate.search.store.impl.FSSlaveDirectoryProvider譜寫提供商可以作爲從機或主機行爲取決於你能讀的標誌機器。