Home | Contact |
---|
Enterprise JavaBeans : composants Java d'entreprise.
Fournir un modèle de composants Java pouvant être :
Les composants EJB peuvent représenter des :
Chaque composant EJB est mis en oeuvre par un ensemble d'objets :
Les composants trouvent les éléments externes (autres EJB, sources de données, files de messages, etc.) auxquels ils veulent accéder via un annuaire compatible JNDI.
Une fois définis, les composants EJB peuvent être assemblés en un module EJB. On résoud alors, entre composants de ce module, les dépendances :
Une fois assemblé, un module EJB peut être déployé dans un conteneur EJB. On résoud alors, pour les composants de ce module, les dépendances avec l'environnement de déploiement, telles que les dépendances de :
L'API des EJB est définie dans le package javax.ejb
.
Un EJB est développé à partir de :
EntityBean
pour un EJB EntitéSessionBean
pour un EJB SessionMessageDrivenBean
pour un EJB asynchroneEJBObject
pour proposer une interface distribuableEJBLocalObject
pour proposer une interface localeLa recherche des éléments externes doit s'effectuer en interrogeant le contexte de nommage de l'environnement du composant :
java:comp/env/ejb/AutreEJB
java:comp/env/jdbc/UneDataSource
java:comp/env/jms/UneFileDeMessages
java:comp/env/eis/UnConnecteurJCA
Au moment du déploiement, les noms recherchés dans cet environnement local seront associés à des noms absolus d'objets déployés dans le serveur (tout ou partie de cette résolution de nom peut également s'effectuer lors de l'assemblage, s'il s'agit de désigner d'autres EJB locaux au module de l'EJB appelant).
Exemples
Un exemple de classe d'instance d'EJB Entité 2.0 est :
import javax.ejb.*;
public abstract class SkillTree implements EntityBean
{
/**
* Constructeur par défaut, toujours vide
*/
public SkillTree() {}
public SkillKey ejbCreate (Skill
someRootSkill) throws CreateException {
setRoot (someRootSkill);
return null; // En CMP
la clé est déduite
}
/**
* Accesseurs CMP
*/
public abstract Object getRoot();
public abstract void setRoot (Object);
public void ejbStore() {
// Rien à faire ici
}
public void ejbLoad() {
// Rien à faire ici
}
public void ejbRemove() {
// Rien à faire ici
}
public void ejbActivate() {
// Rien à faire ici
}
public void ejbPassivate() {
// Rien à faire ici
}
public void setEntityContext (EntityContext
someContext) {
ejbContext = someContext;
}
public void unsetEntityContext() {
}
private EntityContext ejbContext;
}
EJB | Version | 1 | 2 | Commentaire | |||
---|---|---|---|---|---|---|---|
Technologie | Release | 0 | 1 | 0 | 1 | ||
Sessions | Stateless | Oui | Sans état conversationnel (donc optimisables en étant partagés par plusieurs clients) | ||||
Stateful | Oui | Avec état conversationnel (optimisés via pooling) | |||||
MDB | Non | Oui | Message-Driven Bean. Invoqué par des messages asynchrones (JMS) | ||||
Entités | CMP | Champs simples | N/A | Attributs | Accesseurs abstraits | ||
Langage de requête | N/A | Dépendant de l'implémentation | EJB QL | ||||
Relations | N/A | Manuel | Accesseurs abstraits, intégrité | Container-Managed Persistence : la persistance du composant est automatisée par le conteneur. | |||
BMP | BMP | N/A | Oui | Bean-Managed Persistence : le composant gère lui-même sa persistance. | |||
Invocation | Distribuée | Distribuée | Oui | Inter-processus. | |||
Locale | Locale | Non | Oui | Intra-processus (JVM). | |||
Service Web | Service Web | Non | Oui | Invoqué par des messages SOAP. | |||
Timer | Timer | Non | Oui | Invoqué par le temps. | |||
IIOP | IIOP | Non | Oui | Protocole de transport. | |||
Descripteur | Référence EJB | Référence EJB | Non | ejb-ref |
Réference relative à un autre EJB | ||
Réference ressource | Réference ressource | Non | resource-ref |
Réference relative à une ressource (DataSource, ConnectionFactory, etc.) | |||
Référence rôle | Référence rôle | Non | role-ref |
Référence relative à un rôle de sécurité | |||
Environnement de ressource | Environnement de ressource | Non | resource-env-ref |
||||
Type d'identité d'exécution | Type d'identité d'exécution | RUN_AS_MODE |
Non | run-as-mode |
Propagation, spécifique ou système. | ||
Identité d'exécution | Identité d'exécution | RUN_AS_IDENTITY |
Non | run-as-identity |
Identité si type d'identiié spécifique. | ||
Descripteur | Format | Objet sérialisé dans un fichier | XML | ||||
Transaction | Requise | Requise | REQUIRED |
Required |
Utilise si existante, sinon démarre une nouvelle | ||
Nouvelle requise | Nouvelle requise | REQUIRES_NEW |
RequiresNew |
Démarre toujours une nouvelle (suspend celle en cours si besoin) | |||
Supporte | Supporte | SUPPORTS |
Supports |
Ne démarre rien, utilise le contexte courant. | |||
Non supportée | Non supportée | NOT_SUPPORTED |
NotSupported |
Ne peut intégrer ses actions dans une transaction. | |||
Obligatoire | Obligatoire | Non | Mandatory |
Nécessite une transaction. | |||
Jamais | Jamais | Non | Never |
Refuse toute transaction. | |||
Niveau d'isolation | ISOLATION_LEVEL |
Non | Spécifique aux SGBD |
On peut reprocher aux EJB :
champ.collection.champ
dans EJBQL contrairement
au contains()
de JDO)On ne peut pas reprocher aux EJB :
Home | Contact |
---|