0

私は春のプロジェクトで2つのデータベースを使用しようとしています。 1つのデータベースを使用するとうまくいきますが、他のデータベースを追加するとエラーメッセージが表示されます。春の休止状態アプリケーションで2つのデータベースを使用している間に

org.hibernate.HibernateException: No Session found for current thread 

ディスパッチャ・サーブレット

<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <beans:property name="dataSource" ref="sample" /> 
     <beans:property name="annotatedClasses"> 
      <beans:list> 

           <beans:value>com.kendoui.spring.models.Constraint</beans:value> 

      </beans:list> 
     </beans:property> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
       <beans:prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect 
       </beans:prop> 
       <beans:prop key="hibernate.show_sql">true</beans:prop> 
       <beans:prop key="hibernate.format_sql">true</beans:prop> 

      </beans:props> 
     </beans:property> 

    </beans:bean> 


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

    </beans:bean> 


    <beans:bean id="Ascent" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <beans:property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
     <beans:property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=Ascent;" /> 
     <beans:property name="username" value="sa" /> 
     <beans:property name="password" value="abc123" /> 
     <beans:property name="maxActive" value="1" /> 
     <beans:property name="maxIdle" value="1" /> 
    </beans:bean> 

    <beans:bean id="sessionFactory2" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <beans:property name="dataSource" ref="Ascent" /> 
     <beans:property name="annotatedClasses"> 
      <beans:list> 
       <beans:value>com.kendoui.spring.models.ItemOperationSequence</beans:value> 
      </beans:list> 
     </beans:property> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
       <beans:prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</beans:prop> 
       <beans:prop key="hibernate.show_sql">true</beans:prop> 
       <beans:prop key="hibernate.format_sql">true</beans:prop> 

      </beans:props> 
     </beans:property> 

    </beans:bean> 


    <beans:bean id="transactionManager2" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <beans:property name="sessionFactory" ref="sessionFactory2" /> 

    </beans:bean> 

    <!-- Enable annotation driven transactions. Required by getCurrentSession(). --> 
    <tx:annotation-driven/> 

DAOのimplemantation

私はいろいろなことを試みましたが、うまくいきません。 私のサーブレットに<beans:qualifier value="Ascent" />を使ってみました と @Qualifier(value="SessionFactory2")私のDAO で何も動作していないようです。

誰でもこの問題の答えを知っています。あなたが手伝ってくれれば幸いです。

ありがとうございます。

+0

は2回定義する必要があります。 および Sanj

+0

データベースごとに別個のエンティティとリポジトリがありますか? –

+0

私は実体を使用しています。 – mona

答えて

0

<tx:annotation-driven/>は、トランザクションマネージャごとに2回宣言する必要があります。

<tx:annotation-driven transaction-manager="transactionManager2"/>

<tx:annotation-driven transaction-manager="transactionManager"/>

また、あなたが入力として両方HibernateTransactionManagersでChainedTransactionManagerを定義する必要が

@Autowired 
@Qualifier(value="SessionFactory2") 
private SessionFactory sessionFactory; 
+0

私はこれをやってみましたが、私は例外を取得しています:org.hibernate.HibernateException:いいえセッションが現在のスレッド – mona

0

ため@Qualifierを追加します。 私はXMLの設定を変更するのに慣れていませんが、このようになります。 @Transactionalだけを値なしで使用するだけではありません。

<beans:bean id="transactionManager1" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <beans:property name="sessionFactory" ref="sessionFactory" /> 

</beans:bean> 

<beans:bean id="transactionManager2" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <beans:property name="sessionFactory" ref="sessionFactory2" /> 

</beans:bean> 

<beans:bean id="transactionManager" class="org.springframework.data.transaction.ChainedTransactionManager"> 
    <beans:constructor-arg> 
     <list> 
      <beans:ref bean="transactionManager1" /> 
      <beans:ref bean="transactionManager2" /> 
     </list> 
    </beans:constructor-arg> 
</beans:bean> 
+0

見つかり、私はこれを使用してみましたが、私は例外にjava.lang.ClassNotFoundExceptionました:org.springframework.data.transaction.ChainedTransactionManagerを。私はjar spring-data-neo4j-tx-3.1.0.RELEASEを含めました。jarでも同じ例外が発生しています。 – mona

+0

あなたは春のデータを使用していない私の悪い申し訳ありません。 –

+0

ああ私はそれを使用していません。 – mona

0

私はこれを行うことで問題を解決しました。最初に私のDAOにトランザクション・マネージャ

<tx:annotation-driven transaction-manager="transactionManager1"/> 

を宣言し は現在正常に動作し

 @Transactional("transactionManager2") 
    @Component 
    public class ItemOprSeqDaoImpl implements ItemOprSeqDao { 

     @Autowired 
     @Qualifier("sessionFactory2") 
     private SessionFactory sessionFactory; 
     //then rest of the code 
} 

その使用しました。助けてくれてありがとう。

関連する問題