
F.2. GESTION D’OBJETS PERSISTANTS AVEC JDO : LES PRINCIPES 5
– Mod´elisation objet sans contraintes : supporte de l’h´eritage, des collections, des
interfaces, etc.
– Persistance transparente : permet d’avoir des objets m´etiers compl`etement
ind´ependants de la structure de stockage (par exemple, pas de d´ependance vers
les APIs JDBC).
– R´eduction des temps de d´eveloppement : en effet tout le code d´edi´e `a la gestion de
la structure de stockage, qui repr´esente un effort non n´egligeable (´evalu´ee `a 40% de
l’effort de d´eveloppement par certaines ´etudes), est prise en charge par JDO.
– Persistance universelle : JDBC est limit´ee au SGBDR, JDO est capable, au
d´eploiement, d’assurer la persistance aussi bien dans un SGBDR que dans un
SGBDO, un syst`eme de type CICS, des fichiers plats ou au format XML.
– JDO est disponible sur toutes versions de Java : J2SE, J2ME et J2EE, en architecture
client/serveur ou multi ´etages.
Comme le montre la figure F.2, une solution JDO est un canevas logiciel qui prend en
charge la persistance des objets applicatifs n´ecessitant cette propri´et´e.
F.2.1 Classes et objets persistants
Les objets persistants sont des objets Java comme les autres. Simplement, le program-
meur doit indiquer les classes de son application qui peuvent produire des objets persis-
tants : nous les appelons classes persistantes. En effet, le principe de JDO est d’ajouter
le code n´ecessaire au support de la persistance dans la classe en question (cette phase
est aussi appel´ee phase d’enhancement en anglais). Pratiquement toutes les classes java
peuvent ˆetre trait´ees afin que leurs instances puissent persister.
L’unit´e de persistance est donc l’objet d’une classe persistante. N´eanmoins, la persis-
tance d’un tel objet n’est pas li´e `a sa classe. C’est le programmeur qui d´ecide du moment o`u
un objet devient persistant. Il le fait soit explicitement grˆace `a la fonction makePersistent
de l’API JDO, soit implicitement par rattachement `a un objet d´ej`a persistant.
Une instance persistante est toujours identifi´ee de mani`ere unique par un identifiant
permettant de d´esigner l’objet dans la structure de stockage. Cet identifiant permet donc
de faire le lien entre l’objet Java pr´esent en m´emoire sa projection dans la structure de
stockage sous-jacente. L’identifiant peut ˆetre bas´e sur des champs de la classe ou calcul´e
par ailleurs (par la solution JDO, par le support de stockage, etc).
Rendre un objet persistant signifie que l’ensemble des variables ou des champs d´esign´es
comme persistants, composant ainsi l’´etat de cet objet persistant, est enregistr´e sur le
support de stockage. D`es lors qu’une de ces variables est modifi´ee en m´emoire, cette mo-
dification est propag´ee vers le support de stockage. L’instant de synchronisation d´epend
du contexte d’ex´ecution : par exemple, les modifications effectu´ees dans un contexte tran-
sactionnel sont g´en´eralement propag´ees `a la validation de la transaction.
JDO d´efinit les types de champs qui peuvent ˆetre persistants. Nous pouvons les re-
grouper suivant diff´erentes cat´egories :
– Types primitifs : il s’agit de boolean,byte,char,short,int,long,float,double,byte[]
et char[].
– Types ”objet” simples : il s’agit des classes Java java.lang.Boolean,java.lang.Byte,
java.lang.Character,java.lang.Short,java.lang.Integer,java.lang.Long,java.lang.Float,
java.lang.Double,java.lang.String,java.lang.Number,java.math.BigDecimal,