我在这个JTA事务中使用websphere的XA数据源,执行事务没有问题的,貌似这个JTA事务起作用的Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
h.put(Context.PROVIDER_URL, "iiop://10.80.12.124:2809/");
InitialContext ctx = new InitialContext(h);
tx = (UserTransaction) ctx.lookup("jta/usertransaction");tx.begin();ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("mydbxa");
conn = ds.getConnection();
PreparedStatement stmt = conn
.prepareStatement("insert into c(c.compid,c.userid) values(?,?)");
String value = String.valueOf(System.currentTimeMillis());
stmt.setString(1, value);
stmt.setString(2, value);
stmt.executeUpdate();tx.commit();
ctx.close();

解决方案 »

  1.   

    后来我尝试着把<transaction-type>Container</transaction-type>、
    <trans-attribute>Mandatory</trans-attribute>
    改成<transaction-type>Bean</transaction-type>、
    <trans-attribute>Mandatory</trans-attribute>虽然不报错,能进入EJB执行,但是事务后提交了,没有体现提交的效果,rollback也一样。如果是使用<transaction-type>Bean</transaction-type>、<trans-attribute>Mandatory</trans-attribute>,也是要求在调用 bean 时客户端必须已经启动了一个事务。同样是这样的要求,为什么使用<transaction-type>Container</transaction-type>和使用<transaction-type>Bean</transaction-type>会有不同结果???我使用的是EJB2,EJB方面我是新手,请大家帮帮我!