在Tomcat中通过JOTM支持JTA
factory="org.objectweb.jndi.DataSourceFactory"username="root"password="1234"
driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3309/topicdb"maxActive="30"maxIdle="30"/>
?
①-2:JNDI数据源
<Resource name="jdbc/postDS"auth="Container"type="javax.sql.DataSource"
factory="org.objectweb.jndi.DataSourceFactory"username="root"password="1234"
driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3309/postdb"maxActive="30"maxIdle="30"/>
②JOTM JTA事务管理
<Transaction factory="org.objectweb.jotm.UserTransactionFactory"jotm.timeout="60"/>
或者
<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction"
factory = "org.objectweb.jotm.UserTransactionFactory"
jotm.timeout = "60"/>
?? 在Tomcat中配置两个JNDI数据源,它们分别指向topicdb和postdb数据库,如①处所示。最后配置JOTM的JTA事务管理器,该事务管理器自动对两个JNDI中的数据源应用JTA事务。
?
需要注意的是,使用<Resource>节点声明的资源默认上下文前缀是"java:comp/env",而使用< Transaction>节点时则是"java:comp"。因此,当使用4声明事务时,相应的JNDI查找代码也应该改为 UserTransaction ut = (UserTransaction)initCtx.lookup("java:comp/env/UserTransaction");
?
测试代码:
ResultSet rs = null;Statement stmt = null;UserTransaction ut = null;Connection conn = null;Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");DataSource ds1 = (DataSource) envCtx.lookup("jdbc/topicDS");DataSource ds2 = (DataSource) envCtx.lookup("jdbc/postDS");?ut = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");conn1 = ds1.getConnection();conn2= ds2.getConnection();ut.begin();conn1 操作conn2 操作ut.rollback();.......??