Java EE - wer implementiert die Spezifikation? [Duplikat]

8

Ich habe einige Erfahrung in Core Java und Java EE. Ich habe die verschiedenen Fragen zu SO gelesen, um zu verstehen, was genau Java EE ist? Und einige Antworten in SO sind: what-exactly-is-java-ee , < a href="https://stackoverflow.com/questions/106820/what-is-java-ee"> was-ist-java-ee

Ich habe einige Zweifel:

1) Wenn Java EE nur eine Spezifikation ist, wer implementiert sie dann? Setzen Application Server (wie JBOSS, GlassFish) diese Spezifikationen um?

2) Wenn ich richtig liege, wird die EJB-Spezifikation durch den EJB-Container implementiert, und ich glaube, dass EJB Container Teil des Application Servers ist. Wenn wir jetzt als Entwickler einen EJB-Code schreiben, was machen wir eigentlich? Der Zweifel, den ich habe, ist, EJB-Container implementiert die EJB-Spezifikation, also überschreiben wir einige "Spezifikation Teil" der EJB? Wie kommt es, dass ein Teil von EJB durch den EJB-Container implementiert wird und einige Dinge, die Entwickler schreiben? Oder ist es so, dass ein Teil des EJB von EJB-Containern bereitgestellt werden muss und ein Teil von Entwicklern entwickelt werden muss? Ich habe Schwierigkeiten, dies zu untermauern.

Bitte kann jemand helfen, dies zu verstehen?

    
CuriousMind 23.06.2016, 06:31
quelle

5 Antworten

9

Jeder kann die Java-Spezifikation ( JSR342 ) oder eine beliebige jsr , das ist ein Teil davon. Wenn sie das tun, können sie (nach dem Kauf und der Weitergabe von Kompatibilitäts-Test-Suite ) ) behaupten, mit der Spezifikation kompatibel zu sein. Es gibt eine Reihe von Anbietern mit ihren Anwendungsservern, die kompatibel mit Java ee , aber kein Anbieter implementiert vollständige Java EE-Spezifikation. Zum Beispiel verwendet glassfish (die Java-ee-Referenzimplementierung) die CDI Implementierung von Red Hat. Manchmal implementiert der Anbieter keinen Teil der Java-ee-Spezifikation, sie greifen nach glassfish, fügen ihre herstellerspezifischen Bibliotheken hinzu und veröffentlichen sie unter ihrem Namen. Um die Kompatibilität zu gewährleisten, müssen sie den Zertifizierungsprozess durchlaufen und CTS ausführen.

Um herauszufinden, alle Anbieter, die die Spezifikation implementieren, ist nicht so einfach, da nicht alle von ihnen durchlaufen den Zertifizierungsprozess. Zum Beispiel ist Apache CXF nicht für sich allein zertifiziert, sondern wird als Teil von Red Hats JBoss zertifiziert.

Jede Spezifikation hat eine API und eine schriftliche PDF, die beide das verbindliche Verhalten jeder Implementierung definieren. Das verwenden Sie, wenn Sie EJB-Code schreiben. Zum Beispiel, wenn Sie einen ejb erstellen:

%Vor%

@Singleton-Annotation ist Teil der Spezifikation, aber MySingleton class ist Ihr EJB-Code, der nicht Teil der Spezifikation ist. Der EJB-Container weiß dann, was mit der Klasse zu tun ist.

    
jan.supol 23.06.2016, 07:47
quelle
1

Ja, EJB-Container (Application Server) -Anbieter wie RedHat implementieren die J2EE-Spezifikation in ihren Produkten (wie JBoss).

Was sie nicht tun, ist irgendeine Geschäftslogik (nur die "Klempnerarbeit", wenn Sie so wollen). Hier kommen Anwendungsentwickler ins Spiel.

Genau wie Apache HTTPD oder Nginx implementieren Sie die HTTP-Protokoll-Spezifikation, aber das macht keine Website.

    
Thilo 23.06.2016 06:34
quelle
1

Jeder kann die J2EE-Spezifikation implementieren, obwohl ich Ihnen nicht empfehlen würde, es selbst zu versuchen. Sie haben Recht, dies wird normalerweise von Anwendungsservern implementiert, damit Sie Ihre Anwendung in einem J2EE-konformen Container ausführen können. Es gibt auch Open-Source-Bibliotheken, die, wenn sie kombiniert und zu Tomcat hinzugefügt werden, die Spezifikation implementieren (siehe zum Beispiel tomee).

Wenn Sie Ihre Anwendung schreiben, nutzen Sie die Vorteile der J2EE-Umgebung, mit der Sie komplexe Anwendungen schreiben und sich auf die Anforderungen Ihrer spezifischen Anforderungen konzentrieren können.

    
StuPointerException 23.06.2016 06:37
quelle
1

In Java-Spezifikationsfällen (Java EE, JSF, andere JSRs) haben Sie normalerweise eine Referenzimplementierung erstellt, während Sie die Spezifikation erstellen (Glassfish im Falle von Java EE), dann haben Sie andere Anbieter, die ihre eigene Implementierung des spec (oft behauptet, es ist in irgendeiner Weise "besser").

Sie schreiben als Entwickler dann Code, der die von der Spezifikation bereitgestellten Funktionen verwenden kann, die bei jeder kompatiblen Implementierung korrekt ausgeführt werden.

    
Kayaman 23.06.2016 06:38
quelle
1

1) Application Server implementiert die Spezifikation und stellt bei der Freigabe ihrer Server die Details ihrer Implementierung zur Verfügung. Eine Referenz finden Sie in diesem Link , der die verschiedenen von JBOSS 7 implementierten JSRs angibt .

2) Wenn wir nur eine vom Anwendungsserver bereitgestellte Implementierung verwenden, wird die Instanz von der vom Server bereitgestellten Implementierung übernommen. Während, wenn wir eine Klasse übersteuert haben, wird unsere überschriebene Klasse für unsere Operationen bereitgestellt.

    
Clement Amarnath 23.06.2016 06:42
quelle