轉貼地址:http://hi.baidu.com/balance9/blog/item/8c30f33662ef44390a55a992.html
項目進展過程中,我們的框架中事務處理從最開始的倉促搭建,到後期一直在不斷的改善。
經歷的過程如下:
1. 使用DBCP的數據源配置
2. 使用JTOM配置JTA事務控制
3. 使用ATOMIKOS配置JTA事務控制
注意:
a 使用ORACLE的XA驅動
b 對用戶按照如下授權。
grant select on sys.dba_pending_transactions to <user name>;
grant select on sys.pending_trans$ to <user name>;
grant select on sys.dba_2pc_pending to <user name>;
grant execute on sys.dbms_system to <user name>;
4. 使用容器的數據源配置和spring的weblogic的事務控制類。
網上的例子很多,可是我不得不在這裏發句牢騷,國內的網站上的文章,有七八成是轉載,轉載不可怕,就怕轉載不轉全,要不然就是不管好不好用就轉載,結果坑壞了後來的這幫到處找解決方案的蝦米們,可咋整呢?
這裏先描述一下環境:
spring 2.0.8
struts 2.0.11
weblogic 10
oracle 10g rac
關鍵條件:
1. 在weblogic的當前域下配置數據源,配置的時候要選擇oracle thin XA的驅動,否則會報異常。
2. 在spring中配置的時候需要注意jndi的寫法。會在下面示例中寫明。
<!-- weblogic datasource -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
weblogic.jndi.WLInitialContextFactory
</prop>
<prop key="java.naming.provider.url">t3://127.0.0.1:7777</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
</props>
</property>
</bean>
<bean id="platformDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>test_rac</value></property>
<property name="jndiTemplate"><ref local="jndiTemplate"/></property>
</bean>
<bean id="businessDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>scott_rac</value></property>
<property name="jndiTemplate"><ref local="jndiTemplate"/></property>
</bean>
<!-- DAO template -->
<bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"></bean>
<bean id="platformDAOProxy" lazy-init="true" class="com.neusoft.ess.dao.ESSDAO" abstract="true">
<property name="dataSource">
<ref bean="platformDataSource" />
</property>
<property name="lobHandler">
<ref bean="defaultLobHandler" />
</property>
</bean>
<!-- Weblogic jta Transaction Manage -->
<bean id="txManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
<property name="jndiTemplate" ref="jndiTemplate"></property>
<property name="userTransactionName">
<value>weblogic/transaction/UserTransaction</value>
</property>
</bean>
<bean id="baseTxProxy" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="txManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
在這個過程中,看到網上有文章說可以搭建遠程的數據源,可以建立一個公共的數據源,開發人員連接公共的數據源,這樣連接數和數據源等參數可以通過統一設置了。可是按照那種方式沒有成功。不知是否有哪裏操作錯誤了。