2011-01-18 21 views
1

挨拶は私の春のアプリケーション内のすべての 私は2つの異なるデータベース(PostgreSQLの&のMySQL)と休止状態を使用する必要がありますし、私は構成でかなり良いていないですので、私は私が使用していますので、複数のデータソースの共通の解決策は何ですか?

を行う方法についていくつかのガイドを必要とします休止状態-postgresqlの

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

     <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.project.domain.myDomain</value> 
      </list> 

     </property> 

     <property name="hibernateProperties"> 
      <value> 
       hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 
      </value> 
     </property> 


    </bean> 


    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="org.postgresql.Driver" /> 

     <property name="url"> 
     <value>${db.url}</value> 
     </property> 

     <property name="username" > 
     <value>${db.username}</value> 
     </property> 

     <property name="password"> 
     <value>${db.password}</value> 
     </property> 

    </bean> 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <bean 
     class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

ためとDAOで次の構成では、私はSessionFactoryのためのautowireを作ります。

+2

例えば以下を参照してください?同様に、「Person」はMySQL上、「Order」はPostgreSQL上にありますか? – jpkrohling

+0

第二の方法は、MySQLとPostgreSQL –

+0

内の他のエンティティにおける一部の企業は、あなたは、単一のトランザクションで両方のデータベースに変更を加える必要がありますか、またはあなたがそれを必要としませんか? – skaffman

答えて

1

唯一の方法は、1つのスタック(SessionFactory、Hibernate Templateなど)でデータソースを持つことです。次に、ビジネスクラスで使用したいHibernate Tempolateを注入することができます(あるいは、同時に両方のDBにアクセスしたい場合は両方)。ここ

は、明示的な設定 と例のDAOです...

<bean id="db2SessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
... 
</bean> 

<bean id="db1Dao" class="ch.sbb.uno.dao.hibernate.UnoHibernateDaoSupport" scope="prototype"> 
    <property name="sessionFactory" ref="db1SessionFactory" /> 
</bean> 

<bean id="db2Dao" class="ch.sbb.uno.dao.hibernate.UnoHibernateDaoSupport" scope="prototype"> 
    <property name="sessionFactory" ref="db2SessionFactory" /> 
</bean> 
+0

各データソースには独自のsessionFactroyがあり、それ自身の休止状態のテンプレートであるため、または両方が同じものを使用するでしょうか? –

+0

はい、あなたは完全に設定 – lweller

+0

を分離する必要がありますが、このケースを自動配線する方法はありますか?この方法には欠点がありますか? –

2

2つのデータベースを持っている、とあなたは2フェーズ・コミットしたい場合は、よりよいのためのXAドライバを使用してくださいと思いますどちらも。

+1

参照/リンクしてください。 –

+0

http://archive.devx.com/java/free/articles/dd_jta/jta-2.asp – duffymo

+0

あなたはMySQLとXAを使用して考えている場合は、この最初のhttp://dev.mysql.com/doc/を読みますrefman/5.5/en/xa-restrictions.html。私の経験ではInnoDB XAのサポートは良くありません –

0

おそらく、XAドライバが必要。

あなたは両方のデータベースで同じエンティティを永続化する必要がありますか、またはあなたが他のデータベースからいくつかのいずれかのデータベースからのエンティティ、およびいくつかを取得する必要があります

http://docs.codehaus.org/display/BTM/Home

関連する問題