转:http://www.blogjava.net/luoqx/articles/16447.html
项目组开发服务器使用weblogic,应用服务器上配置了数据源,每个人开发使用eclipse,每人调试程序都使用本机,所以调试使用的服务是跟eclipse的tomcat插件,数据源可以使用tomcat的配置的和weblogic同名的数据源,可是JTA tomcat不支持。
因为整个项目组使用统一的配置管理,spring的applicationContext.xml大家都相同,每天还要做每日构建,部署到服务器上也与配置管理上的文件相同,所以想是否可以将数据源和JTAmanager配置成远程的。
查找spring官方文档,太简单没有这方面描述,上网google了半天,没找到(奇怪?其实后来想想也不奇怪,大家要么使用本地数据源(开发调试),要么使用应用服务的数据源也是在同一应用服务器上,而不是在远程使用(部署的生产环境)。),所以干脆看看源码算了。
已知如下配置可以访问到同一应用服务器的jndi数据源
- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName">
- <value>jdbc/cqccms</value>
- </property>
- </bean>
记得当初使用jndi时可以远程访问写过client程序,主要除了要知道jndi名,还要设置jndi环境(Environment),所以查找一下JndiObjectFactoryBean的源代码,看看有没有设置jndi环境的方法,果然有setJndiEnvironment方法参数为properties,可以了,如下配置就能访问远程数据源了
- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName">
- <value>jdbc/cqccms</value>
- </property>
- <property name="jndiEnvironment">
- <props>
- <prop key="java.naming.factory.initial">
- weblogic.jndi.WLInitialContextFactory
- </prop>
- <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
- <prop key="java.naming.security.principal">weblogic</prop>
- <prop key="java.naming.security.credentials">weblogic</prop>
- </props>
- </property>
- </bean>
不过要记得把weblogic.jar放到自己应用的lib下,要不找不到weblogic.jndi.WLInitialContextFactory类。
数据源搞定了,测试一下果真好用,不过jta对象远程访问好像没那么顺利,同理查看org.springframework.transaction.jta.JtaTransactionManager类,没有发现上述方法,不过看到了setJndiTemplate()方法,也不错现配置一个jndiTemplate,如下:
- <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
- lazy-init="default" autowire="default" dependency-check="default">
- <property name="environment">
- <props>
- <prop key="java.naming.factory.initial">
- weblogic.jndi.WLInitialContextFactory
- </prop>
- <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
- <prop key="java.naming.security.principal">weblogic</prop>
- <prop key="java.naming.security.credentials">weblogic</prop>
- </props>
- </property>
- </bean>
然后在配置一下transactionManager,如下
- <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
- lazy-init="default" autowire="default" dependency-check="default">
- <property name="jndiTemplate">
- <ref local="jndiTemplate" />
- </property>
- <property name="userTransactionName">
- <value>weblogic/transaction/UserTransaction</value>
- </property>
- </bean>
不过JtaTransactionManager默认找jndi name为UserTransaction的jta对象,在同一应用服务器上可以,远程访问不到,后直接查看weblogic的jndi树找到这个jndi名weblogic/transaction/UserTransaction,配置上测试果然成功。
相关推荐
JTA配置文件请看applicationContext-jta.xml 博文链接:https://liran-email.iteye.com/blog/227990
在Spring中使用JTA事务管理 1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM ...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
spring + JTA + JOTM实现分布式事务, 高大上的技术
atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
在tomcat 中配置JTA 事务,方便管理web项目
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707
Spring+iBatis+JOTM实现JTA事务
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
多数据源 更新 spring jta java jotm
1.利用mina框架重构api,脱离了web应用服务器resin,而原api的jta事务由resin支持,故需要用其他支持jta事务的工具重新配置。在支持jta事务的工具中选择了atomikos 2.Api的数据库连接配置参数没有类似:testQuery的...
spring+jms+jta事务的消息发送和消息消费。 完整可正常运行例子,对JTA分布式事务的配置。 本例可以直接作为处理消息的项目,在此之上直接继续开发。
spring + JTA + atomikos实现分布式事务, 高大上的技术
分布式事务操作之Spring+JTA+mybatis源码
有关JDBC事务 JTA事务 传播特性 隔离级别等等
Spring Boot+Druid+Mybatis实现JTA分布式事务
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...