Vous êtes sur la page 1sur 23

Java

Srialisation et Java Bean


Plan
Srialisation
Objectifs : pourquoi les JavaBeans ?
Utiliser les JavaBeans
Evnements
Proprits
Introspection
Customization
Manipuler et dployer les JavaBeans

198 Java - Selma BATTI ATTIA 2016/2017


Srialisation
Dfinition :
permet de rendre un objet ou un graphe d'objets de la JVM
persistant pour stockage ou change et vice versa.
mise des objets sous une forme permettant sa reconstitution
l'identique
Utilisation :
stockage sur un disque dur
transmission au travers d'un rseau
recration dans une autre JVM
Format de srialisation indpendant du systme dexploitation
Classes lies des lments du systme ne sont pas srialisables
(Thread, OutputStream et ses sous-classes, Socket, Image, ...)
Introduit dans le JDK 1.1

199 Java - Selma BATTI ATTIA 2016/2017


200 Java - Selma BATTI ATTIA 2016/2017
Srialisation standard
Principe :
Envoi dans un flux les informations sur la classe et l'tat d'un
objet pour permettre de le rcrer ultrieurement.
Ces informations permettent de restaurer l'tat de l'objet mme
dans une classe diffrente (compatible).
Permet la transformation de l'tat d'un objet pour permettre sa
persistance en dehors de la JVM ou de l'changer en utilisant le
rseau.

201 Java - Selma BATTI ATTIA 2016/2017


Srialisation standard
Problmatique :
la gestion des versions des objets
la portabilit du rsultat de la srialisation
les objets srialiss font gnralement rfrence d'autres objets qui
doivent aussi tre srialiss en mme temps pour permettre de
maintenir l'tat de leurs relations.
la gestion des rfrences dans un graphe d'objets srialiss surtout si
un mme objet est rfrenc plusieurs fois dans le graphe
elle est gnralement peut performante car elle utilise l'introspection
certains objets ne peuvent pas tre srialiss notamment ceux
dpendants du systme d'exploitation : threads, fichiers, ...
son utilisation peut engendrer des problmes de scurit :
srialisation de donnes sensibles, dsrialisation d'un objet dont la
source est inconnue, ...

202 Java - Selma BATTI ATTIA 2016/2017


Srialisation binaire
Le format de la srialisation est spcifique la JVM mais
il ne dpend pas du systme d'exploitation.
La srialisation de membres de types primitifs est facile
puisqu'il suffit de prendre leur valeur.
La srialisation de membres de types objet est
complique (rfrence).
Il est donc ncessaire de srialiser rcursivement chaque
objet du graphe.
Une numration est srialise uniquement sous la
forme de son nom.

203 Java - Selma BATTI ATTIA 2016/2017


Mise en ouvre de la srialisation
lments java :
Mot cl transient
Interface Serialisable (marqueur indiquant la possibilit de
srialisation)
Classe ObjectOutputStream permettant la srialisation
Classe ObjectInputStream permettant la dsrialisation
Interface Externalizable (mthodes permettant le paramtrage
de la srialisation et la dsrialisation)

204 Java - Selma BATTI ATTIA 2016/2017


Interface srialisable
Pas de mthode
Marquage de classe srialisable
Tout objet qui doit tre srialis grce aux mcanismes
par dfaut doit implmenter cette interface ou une de
ses classes mres doit limplmenter (sinon exception
java.io.NotSrializableException)

205 Java - Selma BATTI ATTIA 2016/2017


Interdiction de srialisation
Les objets srialisables sont ceux qui implmentent
l'interface Serializable
Interdiction de srialisation (objet ou partie non-
srialisable) : marquage par le mot-cl transient.
Exemple :
Pour viter que des parties sensibles d'un objet serialisable ne
soient srialises, il faut ajouter sur chacun des attributs
protger le mot cl transient
private transient String _secretCode;

206 Java - Selma BATTI ATTIA 2016/2017


Contrle de srialisation
Par dfaut : srialisation d'objets par un code binaire
propritaire
Autres possibilits :
Extension du format initial : readObject() et writeObject()
Rcriture du processus de srialisation (Interface
Externisable).

207 Java - Selma BATTI ATTIA 2016/2017


Srialisation
Les classes qui ncessitent un traitement spcial au
cours des processus de srialisation et de dsrialisation
doivent mettre en uvre des mthodes spciales avec les
signatures suivantes :
private void writeObject(java.io.ObjectOutputStream out)
throws IOException

private void readObject(java.io.ObjectInputStream in) throws


IOException, ClassNotFoundException;

private void readObjectNoData() throws


ObjectStreamException;

208 Java - Selma BATTI ATTIA 2016/2017


Remarques
Ces mthodes sont appeles par : les mthodes
writeObject() , readObject() des objets
ObjectOutputStream et ObjectInputStream.

209 Java - Selma BATTI ATTIA 2016/2017


Externalisation
Les mthodes writeExternal() et readExternal() de
l'interface Externalizable sont implmentes par une
classe pour lui donner le contrle sur le format et le
contenu du flux d'un objet et de ses supertypes.

public interface Externalizable {


private void readObject( ObjectInputStream stream ) throws
IOException, ClassNotFoundException;
private void writeObject( ObjectOutputStream stream )
throws IOException, ClassNotFoundException;
}

210 Java - Selma BATTI ATTIA 2016/2017


La persistance par mapping objet/BD relationelle
On stocke l'tat d'un objet dans une base de donne.
Ex : la classe Personne possde deux attributs nom et
prenom, on associe cette classe une table qui possde
deux colonnes : nom et prenom.
On dcompose chaque objet en une suite de variables
dont on stockera la valeur dans une ou plusieurs tables.
Permet des requtes complexes.

211 Java - Selma BATTI ATTIA 2016/2017


La persistance par mapping objet/BD relationelle

212 Java - Selma BATTI ATTIA 2016/2017


La persistance par mapping objet/BD relationelle
Pas si simple
Dtermination de l'tat d'un objet parfois difficile, tout un
art
Il existe des produits pour nous y aider EclipseLink,
TopLink (WebGain), Hibernate (JBoss),
Aujourd'hui la plupart des gens font a la main avec JDBC ou
SQL/J.
Mais SQL dur tester/debugger source de

213 Java - Selma BATTI ATTIA 2016/2017


La persistance l'aide d'une BD Objet
Les Base de donnes objet stockent directement des
objets.
Plus de mapping !
Object Query Language (OQL) permet de manipuler les
objets
Relations entre les objets videntes (plus de join)
Bonnes performances mais mauvaise scalabilit.

214 Java - Selma BATTI ATTIA 2016/2017


Le modle de persistence JPA 2
JPA 2 propose un modle standard de persistance laide des
Entity beans
Les outils qui assureront la persistance (Toplink, Hibernate,
EclipseLink, etc.) sont intgrs au serveur dapplication et
devront tre compatibles avec la norme JPA 2.
Java EE 6 repose tous les niveaux sur de linjection de
code via des annotations de code
Souvent, on ne fera pas de new , les variables seront
cres/initialises par injection de code.

215 Java - Selma BATTI ATTIA 2016/2017


Qu'est-ce qu'un Entity Bean
Ce sont des objets qui savent se mapper dans une base de
donne.
Ils utilisent un mcanisme de persistance (parmi ceux
prsents)
Ils servent reprsenter sous forme d'objets des
donnes situes dans une base de donne
Le plus souvent un objet = une ou plusieurs ligne(s) dans une
ou plusieurs table(s)

216 Java - Selma BATTI ATTIA 2016/2017


Qu'est-ce qu'un Entity Bean
Exemples
Compte bancaire (No, solde),
Employ, service, entreprises, livre, produit,
Cours, lve, examen, note,
Mais au fait, pourquoi nous embter passer par des objets ?
Plus facile manipuler par programme,
Vue plus compacte, on regroupe les donnes dans un objet.
On peut associer des mthodes simples pour manipuler ces donnes
On va gagner la couche middleware !

217 Java - Selma BATTI ATTIA 2016/2017


Exemple avec un compte bancaire
On lit les informations d'un compte bancaire en
mmoire, dans une instance d'un entity bean,
On manipule ces donnes, on les modifie en changeant
les valeurs des attributs d'instance,
Les donnes seront mises jour dans la base de
donnes automatiquement !
Instance d'un entity bean = une vue en mmoire des
donnes physiques

218 Java - Selma BATTI ATTIA 2016/2017


Fichiers composant un entity bean
Schma classique :
La classe du bean se mappe dans une base de donnes.
Cest une classe java normale (POJO) avec des attributs, des accesseurs, des
modifieurs, etc.
On utilisera les mta-donnes ou attributs de code pour indiquer le
mapping, la cl primaire, etc.
Cl primaire = un objet srializable, unique pour chaque instance.
C'est la cl primaire au sens SQL.
Note : on peut aussi utiliser un descripteur XML la place des
annotations de code
On manipulera les donnes de la BD laide des EntityBeans + laide dun
PERSISTENT MANAGER.
Le PM soccupera de tous les accs disque, du cache, etc.
Lui seul contrle quand et comment on va accder la BD, cest
lui qui gnre le SQL, etc.

219 Java - Selma BATTI ATTIA 2016/2017