Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 211 Le client EJB
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 212 En gros.... OM Client jndi
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 213 Comment obtenir le stub du « home » ? Réaliser un lookup sur le service de nommage JNDI afin d'obtenir..... Pour localiser le d'un EJB Robot lié en tant que « nono » : // Obtenir un contexte de travail initial try{ RobotHome home=(RobotHome)context.lookup(« nono »); }catch(NamingException e){...}
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 214 Linterface..... Elle fournie un service de gestion du cycle de vie des EJB créés –création –suppression –métaDonnées –localisation des EJB d'implantation
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 215 Linterface EJBHome Toutes les interfaces « home » héritent de –javax.ejb.EJBHome L'interface EJBHome : public interface EJBHome extends Remote { public void remove (Handle handle) throws RemoveException; public void remove (Object object) throws RemoveException; public EJBMetaData getEJBMetaData(); }
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 216 Les méthodes de création L'interface home présente également un certain nombre de méthodes create qu'un client peut invoquer pour demander la fabrication d'un EJB Syntaxe des méthodes create create() throws CreateException, RemoteException Exemple de création de robots try{ RobotHome home=(RobotHome)context.lookup(« nono »); Robot jacques=home.create(); Robot bill=home.create(«Grosses Chenilles»); }catch(NamingException e){ }catch(CreationException e){ }catch(RemoteException e){}
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 217 Les ejb entité présentent des méthodes find Les entités EJB possèdent une ou plusieurs méthodes find dans l'interface « home » qui permettent de localiser les EJB persistants existants Toutes les « homes » des EJB entity ont : findByPrimaryKey( ) throws FinderException, RemoteException L'interface « home » peut également définir d'autres méthodes de recherche : findNimporteQuoi() throws FinderException, RemoteException java.util.Enumeration findNimporteQuoi() throws FinderException, RemoteException
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 218 Exemple d'utilisation d'un entity EJB On utilise des entity EJB qui représentent des adresses Mail : public interface Home extends EJBHome { public create(String adresse)throws CreateException, RemoteException public findByPrimaryKey( PK pk) throws FinderException, RemoteException public Enumeration findByDomain(String domain) throws FinderException, RemoteException } Exemple dutilisation de l'entité EJB try{ Home home=( Home)context.lookup(« EJB »); PK pk=new uneAdress =home.findByPrimaryKey(pk); Enumeration enum=home.findByDomain("univ-lyon1.fr"); while(enum.hasMoreElements()){ =( )enum.nextElement(); // Utilisation de l'EJB ici ! } }catch(Exception e){}
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 219 Que ce passe t'il au niveau du container ?
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 220 Vision client du cycle de vie : EJB Session Non existant non référencé Non existant référencé existe non référencé existe, référencé home.create (...) Le client invoque les méthodes La référence client est libérée handle.getObject() Crash du container ou timeOut du bean object.remove() home.remove() Exception système du bean TimeOut du Bean Crash du container NoSuchObjectException() La référence client est libérée
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 221 Vision client du cycle de vie : EJB Entity Non existant non référencé Non existant référencé existe non référencé existe, référencé home.create (...) Le client invoque les méthodes La référence client est libérée home.find() Insertion directe object.remove() home.remove() ou suppression directe NoSuchObjectException() La référence client est libérée Suppression directe home.remove()
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 222 L'interface Remote L'interface Remote liste les opérations métiers d'un EJB –Toutes les interfaces Remote étendent EJBObject –Toutes les méthodes peuvent lever une exception RemoteException
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 223 L'interface EJBObject L'interface EJBObject fournit au client sa vue d un EJB L'interface EJBObject interface EJBObject extends Remote { public EJBHome getEJBHome(); public Handle getHandle(); public Object getPrimaryKey(); public boolean isIdentical(EJBObject); public void remove() throws RemoveException; } Toutes ces méthodes lèvent aussi RemoteException
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 224 L'interface Remote L'interface Remote définit surtout les opérations métiers de l'EJB L'interface Remote pour un EJB entité public interface extends EJBObject{ public String getDomainName() throws RemoteException; public String get Address() throws RemoteException; public String getUserName() throws RemoteException; } Exemple d'utilisation de l'EJB try{ Home home=( Home)context.lookup(" EJB"); String domain=ejb.getDomainName(); String user=ejb.getUserName(); System.out.println(" Adresse Mel : }catch(Exception e){...}
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 225 Comparaison d'EJB Utilisation de isIdentical(EJBObject) pour voir si deux références distances indiquent le même EJB Comparaison d'identité RemoteStringHome home=...; //Obtient le home d'un stateful RemoteString r1=home.create(...); RemoteString r2=home.create(...); RemoteString r3=r2; //comparaisons if (r1.isIdentical(r2)){...} if (r1.isIdentical(r1)){...} if (r2.isIdentical(r3){...}
Stéphane Frenot - Département Télécommunication - SID - II - EJBcli 226 Objets Handle Un Handle peut être utilisé pour stocker une connexion sur un EJB Un objet Handle : –Représente le contenu d'un remote stub –Est sérialisable –Est produit à partir de l'interface Remote Définition de l'interface Handle public interface Handle{ public EJBObject getEJBObject() throws RemoteException; } Pour fabriquer le Handle à partir de l'EJB public Handle getHandle() throws RemoteException;