3

私は現在、JMS 分散インデックスを使用する目的で、3 台のマシンで春を介して休止状態の検索を構成しようとしています。ソフトウェアをデプロイする方法により、3 台のマシンすべてで同じ構成を使用する必要がありますが、そのうちの 1 台を JMS マスターに設定する方法が必要です。

現在、休止状態は、次の Bean 宣言を使用して Spring 経由で構成されています。

<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>

3 台のマシンのうちの 1 台ではプロパティ hibernate.search.default.directory_provider を filesystem-master に設定する必要があり、他の 2 台ではプロパティを filesystem-slave に設定する必要があります。

個々のマシンにフラグを設定してマスターにする必要があるマシンを特定する機能がありますが、すべての構成が XML であるため、パラメーターを正しく設定するためのロジックを追加する機能がありません。

残りの構成をそのままにして、このパラメーターをプログラムで設定する方法はありますか?

ありがとう!

4

1 に答える 1

0

プログラムによる方法は一般的に可能ですが、Spring でそれを行う方法が正確にはわかりません。プロパティを構成ファイルに入れる代わりに、プロパティを動的に (または少なくとも部分的に動的に) 構築し、それをAnnotationSessionFactoryBeanに渡す必要があります。私が間違っていなければ、Spring SPI にはそれを可能にするフックがあります (例: BeanDefinitionRegistryPostProcessor ) 。

もう 1 つの方法は、独自のDirectoryProviderを作成することです。org.hibernate.search.store.impl.FSMasterDirectoryProviderorg.hibernate.search.store.impl.FSSlaveDirectoryProviderを見て、マシンで読み取ることができるフラグに応じてスレーブまたはマスターとして機能できるプロバイダーを作成します。

于 2012-11-27T08:30:17.540 に答える