私はかなり厄介な状況にあります。Lucene との Hibernate 検索統合にコンパスを使用し、FSDirectoryProvider、RAMDirectoryProvider などの代わりに( JdbcDirectoryを使用して) データベース ディレクトリ検索を実装しました。
問題は、以下のようにディレクトリ プロバイダーが META-INF/persistence.xml 内のプロパティとして渡されることです。
<property name="hibernate.search.default.directory_provider" value="uk.company.package.JdbcDirectoryProvider" />
JdbcDirectory にはデータソースを渡す必要があるため、データベースの詳細を JdbcDirectoryProvider に渡す必要があります。
データベースとインデックスの詳細を含むプロパティ ファイル (クラス パス内) を使用して、型にはまらない方法で (ディレクトリ プロバイダー用の) データソースを構築しています。
uk.company.JdbcDirectoryProviderをSpring Bean として構成した場合、データソースを注入できます。これは Tomcat ではうまく機能しますが、persistence.xml で directory_provider を渡しているため、OAS や Weblogic ではうまく機能しません。おそらく、データソースが春によって初期化されるためです(これらのアプリサーバーでクラスローダーが機能する方法のため)。
私の質問は、persistence.xml の代わりに aSpring Bean 内でhibernate.search.default.directory_providerを直接構成するにはどうすればよいですか?
最寄りの場所は次のとおりです。
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
ただし、次の 3 つのプロパティのみが必要です。
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" />
解決
Spring Bean の休止状態のプロパティをjpaPropertiesとして渡すことができます
<property name="jpaProperties">
<props>
<prop key="hibernate.search.default.directory_provider">
uk.company.package.JdbcDirectoryProvider
</prop>
</props>
</property>