2016-07-24 11 views
0

私は現在、mybatisを既に実装しているプロジェクトに取り組んでいます。これは従来のコードであるため は、実装はMybatisプロジェクトでトランザクション管理を実装する方法

  1. スプリング
  2. MyBatisの
  3. JAxrs

Springアプリケーションコンテキストファイル

<bean id="sqlSessionFactory"   class="com.ca.aa.ui.framework.common.mybatis.SqlSessionFactoryBeanWrapper"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="mapperLocations" value="classpath*:ibatis/*_mapper.xml" /> 

</bean> 

別のXMLファイルがあるを使用して行われアプリケーションコンテキストから参照される

<bean class="org.mybatis.spring.mapper.MapperFactoryBean" name="tenantDAO"> 
    <property name="mapperInterface" value="com.ca.ias.data.dao.TenantDAO" /> 
    <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
</bean> 

TenantDAO.java

public interface TenantDAO { 

public List<something> somemethod1(); 

} 

次に、上記のJavaクラスにアクセスADN次いでtenantDAOを呼び出し、プレーンJavaメソッド、ある

<bean id="issuerService" class="com.ca.ias.admin.service.IssuerServiceImpl"> 
    <property name="tenantDAO" ref="tenantDAO"/> 
</bean> 

オブジェクトが持続サービス層がありますオブジェクトを持続させます。

IssuerServiceImpl.java

public void insert(){ 

try{ 
    tenantDao.insert(); 
}catch(Exception e){ 

}finally{ 

} 

どのように私はここにトランザクションマネージャを実装するのです、助けてください?

答えて

0

これは、特にあなたがすでにスプリング設定済みであることを考えれば、これを行う多くの方法があります。基本的には二つのこと

  1. トランザクションマネージャ
  2. トランザクション境界

あなたの春のコンテキストでtransaction managerを定義する必要が

トランザクションマネージャを設定する必要があります。 sqlSessionFactory定義に記載されているdataSourceがどこから来るかによって、その内容は異なる場合があります。

<bean id="txManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
コンテキスト春

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

このような場合、あなたはあなたにこのような設定を追加する必要があります。おそらくあなたは、このようないくつかの接続プールの構成を持っているされ、プロジェクト内の接続プールを使用します

トランザクション境界

最も簡単な方法は、annotation drivenトランザクション境界を使用することです。

次に、あなたが最初にそれを有効にする必要があります:あなたはあなたのサービスのメソッドをマークするTransactionalアノテーションを使用することができます

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

この構成では:

@Transactional 
public void insert(){ 

} 

@Transactional(readOnly=true) 
public void find(){ 

} 
関連する問題