注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

清风幻影的博客

Where there is love, I will be there.

 
 
 

日志

 
 
关于我

同是天涯沦落人,相逢何必曾相识. 天生我材必有用,千金散尽还复来. 天若有情天亦老,人间正道是沧桑. 月影西斜人已去, 堤上梅花情依旧, 此情故已成追忆, 美人如玉夜留香

Jboss 7.1.1 AS 搞JTA  

2013-12-19 16:33:51|  分类: jboss资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://gniboul.blog.163.com/blog/static/1685616022013223102657774/
Jboss 7 不再支持remote 的 lookup 所以要用web 应用测试。
1.在%JBOSS_HOME%下的modules里 建目录 /com/oracle/ojdbc6/main,
放入ojdbc6.jar 并创建 module.xml
<?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="com.oracle.ojdbc6"> 
      <resources> 
        <resource-root path="ojdbc6.jar"/> 
      </resources> 
      <dependencies> 
        <module name="javax.api"/> 
        <module name="javax.transaction.api"/>              <!--别忘了-->
      </dependencies> 
    </module> 
注意如果oracle版本>11 ,不要用 ojdbc14 不然会包 failed with exception $XAException.XAER_NOTA 异常。

2.修改standalone/configuration下的standalone.xml,在<datasources></datasources>里加两个 xa数据源
以及在<drivers></drivers>里加一个一个driver,driver 的name就是在module

<xa-datasource jndi-name="java:/XAOracleDS01" pool-name="XAOracleDS01" use-java-context="false">
                    <xa-datasource-property name="URL">
                        jdbc:oracle:thin:@//192.168.2.234:1521/ltdb
                    </xa-datasource-property>
                    <xa-datasource-property name="User">
                        im_fj
                    </xa-datasource-property>
                    <xa-datasource-property name="Password">
                        im_fj
                    </xa-datasource-property>
                    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    <driver>oracle</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                </xa-datasource>
                <xa-datasource jndi-name="java:/XAOracleDS02" pool-name="XAOracleDS02" use-java-context="false">
                    <xa-datasource-property name="URL">
                        jdbc:oracle:thin:@//192.168.2.234:1521/ltdb
                    </xa-datasource-property>
                    <xa-datasource-property name="User">
                        im_sd
                    </xa-datasource-property>
                    <xa-datasource-property name="Password">
                        im_sd
                    </xa-datasource-property>
                    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    <driver>oracle</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                </xa-datasource>
                <drivers>
                    <driver name="oracle" module="com.oracle.ojdbc6">
                        <driver-class>oracle.jdbc.OracleDriver</driver-class>
                        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
3. eclipse安装jbosstool 后,new 一个 jboss 7 的server (目录就是 %JBOSS_HOME% 拉).
能正常启动。并确定加载了数据源(可以在 管理端口 localhost:9990 看到数据源,  或者在启动日志里找到)。

4.创建一个web工程, 建一个UserTransactionServlet .
package XATest;

import java.io.IOException;
import java.sql.Connection;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;

public class UserTransactionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    Properties env = new Properties();
//    env.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
//    env.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
//    env.setProperty("java.naming.provider.url", "jnp://localhost:9999");
    Context ctx=null;
    try {
        ctx = new InitialContext(env);
        System.out.println("111111111111111111111");
        UserTransaction utx = (javax.transaction.UserTransaction) ctx.lookup("java:jboss/UserTransaction");
        DataSource ds01 = (javax.sql.DataSource) ctx.lookup("java:/XAOracleDS01");
        DataSource ds02 = (javax.sql.DataSource) ctx.lookup("java:/XAOracleDS02");
        utx.begin();
        Connection cn1 = ds01.getConnection();
        Connection cn2 = ds02.getConnection();
        cn1.createStatement().execute("insert into a_user_tables (table_name) values('ccc')");
        cn2.createStatement().execute("insert into a_user_tables (table_name) values('ccc')");
        //模拟抛出一个业务异常
        utx.commit();
        cn1.close();
        cn2.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       
    }
}
}
该项目还应该加载了 j2ee liberary,  ojebc6.jar,  %JBOSS_HOME%/bin/client/jboss-client.jar。

ok ,可以debug on server 测试了
  评论这张
 
阅读(898)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018