This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:epims4_0m2:developer:epcorearchitecture [2008/07/23 11:43] dupierris |
wiki:epims4_0m2:developer:epcorearchitecture [2008/10/02 10:21] (current) |
||
---|---|---|---|
Line 23: | Line 23: | ||
**REMARQUE** : ServiceLocator recherche dans l’ApplicationContext qui lui est spécifié les beans correspondants à l’implémentation de IXXXService (définit dans spring-*.xml). | **REMARQUE** : ServiceLocator recherche dans l’ApplicationContext qui lui est spécifié les beans correspondants à l’implémentation de IXXXService (définit dans spring-*.xml). | ||
+ | |||
Line 59: | Line 60: | ||
== Remarque == | == Remarque == | ||
- | FIXME Cette partie est en cours de mise en place et est donc susceptible d'évoluer en permanence ! | + | L'architecture du projet eP-Core suite à l'utilisation de Hibernate Tools n'est pas celle de la version distribuée (eP-Core 3.4.6) dans ePims 4.0M2 |
+ | mais elle est intégrée à partir de la version 3.5.0 (seule cette intégration différencie les versions) | ||
Actuellement pour la génération automatique nous utilisons Hibernate Tools comme plugin Eclipse. | Actuellement pour la génération automatique nous utilisons Hibernate Tools comme plugin Eclipse. | ||
- | Les règles / spécificités que l'on souhaite conserver : | + | Les règles / spécificités que l'on a souhaité conserver : |
- | *Absolument | + | * Absolument |
* séparation des POJOs et DAOs dans des packages différents : **OK Avec Hibernate Tools !** | * séparation des POJOs et DAOs dans des packages différents : **OK Avec Hibernate Tools !** | ||
* séparation interface / implémentation pour les DAOs : **OK Avec Hibernate Tools !** | * séparation interface / implémentation pour les DAOs : **OK Avec Hibernate Tools !** | ||
- | * Éventuellement | + | |
- | * deux niveaux de hiérarchie pour les POJOs : **Semble problématique ! A Voir !! ** | + | La séparation en deux niveaux de hiérarchie pour les POJOs n'est pas possible (a moindre coût ... après une rapide évaluation). |
De plus les modifications entrainées par le changement de //générateur// doivent impacter au minimum les modules utilisant eP-Core. | De plus les modifications entrainées par le changement de //générateur// doivent impacter au minimum les modules utilisant eP-Core. | ||
Line 141: | Line 143: | ||
== Génération == | == Génération == | ||
**__Attention:__** \\ | **__Attention:__** \\ | ||
- | La génération est en cour de mise au point !! Hibernate Tools ne permettant pas de générer pour chaque classe du domaine, une classe abstraite. Deux solutions : | + | La génération est en cour de mise au point !! |
- | * Revoir la hiérarchie des classes du domaines pour adopter celle générée par Hibernate Tools : Le problème réside dans la conservation des modifications manuelles : Voir avec les possibilités du tag <meta> class-code... **(cf ci-dessous)** | + | |
- | * Créer un ReverseEngineeringStrategy propriétaire pour générer ces 2 niveaux. **(Abandonné pour le moment)** | + | Hibernate Tools ne permet pas de générer pour chaque classe du domaine, une classe abstraite. Pour le moment, il a été choisi de : |
+ | * Revoir la hiérarchie des classes du domaines pour adopter celle générée par Hibernate Tools. Pour le code propriétaire (non généré) il est possible de le faire apparaitre au niveau des hbm.xml **(cf ci-dessous)** | ||
+ | \\ | ||
+ | Dans le cas où cette solution n'est plus satisfaisante, une autre solution serait de créer un ReverseEngineeringStrategy propriétaire pour générer les 2 niveaux qui existaient. | ||
__1. Le "Custom code"__ | __1. Le "Custom code"__ | ||
- | Le //Custom code// actuellement définis et son éventuelle intégartion dans HibernateTools: \\ | + | Intégration du //Custom code// définis dans les versions précédentes avec HibernateTools: \\ |
^ Custom Code ^ Intégration dans HibernateTools ^ | ^ Custom Code ^ Intégration dans HibernateTools ^ | ||
Line 165: | Line 170: | ||
__2. Initialisation de l'ID__ \\ | __2. Initialisation de l'ID__ \\ | ||
- | Ajout de l'appel suivant dans les constructeurs pour initialisation de l'ID à la valeur spécifiée comme unsaved-value dans le hbm.xml | + | Jusque là, l'appel suivant était ajouté dans les constructeurs pour initialisation de l'ID à la valeur spécifiée comme unsaved-value dans le hbm.xml |
<code> | <code> | ||
super.setId(-1); //Set id to -1 => unsaved-value | super.setId(-1); //Set id to -1 => unsaved-value | ||
Line 200: | Line 205: | ||
* VirtualWell | * VirtualWell | ||
- | Modifie la définition de l'id dans les hbm.xml de | + | A partir de la version 3.5.0 d'eP-Core, la définition de l'id dans les hbm.xml a été changé de |
<code> | <code> | ||
<id ... type="int" unsaved-value="-1" | <id ... type="int" unsaved-value="-1" | ||
Line 208: | Line 213: | ||
<id ... type="Integer" unsaved-value="null" | <id ... type="Integer" unsaved-value="null" | ||
</code> | </code> | ||
+ | |||
+ | Par conséquent, il n'y a pas de code spécifique à ajouter dans les constructeurs. | ||
__3. Gestion des composite-id__ \\ | __3. Gestion des composite-id__ \\ | ||
Line 214: | Line 221: | ||
=> Hibernate Tools ne défini pas de classes spécifique pour les composite ID... seulement tous les paramètres appartenant à la clé diovent être spécifiés ! | => Hibernate Tools ne défini pas de classes spécifique pour les composite ID... seulement tous les paramètres appartenant à la clé diovent être spécifiés ! | ||
- | == Ancienne Génération == | + | __4. Génération avec Hibernate Tools__ |
- | Pour chaque classe du domaine, une classe abstraite est créée. | + | |
- | Seules les classes mères abstraites “AbstractXXX” sont systématiquement générées. :!: A verifier avec Eclipse : Les sous classes ne sont générées que la première fois ce qui permet de les personnaliser sans tout perdre à chaque génération. | + | Les POJOs sont générés dans le répertoire source “src/main” et le package cea.edyp.epims.domain |
+ | Pour cela, depuis Eclipse, ouvrir la perspective Hibernate et accéder à la boite de dialogue ''Hibernate Code Generation'', (en passant par le menu Run > Hibernate Code Generation > Open Hibernate Code Generation Dialog). | ||
+ | |||
+ | Créer un ''Hibernate Code Generation'' (<HCG>) ou ''launch configuration'' en spécifiant | ||
+ | * Dans l'onglet **Main** | ||
+ | * un nom, | ||
+ | * **Console configuration** : le nom de la configuration hibernate créé (voir [[#preparation|ci-dessus]]), <ePCore_config>. | ||
+ | * **Output directory** : \eP-Core\src\main | ||
+ | * Dans l'onglet **Exporters** | ||
+ | * Sélectionner l'option "Use Java 5 Syntax" (afin d'utiliser les ''Generic'') | ||
+ | * Sélectionner ''Domain Code (Java)'' et le configurer avec la propriété ''Template directory'' = ''\eP-Core\resources\hibernate\templates'' | ||
- | {{ epc_pojo_diagram.png?800 }} | + | Exécuter la génération en sélectionnant Run ... |
- | ** Figure: Diagramme de classes exemple pour les objets du domaine ** | + | |