Мне нужна возможность получать информацию, когда транзакция не удалась. И для этого случая я создал Event наблюдатель:
public class TransactionObserver {
private static final Logger log = Logger.getLogger(TransactionObserver.class);
@PersistenceContext(unitName = PERSISTENCE_NAME)
private EntityManager em;
//remove it to work correctly
@Inject
private SomeService someService;
public void observeAfterTransactionFailed(@Observes(during = TransactionPhase.AFTER_FAILURE) @Transaction Long id) {
log.error("Message from within transaction received after failure: " + id);
CustomEntity obj= em.find(CustomEntity.class, id);
someService.onTimeoutMarkAsFinished(id);
}
И это не работает, если я не удалю внедренный сервис. Я получаю следующую ошибку:
ERROR [org.jboss.weld.Event] (Transaction Reaper Worker 0) WELD-000401: Failure while notifying an observer of event null
Событие запускается из метода, подобного этому:
@Asynchronous
@TransactionTimeout(value = 1, unit = TimeUnit.SECONDS)
public void doStuff() {
simpleMessageEvent.fire(stepId);
.
.
}
Есть идеи, что не так или как я могу получить больше информации / журналов?
edit: код транзакции:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
public @interface Transaction {
}
Удаление этой аннотации не помогает