Advanced Java Services | Stateless Session Beans 3.0 |
Eine stateless Session Bean ist eine Bean die keine clientspezifischen Daten speichert und so eine quasibeliebige Anzahl von Clients bedienen kann. Sie hat nur die zwei Zustände "Does not Exist" bzw. "Ready". In letzterem Zustand kann Sie die Businessmethoden abarbeiten.
Wir werden dieses Beispiel mit Eclipse entwickeln. Das von Eclipse erstellte Archiv wird aber direkt an GlassFish übergeben. Auf diese Weise kann man sich ein wenig mit der Admin-Konsole von GlassFish vertraut machen
Das Beispiel besteht aus drei Dateien, dem Remoteinterface, der eigentlichen Beanklasse und dem Client der den Dienst dieser EJB über das Protokoll "iiop" (Internet Inter-ORB Protocol) in Anspruch nehmen will. Zu diesem Protokoll gibt es eine kurze Information auf Wikipedia.
package sayhello; import java.time.LocalDateTime; import javax.ejb.Remote; @Remote public interface SayHelloRemote { String sayHello(); LocalDateTime getStartTime(); }
package sayhello; import java.time.LocalDateTime; import javax.ejb.Stateless; /** */ @Stateless public class SayHelloBean implements SayHelloRemote, SayHelloLocal { LocalDateTime ldt = LocalDateTime.now(); public SayHelloBean() { } @Override public String sayHello() { return "This is a stateless SessionBean"; } @Override public LocalDateTime getStartTime() { return ldt; } }
Das Eclipse-Projekt wird kompiliert und das Jar-Archiv über Export erstellt.
Das Archiv wird ins Deployverzeichnis kopiert.
package hms; import java.time.LocalDateTime; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import sayhello.SayHelloRemote; /** * @author hms * * http://stackoverflow.com/questions/28915850/jboss-as-vs-wildfly8 * */ public class EJB_Stateless_GlassFish_01_Client { /** * @param args */ public static void main(String[] args) { System.out.println("EJB_Stateless_GlassFish_01_Client"); System.out.println("about to create initialcontext"); Properties env = new Properties(); env.put("org.omg.CORBA.ORBInitialHost","localhost"); // default ist localhost !! env.put("org.omg.CORBA.ORBInitialPort","3700"); // ist default env.put("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory"); // ist anscheinend auch default // ist für glassfish nicht notwendig try { //Context ctx = new InitialContext(env); // NamingException Context ctx = new InitialContext(); // NamingException System.out.println("initial context received: " + ctx); SayHelloRemote hello = (SayHelloRemote)ctx.lookup("sayhello.SayHelloRemote"); // packagenamen mit angeben System.out.println(hello.sayHello()); System.out.println("Aktuelle Zeit: " + LocalDateTime.now()); System.out.println("DeployTime: " + hello.getStartTime()); // 2015-10-08T10:58:57.104 // Alle Clients bekommen dieselbe Bean // Wird die Bean eine gewisse Zeit nicht aufgerufen wird sie aus dem Pool entfernt } catch(NamingException ex) { ex.printStackTrace(); } catch(Exception ex) { System.out.println("Exception " + ex); } } }
EJB_Stateless_GlassFish_01_Client about to create initialcontext initial context received: javax.naming.InitialContext@1e47833 This is a stateless SessionBean Aktuelle Zeit: 2015-10-09T19:49:41.207 DeployTime: 2015-10-09T19:49:41.186
glassfish.java.net/javaee5/ejb/EJB_FAQ.html