- Ressources
- Langages
- Java
- Les collections
- Conversion & Casting
- Dates
- Tableau
- Bytes
- Formatage
- Traitement de fichiers
- Erreurs
- Le fichier Manifest
- Servlet
- EJB 2.x
- EJB 3.x
- JNDI
- Les méthodes
- Les Threads
- Les Opérateurs
- Les Mots clés
- MOM - JMS
- Class loader
- Garbage Collector
- Les transactions
- Les primitives
- Les expressions régulières
- Les annotations
- Les génériques
- CDI
- Java
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 interfaceInitialContext 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
- Ajouter la méthode dans l'interface
- Implémenter le Bean, Dlg et éventuellement le Helper
- Promote local et remote sur méthode du bean
- Déploye