2016-07-24 15 views
0

Ich arbeite derzeit an einem Projekt, das mybatis bereits implementiert hat. Da es sich um ein Legacy-Code, wird die Umsetzung getanSo implementieren Sie die Transaktionsverwaltung in Mybatis-Projekt

  1. Frühling
  2. Mybatis
  3. JAxrs

Spring-Anwendungskontext Datei

<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> 

Es gibt eine andere XML-Datei mit referenziert aus dem Anwendungskontext

<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(); 

} 

Dann gibt es eine Dienstschicht, die die obige Java-Klasse zugreifen ADN weiterhin besteht dann das Objekt

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

es eine einfache Java-Methode ist, die tenantDAO ruft und hält dann das Objekt an.

IssuerServiceImpl.java

public void insert(){ 

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

}finally{ 

} 

Wie implementiere ich Transaktions-Manager hier, bitte helfen?

Antwort

0

Es gibt viele Möglichkeiten, dies zu tun, vor allem, wenn Sie bereits eine Feder konfiguriert haben. Grundsätzlich müssen Sie zwei Dinge

  1. Transaktionsmanager
  2. Transaktionsgrenzen

Transaktionsmanager

Sie müssen konfigurieren transaction manager im Frühjahr Kontext definieren. Abhängig davon, woher dataSource in Ihrer sqlSessionFactory Definition kommt, kann davon abweichen. Die meisten wahrscheinlich Sie Connection-Pool in Ihrem Projekt verwenden, die Sie Konfiguration einiger Verbindungspool wie dieses ist:

<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> 

Wenn dies der Fall ist, dann müssen Sie die Konfiguration wie diese in den kontext Frühling

<bean id="txManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

Transaktionsgrenzen

Der einfachste Weg ist annotation driven Transaktionsdemarkation zu verwenden.

Dann müssen Sie es aktivieren zuerst:

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

Mit dieser Konfiguration Sie Transactional Annotation verwenden können Methoden in Ihren Dienst zu markieren:

@Transactional 
public void insert(){ 

} 

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

}