新しいトランザクションでRuntimeExceptionがスローされた場合、なぜロールバックが起こらないのか理解できませんでした。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
注釈が唯一のセッションBeanとメッセージ駆動型Beanのために使用することができ、