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.

The following session bean instances are obtained by using dependency injection:
  • 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

Pratiques recommandées Pratiques recommandées: Use the following methods when you inject enterprise beans:bprac
  • Utilisez la méthode @Inject pour l'injection contextuelle de beans session locaux.
  • Utilisez la méthode @]EJB pour les beans session distants.
Voir les exemples suivants d'utilisation de la méthode @EJB dans CDI :

Define producers that are making the EJB available for non-contextual injection:

	@Produces @EJB PaymentService paymentService;	
Consommez les types injectés dans les autres beans CDI :
@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.

The product CDI container removes the stateful session bean in the following instances:
  • 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.


Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_ejb
Nom du fichier : cweb_cdi_ejb.html