Jboss 7.1.1 AS 搞JTA


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 测试了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值