Advanced Java Services | Stateful Session Beans 3.0 |
Eine stateful Session Bean ist eine Bean die clientspezifischen Daten speichert und so eine 1 zu 1 Beziehung zwischen Client und Bean herstellt, bzw. herstellen muß. Zusätzlich zur stateless Sessionbean hat sie noch den Zustand "Passive". Die Zustände werden vom Beancontainer gesteuert.
Unser 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 stateful; import java.time.LocalDateTime; import javax.ejb.Remote; @Remote public interface SayHelloRemote { String sayHello(); LocalDateTime getCreationTime(); }
package stateful; import java.time.LocalDateTime; import javax.ejb.Stateful; /** * Session Bean implementation class AccessCount */ @Stateful public class SayHelloBean implements SayHelloRemote, SayhelloLocal { LocalDateTime ldt = LocalDateTime.now(); public SayHelloBean() { } @Override public String sayHello() { return "This is a stateful SessionBean"; } @Override public LocalDateTime getCreationTime() { 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 java.util.concurrent.TimeUnit; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import stateful.SayHelloRemote; /** * @author hms * */ public class EJB_Stateful_GlassFish_01_Client { /** * @param args */ public static void main(String[] args) { System.out.println("EJB_Stateful_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"); // default try { //Context ctx = new InitialContext(env); // NamingException Context ctx = new InitialContext(); // NamingException System.out.println("initial context received: " + ctx); SayHelloRemote hello = (SayHelloRemote)ctx.lookup("stateful.SayHelloRemote"); // packagenamen mit angeben System.out.println(hello.sayHello()); System.out.println("Aktuelle Zeit: " + LocalDateTime.now()); System.out.println("DeployTime : " + hello.getCreationTime() ); // 2015-10-08T11:11:34.651 // Jeder Client bekommt seine eigene Bean } catch(NamingException ex) { ex.printStackTrace(); } catch(Exception ex) { System.out.println("Exception " + ex); } } }
EJB_Stateful_GlassFish_01_Client about to create initialcontext initial context received: javax.naming.InitialContext@1e8c3cb This is a stateful SessionBean Aktuelle Zeit: 2015-10-09T20:15:07.971 DeployTime : 2015-10-09T20:15:07.942