Castor-JDO

Retour  |  Home  |  Contact

Besoin

Fournir une solution de persistance pour les objets Java.

Conception

Contrairement à ce que semble indiquer son nom, Castor-JDO est un framework de persistance qui ne respecte pas la norme JDO. Il utilise la réflexivité de Java pour accéder (en lecture ou écriture) à l'état des objets métiers persistants. Ceux-ci doivent donc fournir des accesseurs de type JavaBeans standard permettant à Castor-JDO d'accéder à leur état.

Castor permet de configurer :

Implémentation

L'API de Castor est relativement simple (1 classe, 7 interfaces) dans le package org.exolab.castor.

Les classes métier doivent implémenter des accesseurs de type JavaBeans standard (getXxx()/setXxx()) permettant à Castor-JDO d'accéder à leur état.

La récupération d'objet persistant peut se faire par Database::load (telleClasse, clé) ou via une requête Castor OQL.

La configuration se fait via 2 fichiers XML pour :

Exemples

Un exemple de code Castor-JDO est :

Database myDatabase = jdo.getDatabase();
myDatabase.begin();
Adresse adresse = new Adresse();
adresse.setLibelle (“34 avenue des fleurs en pot 06000 NICE“);
adresse.setDepartement (Departement);
myDatabase.load (Departement.class, 6);
myDatabase.create (adresse);
myDatabase.commit();
myDatabase.close();

Un exemple de requête Castor OQL est :

Query myQuery = myDatabase.getOQLQuery ("SELECT a FROM Adresse WHERE a.id = $1");
myQuery.bind (new Long (idAdresse));
QueryResults myQueryResults = myQuery.execute();
Adresse adresse = (Adresse) myQueryResults.next();

Un exemple de descripteur Castor-JDO est :

<class access="shared" name="Adresse" identity="id" key-generator="IDENTITY">

  <description>Adresse</description>

  <map-to table="ADRESSE" xml="adresse"/>

  <field name="id" type="long" dirty="ignore" required="true">
    <sql name="ID_ADRESSE" type="numeric"/>
    <xml node="attribute"/>
  </field>

  <field name="adresse" type="java.lang.String" dirty="ignore" required="true" >
    <sql name="ADRESSE" type="char"/>
    <xml node="element"/>
  </field>

  <!-- References – Clés étrangères -->
  <field name="departement" type="Departement" dirty="ignore" required="false">
    <sql name="ID_DEPARTEMENT_ADRESSE"/>
    <xml node="attribute" reference="true"/>
  </field>

  <!-- many-references -->
  <field name="dsvsAdresse" type="Personne" collection="vector">
    <sql many-key="ID_ADRESSE_PERSONNE"/>
    <xml node="element"/>
  </field>
</class>

Notes

Persistance Solution Castor-JDO
Version 0.9
Transactions Explicites JTA
Implicites Non
Pessimistes Exclusive
Optimistes Shared
Distribuées JTS
Mémoire  
Cycle de vie Callbacks  
Requêtes Langage objet Castor OQL
Projections, vues  
Fonctions aggrégats  
SQL possible Database:: getOQLQuery ("CALL SQL ...")
Accès au code Non
Performance Cache Oui
Détection des modifications  
Transparence Accès aux informations Réflexivité Java
Relations (1-n, n-m) Oui
Héritage Oui
Collections Java  
Persistance de proche en proche  
Non intrusion dans le code des objets métier Méthodes d'accès aux données obligatoires
Accès au graphe d'objets dépendants  
Accès au modèle métier Oui
Mapping Multi-tables Oui
Top-down  
Bottom-up  
Granularité fine  
Stockage Paradigme libre SGBDR, XML, LDAP
Support d'une base existante Oui
Portabilité API standard org.exolab.castor
J2ME  
J2SE Oui
J2EE  
Implémentations  
Licence   Style BSD

Limitations

Retour  |  Home  |  Contact