Advanced   Java   Services Stateless Session Beans 3.0 Back Next Up Home


Einführung

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.




Eine Hello World EJB 3.0 stateless Sessionbean

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.


Das Remote-Interface

package sayhello;

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

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

Die Session-Bean

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

Eclipse-Screenshot

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

Eclipse-Screenshot

stateless-bean-2.jpg missing


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

Siehe auch

glassfish.java.net/javaee5/ejb/EJB_FAQ.html

Valid XHTML 1.0 Strict top Back Next Up Home