如何在EJB3.0中管理事务

时间:2015-12-01 09:15:32

标签: java ejb-3.0

我正在使用EJB3.0和weblogic server.Below是我的EJB类。 在这个类中,我想在方法级别维护事务。 所以我用TransactionAttribute标记了方法。但是当这个 调用方法然后它给出一个下面附加的错误。 注意@TransactionManagement被评论。

@Stateless(name = "TestSystem", mappedName = "TestSystemBean")
 @Remote(value = Test.class)
//@TransactionManagement(value=TransactionManagementType.BEAN)
public class AssignmentSystemBean 
{

    @Resource
    protected SessionContext sessctx = null;

    public void setSessionContext(SessionContext ctx) {
        sessctx = ctx;
    }

  @TransactionAttribute(value=TransactionAttributeType.REQUIRED)
  public int saveAssignAddress(String username, String password, Address d, int id, String s) throws SQLException,Exception {
    sessctx.getUserTransaction ().begin ();
    return 0;
  }

}

enter image description here 所以我的问题是,如果没有将bean事务类型设置为BEAN,还有其他方法, 我们可以使用@TransactionAttribute(value = TransactionAttributeType.REQUIRED)。 我不能将Bean标记为TransactionManagementType.BEAN

1 个答案:

答案 0 :(得分:0)

注释掉@TransactionManagement(value=TransactionManagementType.BEAN)后,表示您使用容器管理事务(CMT)。但是在方法saveAssignAddress()中,您尝试调用{CM}中bean不允许的getUserTransaction()。正如规范所说:

  

getUserTransaction方法返回javax.transaction.UserTransaction接口。实例可以使用此接口来划分事务并获取事务状态。只有具有bean管理的事务划分的会话bean的实例才能使用此方法。

所以你在这里解决了两个问题。删除sessctx.getUserTransaction ().begin ();,因为此类构造只应与bean管理事务(BMT)一起使用。