Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

10.2.10.2. Utiliser les intercepteurs avec le CDI

Exemple 10.19. Intercepteurs sans le CDI

Sans le CDI, les intercepteurs ont deux problèmes.
  • Le bean doit indiquer l'implémentation de l'intercepteur directement.
  • Chaque bean de l'application doit indiquer l'ensemble des intercepteurs dans l'ordre qui convient. Cela fait que l'ajout ou le retrait d'intercepteurs sur la base d'une application prend beaucoup de temps et comporte un risque d'erreur non négligeable.
@Interceptors({
  SecurityInterceptor.class,
  TransactionInterceptor.class,
  LoggingInterceptor.class
})
@Stateful public class BusinessComponent {
  ...
}

Procédure 10.7. Utiliser les intercepteurs avec le CDI

  1. Définir le type de liaison d'intercepteur.

    @InterceptorBinding
    @Retention(RUNTIME)
    @Target({TYPE, METHOD})
    public @interface Secure {}
    
  2. Marquer l'implémentation de l'intercepteur.

    @Secure
    @Interceptor
    public class SecurityInterceptor {
      @AroundInvoke
      public Object aroundInvoke(InvocationContext ctx) throws Exception {
        // enforce security ...
        return ctx.proceed();
        }
    }
    
  3. Utiliser l'intercepteur dans votre code commercial.

    @Secure
    public class AccountManager {
      public boolean transfer(Account a, Account b) {
        ...
      }
    }
    
  4. Activer l'intercepteur dans votre déploiement, en l'ajoutant à votre fichier META-INF/beans.xml ou WEB-INF/beans.xml.

    <beans>
      <interceptors>
        <class>com.acme.SecurityInterceptor</class>
        <class>com.acme.TransactionInterceptor</class>
      </interceptors>
    </beans>
    Les intercepteurs sont appliqués dans l'ordre indiqué.
Résultat  :

Le CDI simplifie votre code d'intercepteur et simplifie l'application de votre code commercial.