Intégration de CDI (Contexts and Dependency Injection) au conteneur EJB
La spécification CDI étend le modèle de composant EJB avec la gestion du cycle de vie contextuel.
Relation de CDI avec la spécification EJB
La spécification EJB définit un modèle de programmation pour les composants d'application qui accèdent aux ressources transactionnelles dans un environnement multiutilisateur. Concerns, such as role-based security, transaction demarcation, concurrency, and scalability are specified declaratively by using annotations and XML deployment descriptors that are enforced by the EJB container at run time. EJB components might be stateful, but are not contextual by nature.
- Contextuel
- Bound to a lifecycle context
- Accessible aux autres instances qui démarrent dans le contexte
- Le conteneur crée une instance lorsque cela est nécessaire
- Container deletes an instance when context ends
Le conteneur CDI WebSphere Application Server Traditional exécute une injection de dépendance dans toutes les instances de bean session et de bean géré par message, même dans les instances qui ne sont pas des instances contextuelles. CDI WebSphere Application Server prend en charge l'injection de beans CDI dans les beans enterprise et vice versa.
Utilisation

- Utilisez la méthode @Inject pour l'injection contextuelle de beans session locaux.
- Utilisez la méthode @]EJB pour les beans session distants.
Define producers that are making the EJB available for non-contextual injection:
@Produces @EJB PaymentService paymentService;
@Inject PaymentService myPaymentService
Considérations pratiques
Vous pouvez définir des intercepteurs de type CDI avec des liaisons d'intercepteur et des beans enterprise des décorateurs. Interceptors are declared by using @Interceptors methods or in ejb-jar.xml files, which are called before interceptors and are declared by using interceptor bindings. Les intercepteurs sont appelés avant les décorateurs.When a contextual @Injected instance of an EJB container is destroyed as a result of going out of scope, and if the underlying EJB container was not already removed by direct invocation of a remove method by the application, the WebSphere Application Server Traditional CDI container removes the stateful session bean.
- When you use the @Inject method to create a contextual injection instance and that instance in an EJB container is destroyed as a result of going out of scope.
- When the underlying EJB container was not already removed by direct invocation of a remove method by the application.
Vous devez également tenir compte de la portée et de la propagation d'état des beans CDI. Les beans de demande et les beans CDI de portée d'application gèrent un état dans leurs contextes respectifs dans les conteneurs Web et EJB. Par exemple, un bean CDI de demande injecté dans un servlet conserve son état lorsqu'une méthode métier dans un bean enterprise de session accède au même bean de demande.