打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring远程数据源JTA事务连接配置
项 目组开发服务器使用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,配置上测试果然成功。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring对JMS的支持
Spring远程调用小结
WebLogic JMS实例:使用Spring开发JMS
用SpringJMS使异步消息变得简单
在Spring中实现事务挂起
Spring对JTA的支持
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服