我遇到了一段代码,其中bean实现类具有@TransactionManagement(TransactionManagementType.BEAN)
注释,其中方法用CMT @TransactionAttribute
进行注释。有效吗? 具有BMT持久性的EJB可以使用CMT事务注释吗?运行时的行为是什么?是否可以在BMT EJB中使用@TransactionAttribute注释方法?
尽管javadoc http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttribute.html表示“只能使用容器管理的事务分隔才能指定”,指定它不会引发任何编译错误。这是否意味着jvm只是在运行时忽略它?
@Stateless(mappedName = "Abc")
@Remote("AbcRemote.class")
@Local("AbcLocal.class")
@TransactionManagement(TransactionManagementType.BEAN)
public class AbcBean implements AbcLocal, AbcRemote{
@Resource
private UserTransaction utx;
@PersistenceUnit
private EntityManagerFactory emf;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Abc getAlpbabets(String name) {
EntityManager em = null;
try {
em = emf.createEntityManager();
}
catch (RuntimeException re) {
throw re;
}
finally {
}
}
}