gpt4 book ai didi

java - 未回滚 RuntimeException

转载 作者:行者123 更新时间:2023-11-29 04:35:02 27 4
gpt4 key购买 nike

我无法理解为什么在新事务中抛出 RuntimeException 时不会发生回滚。

我的 MDB:

@TransactionAttribute(TransactionAttributeType.REQUIRED)
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/queue/adwordsReportRequest"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "veiculo = 'teste'"),
@ActivationConfigProperty(propertyName = "transactionTimeout", propertyValue = "10"),})
public class TesteMDB implements MessageListener {

@Resource
private MessageDrivenContext mdc;

@Inject
private ReportExtractor reportExtractor;

@Inject
private Logger logger;

public TesteMDB() {
// TODO Auto-generated constructor stub
}

public void onMessage(Message inMessage) {

try {
runReport();

} catch (Exception e) {
logger.error("Pega erro: {}", e.getMessage());
e.printStackTrace();
}

}

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
private void runReport() throws Exception {
reportExtractor.RunTest();
}
}

其他类:

@RequestScoped
public class ReportExtractor {

@Inject
JMSMessageManager jmsMessagerManager;

@Inject
private Logger logger;

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void RunTest() throws Exception {

//insert in Queue
jmsMessagerManager.sendMessage("test");

throw new RuntimeException("test - runtime");
}
}

当我在第二个中使用@Stateful 时,它起作用了。

如果它不是 SessionBean,则不

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

创建新交易?还是只有基于RuntimeException的自动回滚不起作用?

谢谢,

最佳答案

@TransactionAttribute 注释只能用于 session bean 和消息驱动 bean。由于 ReportExtractor 既不是 EJB 也不是 MDB,因此注释将被忽略并且容器不会提供任何事务。

如果您更喜欢 CDI 管理的 bean 而不是 EJB,请查看自 Java EE 7 以来可用的 @Transactional 注释:http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional.html

另请注意,对 runReport 的调用也不会考虑 @TransactionAttribute,因为本地方法调用不会被容器拦截。这在这里解释:EJB Transactions in local method-calls

关于java - 未回滚 RuntimeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com