User Tools

Site Tools


wiki:epims4_0m1:developer:ep-core

Differences

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

Link to this comparison view

Next revision
Previous revision
wiki:epims4_0m1:developer:ep-core [2008/03/12 09:21]
127.0.0.1 édition externe
wiki:epims4_0m1:developer:ep-core [2008/10/02 10:21] (current)
Line 55: Line 55:
  
 **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).
 +
 +
  
  
 ==== La pratique ==== ==== La pratique ====
 === Utilisation d'un générateur d'​Objets === === Utilisation d'un générateur d'​Objets ===
-La génération des POJOs et DAO se fait via MyEclipse ​Hibernate ​Reverse Engineering (HRE) Les hbms sont construits manuellement.+FIXME : Passage de MyEclipse à Eclipse !!!!  La doc suivante est donc obsolète. Voir la doc sur la 4.0M2 !. 
 + 
 +La génération des POJOs et DAO se fait via Eclipse ​Hibernate ​Tools . Les hbms sont construits manuellement.
 Afin de permettre une séparation des POJOs  et des DAO dans des packages différents la génération se fait en deux étapes : Afin de permettre une séparation des POJOs  et des DAO dans des packages différents la génération se fait en deux étapes :
  
 == Génération des DAO == == Génération des DAO ==
-Depuis MyEclipse Database Explorer, sélectionner toutes ​les tables de la BD ePims sauf  :+A Faire !  
 +Mais les tables ​suivantes ne nécessitent pas de DAO
    - prog_contact    - prog_contact
    - proj_contact    - proj_contact
Line 69: Line 74:
    - samples_share    - samples_share
  
-Dans les fenêtres d'HRE+Les DAO sont générés dans le répertoire source "​src/​main"​ et le package "​cea.edyp.epims.domain.dao.impl"​. ​
  
-  * sélectionner le répertoire source "​src/​main"​ et le domain "​cea.edyp.epims.domain.dao.impl"​. Sélectionner seulement la génération des DAO (en vérifiant que l'​option "​generate precise findBy methods"​ est décochée) et l'​utilisation de template ​maison, en précisant le chemin ​"​{workspace}/​ep-Core\resources\templates"​, comme ci-dessous :+Le template "​{workspace}/​ep-Core\resources\templates" ​était pour MyEclipse... A Voir !
  
-{{ epc_hre_dao.png }} 
-** Figure 3 MyEclipse Hibernate Reverse Engineering **  
  
-  *  utiliser le fichier ./​hibernate.reveng.xml ​comme "​rev-eng settings file". Ce fichier permet de spécifier, entre autre, des nom de classes différentes que ceux proposés par défaut pour certaines tables :+Le fichier ./​hibernate.reveng.xml ​est le fichier ​de Reverse Engineering de Hibernate. Il permet de spécifier, entre autre, des noms de classes différentes que ceux proposés par défaut pour certaines tables :
  
         o table ms_protocol ​ => classe cea.edyp.epims.domain.dao.impl.MSProtocol         o table ms_protocol ​ => classe cea.edyp.epims.domain.dao.impl.MSProtocol
Line 87: Line 90:
         o table sample_subcellular_localisation => classe cea.edyp.epims.domain.dao.impl.SubCellularLocalisation         o table sample_subcellular_localisation => classe cea.edyp.epims.domain.dao.impl.SubCellularLocalisation
  
-Une fois les classes DAO générées il faut corriger les erreurs suivantes :+Une fois les classes DAO générées il faut corriger les erreurs suivantes ​**Spécifique MyEclipse !!** :
  
   * ActorRoleDAO,​ méthode findByID:   * ActorRoleDAO,​ méthode findByID:
       public ActorRole findById( cea.edyp.epims.domain.dao.impl.ActorRoleId id) => public ActorRole findById( cea.edyp.epims.domain.ActorRoleId id)        public ActorRole findById( cea.edyp.epims.domain.dao.impl.ActorRoleId id) => public ActorRole findById( cea.edyp.epims.domain.ActorRoleId id) 
   * TreatmentsApplicationDAO,​ méthode findByID: idem ci dessus   * TreatmentsApplicationDAO,​ méthode findByID: idem ci dessus
-  * StudyDAO, l'​interface IStudyDAO qu'​implémente cette classe définit en plus des méthodes "​génériques"​ la méthode refreshLazy(). Par conséquent,​ cette classe doit êtredéfinie ​comme abstraite. La classe EPCoreStudyDAO,​ sous-classe de StudyDAO, implémente cette méthode. ​+  * StudyDAO, l'​interface IStudyDAO qu'​implémente cette classe définit en plus des méthodes "​génériques"​ la méthode refreshLazy(). Par conséquent,​ cette classe doit être définie ​comme abstraite. La classe EPCoreStudyDAO,​ sous-classe de StudyDAO, implémente cette méthode. ​
  
-**Attention** : A la première création des DAO, nous avons "​extrait"​ les interfaces (via MyEclipse) dans le package cea.edyp.epims.domain.dao.*. Ceci afin de référencer les interfaces dans les services et éventuellement d'​enrichir ces interfaces pour certaines classes. Dans ce cas des modifications sur les classes DAO générées sont nécessaires.+**Attention** : A la première création des DAO, nous avons "​extrait"​ les interfaces (via Eclipse) dans le package cea.edyp.epims.domain.dao.*. Ceci afin de référencer les interfaces dans les services et éventuellement d'​enrichir ces interfaces pour certaines classes. Dans ce cas des modifications sur les classes DAO générées sont nécessaires.
 Par exemple pour l'​objet Study : Par exemple pour l'​objet Study :
  
Line 101: Line 104:
       * La méthode refreshLazy() a été ajoutée à l'​interface IStudyDAO. Nous avons défini une classe EPCoreStudyDAO dérivée de StudyDAO qui implémente cette méthode. Par contre, la classe StudyDAO n'​implément pas toutes les méthodes de IStudy, par conséquent une erreur est levée. Pour remédier à cela, la classe StudyDAO est déclarée abstraite.       * La méthode refreshLazy() a été ajoutée à l'​interface IStudyDAO. Nous avons défini une classe EPCoreStudyDAO dérivée de StudyDAO qui implémente cette méthode. Par contre, la classe StudyDAO n'​implément pas toutes les méthodes de IStudy, par conséquent une erreur est levée. Pour remédier à cela, la classe StudyDAO est déclarée abstraite.
  
-{{ epc_dao_diagram.png }}+{{ epc_dao_diagram.png?800 }}
 ** Figure 4 Diagramme de classes exemple pour les DAO Hibernate **  ** Figure 4 Diagramme de classes exemple pour les DAO Hibernate ** 
  
 == Génération des POJO == == Génération des POJO ==
-Les Objets du domaines sont générés depuis les fichiers *.hbm.xml:+Les Objets du domaines sont générés depuis les fichiers *.hbm.xml, dans le répertoire source src/main. Pour chaque classe du domaine, une classe abstraite est créée. ​
  
-  * Sélectionner tous les fichiers hbm.xml, +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.
-  * Cliquer droit avec la souris et choisir ​"MyEclipse -> Generate POJOS" +
-  * Dans la fenêtre "​Hibernate Foward Engineering" ​+
  
-       o spécifier src/main comme output folder,  +{{ epc_dao_diagram.png?800 }}
-       o cocher la case "​Create abstract class"​ +
-       o ne pas cocher la case custom template +
- +
-Seules les classes mères "​AbstractXXX" ​ sont systématiquement générées. 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_dao_diagram.png }}+
 ** Figure 5  diagramme de classes exemple pour les objets du domaine **  ** Figure 5  diagramme de classes exemple pour les objets du domaine ** 
  
Line 129: Line 124:
 Les méthodes pour l'​écriture des données sont de la forme : Les méthodes pour l'​écriture des données sont de la forme :
  
-  * public Sample saveSample(Sample sample)throws EPimsServiceException;​ Sauvegarde d'un élément (ici Sample) déjà existant. L'​objet ​saivegardé ​est retourné.+  * public Sample saveSample(Sample sample)throws EPimsServiceException;​ Sauvegarde d'un élément (ici Sample) déjà existant. L'​objet ​sauvegardé ​est retourné.
   * public Sample createSample(Sample sample) throws EPimsServiceException;​ Création d'un nouvel élément. L'​objet créé est retourné.   * public Sample createSample(Sample sample) throws EPimsServiceException;​ Création d'un nouvel élément. L'​objet créé est retourné.
   * public void deleteSample(Sample sample) throws EPimsServiceException;​ Suppression d'un élément   * public void deleteSample(Sample sample) throws EPimsServiceException;​ Suppression d'un élément
Line 178: Line 173:
  
 Les interfaces fournissant les services ​ (voir section précédente) sont regroupées dans le package cea.edyp.epims.service. Ces interfaces seront implémentées par les classes se trouvant dans le package cea.edyp.epims.service.impl Les interfaces fournissant les services ​ (voir section précédente) sont regroupées dans le package cea.edyp.epims.service. Ces interfaces seront implémentées par les classes se trouvant dans le package cea.edyp.epims.service.impl
 +
  
 ==== Utilisation de Spring ==== ==== Utilisation de Spring ====
wiki/epims4_0m1/developer/ep-core.1205310064.txt.gz · Last modified: 2008/09/24 15:35 (external edit)