1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

EJB 2 - Les Entreprise Java Bean (JavaBeans)

3.4.Qu’est ce qu’un Entity Bean

Un entity bean représente un objet métier dans un mécanisme de stockage persistant. Voici quelques exemples d’objets métiers : des clients, des ordres d’achats, des produits. Dans le serveur applicatif, le mécanisme de stockage persistant est une base de données relationnelle. Typiquement, chaque entity bean correspond à une table dans une base de données relationnelle, et chaque exemple de bean correspond à une entrée dans cette table.

3.4.1.Différences entre Entity Beans et Session Beans

Les entity beans diffèrent des session beans de plusieurs manières. Les entity beans sont persistants, permettent des accès partagés, possèdent des clés primaires et peuvent participer aux relations avec d’autres entity beans.

Persistance

Comme l'état d'un entity bean est sauvegardé sur un support de stockage, il est persistant. La persistance signifie que l'état de l’entity bean existe au delà de la vie de l'application ou du processus du serveur applicatif. Les données dans une base de données sont persistantes du fait qu'elles existent toujours, même après l’arrêt du serveur de base de données ou des applications qui les utilisent.

Il existe deux types de persistance pour les entity bean : gérée par le bean (bean-managed) et gérée par le conteneur (container-managed). Pour la persistance bean-manged (BMP), le code de l’entity bean doit contenir les appels qui accèdent à la base de données. Si votre bean a une persistance container-managed (CMP), le conteneur d'EJB génère automatiquement les accès nécessaires à la base de données. Le code que vous écrivez pour l'entity bean n'inclut pas ces appels.

Accès partagé

Les entity beans peuvent être partagés par de multiples clients. Comme les clients pourraient vouloir changer les mêmes données, il est important que les entity beans travaillent à l’intérieur de transactions. Typiquement, le conteneur d’EJB fournit la gestion de transaction. Dans ce cas, vous spécifiez les attributs de la transaction dans le descripteur de déploiement du bean. Vous n’avez pas besoin de coder les limites de la transaction dans le bean ; le conteneur définit les limites pour vous.

Clé primaire

Chaque entity bean possède un identifiant unique. Un entity bean client, par exemple, pourrait être identifié par un numéro de client. L’identifiant unique, ou clé primaire, permet au client de localiser un entity bean particulier.

Relations

Comme une table dans une base de données relationnelle, un entity bean peut être lié à d’autres entity beans. Par exemple, dans une application de gestion d’établissement scolaire, StudentBean et CourseBean devraient être reliés car les étudiants suivent des cours.

Vous implémentez les relations différemment suivant si la persistance de l’entity bean est gérée par le bean ou par le conteneur. Avec la bean-manged persistence (BMP), le code que vous écrivez implémente les relations. Mais avec la container-managed persistence (CMP), le conteneur d’EJB prend en charge les relations pour vous. Pour cette raison, les relations entre des entity beans dont la persistance est gérée par le conteneur sont souvent appelées container-managed relationships (CMR : relations gérées par le conteneur).

3.4.2.Container-Managed Persistence

Le terme container-managed persistence (CMP) signifie que le conteneur d’EJB s’occupe de tous les accès à la base de données, requis par l’entity bean. Le code du bean ne contient aucun accès à la base (SQL). Le résultat est que le code du bean n’est pas spécifique à une base de données. Du fait de cette flexibilité, même si vous redéployer le même entity bean sur un autre serveur J2EE utilisant une base de données différente, vous n’avez pas à modifier ou recompiler le code du bean. En bref, vos entity beans sont plus portables si vous utilisez la persistance container-managed que s'ils utilisaient la persistance bean-managed.

Pour générer les accès à la base, le conteneur nécessite des informations que vous fournissez dans le schéma abstrait de l’entity bean.

Schéma abstrait

Faisant partie du descripteur de déploiement de l’entity bean, l’abstract schema définit les champs persistants et les relations du bean. Le terme abstrait distingue ce schéma du schéma physique de la base de données. Dans une base de données relationnelle, le schéma physique correspond à la structure des tables et colonnes.
Vous spécifiez le nom d’un schéma abstrait dans le descripteur de déploiement. Ce nom est référencé par les requêtes écrites dans l’Enterprise JavaBeans Query Language (EJB QL). Pour un entity bean dont la persistance est gérée par le conteneur, vous devez définir une requête EJB QL pour chaque méthode de recherche (excepté findByPrimaryKey). La requête EJB QL détermine la requête qui est exécutée par le conteneur d’EJB quand la méthode de recherche est appelée.

Vous trouverez cela peut-être utile de faire un croquis du schéma abstrait avant d’écrire du code. Le schéma 1-1 représente un schéma abstrait simple qui décrit les relations entre trois entity beans. Ces relations sont traitées un peu plus loin.

Schéma 1-1 : Une vue haut niveau d’un schéma abstrait

Champs Persistants

Les champs persistants d’un entity bean sont sauvegardés dans l’espace de stockage. Ces champs constituent l'état du bean. Au moment de l'exécution, le conteneur d’EJB synchronise automatiquement cet état avec la base de données. Lors du déploiement, le conteneur mappe typiquement l’entity bean à une table de la base et mappe les champs persistants aux colonnes de la table.

Un entity bean ClientEJB, par exemple, pourrait avoir des champs persistants comme prenom, nom, tel et email. Dans le cas de la persistance container-managed persistence (CMP) ces champs sont virtuels. Vous les déclarez dans le schéma abstrait, mais vous ne les codez pas comme des variables d’instances dans la classe de l’entity bean. Au lieu de cela, les champs persistants sont identifiés dans le code par des méthodes d’accès (getters et setters).

Champs Relationnel

Un champ relationnel est comme une clé étrangère dans une table de base de données : il identifie une relation à un bean. Comme un champ persistant, un champ relationnel est virtuel et est défini dans la classe du bean avec des méthodes d’accès. Mais contrairement à un champ persistant, un champ relationnel ne représente pas l’état du bean. Les champs relationnels seront traités plus en détail au point suivant.

Type des relations gérées par le conteneur (CMR)

Il y a quatre types de relation :
  • One-to-one (un-un: Chaque instance d’entity bean est reliée à un seule instance d’un autre entity bean.
  • One-to-many (un à n: Une instance d’entity bean peut-être reliée à plusieurs instances de l’autre entity bean.
  • Many-to-one (n à un: De multiples instances d’un entity bean peuvent être reliées à une unique instance d’un autre bean. Cette relation est l’opposée de la relation précédente.
  • Many-to-many (n à m: Les instances de l’entity bean peuvent être reliées à de multiples instances de l’autre bean.

Direction des relations gérées par le conteneur

La direction d'une relation peut être bidirectionnelle ou unidirectionnelle. Dans une relation bidirectionnelle, chaque entity bean a un champ relationnel qui se rapporte à l'autre bean. À travers le champ relationnel, le code d'un entity bean peut accéder à son objet relatif. Si un entity bean a un champ relationnel, alors on dit souvent qu'il "connaît" son objet relatif. Par exemple, si OrderEJB sait quelles instances de LineItemEJB il possède et si LineItemEJB sait à quel OrderEJB il appartient, alors ils ont un rapport bidirectionnel.

Dans une relation unidirectionnelle, seul un entity bean possède un champ relationnel qui référence un autre bean. Par exemple, LineItemEJB aurait un champ relationnel qui identifie ProductEJB, mais ProductEJB n’aurait pas de champ relationnel pour LineItemEJB. En d’autres termes, LineItemEJB connaît ProductEJB, mais ProductEJB ne sait pas à quelles instances de LineItemEJB il réfère.

Les requêtes EJB QL naviguent souvent à travers des relations. La direction d'une relation détermine si une requête peut aller d'un bean vers un autre. Par exemple, une requête peut aller de LineItemEJB à ProductEJB, mais ne peut pas aller dans la direction opposée. Pour OrderEJB et LineItemEJB, une requête pourrait aller dans les deux directions, puisque ces deux beans ont une relation bidirectionnelle.

3.4.3.Quand utiliser les Entity Beans

Vous devriez probablement utiliser un entity bean pour les conditions suivantes :
  • Le bean représente une entité métier, pas une procédure. Par exemple, CreditCardEJB serait un entity bean, mais CreditCardVerifierEJB serait un session bean.
  • L’état du bean doit être persistant. Si l’instance du bean est détruite ou si le serveur J2EE est éteint, l’état du bean existe toujours dans un stockage persistant (une base de données).


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Essentiels de cours Java
JavaEJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)
Cet essentiel est la suite de « Entreprise JavaBean 2.1 ». Cependant, nous allons étudier les nouvelles spécifications 3.0 qui simplifient énormément le développement par rapport aux EJB 2.6/20/06
JavaSWT - Créer des interfaces graphiques performantes
SWT (Standard Widget Toolkit) est une librairie graphique qui vous permet de réaliser des applications graphiques Java beaucoup plus avancées et surtout plus rapide à l’exécution.1/29/06
JavaStruts - Un framework MVC pour vos applications J2EE
Struts est un framework open-source qui vous permet de gagner du temps, mais qui permet aussi de voir des applications complexes comme une suite de composants de base : Vues, Actions, Modèles. Vous gagnez ainsi en évolutivité et en lisibilité du code.1/13/06
JavaHibernate - Persistance objet - relationnel
Cet essentiel explique comment utiliser Hibernate afin de gérer la persistance objet relationnel au sein de vos applications Java.12/14/05
JavaIntroduction J2EE - Applications d'entreprise
Cours d'introduction aux diverses technologies et outils que l'on peut rencontrer dans le monde du Java orienté entreprise J2EE12/14/05
JavaEJB 2 - Les Entreprise Java Bean (JavaBeans)
L'objectif avec EJB2 (Entreprise JavaBeans) est d'introduire les concepts de l’Ingénierie Logicielle Basée sur les Composants.12/14/05
JavaDesign Patern - Améliorez l'architecture de vos programmes
Afin de répondre a des situation récurrentes en programmation, les "design partern" apportent une solution type à beaucoup de contraintes liées à la programmation objet.12/14/05
JavaArchitecture J2EE - Comment organiser son application J2EE
Ce cours explique comment créer un code modulable, lisible et évolutif afin d'assurer la pérénité de son application.12/14/05
JavaLes web-services - Publication de services
Le développement tend vers les technologies du Web. Il est difficile de faire la distinction entre les différents logiciels qui sont de plus en plus intégrés au Web. Les Web Services rentrent dans l’optique de différencier bien précisément les couches.12/14/05
JavaAnt - L'automatisation des tâches du programmeur
Ecrire des scripts afin d'exécuter les tâches récurrentes10/31/05
JavaIntroduction au langage Java - Présentation & historique
Présentation des origines du langage, ainsi que se buts premiers8/11/05
JavaLa Syntaxe Java - Bases & nomenclatures
Bases de la syntaxe du langage Java8/11/05
JavaLes Classes - Concepts & héritage
Base du développement objet en Java grâce aux classes8/11/05
JavaLes Exceptions - Gestion d'erreurs
Gérer les erreurs liés à la programmation8/11/05

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée