各位大神,小弟最近配置分布式事务,打算采用JOTM来管理。在网上学习了一下,初步配置如下,结果出现了异常,望大大们指点小弟。。
- XML code
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"><ref local="jotm"/></property> </bean> <bean id="mysqlDataSource1" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager"><ref local="jotm"/></property> <property name="driverName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/emp_mvc</value></property> <property name="user" value="root"/> <property name="password" value="123456"/> </bean> <bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"><ref local="mysqlDataSource1"/></property> <property name="maxSize"><value>5</value></property> <property name="minSize"><value>2</value></property> <property name="user"><value>root</value></property> <property name="password"><value>123456</value></property> </bean> <bean id="mysqlDataSource2" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager"><ref local="jotm"/></property> <property name="driverName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/emp_mvc2</value></property> <property name="user" value="root"/> <property name="password" value="123456"/> </bean> <bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"><ref local="mysqlDataSource2"/></property> <property name="maxSize"><value>5</value></property> <property name="minSize"><value>2</value></property> <property name="user"><value>root</value></property> <property name="password"><value>123456</value></property> </bean> <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource1"/> <property name="mappingResources"> <list> <value>com/ouku/JOTM/entity/Emp.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SybaseDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.connection.pool_size">0</prop> <prop key="hibernate.connection.shutdown">true</prop> <prop key="hibernate.autocommit">false</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> <prop key="transaction.manager_lookup_class">org.hibernate.transaction.JOTMTransactionManagerLookup</prop> </props> </property> <property name="jtaTransactionManager"> <ref bean="jotm" /> </property> </bean> <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource2"/> <property name="mappingResources"> <list> <value>com/ouku/JOTM/entity/Emp2.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SybaseDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.connection.pool_size">0</prop> <prop key="hibernate.connection.shutdown">true</prop> <prop key="hibernate.autocommit">false</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> <prop key="transaction.manager_lookup_class">org.hibernate.transaction.JOTMTransactionManagerLookup</prop> </props> </property> <property name="jtaTransactionManager"> <ref bean="jotm" /> </property> </bean> <bean id="abstractTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="transactionAttributeSource"> <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/> </property> </bean> <!-- <bean id="hqlExecutor1" class="com.vtradex.edi.example.util.HqlExecutor" > <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean id="hqlExecutor2" class="com.vtradex.edi.example.util.HqlExecutor" > <property name="sessionFactory" ref="mySessionFactory2"/> </bean> --> <!-- 配置事务的传播性 哪些方法使用事务--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="edit*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 事务配置到biz层,而不配置到dao层 --> <!-- AOP配置 配置事务的执行范围--> <aop:config> <aop:pointcut id="managersMethod" expression="execution(* com.ouku.JOTM.biz.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="managersMethod"/> </aop:config> <!-- 配置dao层 --> <bean id="empDAO" class="com.ouku.JOTM.DAO.EmpDAO"> <property name="sessionFactory1" ref="sessionFactory1"></property> </bean> <bean id="emp2DAO" class="com.ouku.JOTM.DAO.Emp2DAO"> <property name="sessionFactory2" ref="sessionFactory2"></property> </bean> <bean id="empBiz" class="com.ouku.JOTM.biz.EmpBiz"> <property name="empdao" ref="empDAO"></property> <property name="emp2dao" ref="emp2DAO"></property> </bean>