Injecter des EJB dans les services Web JAX-RS
Description du problème :
Dans une tentative d'injection d'un EJB sans état dans un service Web JAX-RS utilisant des annotations, l'instance EJB reste nulle dans la classe de service, ce qui entraîne une NullPointerException lors de son utilisation.
Détails de l'environnement :
- Glassfish 3.1
- Netbeans 6.9 RC 2
- Java EE 6
Options de solution :
Option 1 : Injectez à l'aide du SPI du fournisseur d'injection
- Implémentez un fournisseur d'injection personnalisé qui effectue la recherche et l'injection d'EJB.
- Par exemple, dans Jersey 1.17 :
import com.sun.jersey.core.spi.component.ComponentContext;
import ...
public class EJBProvider implements InjectableProvider<EJB, Type> {
// Implementation details...
}
Copier après la connexion
Option 2 : Convertir la classe de ressources en un EJB
- Faire de la classe de ressources JAX-RS un EJB sans état lui-même, lui permettant de gérer le sien dépendances.
Option 3 : exploiter CDI
- Utiliser l'injection de contexte et de dépendances (CDI) pour injecter l'EJB dans la classe de ressources JAX-RS .
Exemple :
@Path("book")
@RequestScoped
public class BookResource {
@Inject
private BookEJB bookEJB;
// Implementation details...
}
Copier après la connexion
Ressources supplémentaires :
- [Injection EJB]( https://docs.oracle.com/javaee/7/api/javax/ejb/EJB.html)
- [@EJB Injection](https://stackoverflow.com/questions/1130846/ejb- injection)
- [Combiner les services REST avec EJB 3.1](https://dzone.com/articles/combining-rest-services-with-ejb-31)
- [EJB 3.1 et REST - L'hybride léger](https://weblogs.java.net/blog/emcfarlane/archive/2009/12/10/ejb-31-and-rest-lightweight-hybrid)
- [Injecter un EJB d'un pot dans une classe jax-rs dans une guerre](https://stackoverflow.com/questions/6474811/injecting-an-ejb-from-a-jar-into-a-jax-rs-class-in- une guerre)
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!