客户端课程中的BMT?

时间:2015-05-28 13:34:54

标签: java java-ee transactions

我有一个带有客户端容器,EJB容器(业务层和数据访问层)的3层应用程序。我想使用BMT在我的客户端进行交易。我在EJB容器上的EJB都在使用CMT。

但我不确定这是否真的有效,因为客户端不在EJB容器中工作。客户端使用Context对象注入EJB容器的EJB,这似乎可以正常工作。我将我的客户端类声明为:

@Singleton
@TransactionManagement(TransactionManagementType.BEAN)

这是对的吗?我想我的GUI使用的客户端类必须是单例。

我有这些对象:

private Context jndiCntx;
private UserTransaction tx;

@PostConstruct
public void initialize() throws Exception {
    jndiCntx = new InitialContext();
    tx = (UserTransaction) jndiCntx.lookup("java:comp/UserTransaction");
    tx.begin();
}

此PostConstruct初始化事务。 这是我得到NullPointerException(在commitOrder()中):

@Override
public void commitOrder() throws ApplicationException {
    try {
        tx.commit();
    } catch (Exception e) {
        e.printStackTrace();
        throw new ApplicationException("", "commitOrder() failed!");
    }
}

@Override
public void cancelOrder() throws ApplicationException {
    try {
        tx.rollback();
    } catch (Exception e) {
        throw new ApplicationException("", "cancelorder() failed!");
    }
}

所以看起来我没有得到UserTransaction对象。我对使用上下文和事务的不同方式感到有些困惑。我究竟做错了什么?顺便说一下:使用TransactionManager与TransactionManager和使用UserTransaction有什么区别?

0 个答案:

没有答案