Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Events mit CDI und EJB 3.1, Teil 2

In mei­nem letz­ten Artikel habe ich beschrie­ben wie Ereignisse mit­tels CDI und Java EE 6 erzeugt und ver­ar­bei­tet wer­den kön­nen. Neben der Steuerung des Transaktionskontextes  oder asyn­chro­nen Verarbeitung der Ereignisse kön­nen die Ereignisse auch mit Qualifiern aus­ge­sta­tet wer­den. Diese las­sen sich recht ein­fach defi­nie­ren wie z.B.:

@Qualifier
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreRollback {

}

Anschliessen kön­nen die Ereignisse mit die­sem Qualifier ver­se­hen wer­den indem die Annotation beim Injectionpoint mit ange­ge­ben wird:

@Inject
@IgnoreRollback
private Event<String> eventIgnoreRollback;

Wird nun ein Ereignis über eventIgnoreRollback erzeugt so wird dem Ereignis auto­ma­tisch der Qualifier hin­zu­ge­fügt. Die Listener-Methoden kön­nen nun mit den Qualifiern ver­se­hen wer­den um nun gezielt bestimmte Ereignisse zu ver­ar­bei­ten. Besipielsweise lässt sich so eine Methode defi­nie­ren die bei fehl­ge­schla­ge­ne­nen Transaktionen die Ereignisse mit dem Qualifier IgnoreRollback ver­ar­bei­tet. Es wer­den nur die Ereignisse mit dem Qualifier ver­ar­bei­tet, andere wer­den ignoriert.

public void onEventAndIgnoreRollback(@Observes(during = TransactionPhase.AFTER_FAILURE) @IgnoreRollback String event) {

}

Neben der Annotierung des Injectionpoints besteht auch die Möglichkeit den Qualifier direkt beim Versand eines Ereignisses als Parameter mit zu über­ge­ben. Damit kann der Kontext direkt ange­ge­ben werden.

Related Posts

Pin It on Pinterest