JOTM配置难题,跪求懂JOTM大神来解决一下
各位大神,小弟最近配置分布式事务,打算采用JOTM来管理。在网上学习了一下,初步配置如下,结果出现了异常,望大大们指点小弟。。
<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>
2011-11-23 10:18:38,535 ERROR [org.hibernate.transaction.JTATransaction] - Could not find UserTransaction in JNDIjavax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source) at org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60) at org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.java:57) at org.hibernate.jdbc.JDBCContext.registerSynchronizationIfPossible(JDBCContext.java:172) at org.hibernate.impl.SessionImpl.checkTransactionSynchStatus(SessionImpl.java:1867) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1622) at com.ouku.JOTM.DAO.EmpDAO.selectEmp(EmpDAO.java:16) at com.ouku.JOTM.biz.EmpBiz.selectAll(EmpBiz.java:15)Exception in thread "main" org.hibernate.TransactionException: Could not find UserTransaction in JNDI: at org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:64) at org.hibernate.transaction.JTATransactionFactory.createTransaction(JTATransactionFactory.java:57) at org.hibernate.jdbc.JDBCContext.registerSynchronizationIfPossible(JDBCContext.java:172) at org.hibernate.impl.SessionImpl.checkTransactionSynchStatus(SessionImpl.java:1867) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1622) at com.ouku.JOTM.DAO.EmpDAO.selectEmp(EmpDAO.java:16) Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source) at org.hibernate.transaction.JTATransaction.<init>(JTATransaction.java:60) ... 17 more