是否可以在BMT EJB中使用@TransactionAttribute注释方法?

时间:2014-02-18 02:05:53

标签: java-ee-6 ejb-3.1

我遇到了一段代码,其中bean实现类具有@TransactionManagement(TransactionManagementType.BEAN)注释,其中方法使用CMT @TransactionAttribute进行注释。有效吗? 具有BMT持久性的EJB是否可以使用CMT事务注释?运行时的行为是什么?

虽然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 {  

        }  
    }  
}  

1 个答案:

答案 0 :(得分:0)

如果您使用CMT,那么@TransactionAttribute(TransactionAttributeType.REQUIRED)将告诉容器检查现有交易,如果没有,则打开一个。

但是如果你使用BMT,那么你有责任做这样的事情,所以没有人去观察上面的注释。由于它在语法上仍然正确且类可用,因此JVM无需抱怨。

关于忽略注释,this question的答案中有一个提示。