Der Versuch, ein zustandsloses EJB über Annotationen in einen JAX-RS-Webservice einzufügen, führt zu einem null EJB-Referenz, was bei Verwendung zu einer NullPointerException führt.
Während die Annotation des JAX-RS-Webdienstes als @Stateless wie eine direkte Lösung erscheinen mag, ist dies mit JAX-RS nicht möglich allein. Ziehen Sie die folgenden alternativen Ansätze in Betracht:
Option 1: Injektionsanbieter-SPI
Implementieren Sie einen Injektionsanbieter, der die Suche und Injektion des EJB durchführt. Registrieren Sie den Anbieter entsprechend.
Option 2: BookResource als EJB einbetten
Annotieren Sie die BookResource-Klasse als @Stateless und verwalten Sie ihren Lebenszyklus innerhalb eines EJB. Dieser Ansatz macht Unit-Tests jedoch schwieriger.
Option 3: CDI verwenden
Verwenden Sie CDI für die Abhängigkeitsinjektion, wie im bereitgestellten Beispiel gezeigt. Dieser Ansatz bietet Einfachheit und Flexibilität, insbesondere in Testumgebungen.
@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) }
Durch Implementierung oder Übernahme eines Injektionsanbieters CDI wird es möglich, EJBs in JAX-RS-Dienste zu injizieren und so die Integrationsmöglichkeiten zwischen den beiden Frameworks zu erweitern.
Das obige ist der detaillierte Inhalt vonWie fügt man EJBs in JAX-RS-Dienste ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!