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.
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.
@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) }
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!