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



