Refine search
@Override void processFilter(String name, String value) { if (KIND.equals(name)) { declaringBeanKind = BeanKind.from(value); } else if (BEAN_CLASS.equals(name)) { beanClass = value; } else if (OBSERVED_TYPE.equals(name)) { observedType = value; } else if (QUALIFIER.equals(name)) { qualifier = value; } else if (RECEPTION.equals(name)) { for (Reception recept : Reception.values()) { if (recept.toString().equals(value)) { reception = recept; } } } else if (TX_PHASE.equals(name)) { for (TransactionPhase phase : TransactionPhase.values()) { if (phase.toString().equals(value)) { txPhase = phase; } } } else if (BDA.equals(name)) { bda = value; } }
/** * 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 @SpecAssertions({ @SpecAssertion(section = OBSERVER_NOTIFICATION, id = "bda") }) public void testObserverFailedTransaction() throws Exception { logger.log("testObserverFailedTransaction"); ActionSequence.reset(); accountService.withdrawObserverFailedTransaction(2); // IN_PROGRESS is fired twice // AFTER_FAILURE and AFTER_COMPLETION must be fired after checkpoint // AFTER_SUCCESS and BEFORE_COMPLETION is not fired List<String> phases = ActionSequence.getSequenceData(); assertEquals(phases.size(), 5); assertEquals(phases.get(0), TransactionPhase.IN_PROGRESS.name()); assertEquals(phases.get(1), TransactionPhase.IN_PROGRESS.name()); assertEquals(phases.get(2), "checkpoint"); assertTrue(phases.contains(TransactionPhase.AFTER_FAILURE.name())); assertTrue(phases.contains(TransactionPhase.AFTER_COMPLETION.name())); }
static JsonObjectBuilder createBasicObserverJson(ObserverMethod<?> observerMethod, Probe probe) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethod, probe); observerBuilder.add(RECEPTION, observerMethod.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethod.getTransactionPhase().toString()); if (!observerMethod.getObservedQualifiers().isEmpty()) { JsonArrayBuilder qualifiersBuilder = Json.arrayBuilder(); for (Annotation qualifier : observerMethod.getObservedQualifiers()) { qualifiersBuilder.add(qualifier.toString()); } observerBuilder.add(QUALIFIERS, qualifiersBuilder); } if (observerMethod instanceof ObserverMethodImpl) { ObserverMethodImpl<?, ?> observerMethodImpl = (ObserverMethodImpl<?, ?>) observerMethod; observerBuilder.add(DECLARING_BEAN, createSimpleBeanJson(observerMethodImpl.getDeclaringBean(), probe)); if (isUnrestrictedProcessAnnotatedTypeObserver(observerMethodImpl)) { observerBuilder.add(DESCRIPTION, WARNING_UNRESTRICTED_PAT_OBSERVER); } } return observerBuilder; }
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) -> { return o2.getTransactionPhase().toString().compareTo(o1.getTransactionPhase().toString()); }) .collect(Collectors.toList());
if (bean.equals(observerMethodImpl.getDeclaringBean())) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethodImpl, probe); observerBuilder.add(RECEPTION, observerMethodImpl.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethodImpl.getTransactionPhase().toString()); observerBuilder.add(ANNOTATED_METHOD, annotatedMethodToString(observerMethodImpl.getMethod().getAnnotated(), bean.getBeanClass())); declaredObservers.add(observerBuilder);
@Override public int compare(ObserverMethod<? super T> o1, ObserverMethod<? super T> o2) { // using descending order since we only need to ensure that BEFORE_COMPLETION precedes AFTER_COMPLETION return o2.getTransactionPhase().toString().compareTo(o1.getTransactionPhase().toString()); } });
@Test @SpecAssertion(section = Sections.TRANSACTIONAL_OBSERVER_METHODS, id = "aa") public void afterSuccessObserverIsNotNotifiedAfterTxRollBack() throws SystemException { ActionSequence.reset(); ejbTestBean.initTransaction(); ActionSequence.assertSequenceDataContainsAll( Arrays.asList(TransactionPhase.IN_PROGRESS.toString(), TransactionPhase.BEFORE_COMPLETION.toString(), TransactionPhase.AFTER_COMPLETION.toString(), TransactionPhase.AFTER_FAILURE.toString())); Assert.assertFalse(ActionSequence.getSequenceData().contains(TransactionPhase.AFTER_SUCCESS.toString())); } }
static JsonObjectBuilder createBasicObserverJson(ObserverMethod<?> observerMethod, Probe probe) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethod, probe); observerBuilder.add(RECEPTION, observerMethod.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethod.getTransactionPhase().toString()); if (!observerMethod.getObservedQualifiers().isEmpty()) { JsonArrayBuilder qualifiersBuilder = Json.arrayBuilder(); for (Annotation qualifier : observerMethod.getObservedQualifiers()) { qualifiersBuilder.add(annotationToString(qualifier)); } observerBuilder.add(QUALIFIERS, qualifiersBuilder); } if (observerMethod instanceof ObserverMethodImpl) { ObserverMethodImpl<?, ?> observerMethodImpl = (ObserverMethodImpl<?, ?>) observerMethod; observerBuilder.add(DECLARING_BEAN, createSimpleBeanJson(observerMethodImpl.getDeclaringBean(), probe)); } if (isUnrestrictedProcessAnnotatedTypeObserver(observerMethod)) { observerBuilder.add(DESCRIPTION, WARNING_UNRESTRICTED_PAT_OBSERVER); } // Every OM is now instance of Prioritized final int priority = Prioritized.class.cast(observerMethod).getPriority(); observerBuilder.add(PRIORITY, priority); observerBuilder.add(PRIORITY_RANGE, Components.PriorityRange.of(priority).toString()); return observerBuilder; }
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) -> { return o2.getTransactionPhase().toString().compareTo(o1.getTransactionPhase().toString()); }) .collect(Collectors.toList());
if (bean.equals(observerMethodImpl.getDeclaringBean())) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethodImpl, probe); observerBuilder.add(RECEPTION, observerMethodImpl.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethodImpl.getTransactionPhase().toString()); observerBuilder.add(ANNOTATED_METHOD, annotatedMethodToString(observerMethodImpl.getMethod().getAnnotated(), bean.getBeanClass())); declaredObservers.add(observerBuilder);
static JsonObjectBuilder createBasicObserverJson(ObserverMethod<?> observerMethod, Probe probe) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethod, probe); observerBuilder.add(RECEPTION, observerMethod.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethod.getTransactionPhase().toString()); if (!observerMethod.getObservedQualifiers().isEmpty()) { JsonArrayBuilder qualifiersBuilder = Json.arrayBuilder(); for (Annotation qualifier : observerMethod.getObservedQualifiers()) { qualifiersBuilder.add(annotationToString(qualifier)); } observerBuilder.add(QUALIFIERS, qualifiersBuilder); } if (observerMethod instanceof ObserverMethodImpl) { ObserverMethodImpl<?, ?> observerMethodImpl = (ObserverMethodImpl<?, ?>) observerMethod; observerBuilder.add(DECLARING_BEAN, createSimpleBeanJson(observerMethodImpl.getDeclaringBean(), probe)); } if (isUnrestrictedProcessAnnotatedTypeObserver(observerMethod)) { observerBuilder.add(DESCRIPTION, WARNING_UNRESTRICTED_PAT_OBSERVER); } // Every OM is now instance of Prioritized final int priority = Prioritized.class.cast(observerMethod).getPriority(); observerBuilder.add(PRIORITY, priority); observerBuilder.add(PRIORITY_RANGE, Components.PriorityRange.of(priority).toString()); return observerBuilder; }
@Override void processFilter(String name, String value) { if (KIND.equals(name)) { declaringBeanKind = BeanKind.from(value); } else if (BEAN_CLASS.equals(name)) { beanClass = value; } else if (OBSERVED_TYPE.equals(name)) { observedType = value; } else if (QUALIFIER.equals(name)) { qualifier = value; } else if (RECEPTION.equals(name)) { for (Reception recept : Reception.values()) { if (recept.toString().equals(value)) { reception = recept; } } } else if (TX_PHASE.equals(name)) { for (TransactionPhase phase : TransactionPhase.values()) { if (phase.toString().equals(value)) { txPhase = phase; } } } else if (BDA.equals(name)) { bda = value; } }
/** * 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)); }
if (bean.equals(observerMethodImpl.getDeclaringBean())) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethodImpl, probe); observerBuilder.add(RECEPTION, observerMethodImpl.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethodImpl.getTransactionPhase().toString()); observerBuilder.add(ANNOTATED_METHOD, annotatedMethodToString(observerMethodImpl.getMethod().getAnnotated(), bean.getBeanClass())); declaredObservers.add(observerBuilder);
TransactionPhase.IN_PROGRESS.name() + "." + SenderAccountTransactionObserver.class.getSimpleName()); assertEquals(phases.get(1), TransactionPhase.IN_PROGRESS.name() + "." + ReceiverAccountTransactionObserver.class.getSimpleName()); assertEquals(phases.get(2), TransactionPhase.IN_PROGRESS.name() + "." + PhisherAccountTransactionObserver.class.getSimpleName()); TransactionPhase.BEFORE_COMPLETION.name() + "." + ReceiverAccountTransactionObserver.class.getSimpleName()); assertEquals(phases.get(5), TransactionPhase.BEFORE_COMPLETION.name() + "." + SenderAccountTransactionObserver.class.getSimpleName()); assertEquals(phases.get(6), TransactionPhase.BEFORE_COMPLETION.name() + "." + PhisherAccountTransactionObserver.class.getSimpleName()); assertTrue(phases.contains(TransactionPhase.AFTER_SUCCESS.name() + "." + ReceiverAccountTransactionObserver.class.getSimpleName())); assertTrue(phases.contains(TransactionPhase.AFTER_SUCCESS.name() + "." + SenderAccountTransactionObserver.class.getSimpleName())); assertTrue(phases.contains(TransactionPhase.AFTER_SUCCESS.name() + "." + PhisherAccountTransactionObserver.class.getSimpleName())); assertTrue(phases.contains(TransactionPhase.AFTER_COMPLETION.name() + "." + ReceiverAccountTransactionObserver.class.getSimpleName())); assertTrue(phases.contains(TransactionPhase.AFTER_COMPLETION.name() + "." + SenderAccountTransactionObserver.class.getSimpleName())); assertTrue(phases.contains(TransactionPhase.AFTER_COMPLETION.name() + "." + PhisherAccountTransactionObserver.class.getSimpleName()));
static JsonObjectBuilder createBasicObserverJson(ObserverMethod<?> observerMethod, Probe probe) { JsonObjectBuilder observerBuilder = createSimpleObserverJson(observerMethod, probe); observerBuilder.add(RECEPTION, observerMethod.getReception().toString()); observerBuilder.add(TX_PHASE, observerMethod.getTransactionPhase().toString()); if (!observerMethod.getObservedQualifiers().isEmpty()) { JsonArrayBuilder qualifiersBuilder = Json.arrayBuilder(); for (Annotation qualifier : observerMethod.getObservedQualifiers()) { qualifiersBuilder.add(annotationToString(qualifier)); } observerBuilder.add(QUALIFIERS, qualifiersBuilder); } if (observerMethod instanceof ObserverMethodImpl) { ObserverMethodImpl<?, ?> observerMethodImpl = (ObserverMethodImpl<?, ?>) observerMethod; observerBuilder.add(DECLARING_BEAN, createSimpleBeanJson(observerMethodImpl.getDeclaringBean(), probe)); } if (isUnrestrictedProcessAnnotatedTypeObserver(observerMethod)) { observerBuilder.add(DESCRIPTION, WARNING_UNRESTRICTED_PAT_OBSERVER); } // Every OM is now instance of Prioritized final int priority = Prioritized.class.cast(observerMethod).getPriority(); observerBuilder.add(PRIORITY, priority); observerBuilder.add(PRIORITY_RANGE, Components.PriorityRange.of(priority).toString()); return observerBuilder; }
@Override void processFilter(String name, String value) { if (KIND.equals(name)) { declaringBeanKind = BeanKind.from(value); } else if (BEAN_CLASS.equals(name)) { beanClass = value; } else if (OBSERVED_TYPE.equals(name)) { observedType = value; } else if (QUALIFIER.equals(name)) { qualifier = value; } else if (RECEPTION.equals(name)) { for (Reception recept : Reception.values()) { if (recept.toString().equals(value)) { reception = recept; } } } else if (TX_PHASE.equals(name)) { for (TransactionPhase phase : TransactionPhase.values()) { if (phase.toString().equals(value)) { txPhase = phase; } } } else if (BDA.equals(name)) { bda = value; } }