/** * Defers an event for processing in a later phase of the current * transaction. * * @param metadata The event object */ private <T> void deferNotification(T event, final EventMetadata metadata, final ObserverMethod<? super T> observer, final List<DeferredEventNotification<?>> notifications) { TransactionPhase transactionPhase = observer.getTransactionPhase(); boolean before = transactionPhase.equals(TransactionPhase.BEFORE_COMPLETION); Status status = Status.valueOf(transactionPhase); notifications.add(new DeferredEventNotification<T>(contextId, event, metadata, observer, currentEventMetadata, status, before)); }
@Test(groups = { "events" }) @SpecAssertion(section = "11.1.3", id = "e") public void testGetTransactionPhaseOnObserverMethod() { assert getCurrentManager().resolveObserverMethods(new StockPrice()).iterator().next().getTransactionPhase().equals(TransactionPhase.IN_PROGRESS); assert getCurrentManager().resolveObserverMethods(new DisobedientDog()).iterator().next().getTransactionPhase().equals(TransactionPhase.BEFORE_COMPLETION); assert getCurrentManager().resolveObserverMethods(new ShowDog()).iterator().next().getTransactionPhase().equals(TransactionPhase.AFTER_COMPLETION); assert getCurrentManager().resolveObserverMethods(new SmallDog()).iterator().next().getTransactionPhase().equals(TransactionPhase.AFTER_FAILURE); assert getCurrentManager().resolveObserverMethods(new LargeDog()).iterator().next().getTransactionPhase().equals(TransactionPhase.AFTER_SUCCESS); }
/** * Defers an event for processing in a later phase of the current * transaction. * * @param metadata The event object */ private <T> void deferNotification(T event, final EventMetadata metadata, final ObserverMethod<? super T> observer, final List<DeferredEventNotification<?>> notifications) { TransactionPhase transactionPhase = observer.getTransactionPhase(); boolean before = transactionPhase.equals(TransactionPhase.BEFORE_COMPLETION); Status status = Status.valueOf(transactionPhase); notifications.add(new DeferredEventNotification<T>(contextId, event, metadata, observer, currentEventMetadata, status, before)); }
for (Iterator<ObserverMethod<? super T>> it = filteredObservers.iterator(); it.hasNext(); ) { ObserverMethod<? super T> observerMethod = it.next(); if (observerMethod.getTransactionPhase().equals(TransactionPhase.AFTER_SUCCESS)) { it.remove();
/** * Defers an event for processing in a later phase of the current * transaction. * * @param metadata The event object */ private <T> void deferNotification(T event, final EventMetadata metadata, final ObserverMethod<? super T> observer) { DeferredEventNotification<T> deferredEvent = new DeferredEventNotification<T>(contextId, event, metadata, observer, currentEventMetadata); TransactionPhase transactionPhase = observer.getTransactionPhase(); if (transactionPhase.equals(TransactionPhase.BEFORE_COMPLETION)) { transactionServices.registerSynchronization(new TransactionSynchronizedRunnable(deferredEvent, true)); } else if (transactionPhase.equals(TransactionPhase.AFTER_COMPLETION)) { transactionServices.registerSynchronization(new TransactionSynchronizedRunnable(deferredEvent, false)); } else if (transactionPhase.equals(TransactionPhase.AFTER_SUCCESS)) { transactionServices.registerSynchronization(new TransactionSynchronizedRunnable(deferredEvent, Status.SUCCESS)); } else if (transactionPhase.equals(TransactionPhase.AFTER_FAILURE)) { transactionServices.registerSynchronization(new TransactionSynchronizedRunnable(deferredEvent, Status.FAILURE)); } }
if (e.getCause() instanceof RollbackException || e.getCause() instanceof IllegalStateException) { List<ObserverMethod<? super T>> filteredObservers = observers.stream() .filter(observerMethod -> !observerMethod.getTransactionPhase().equals(TransactionPhase.AFTER_SUCCESS)) .sorted((o1, o2) -> {
if (e.getCause() instanceof RollbackException || e.getCause() instanceof IllegalStateException) { List<ObserverMethod<? super T>> filteredObservers = observers.stream() .filter(observerMethod -> !observerMethod.getTransactionPhase().equals(TransactionPhase.AFTER_SUCCESS)) .sorted((o1, o2) -> {