Wie kann ein EJB 3.1 als REST-Webdienst verfügbar gemacht werden?

8

Ich entdeckte ein neues Feature in Java, das erholsam ist, wenn ich EJB 3.1 benutze, während ich einen Artikel im Adam Bien's Blog.

Die Sache ist, dass Stateless- und Singleton-Beans als Root-Ressourcen verfügbar gemacht werden können. Aber wie? Ich habe versucht, es so zu machen:

%Vor%

Wenn ich die URL Ссылка anrufe, erhalte ich einen Fehler 404.

Appart davon und nur um sicherzustellen, dass JAXRS in meinem Projekt funktioniert, habe ich eine einfache Pojo-Ressource nur um zu testen, ob es funktioniert.

%Vor%

Hier, wenn ich die URL Ссылка anrufe, funktioniert es gut!

Meine Fragen sind also:

  • Was fehlt in meinem EJB, damit es als Web-Service-Ressource funktionieren kann, wie beispielsweise die Klasse GenericResource?

  • Ist eine zusätzliche Konfiguration erforderlich?

  • Was sind die Einschränkungen bei der Verwendung von EJB als Web-Service?

sfrj 27.03.2012, 05:32
quelle

1 Antwort

11

Gemäß diesem NetBeans-Lernprogramm zu Jersey RESTFul-Webdiensten können Sie entscheiden, ob Sie

  

Erstellen Sie eine Unterklasse von javax.ws.rs.core.Application, alle Ruhe-Ressourcen   wird von dieser Klasse automatisch registriert (Java EE 6)

oder

  

Erstellen Sie den standardmäßigen Jersey REST-Servlet-Adapter in web.xml.

Ich habe immer die zweite Wahl verwendet, die darin besteht, das zu deinem web.xml hinzuzufügen:

%Vor%

Die Bereitstellung Ihres REST-Webdiensts als EJB ist meiner Erfahrung nach äußerst nützlich. Sie können es injizieren, wo Sie möchten, Sie können darin Ihren EntityManager einfügen, und Sie können es sogar als ein DAO in einigen einfachen Situationen verwenden.

Betreffend Ihre Frage / Anmerkung zu Funktionen und Einschränkungen: Enterprise-Beans werden im EJB-Container ausgeführt, unabhängig davon, ob sie in einer WAR-Datei implementiert sind oder nicht. Sie können ihnen eine JMS ConnectionFactory als Ressource hinzufügen, wie in diesem Abschnitt des Java EE 6 Tutorial. Dank der Injektion einer ConnectionFactory können Sie JMS-Nachrichten senden. Wenn Sie JMS-Nachrichten asynchron empfangen möchten, müssen Sie eine Message-Driven Bean definieren, wie in beschrieben Abschnitt des oben genannten Tutorials. Ich habe nie versucht, das gleiche EJB für einen Jersey Web-Service zu erweitern, um die MessageListener-Schnittstelle zu implementieren, aber ich denke, dass sollte auch möglich sein (wenn nicht, können Sie eine MDB in Ihre Jersey-Root Stateless Bohne injizieren).

Schließlich können Sie containergesteuerte Transaktionen wie hier hier verwenden. Außerdem von dieses NetBeans-Tutorial :

  

Damit Sie sehen können, dass die Anwendung Java verwenden wird   Transaktions-API (JTA) (Transaktionstyp="JTA"). Dies gibt das an   die Verantwortung für die Verwaltung des Lebenszyklus von Entitäten in der   Persistenzkontext wird dem Container zugewiesen.

%Vor%     
perissf 27.03.2012, 06:23
quelle

Tags und Links