Glassfish + EJB3 + Client Connection
So mein zweiter Erfolgreicher Versuch. Dieses mal mit Netbeans, aber auch nur der Perfomance halber. Sollte im Ansatz genau das gleiche sein wie im Eclipse. Glassfish unterstütz zur Remote Method Invocation IIOP. Der Lookup lässt euch die Pakete einfach aufrufen und benutzen.
Nachdem ihr euer Projekt angelegt habt (Java Application), klickt rechts auf das Projekt und fügt in den Libaries folgende hinzu:
appserver-rt.jar und javaee.jar damit die Aufrufe für den folgenden Codeschnipsel nicht daneben gehen. Ich selber war teilweise zu Faul die Anleitung bei Glassfish genauer zu lesen und daher fast eine Stunde mit Sucherei verbracht bis ich mir diese doch mal ausführlicher zu gemütge gezogen habe. Hier der Link zur Dokumentation falls die orginal euch eher interessiert.
Auf der Glassfish Seite werden sowohl die EJB 3.0 Connections als auch die EJB 2.0 Verbindungen behandelt.
Aber zurück zu meinem Kleinen Beispiel. Einem LookUp auf meinen Server.
Kurz zur Struktur, ein lokaler Glassfish läuft mit einem Connection Pool auf einen entfernte Datenbank. (MySql) in meinem Fall. hab es aber auch schon mit einer Oracle Express ausprobiert ohne Probleme.
Der Client wird ebenfalls lokal vom gleichen Rechner wie der Glassfish – Server ausgeführt. Später werde ich diesen auch per Netzwerk aufrufen, um dies ausführlich zu testen.
Properties props = new Properties();
props.setProperty(“java.naming.factory.initial”, “com.sun.enterprise.naming.SerialInitContextFactory”);
props.setProperty(“java.naming.factory.url.pkgs”, “com.sun.enterprise.naming”);
props.setProperty(“java.naming.factory.state”, “com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl”);
// optional. Defaults to localhost. Only needed if web server is running
// on a different host than the appserver
props.setProperty(“org.omg.CORBA.ORBInitialHost”, “localhost”);
// optional. Defaults to 3700. Only needed if target orb port is not 3700.
props.setProperty(“org.omg.CORBA.ORBInitialPort”, “3700″);
InitialContext ic = new InitialContext(props);// lookup for serialized container
userBean = (userBeanRemote) ic.lookup(“userBeanRemote”);
Der Codeschnipsel zum Verbinden auf das Remote Interface der EJB3 der vom Glassfish zur verfügung gestellt wird. Der CORBA Lookup dauert beim Aufbau etwas länger da die Verbindung erst gesucht werden muss. Sobald diese aber steht, funktioniert es mit einer sehr hohen Performance.
Auf der anderen Seite steht der Glassfish mit dem userBean und dem dazugehörenden remote Interface: userBeanRemote in meinem Fall.
Falls Fehler enstehen die darauf deuten das eine Klasse nicht geladen werden kann, sind entweder die beiden JAR Files (javaee etc.) nicht erreichbar, oder die Verbindung kann nicht aufgebaut werden, wobei man das recht einfach aufschlüsseln kann.
There are 4 Comments to "Glassfish + EJB3 + Client Connection"
Hallo,
Bin zufällig hier gelandet da ich mich mit EJB 3 befassen möchte oder mich damit befasse. Vielleicht hab auch ich die Anleitung vom Glassfish zu wenig genau gelesen, aber wo zum Teuefel krieg ich die appserver-rt.jar und die javaee.jar her, ich kann die beim meiner Glassfish installation prelude nirgends finden ?
Würd mich über einen Tipp freuen.
Roli
Hi,
Die jar’s die du suchst sind im Lib Verzeichnis des Glassfish Servers z.b. “C:\Programme\glassfish-v2.1\lib”
beim Glassfish 3 Prelude habe ich diese bisher auch noch nicht gesehen. Aber ich erinnere mich wage daran, dass ich gelesen hatte das der neue Prelude die EJB noch nicht unterstützt bzw. extra eingebunden werden müsste.
Hallo
Vielen Dank für Deinen Tipp. Es ist tatsächlich so, ich finde unter Glassfish 3 Prelude diese jars nicht. Das hab ich grad noch im Netbeans Forum gefunden:
“GlassFish v3 Prelude only supports a preview of EJB 3.1 and WAR
packaging or EJB’s.
No EJB-JAR or EAR for the time being.”
Aber irgendwie kann ich das nicht so richtig verstehen: das heisst wenn ich mit der EJB3 Spez arbeiten möchte, brauche ich die Version 2.1. Ist denn ejb3 schon wieder am Aussterben ?
Gruss und sorry für die dummen Fragen
Roli
Ich würde nicht sagen am Aussterben eher am weiter Entwickeln. Der Glassfish 3 Prelude ist nur einer von vielen App Servern. Wenn man wirklich viel Umfang im EJB3 Umfeld sucht, und auch andere zusätzliche Features will könnte man auch auf den JBoss zurückgreifen dessen neue Version erst vor kurzem erschien.
Dadurch das der Glassfish 3 in meinen Augen noch nicht voll ausgereift ist und immernoch an ihm Entwickelt wird sollte man vorerst noch die Version 2.1 einsetzen.
Glassfish ist ein sehr schneller AppServer der auch auf kleinere Maschinen Performant läuft ohne große Konfigurationsarbeiten im Gegensatz zum jBoss in den man sich erstmal einlesen müsste. Läuft zwar auch so, aber dann eher langsam.