# Bean läuft unter GlassFish, aber JBoss nicht



## hsch (20. Okt 2011)

Hallo,

Vorab: ich bin neu in Gebiet Java EE.
Ich habe dieses Tutorial EJB 3 Development for Glassfish using Eclipse 3.2 Tutorial gemacht. Jedoch habe ich mir den GlassFish als zip gezogen, gestartet und das Projekt, die Server Seite, mittels Eclipse Rechtsklick>Export>JAR als jar-Datei exportiert. Daraufhin habe ich es in der Web-Administrationskonsole des Glassfish deployt und den Client in Eclipse gestartet. Das funktioniert auch alles soweit.

Darauf hin habe ich den GlassFish wieder heruntergefahren und den JBoss AS 7 gestartet und darin das gleiche JAR Archiv über die Web-Administrationsconsole deployt und aktiviert. Wenn ich jetzt jedoch den Client in Eclipse starte, dann bekommeich keine Antwort und stattdessen einen Fehler. 

Kann mir jemand sagen warum? Eigentlich sollte er das doch verstehen,oder?

Liegt es vielleicht an den importierten jar-Dateien vom GlassFish?

Denn bevor ich überhaupt Code schreiben konnte, musste ich zu erst die javaee.jar und die appserv-rt.jar in den Client und den Server in den Java Build Path packen. Letzteres nur beim Client.
Die Dateien und speziell die javaee.jar, mit der ich ja nur javaee Anwendung schreiben kann, finde ich nru im GlassFish! Ist das so richtig? Wo bekomme ich sonst die nötige javaee.jar oder j2ee.jar her, um JavaEE Programme zu schreiben? Im JBoss fidne ich nämlich keine dieser Dateien/Archive.


Und eine weitere Frage:

Wie funktioniert die Kommunikation zwischen lient und Server? Läuft die über RMI ab oder wie? Wie kann ich die Kommunikation beeinflussen bzw. auswechseln, wenn der Server und der Client später vielleicht mal wirklich auf zwei verschiedenen physikalisch getrennten Maschinen laufen? 



Vielen Dank für eure Hilfe im vorraus.

Viele grüße
hsch


----------



## TheDarkRose (20. Okt 2011)

Java EE ist Ansich relativ gut Standardisiert. Aber leider nur auf Serverseite. Also EJB und WAR Projekte, wenn sie gegen den Standard programmiert wurden funktionieren meist unter jedem Application Server. Aber leider Gottes geht bei der normalen Java Client Anbindung (Remoting) jeder eigene Wege. Für Jboss gibt es auch dort eine eigene jboss-clent-all.jar (oder so ähnlich, weiß es gerade nicht auswendig) und es wird über RMI kommuniziert. Bei Glassfish läuft die Kommunikation respektive über CORBA/IIOP...

Also solltest du bei Java EE wirklich in den Bereich eines zusätzlichen lokalen Clients einsteigen wollen, musst du dich leider Gottes auf einen Application Server spezialisieren. Aber willst du mit Java EE Webanwendungen (EJB, WAR) gestalten, dann geht das schön Application Server unabhängig.

Soweit meine Erfahrungen.


----------



## hsch (20. Okt 2011)

Ich habe die Server-EJB, die ich für den GlassFish baute, also die mit der javaee.jar aus dem GlassFish-Verzeichnis, einfach in den JBoss geschmissen und aktiviert. Da gab es keine Probleme. Halt nur beim Ausführen des Clients bzw. der Aufruf der Methode aus der EJB. Muss ich jetzt für den Client die JBoss spezifische JAR benutzen oder muss ich eine neue EJB mit einer spezifischen JBoss-JAR bauen? Blicke da leider noch nicht sooo durch. So wie ich dich verstanden habe, msus ich doch nur den Client für den JBoss anpassen,oder?! Ich beziehe mich auf den Part:


TheDarkRose hat gesagt.:


> Also EJB und WAR Projekte, wenn sie gegen den Standard programmiert wurden funktionieren meist unter jedem Application Server. Aber leider Gottes geht bei der normalen Java Client Anbindung (Remoting) jeder eigene Wege.




Deine letzte Aussage verstehe ich leider (NOCH) nicht:


TheDarkRose hat gesagt.:


> Also solltest du bei Java EE wirklich in den Bereich eines zusätzlichen lokalen Clients einsteigen wollen, musst du dich leider Gottes auf einen Application Server spezialisieren. Aber willst du mit Java EE Webanwendungen (EJB, WAR) gestalten, dann geht das schön Application Server unabhängig.



Die WAR-Dateien (JSP, JSF, Servlets) sind doch die für die Webanwendungen (im Webcontainer) und die EJBs (JAR) stellen doch die Logik dahinter dar (im EJB Container). Gibt es da ja jetzt noch einen Unterschied? ???:L



Noch eine andere Frage:
Im Moment läuft der Aufruf ja über

```
InitialContext ctx = new InitialContext();
SimpleBean bean = (SimpleBean) ctx.lookup("ejb/SimpleBeanJNDI");
String result = bean.sayHello("Billy Bob");
```
ab.

Wie kann ich da die Kommunikation beeinflussen? Also z.B. über SOAP o.a.? 


Schon einmal vielen Dank für deine Hilfe.


----------



## TheDarkRose (20. Okt 2011)

Nein, die Server EJB-JAR musst du nicht umbauen. Sondern den Client.


hsch hat gesagt.:


> Die WAR-Dateien (JSP, JSF, Servlets) sind doch die für die Webanwendungen (im Webcontainer) und die EJBs (JAR) stellen doch die Logik dahinter dar (im EJB Container). Gibt es da ja jetzt noch einen Unterschied? ???:L


Richtig. Was ich damit aussagen wollte, ist worauf du dich Spezialisieren willst. Webanwendungen oder Rich Application Clients


----------



## hsch (20. Okt 2011)

Da der Client mehr als nur Daten visualisieren soll bzw. auch Daten bekommen und noch mehr machen soll, wird auf einen Rich Client hinauslaufen.

Stellt sich nur noch die Frage, wenn die Verbindung zum Server übers Internet geht, wie Daten versendet/empfangen werden. Mit RMI bin ich ja sozusagen schon gebunden, wie das Datenformat aussieht, was versendet wird,oder? Habe mir aber ehrlich gesagt, darum noch keine Gedanken gemacht, sondenr erst einmal versucht eine EJB zum Laufen zu bekommen.


----------



## TheDarkRose (20. Okt 2011)

Also, du arbeitest immer mit den ProxyObjekten die du vom InitialContext geliefert bekommst, bzw castest du diese dann auf deine RemoteInterfaces, damit du damit arbeiten kannst. Wie der Client sich mit dem Server verbindet, definierst du in den Properties den du dem InitialContext Konstruktor übergeben kannst. Bei JBoss erfolgt das über RMI, aber du musst selbst nicht, dank des JNDI-Lookups, mit RMI rumärgern.


----------

