|
 |
 | Les classes et interfaces d'un EJB |
|
 |
|
Pour implémenter des beans entité et session, il faut définir les interfaces,
une classe de bean et une clé primaire:
Interface distante:
L'interface distante définit les méthodes métier d'un bean auxquelles peuvent accéder les applications hors du conteneur EJB. L'interface distante étend javax.ejb.EJBObject, qui étend java.rmi.remote. Elle est utilisée par les beans entité et session avec l'interface distante du Home.
Interface distante du Home:
L'interface du Home définit les méthodes du cycle de vie du bean auxquelles peuvent accéder les applications hors du conteneur d'EJB (créer, supprimer ou retrouver un bean). L'interface du Home étend javax.ejb.EJBHome. Elle est utilisée par les beans entité et session avec l'interface distante.
Interface local:
L'interface local définit les méthodes métier d'un bean auxquelles peuvent accéder les autres beans situés dans le même conteneur d'EJB. Elle permet aux beans d'interagir sans ajouter le protocole d'objets distribués (Amélioration des performances).
Interface local du Home:
L 'interface local du Home définit les méthodes du cycle de vie du Bean auxquelles peuvent accéder les autres beans situés dans le même conteneur d'EJB (créer, supprimer ou retrouver un bean). L'interface local du Home étend javax.ejb.EJBLocalHome. Elle est utilisée par les beans entité et session avec l'interface local.
Classe du Bean:
Les classes des beans entité et session implémentent les méthodes métier et celle du cycle de vie des beans. Un bean entité doit implémenter javax.ejb.EntityBean et un bean session implémente javax.ejb.SessionBean.
Attention: les beans orientés message n'utilisent aucunes interfaces de composants, car les applications ou les autres beans n'y accèdent jamais par des appels de méthode. Il n'offre qu'une seule méthode onMessage(). La classe Bean orienté message implémente les interfaces javax.ejb.MessageDrivenBean et javax.jms.MessageListener.
La clé primaire:
La clé primaire est une classe très simple qui fournit un pointeur dans la base de données. Seuls les beans entité ont besoin de cette clé primaire. Elle implémente java.io.Serializable.
Exemple d'implémentation des classes et des interfaces
Dans cette partie, vous trouverez le développement d'un EJB Cabin qui modélise une cabine de paquebot.
Dans un premier temps, vous devez implémenter l'interface distante comme ci-dessous:
import java.rmi.RemoteException;
public interface CabinRemote extends javax.ejb.EJBObject {
public String getName() throws RemoteException;
public void setName(String str) throws RemoteException;
public int getDeckLevel() throws RemoteException;
public void setDeckLevel(int level) throws RemoteException;
}
Ces méthodes permettent de nommer la cabine et de spécifier le pont de la cabine.
Ensuite, nous définissons l'interface distante du Home qui permet de gérer le cycle de vie d'un bean.
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
public interface CabinHomeRemote extends javax.ejb.EJBHome {
public CabinRemote create(Integer id)
throws CreateException, RemoteException;
public CabinRemote findByPrimaryKey(Integer pk)
throws FinderException, RemoteException;
}
La méthode create() permet d'initialiser une instance de notre bean. Quand à la méthode findByPrimaryKey(), elle permet de trouver un bean Cabin.
Maintenant, nous allons implémenter le bean.
import javax.ejb.EntityContext;
public abstract class CabinBean implements javax.ejb.EntityBean {
public Integer ejbCreate(Integer id){
setId(id);
return null;
}
public void ejbPostCreate(Integer id){
// Ne fait rien
}
public abstract String getName();
public abstract void setName(String str);
public abstract int getDeckLevel();
public abstract void setDeckLevel(int level);
public abstract Integer getId();
public abstract void setId(Integer id);
public void setEntityContext(EntityContext ctx){
// non implémentée
}
public void unsetEntityContext(){
// non implémentée
}
public void ejbActivate(){
// non implémenté
}
public void ejbPassivate(){
// non implémentée
}
public void ejbLoad(){
// non implémentée
}
public void ejbStore(){
// not implemented
}
public void ejbRemove(){
// non implémentée
}
}
Les méthodes ejBCreate() et ejbPostCreate() initialisent l'instance de la classe du bean quand
un nouveau enregistrement de cabine est ajouté à la base de données. Les sept dernières méthodes
de CabinBean sont définies dans l'interface javax.ejb.EntityBean. Le conteneur EJB les invoque
quand des évènements surviennent au niveau du cycle de vie. Par exemple, la méthode ejbRemove()
signale à un bean entité que ses données vont être supprimées de la base de données.
|
|
 |
 |
 |
|