EJB 2.0

Présentation

Les Enterprise beans sont les composants J2EE qui implémentent la technologie Enterprise Java Beans (EJB). Les Enterprise beans s’exécutent dans le conteneur d’EJB, un environnement d’exécution à l’intérieur du serveur d’application. Bien que transparent pour le développeur, le conteneur d’EJB fournit des services au niveau système comme les transactions et la sécurité pour ces enterprises beans.

Qu’est-ce qu’un Enterprise Bean ?

Ecrit dans le langage de programmation Java, un enterprise bean (bean d’entreprise) est un composant côté serveur qui encapsule la logique métier d’une application.

L'Entreprise JavaBean

Implémentation de la logique métier

public class CompteurSimpleBean implements SessionBean {

  private int valeur;

  // Valeur par défaut si l'utilisateur ne spécifie pas la valeur d'intitialisation
  private  static final int VALEUR_PAR_DEFAUT = 0;

  public void incremente() {
    valeur++;
  }

  public int getValeur() {
    return valeur;
  }

  public void ejbCreate() {
    this.valeur = VALEUR_PAR_DEFAUT;
  }

  public void ejbCreate(int valeur) {
    this.valeur = valeur;
  }
  
	public void ejbRemove() {}
  public void ejbActivate() {}
  public void ejbPassivate() {}
  public void setSessionContext(SessionContext sc) {}
}

Interface Home vs Remote

HomeITF pour définir le cycle de vie des méthodes. Home business methods are methods that are not specific to a particular bean instance.

RemoteITF pour définir les méthodes métiers

RemoteHomeITF & Remote(Remote)ITF pour un appel distant (RMI-IIOP) alors que LocalHomeITF & Local(Remote)ITF pour un appel local (pas de marshalling, ...)

Exposition des méthodes

//Interface Remote
public interface CompteurSimple extends EJBObject { 
  public int getValeur() throws RemoteException;
} 
//Interface Remote Home
public interface CompteurSimpleHome extends EJBHome {
  // Constructeur par défaut
  CompteurSimple create() throws RemoteException, CreateException;

  // Permet d'initialiser la valeur du compteur
  CompteurSimple create(int valeur) throws RemoteException, CreateException;
}
//Interface Local 
public interface CompteurSimpleLocal extends EJBLocalObject { 
  public int getValeur() throws RemoteException;
} 
//Interface Local Home
public interface CompteurSimpleLocalHome extends EJBLocalHome {
  // Constructeur par défaut
  CompteurSimple create() throws RemoteException, CreateException;

  // Permet d'initialiser la valeur du compteur
  CompteurSimple create(int valeur) throws RemoteException, CreateException;
}

Localiser un bean

Remote home interface
InitialContext ic = new InitialContext();

Object oRef = ic.lookup( "java:comp/env/ejb/MyEJBBean" );

MyEJBRemoteHome MyEJBHome = (MyEJBRemoteHome)PortableRemoteObject.
                                  narrow( oRef, MyEJBRemoteHome.class );
																	
// get the component interface

MyEJBRemote MyEJB = MyEJBHome.create();
Local home interface
InitialContext ic = new InitialContext();

MyEJBLocalHome MyEJBHome = (MyEJBLocalHome)ic.lookup("java:comp/env/ejb/MyEJBBean");

// get the component interface

MyEJBLocal MyEJB = MyEJBHome.create();
Paramétrage du contexte initial
Properties prop = new Properties();
prop.put("java.naming.provider.url", "corbaname:iiop:wasd1:9811,:wasd2:9811#cell/clusters/ejbCluster");
//SUN Factory
prop.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory") ;
//IBM Factory
prop.put("java.naming.factory.initial", "com.ibm.websphere.naming.WsnInitialContextFactory") ;
        
InitialContext ctx = new InitialContext(prop);
Object homeObject = ctx.lookup(jndiName) ;
EJBHome home = (EJBHome)PortableRemoteObject.narrow(homeObject,ejbHomeClass) ;

Business Interface Pattern

Le pattern 'Business Interface Pattern' permet de s'assurer que les méthodes soient les mêmes dans l'ejb client et dans l'implémentation du bean. Pour se faire, il faut suivre les étape suivantes:

  • Toutes les méthodes de l'interface métier lèvent une java.rmi.RemoteException
  • La remote interface étend (extends) de l'interface métier
  • La classe d'implémentation du Bean implémente (implements) l'interface métier

Procédure avec WebSphere pour exposer une méthode

  1. Ajouter la méthode dans l'interface
  2. Implémenter le Bean, Dlg et éventuellement le Helper
  3. Promote local et remote sur méthode du bean
  4. Déploye

Ressources