Heim >Java >javaLernprogramm >Wie fügt man EJBs in JAX-RS-Dienste ein?

Wie fügt man EJBs in JAX-RS-Dienste ein?

DDD
DDDOriginal
2024-11-07 07:20:02374Durchsuche

How to Inject EJBs into JAX-RS Services?

Injizieren von EJBs in JAX-RS-Dienste

Problembeschreibung

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.

Lösung

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.

Arbeitsbeispiel (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)
}

Schlussfolgerung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn