Java EE7由一堆"bean"定义组成:
为了摆脱我心中的混乱,我研究了几篇"何时使用哪种豆类"的文章.EJB的一个优点似乎是它们单独支持声明性容器管理事务(着名的事务注释).不过,我不确定这是否正确.任何人都可以批准这个吗?
同时,我想出了一个简单的演示应用程序来检查这是否真的如此.我刚刚根据这个片段定义了一个CDI bean(不是 EJB - 它没有类级别注释),如下所示:
public class CdiBean {
@Resource
TransactionSynchronizationRegistry tsr;
@Transactional(Transactional.TxType.REQUIRED)
public boolean isTransactional() {
return tsr.getTransactionStatus() == Status.STATUS_ACTIVE;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,GlassFish 4.0的结果是这个方法实际上返回true,根据我的询问,它没有按预期工作.我确实希望容器忽略CDI bean方法上的@Transactional注释,或者甚至抛出异常.我使用新安装的GlassFish 4服务器,因此没有干扰.
所以我的问题是:
(顺便说一句:有人在这里描述了类似的问题,但其解决方案并不适用于我的情况.