2012-08-01 114 views
0

注:雖然在第一相似,這不是Using Spring, JPA with Hibernate to access multiple databases/datasources configured in Jboss彈簧休眠JPA和JBoss - 對象保存到第二個數據庫

親愛的#1的重複,

我有一個彈簧JPA與Hibernate的應用在jboss-4.2.1.GA上運行並使用單個數據庫。

我現在有第二個spring-hibernate項目與上述項目捆綁在同一個ear文件中,但它需要使用第二個數據庫。第二個hibernate/spring項目使用database.properties和hibernate.cfg.xml文件進行設置。

兩個數據庫的詳細信息都存儲在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> 

我的問題是,在第二個項目,與第二個數據庫對象,而不是第一個,我怎麼能爲第二個數據庫調用sessionFactory,其細節存儲在oracle-ds.xml中而不是使用database.properties文件? 我見過一個例子調用

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

如果它是很容易獲得的連接,這只是準備語句是有用的,我怎麼能在這個SessionFactory的弄個?有沒有類似的方法?

我看到的所有例子都是指database.properties而不是jboss ds.xml文件。

在此先感謝

回答

1

有幾種解決方案,這取決於你如何將數據源綁定到presistance背景下,春節的方式,JPA方式或休眠方式....

要連結春/休眠應用到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。您需要創建其中的兩個(每個數據源一個)。他們需要在Spring中定義的SessionFactory中注入數據源。如果您使用Spring託管的JPA實體管理器,也可以使用它。

JPA

如果你正在使用JPA(會話工廠是不冬眠JPA ...),您也可以在相應的persistance.xml文件中定義的JNDI數據源名稱。

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

您需要使用的unitName參數注入EntityManager的時候:

@PersistenceContext(unitName="sample") 

休眠

對於hibernate.cfg。xml文件,你可以用這個屬性

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

的database.property應該被刪除,以確保在JNDI數據源,使用指定JNDI數據源。

這些只是一個例子,最終的結果將取決於你如何製作管道。

+0

謝謝Kazaag,我已經看過如何訪問主數據庫,並採取JPA方法。因此,我將採取同樣的方法。 – 2012-08-03 09:39:34