This shows you the differences between two versions of the page.
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 ==== |