weblogic與spring事務集成過程

轉貼地址: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>

 

    在這個過程中,看到網上有文章說可以搭建遠程的數據源,可以建立一個公共的數據源,開發人員連接公共的數據源,這樣連接數和數據源等參數可以通過統一設置了。可是按照那種方式沒有成功。不知是否有哪裏操作錯誤了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章