2016-04-27 11 views
0

Ich bin eine Java EE-Anwendung erstellt und eine Stateless Session Bean zum EJB-Projekt hinzugefügt. Das EJB-Projekt ist eine Abhängigkeit im web/WAR-Projekt, und ich injiziere das EJB, das ich im EJB-Projekt erstellt habe, in einem meiner Servlets. Dies funktioniert einwandfrei und ich kann die Methoden dieses EJB im Servlet des Webanwendungsprojekts bereitstellen und aufrufen. Meine Verwirrung war, dass ich dachte, EJBs müssten eine Schnittstelle im EJB-Container haben, wo sie entweder lokal oder entfernt waren. In meinem Beispiel brauchte ich jedoch überhaupt keine Schnittstelle und konnte die EJB direkt dort anrufen, wo ich dachte, dass ich zumindest eine lokale Schnittstelle brauche?EJB Enterprise-Anwendung benötigt keine EJB-Schnittstelle

Antwort

1

Seit EJB 3.1 benötigen Sie die EJB-Schnittstellen für lokale Dienste nicht mehr. Jede POJO-Klasse, die mit @Stateless, @Stateful oder @Singleton annotiert ist, wird eine Enterprise-Session-Bean sein.

Zurück zum Natural Contract Der Vertrag einer Klasse umfasst alle ihre öffentlichen Methoden. Die öffentlichen Methoden sollen von ihren Kunden verwendet werden. Die No-Interface Ansicht eines Enterprise Javabeans 3.1 Bohne genau definiert ist, wie in Kapitel 3.4.4 der EJB 3.1 Spezifikation (JSR 318) folgt:

„... Eine Session Bean no-Interface-View ist eine Variante der die lokale Sicht , die die öffentlichen Methoden der Bean-Klasse ohne die Verwendung einer separaten Business-Schnittstelle freigibt ... "

Alle privaten Methoden sind ausgeblendet. Methoden mit package-private und geschützter Sichtbarkeit sind nur für Klassen im selben Paket sichtbar, auf die normalerweise nur zu Testzwecken zugegriffen wird. Ein JUnit-Test Klasse befindet sich im gleichen Paket wie die "Class Under Test" (CUT) und spottet die unbequemen Referenzen, in der Regel Zugriff auf die Paket-private oder geschützte Felder direkt.

Check: http://www.oracle.com/technetwork/articles/java/intondemand-1444614.html

+0

Danke, war diese Änderung nicht bewusst. Wäre es besser, noch lokale Schnittstellen zu erstellen? Und wenn No-Interface-Views genauso funktionieren wie lokale Interface-Views, welchen Zweck haben lokale Schnittstellen? – joe

+0

Sobald Sie eine Remote-Schnittstelle haben, müssen Sie eine lokale Schnittstelle angeben, wenn Sie Ihre Session-Bean lokal verwenden möchten. Wenn Sie Ihre Beans nicht remotelly aussetzen, denke ich, dass Sie kein lokales erstellen müssen. – Jaumzera