Injecting EJBs into JAX-RS Web Services
Issue Description:
In an attempt to inject a Stateless EJB into a JAX-RS web service using annotations, the EJB instance remains null in the service class, resulting in a NullPointerException upon use.
Environment Details:
- Glassfish 3.1
- Netbeans 6.9 RC 2
- Java EE 6
Solution Options:
Option 1: Inject using the Injection Provider SPI
- Implement a custom injection provider that performs the EJB lookup and injection.
- For example, in Jersey 1.17:
import com.sun.jersey.core.spi.component.ComponentContext;
import ...
public class EJBProvider implements InjectableProvider<EJB, Type> {
// Implementation details...
}
Copy after login
Option 2: Convert the Resource Class to an EJB
- Make the JAX-RS resource class a Stateless EJB itself, allowing it to manage its own dependencies.
Option 3: Leverage CDI
- Use Context and Dependency Injection (CDI) to inject the EJB into the JAX-RS resource class.
Example:
@Path("book")
@RequestScoped
public class BookResource {
@Inject
private BookEJB bookEJB;
// Implementation details...
}
Copy after login
Additional Resources:
- [EJB Injection](https://docs.oracle.com/javaee/7/api/javax/ejb/EJB.html)
- [@EJB Injection](https://stackoverflow.com/questions/1130846/ejb-injection)
- [Combining REST Services with EJB 3.1](https://dzone.com/articles/combining-rest-services-with-ejb-31)
- [EJB 3.1 and REST - The Lightweight Hybrid](https://weblogs.java.net/blog/emcfarlane/archive/2009/12/10/ejb-31-and-rest-lightweight-hybrid)
- [Injecting an EJB from a jar into a jax-rs class in a war](https://stackoverflow.com/questions/6474811/injecting-an-ejb-from-a-jar-into-a-jax-rs-class-in-a-war)
The above is the detailed content of How to Inject Stateless EJBs into JAX-RS Web Services?. For more information, please follow other related articles on the PHP Chinese website!