我正在使用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;
}
}
所以我的问题是,如果没有将bean事务类型设置为BEAN,还有其他方法, 我们可以使用@TransactionAttribute(value = TransactionAttributeType.REQUIRED)。 我不能将Bean标记为TransactionManagementType.BEAN
答案 0 :(得分:0)
注释掉@TransactionManagement(value=TransactionManagementType.BEAN)
后,表示您使用容器管理事务(CMT)。但是在方法saveAssignAddress()
中,您尝试调用{CM}中bean不允许的getUserTransaction()
。正如规范所说:
getUserTransaction方法返回javax.transaction.UserTransaction接口。实例可以使用此接口来划分事务并获取事务状态。只有具有bean管理的事务划分的会话bean的实例才能使用此方法。
所以你在这里解决了两个问题。删除sessctx.getUserTransaction ().begin ();
,因为此类构造只应与bean管理事务(BMT)一起使用。