Maison >Java >javaDidacticiel >Comment injecter des EJB dans les services JAX-RS ?

Comment injecter des EJB dans les services JAX-RS ?

DDD
DDDoriginal
2024-11-07 07:20:02386parcourir

How to Inject EJBs into JAX-RS Services?

Injecter des EJB dans les services JAX-RS

Description du problème

Tenter d'injecter un EJB sans état dans un service Web JAX-RS via des annotations entraîne un Référence EJB null, conduisant à une NullPointerException lors de l'utilisation.

Solution

Bien qu'annoter le service Web JAX-RS comme @Stateless puisse sembler une solution directe, ce n'est pas réalisable avec JAX-RS seul. Envisagez les approches alternatives suivantes :

Option 1 : Fournisseur d'injection SPI

Implémentez un fournisseur d'injection qui effectue la recherche et l'injection de l'EJB. Enregistrez le fournisseur en conséquence.

Option 2 : Intégrer BookResource en tant qu'EJB

Annotez la classe BookResource en tant que @Stateless et gérez son cycle de vie au sein d'un EJB. Cependant, cette approche rend les tests unitaires plus difficiles.

Option 3 : Utiliser CDI

Utiliser CDI pour l'injection de dépendances, comme indiqué dans l'exemple fourni. Cette approche offre simplicité et flexibilité, en particulier dans les environnements de test.

Exemple de travail (option 1)

@Path("book")
public class BookResource {

    @Inject
    private BookEJB bookEJB;

    //...
}
// EJBProvider.java

@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {
    // ... (Implementation as provided in the answer)
}

Conclusion

En mettant en œuvre un fournisseur d'injection ou en adoptant CDI, il devient possible d'injecter des EJB dans les services JAX-RS, élargissant les options d'intégration entre les deux frameworks.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn