1. 程式人生 > >Ldap遇到了事務管理問題

Ldap遇到了事務管理問題

border ack pro 標註 aso not rop work and

JDBC 和 LDAP 的事務管理

參考:http://www.linuxidc.com/Linux/2016-10/135718.htm


事務在項目中是必須考慮的一部分,這節討論兩種事務的分別處理和結合,通過註解來完成。 典型的JDBC事務配置如下:

<bean id="txManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" /></bean>
 <tx:annotation-driven transaction-manager="
txManager" />

我們配置了jdbc的默認事務管理為txManager,在服務層我們可以使用註解@Transcational來標註事務。

在單獨需要ldap事務管理時,我們可以配置ldap的事務,起了個別名ldapTx:

<bean id="ldapTxManager"
class="org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManager">
    <property name="contextSource" ref="contextSource
" /><qualifier value="ldapTx"/></bean>

我們可以使用註解@Transactional("ldapTx")來標註ldap的事務,如果不想每次引用別名,使用@LdapTransactional,則可以創建註解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.transaction.annotation.Transactional;

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Transactional(
"ldapTx") public @interface LdapTransactional { }

在ldap和jdbc同時都有操作的服務中,我們可以配置ContextSourceAndDataSourceTransactionManager來實現事務管理:

<beanid="ldapJdbcTxManager"class="org.springframework.ldap.transaction.compensating.manager.ContextSourceAndDataSourceTransactionManager">  
    <property name="contextSource" ref="contextSource"/>  
    <property name="dataSource" ref="dataSource" />  
    <qualifiervalue="ldapJdbcTx"/>
</bean>

Ldap遇到了事務管理問題