User Tools

Site Tools


wiki:epims4_0m2:developer:epcorearchitecture

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
wiki:epims4_0m2:developer:epcorearchitecture [2008/07/22 14:26]
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 54: Line 58:
 \\ \\
 ---- ----
-\\ 
 == 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 72: Line 76:
 \\ \\
 == Préparation == == Préparation ==
-Pour les différentes générations automatiques décrites ici, il est nécessaire de définir une ''​configuration hibernate''​. ​+Pour les différentes générations automatiques décrites ici, il est nécessaire de définir une ''​configuration hibernate''​. ​\\
 **Remarque** le fichier \eP-Core\resources\hibernate\hibernate.cfg.xml utilisé par Hibernate Tools ne défini pas de connexion à la BD puisque les fichiers hbm.xml sont créés manuellement et les objets générés le sont à partir de ces fichiers hbm. Il n'y a donc pas de connexion à la BD pour la génération automatique. **Remarque** le fichier \eP-Core\resources\hibernate\hibernate.cfg.xml utilisé par Hibernate Tools ne défini pas de connexion à la BD puisque les fichiers hbm.xml sont créés manuellement et les objets générés le sont à partir de ces fichiers hbm. Il n'y a donc pas de connexion à la BD pour la génération automatique.
  
 +\\ 
 +1.\\
 Dans la perspective Hibernate et la vue ''​Hibernate Configurations'',​ cliquer droit et choisir "add Configuration"​. ​ Dans la perspective Hibernate et la vue ''​Hibernate Configurations'',​ cliquer droit et choisir "add Configuration"​. ​
 Choisir un nom, <​ePCore_config>,​ et saisir les informations suivantes: ​ Choisir un nom, <​ePCore_config>,​ et saisir les informations suivantes: ​
Line 85: Line 90:
     * Entrer tous les fichiers hbm.xml qui sont définis dans /​eP-Core/​src/​mapping/​cea/​edyp/​epims/​domain/​mapping     * Entrer tous les fichiers hbm.xml qui sont définis dans /​eP-Core/​src/​mapping/​cea/​edyp/​epims/​domain/​mapping
  
 +\\
 +2.\\
 De la même manière, il faut définir un ''​Hibernate Code Generation''​ (<​HCG>​) ou ''​launch configuration''​. Un même HCG peut être utiliser pour générer en une seule fois tous les objets et documents. Mais ceci peut poser un problème puisque tous les objets ne doivent pas être générés à chaque fois !! A chacun de gérer sa/ses HCG et à être attentif aux objets générés lors de l'​exécution de celui-ci !  De la même manière, il faut définir un ''​Hibernate Code Generation''​ (<​HCG>​) ou ''​launch configuration''​. Un même HCG peut être utiliser pour générer en une seule fois tous les objets et documents. Mais ceci peut poser un problème puisque tous les objets ne doivent pas être générés à chaque fois !! A chacun de gérer sa/ses HCG et à être attentif aux objets générés lors de l'​exécution de celui-ci ! 
-Nous décrirons dans la doc trois configurations différentes selon que l'on souhaite générer la [[.:​epcoreintro#​generation_de_la_doc_du_modele|documentation du modèle]], les [[objets du domaines]] ou les [[#​Génération|DAO]].+Nous décrirons dans la doc trois configurations différentes selon que l'on souhaite générer la [[.:​epcoreintro#​generation_de_la_doc_du_modele|documentation du modèle]], les [[#​Génération1|objets du domaines]] ou les [[#​Génération|DAO]].
  
  
Line 134: Line 141:
 Les Objets du domaines sont générés depuis les fichiers *.hbm.xml, dans le répertoire source src/​main. ​ Les Objets du domaines sont générés depuis les fichiers *.hbm.xml, dans le répertoire source src/​main. ​
  
 +== Génération ==
 **__Attention:​__** \\ **__Attention:​__** \\
-La génération ​automatique n'est actuellement pas en place. ​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... + 
-  ​* Créer ​un ReverseEngineeringStrategy propriétaire ​pour générer ces 2 niveaux.+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"​__ 
 + 
 +Intégration du //Custom code// définis ​dans les versions précédentes avec HibernateTools:​ \\ 
 + 
 +^ Custom Code  ^ Intégration dans HibernateTools ​ ^ 
 +| Méthode equals ​ | Utilisation du tag <meta attribute="​use-in-equals">​ pour les cas simples et de <meta attribute="​class-code"​ pour une définition plus complète ​ | 
 +| Méthode hashcode | Possibilité d'​utiliser <meta attribute="​class-code"​ si nécessaire ​ | 
 +| Méthode toString ​ | Possibilité d'​utiliser <meta attribute="​use-in-tostring">​ pour les cas simples et de <meta attribute="​class-code"​ pour une définition plus complète ​ | 
 +| AcquisitionResult . Méthode Boolean getArchived() retourne not null object ​ | Impossible de redéfinir cette méthode. La colonne ayant une valeur par défaut (false), utilisation de la méthode générée. **A l'​utilisateur de faire les vérifications** ! Peut aussi défini getNoneNullArchived() ?!  | 
 +|Acquisition Définition ​des ''​Nature''​s autorisées. |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire. ​:!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|Actor Définition des ''​Role''​s autorisées. :!: devrait être dans ActorRole ?! |Utilisation ​du tag <​meta ​attribute="​class-code"​pour générée le code supplémentaire. :!: Déplacé effectivement dans ActorRole (qui n'​existait pas au début). Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|AttachedFile Définition des ''​Type''​s autorisées.. ​ |Utilisation du tag <meta attribute="​class-code"> pour générée le code supplémentaire:!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|Program : Méthodes isClosed et CloseProgram ​ |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire:!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|Project : Méthodes isClosed et CloseProject ​ |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire:!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|Sample Définition des ''​Status''​ autorisées.. ​ |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire. :!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|Study Définition des ''​Status''​ autorisées.. ​ |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire. :!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|VirtualPlate Méthodes addWell et isFull ​ |Utilisation du tag <meta attribute="​class-code">​ pour générée le code supplémentaire. :!: Utilisation des FQCN car pas d'​ajout d'​import ​ | 
 +|VirtualWell surcharge des constructeurs ayant un VirtualPlate comme paramètre ​pour appeler VirtualPlate.addWell |Impossible de surcharger. :!: Déplace la fonctionnalité dans le service IRobotPlanningService ​ |
  
-Le //Custom code// actuellement définis :  +__2Initialisation de l'ID__ \\ 
-  * A voir : les méthodes equals / hashcode / toString ​ : cf meta tag use-in-equals et use-in-tostring +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
-  * Acquisition : Définition des ''​Nature''​s autorisées. +
-  * AcquisitionResult : Méthode Boolean getArchived()  +
-  * Actor : Définition des ''​Role''​s autorisées. :!: devrait être dans ActorRole ?! +
-  * AttachedFile : Définition des ''​Type''​s autorisées. +
-  * Program : Méthodes isClosed et CloseProgram +
-  * Project : Méthodes isClosed et CloseProject +
-  * Sample : Définition des ''​Status''​ autorisées. +
-  * Study : Définition des ''​Status''​ autorisées + Méthodes isClosed et CloseStudy et setSamples +
-  * VirtualPlate : Méthodes addWell et isFull +
-   +
-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+
 <​code>​ <​code>​
 super.setId(-1); ​    //Set id to -1 => unsaved-value super.setId(-1); ​    //Set id to -1 => unsaved-value
Line 186: Line 205:
   * VirtualWell   * VirtualWell
  
 +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>​
 +<id ... type="​int"​ unsaved-value="​-1"​
 +</​code>​
 +a
 +<​code>​
 +<id ... type="​Integer"​ unsaved-value="​null"​
 +</​code>​
 +
 +Par conséquent,​ il n'y a pas de code spécifique à ajouter dans les constructeurs.
 +
 +__3. Gestion des composite-id__ \\
 Voir comment sont gérés les composite-id dans hibernate tools: ActorRoleId,​ TreatmentsApplicationId Voir comment sont gérés les composite-id dans hibernate tools: ActorRoleId,​ TreatmentsApplicationId
  
 +=> 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. ​+
  
-{{ epc_pojo_diagram.png?800 }} +Les POJOs sont générés dans le répertoire source “src/​main” et le package cea.edyp.epims.domain 
-** Figure: Diagramme ​de classes exemple pour les objets du domaine ** +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'' ​
  
-=== Les Services ===+Exécuter la génération en sélectionnant Run ...
  
-== Accès == 
  
 +=== Les Services ===
  
 +== Accès ==
  
 Seules les interfaces IxxxService sont visibles depuis toute autre application (telle que la couche présentation) qui utilisera eP-Core. Ces interfaces devront fournir les méthodes nécessaires pour l’accès aux données en lecture et en écriture. Seules les interfaces IxxxService sont visibles depuis toute autre application (telle que la couche présentation) qui utilisera eP-Core. Ces interfaces devront fournir les méthodes nécessaires pour l’accès aux données en lecture et en écriture.
wiki/epims4_0m2/developer/epcorearchitecture.1216729584.txt.gz · Last modified: 2008/09/24 15:35 (external edit)