【发布时间】:2013-07-24 04:15:35
【问题描述】:
Java EE7 由一堆“bean”定义组成:
- 托管 Bean 1.0 (JSR-316 / JSR-250)
- Java 1.0 (JSR-330) 的依赖注入
- CDI 1.1 (JSR-346)
- JSF 托管 Bean 2.2 (JSR-344)
- EJB 3.2 (JSR-345)
为了摆脱脑海中的混乱,我研究了几篇“何时使用哪种bean类型”的文章。 EJB 的优点之一似乎是它们单独支持声明性容器管理事务(著名的事务注释)。不过,我不确定这是否正确。有人可以批准吗?
同时,我想出了一个简单的演示应用程序来检查这是否真的是真的。我刚刚定义了一个 CDI bean(不是一个 EJB - 它没有类级别的注释),基于thissn-p:
public class CdiBean {
@Resource
TransactionSynchronizationRegistry tsr;
@Transactional(Transactional.TxType.REQUIRED)
public boolean isTransactional() {
return tsr.getTransactionStatus() == Status.STATUS_ACTIVE;
}
}
现在,GlassFish 4.0 的结果是该方法实际上返回 true,根据我的询问,它没有按预期工作。我确实希望容器忽略 CDI bean 方法上的 @Transactional 注释,甚至抛出异常。我使用的是新安装的 GlassFish 4 服务器,因此没有任何干扰。
所以我的问题是:
- 哪些 bean 类型实际上支持容器管理的事务?
- 只是为了好奇,如果上面的代码有误,我怎么能用一个简单的演示应用程序来测试它?
(顺便说一句:有人描述了类似的问题here,但它的解决方案不适用于我的情况。
【问题讨论】:
-
“为了摆脱我心中的混乱”,如此真实
标签: java jakarta-ee ejb cdi jta