0

注: 最初は似ていますが、これはJboss で構成された複数のデータベース/データソースにアクセスするための Hibernate を使用した Spring、JPA の使用の複製ではありません

Stackoverflow 様

jboss-4.2.1.GAで実行され、単一のデータベースを使用する休止状態のアプリケーションを備えたspring-jpaがありました。

上記のプロジェクトと同じ ear ファイルに 2 つ目の spring-hibernate プロジェクトがバンドルされていますが、2 つ目のデータベースを使用する必要があります。この 2 番目の hibernate/spring プロジェクトは、database.properties および hibernate.cfg.xml ファイルでセットアップされます。

2 つのデータベースの詳細は、jboss oracle-ds.xml ファイルに保存されます。

<datasources>
    <local-tx-datasource>
        <jndi-name>DefaultDS</jndi-name>
         ...
     </local-tx-datasource>
     <local-tx-datasource>
        <jndi-name>SecondDS</jndi-name>
         ...
     </local-tx-datasource>
</datasources>

私の質問は、2 番目のプロジェクトで、最初のデータベースではなく 2 番目のデータベースのオブジェクトがある場合、database.properties ファイルを使用する代わりに、詳細が oracle-ds.xml に格納されている 2 番目のデータベースの sessionFactory を呼び出すにはどうすればよいですか? 呼び出しの例を見てきました

@Resource(mappedName = "java:SecondDS")
private DataSource secondDS;
...
java.sql.Connection conn = secondDS.getConnection();

接続を取得するのが簡単な場合、それは準備されたステートメントにのみ役立ちますが、どうすれば sessionFactory を取得できますか? 同様のアプローチはありますか?

私が見たすべての例は、jboss ds.xml ファイルではなく、database.properties を参照しています。

前もって感謝します

4

1 に答える 1

1

データ ソースを耐性コンテキストにバインドする方法、Spring の方法、JPA の方法、または Hibernate の方法に応じて、いくつかの解決策があります。

spring/hibernate アプリケーションを JNDI データ ソースにリンクするには、JndiObjectFactoryBean を使用する必要があります。

<bean id="serverDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/blah"/>
  <property name="proxyInterface" value="javax.sql.DataSource"></property>
</bean>

このようにして、JNDI データ ソースを表す Spring Bean が作成されます。それらを 2 つ作成する必要があります (データ ソースごとに 1 つ)。Spring で定義された SessionFactory にデータ ソースを挿入する必要があります。Spring 管理の JPA エンティティ マネージャーを使用する場合も、同じことが使用できます。

JPA

JPA を使用している場合 (セッション ファクトリは jpa ではなく hibernate です...)、対応する persistance.xml ファイルで jndi データ ソース名を定義することもできます。

<persistence-unit name="sample">
  <jta-data-source>java:/DefaultDS</jta-data-source>
  ...
</persistence-unit>

entityManager を注入するときは、 unitName パラメータを使用する必要があります。

    @PersistenceContext(unitName="sample")  

休止状態

hibernate.cfg.xml ファイルの場合、このプロパティで JNDI データ ソースを指定できます。

<property name="connection.datasource">java:/comp/env/jdbc/MyDB</property>

jndi データ ソースが確実に使用されるように、database.property を削除する必要があります。

これらは単なる例であり、最終的な結果は、配管の作成方法によって異なります。

于 2012-08-01T10:05:34.383 に答える