Advanced   Java   Services Stateful Session Beans 3.0 Back Next Up Home


Einführung

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.






Eine Hello World EJB 3.0 stateful Sessionbean

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.


Das Remote-Interface

package stateful;

import java.time.LocalDateTime;
import javax.ejb.Remote;

@Remote
public interface SayHelloRemote
{
   String sayHello();
   LocalDateTime getCreationTime();
}

Die Session-Bean

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;
   }
}

Eclipse-Screenshot

stateful-bean-1.jpg missing


Compilieren und Jar-Archive erstellen

Das Eclipse-Projekt wird kompiliert und das Jar-Archiv über Export erstellt.





Deployen in GlassFish

Das Archiv wird ins Deployverzeichnis kopiert.





Der Client

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);
      }
   }
}

Eclipse-Screenshot

stateful-bean-2.jpg missing


Aufruf des Clients
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