У меня проблема с компонентами EJB, которые отвечают за запуск транзакции.Я использую Jboss 5.01.
По сути, я хотел бы выполнить данный код после того, как была совершена конкретная транзакция.конкретный код также включает вызов компонента EJB, который выполняет свои собственные транзакции.
Чтобы убедиться, что мой код выполняется после фиксации предыдущей транзакции, я зарегистрировал компонент синхронизации в компоненте транзакции:
Transaction tx = transactionManager.getTransaction();
tx.registerSynchronization(new CallbackSynchronization());
Реализация Synchronizaton
в основном делает следующее:
class CallbackSynchronization implements Synchnronization {
private AccountService service; // This is a Stateless session bean
public CallbackSynchronization(AccountService service) {
this.service = service;
}
public afterCompletion(int status) {
if(Status.STATUS_COMMITTED == status) {
service.deleteAccounts();
}
}
}
Проблема в том, что когда я вызываю service.deleteAccounts()
, я получаю исключение, которое в итоге говорит мне, что транзакция не активна.
И это то, что меня смущает.EJB с методами, отмеченными @TransactionAttribute(TransactionAttributeType.REQUIRED)
, создаст новую транзакцию, если она не активна (REQUIRED является значением по умолчанию в JBOSS).
Почему тогда я получаю "Транзакция не активна"?
Большое спасибо,
Янив