Jboss 7.1.1 AS 搞JTA

2023-04-12
Jboss 7 不再支持remote 的 lookup 所以要用web 应用测试。
 
1.在%JBOSS_HOME%下的modules里 建目录 /com/oracle/ojdbc6/main,
 
放入ojdbc6.jar 并创建 module.xml
 

 
      
        
          
        
        
          
                      
 
        
      
 
注意如果oracle版本>11 ,不要用 ojdbc14 不然会包 failed with exception $XAException.XAER_NOTA 异常。
 

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


 
                    
 
                        jdbc:oracle:thin:@//192.168.2.234:1521/ltdb
 
                    
 
                    
 
                        im_fj
 
                    
 
                    
 
                        im_fj
 
                    
 
                    oracle.jdbc.xa.client.OracleXADataSource
 
                    oracle
 
                    
 
                        false
 
                        true
 
                    
 
                    
 
                        
 
                        
 
                        
 
                    
 
                
 
                
 
                    
 
                        jdbc:oracle:thin:@//192.168.2.234:1521/ltdb
 
                    
 
                    
 
                        im_sd
 
                    
 
                    
 
                        im_sd
 
                    
 
                    oracle.jdbc.xa.client.OracleXADataSource
 
                    oracle
 
                    
 
                        false
 
                        true
 
                    
 
                    
 
                        
 
                        
 
                        
 
                    
 
                
 
                
 
                    
 
                        oracle.jdbc.OracleDriver
 
                        oracle.jdbc.xa.client.OracleXADataSource
 
                    
 
                
 
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 测试了

本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com