【发布时间】:2014-06-19 21:10:07
【问题描述】:
这个问题仅用于我的学术目的。任何回应将不胜感激
假设我有一个带有 EJB TransactionAttribute.NOT_SUPPORTED 的 MDB。
@TransactionManagement(TransactionManagementType.BEAN)
@MessageDriven(name = "NonPersistentInquiryMessageBean", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
public class InvoiceInquiryMessageBean implements MessageListener
{
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void onMessage(Message msg) {
//calls a SSB-1 as defined below
//SSB-1.method1()
}
}
@Stateless
public class SSB-1 implements SSB-1Local
{
public void method1(){
}
问题 #1。 正如我为 onMessage() 指定 NOT_SUPPORTED 一样,容器在没有任何事务的情况下执行 onMessage()。当从 onMessage() 调用 SSB-1.method1() 时,容器是否仍会在没有任何事务的情况下执行 SSB-1.method1() ?(根据其定义)
问题 #2 如果我希望 SSB-1.method1 在没有事务的情况下执行,我应该明确提及 在 bean 或 method1() 级别为 SSB-1 提供 NOT_SUPPORTED?或者保持原样,因为调用 OnMessage() 已经声明为 NOT_SUPPORTED
问题 #3 假设 SSS-1.method1() 正在调用另一个我需要管理事务的 SSB-2,下面的定义是否有效。
@Stateless
public class SSB-1 implements SSB-1Local
{
public void method1(){
//call SSB-2.somemethod();
}
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class SSB-2
{
@Resource
private UserTransaction userTransaction;
public void somemethod(){
userTransaction.begin();
//biz logic
userTransaction.commit()
}
【问题讨论】:
标签: jakarta-ee transactions jpa-2.0 ejb-3.0 enter