Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          ibatis與weblogic集成中JTA方式的配置

          Posted on 2009-04-08 09:10 landor 閱讀(2133) 評論(0)  編輯  收藏 所屬分類: ibatis
          JDBC方式基本配置都很簡單,weblogic的數(shù)據(jù)源JNDI名字是:TestDatasource
          那么ibatis的SqlMapConfig.xml的配置如下
              <transactionManager type="JDBC" >
                  
          <dataSource type="JNDI">
                      
          <property name="context.java.naming.factory.initial" value="weblogic.jndi.WLInitialContextFactory" />
                      
          <property name="context.java.naming.provider.url" value="t3://localhost:7001" />
                      
          <property name="DataSource" value="TestDatasource" />
                  
          </dataSource>
              
          </transactionManager>


          此時啟動weblogic服務(wù)器,進(jìn)行正常junit測試即可(這里需要把weblogic.jar加到classpath中)

          然而如果用如下的配置方式
              <transactionManager type="JTA" >
                  
          <property name="UserTransaction" value="javax.transaction.UserTransaction"/>
                  
          <dataSource type="JNDI">
                      
          <property name="context.java.naming.factory.initial" value="weblogic.jndi.WLInitialContextFactory" />
                      
          <property name="context.java.naming.provider.url" value="t3://localhost:7001" />
                      
          <property name="DataSource" value="TestDatasource" />
                  
          </dataSource>
              
          </transactionManager>


          也就是用JTA來做事務(wù),那么會出現(xiàn)錯誤
          java.lang.ExceptionInInitializerError
              at gmt.boss.obs.account.recurringcharge.IbatisTest.setUp(IbatisTest.java:
          12)
              at junit.framework.TestCase.runBare(TestCase.java:
          128)
              at junit.framework.TestResult$
          1.protect(TestResult.java:106)
              at junit.framework.TestResult.runProtected(TestResult.java:
          124)
              at junit.framework.TestResult.run(TestResult.java:
          109)
              at junit.framework.TestCase.run(TestCase.java:
          120)
              at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:
          130)
              at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
          38)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
          460)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
          673)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
          386)
              at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
          196)
          Caused by: java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath 
          '/sqlMapConfig/transactionManager/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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 com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:
          89)
              at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:
          63)
              at testIbatis.IbatisInstance.
          <clinit>(IbatisInstance.java:27)
               
          12 more
          Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath 
          '/sqlMapConfig/transactionManager/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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 com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:
          53)
              at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:
          86)
               
          14 more
          Caused by: java.lang.RuntimeException: Error parsing XPath 
          '/sqlMapConfig/transactionManager/end()'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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 com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:
          123)
              at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:
          105)
              at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:
          102)
              at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:
          72)
              at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:
          51)
               
          15 more
          Caused by: com.ibatis.sqlmap.client.SqlMapException: Error initializing JtaTransactionConfig 
          while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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 com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig.initialize(JtaTransactionConfig.java:
          50)
              at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$
          6.process(SqlMapConfigParser.java:306)
              at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:
          121)
               
          19 more

          我已經(jīng)在配置文件里配置了context.java.naming.factory.initial,而在這里還提示這個錯誤
          關(guān)鍵看這里
          Error initializing JtaTransactionConfig while looking up UserTransaction (javax.transaction.UserTransaction). Cause: 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

          在jvm里加上一個參數(shù),測試一下
          -Djava.naming.factory.initial=weblogic.jndi.WLInitialContextFactory

          運(yùn)行通過

          這個參數(shù)在:右鍵項目--Run as --Open Run Dialog--Arguments的VM arguments中添加即可

          引入ibatis幫助的一段話,如下:
          警告!雖然這些看起來很簡單,但記住不要濫用全局(分布式)事務(wù),這點(diǎn)很重要。
          這樣做既有性能方面的考慮,同時也是因?yàn)槿质聞?wù)會讓應(yīng)用服務(wù)器和數(shù)據(jù)庫驅(qū)動程序的設(shè)置變得更復(fù)雜。
          雖然看起來簡單,您可能還是會遇到一些困難。記住,EJB擁有更多廠商和工具支持。
          對于需要分布式事務(wù)的應(yīng)用,最好還是使用Session EJB
          主站蜘蛛池模板: 剑川县| 龙陵县| 海宁市| 万源市| 同江市| 黔东| 合水县| 菏泽市| 宁河县| 海南省| 武城县| 寿宁县| 紫云| 石柱| 长海县| 临泽县| 武功县| 陈巴尔虎旗| 清新县| 右玉县| 沁源县| 长汀县| 驻马店市| 穆棱市| 锡林浩特市| 中宁县| 西宁市| 舞钢市| 琼结县| 古丈县| 自贡市| 莱州市| 西乌珠穆沁旗| 兰考县| 石家庄市| 游戏| 湘乡市| 铜山县| 凌云县| 个旧市| 木兰县|