Spring JTA事務(WebLogic)配置


回転:
http://www.blogjava.net/luoqx/articles/16447.html
  プロジェクトグループ開発サーバはweblogicを使って、アプリケーションサーバにデータソースを配置しています.一人一人のデバッグプログラムは本機を使っています.ですから、デバッグに使うサービスはeclipseのtomcatプラグインです.データソースはtomcatの配置とweblogicの同名のデータソースが使えますが、JTA tomcatはサポートしていません.
  全体のプロジェクトグループは統一した配置管理を使用していますので、springのaplicationContaction Contactext.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環境を設定しているので、Jndi Object FactoryBenのソースコードを調べてみてください.jndi環境を設定する方法があるかどうか見てください.やはりsetJndi Enviromentメソッドパラメータは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.WLInitialContect Factory種類が探し出せません.
   データソースができました.テストは本当に役に立ちましたが、jtaの対象は長距離訪問があまりうまくいっていないようです.org.springframe ebook.tranactions.jta.Jta.Jta Transation Manager類を見ましたが、これらの方法は発見されませんでした.
<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>
     
  そして、トレーサビリティManagerを配置します.以下の通りです.
<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>
      でもJtaTransaction Managerはデフォルトでjndi nameをUserTransactionのjta対象として探しています.同じアプリケーションサーバでも大丈夫です.長距離は訪問できません.後でweblogicのjndi樹を直接見て、このjndi名weblogic/tranction/UserTransationを見つけて、配置テストに成功しました.