[topia] branch develop updated (5e9b351 -> a765320)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository topia. See http://git.nuiton.org/topia.git from 5e9b351 Introduce parameter object for XxxTopiaPersistenceContext constructor (refs #2945) new a765320 Move documentation to topia_site The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit a7653200b461ba6aa9682b751724986c2aab5915 Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Oct 31 18:01:43 2014 +0100 Move documentation to topia_site Summary of changes: src/site/resources/AppTest.java | 94 ----- src/site/resources/ClassDiagram_BookAuthor.png | Bin 3487 -> 0 bytes .../ClassDiagram_BookAuthorWithOperation.png | Bin 3856 -> 0 bytes src/site/resources/ContactUseCases.png | Bin 11196 -> 0 bytes src/site/resources/ServiceCall.png | Bin 36877 -> 0 bytes src/site/resources/css/site.css | 36 -- src/site/resources/employee.png | Bin 1033 -> 0 bytes src/site/resources/employee.zargo | Bin 4249 -> 0 bytes src/site/resources/employeeAndCompany.png | Bin 2125 -> 0 bytes src/site/resources/info.png | Bin 819 -> 0 bytes src/site/resources/library-model.zargo | Bin 3853 -> 0 bytes src/site/resources/library.png | Bin 36833 -> 0 bytes src/site/resources/library.zargo | Bin 3812 -> 0 bytes src/site/resources/lutinorange-codelutin.png | Bin 8994 -> 0 bytes src/site/resources/mandatory.png | Bin 1987 -> 0 bytes src/site/resources/modelForTopiaQuery.png | Bin 2836 -> 0 bytes src/site/resources/modelForTopiaQuery.zargo | Bin 4742 -> 0 bytes src/site/resources/recommended.png | Bin 1659 -> 0 bytes src/site/resources/topia.zargo | Bin 11789 -> 0 bytes src/site/resources/topia_224_75.png | Bin 15634 -> 0 bytes src/site/resources/topia_60_20.png | Bin 2940 -> 0 bytes src/site/rst/TopiaDocumentation.rst | 68 ---- src/site/rst/changelog_3.0.rst | 48 --- src/site/rst/docs/devel.rst | 171 -------- src/site/rst/docs/event.rst | 92 ----- src/site/rst/docs/hibernate_mapping.rst | 120 ------ src/site/rst/docs/isolation.rst | 92 ----- src/site/rst/docs/maven_integration.rst | 40 -- src/site/rst/docs/project.rst | 35 -- src/site/rst/docs/schema_migration.rst | 177 -------- src/site/rst/docs/security.rst | 52 --- src/site/rst/docs/todo.rst | 255 ------------ src/site/rst/docs/y_cycle.rst | 56 --- src/site/rst/index.rst.vm | 152 ------- src/site/rst/tutos/from_scratch.rst.vm | 347 ---------------- .../rst/tutos/howto_architecture_with_topia.rst | 27 -- src/site/rst/tutos/howto_customize_generation.rst | 37 -- src/site/rst/tutos/howto_migration_service.rst | 27 -- src/site/rst/tutos/migrate_to_3.0.rst | 446 --------------------- src/site/rst/user/continue_devel.rst | 56 --- src/site/rst/user/extend_model.rst | 141 ------- src/site/rst/user/faq.rst | 60 --- src/site/rst/user/howto.rst.vm | 156 ------- src/site/rst/user/model_generation.rst.vm | 101 ----- src/site/rst/user/ordered_vs_indexed_migration.rst | 132 ------ src/site/rst/user/start_using_api.rst | 157 -------- 46 files changed, 3175 deletions(-) delete mode 100644 src/site/resources/AppTest.java delete mode 100644 src/site/resources/ClassDiagram_BookAuthor.png delete mode 100644 src/site/resources/ClassDiagram_BookAuthorWithOperation.png delete mode 100644 src/site/resources/ContactUseCases.png delete mode 100644 src/site/resources/ServiceCall.png delete mode 100644 src/site/resources/css/site.css delete mode 100644 src/site/resources/employee.png delete mode 100644 src/site/resources/employee.zargo delete mode 100644 src/site/resources/employeeAndCompany.png delete mode 100644 src/site/resources/info.png delete mode 100644 src/site/resources/library-model.zargo delete mode 100644 src/site/resources/library.png delete mode 100644 src/site/resources/library.zargo delete mode 100644 src/site/resources/lutinorange-codelutin.png delete mode 100644 src/site/resources/mandatory.png delete mode 100644 src/site/resources/modelForTopiaQuery.png delete mode 100644 src/site/resources/modelForTopiaQuery.zargo delete mode 100644 src/site/resources/recommended.png delete mode 100644 src/site/resources/topia.zargo delete mode 100644 src/site/resources/topia_224_75.png delete mode 100644 src/site/resources/topia_60_20.png delete mode 100644 src/site/rst/TopiaDocumentation.rst delete mode 100644 src/site/rst/changelog_3.0.rst delete mode 100644 src/site/rst/docs/devel.rst delete mode 100644 src/site/rst/docs/event.rst delete mode 100644 src/site/rst/docs/hibernate_mapping.rst delete mode 100644 src/site/rst/docs/isolation.rst delete mode 100644 src/site/rst/docs/maven_integration.rst delete mode 100644 src/site/rst/docs/project.rst delete mode 100644 src/site/rst/docs/schema_migration.rst delete mode 100644 src/site/rst/docs/security.rst delete mode 100644 src/site/rst/docs/todo.rst delete mode 100644 src/site/rst/docs/y_cycle.rst delete mode 100755 src/site/rst/index.rst.vm delete mode 100644 src/site/rst/tutos/from_scratch.rst.vm delete mode 100644 src/site/rst/tutos/howto_architecture_with_topia.rst delete mode 100644 src/site/rst/tutos/howto_customize_generation.rst delete mode 100644 src/site/rst/tutos/howto_migration_service.rst delete mode 100644 src/site/rst/tutos/migrate_to_3.0.rst delete mode 100644 src/site/rst/user/continue_devel.rst delete mode 100644 src/site/rst/user/extend_model.rst delete mode 100644 src/site/rst/user/faq.rst delete mode 100644 src/site/rst/user/howto.rst.vm delete mode 100644 src/site/rst/user/model_generation.rst.vm delete mode 100644 src/site/rst/user/ordered_vs_indexed_migration.rst delete mode 100644 src/site/rst/user/start_using_api.rst -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See http://git.nuiton.org/topia.git commit a7653200b461ba6aa9682b751724986c2aab5915 Author: Arnaud Thimel <thimel@codelutin.com> Date: Fri Oct 31 18:01:43 2014 +0100 Move documentation to topia_site --- src/site/resources/AppTest.java | 94 ----- src/site/resources/ClassDiagram_BookAuthor.png | Bin 3487 -> 0 bytes .../ClassDiagram_BookAuthorWithOperation.png | Bin 3856 -> 0 bytes src/site/resources/ContactUseCases.png | Bin 11196 -> 0 bytes src/site/resources/ServiceCall.png | Bin 36877 -> 0 bytes src/site/resources/css/site.css | 36 -- src/site/resources/employee.png | Bin 1033 -> 0 bytes src/site/resources/employee.zargo | Bin 4249 -> 0 bytes src/site/resources/employeeAndCompany.png | Bin 2125 -> 0 bytes src/site/resources/info.png | Bin 819 -> 0 bytes src/site/resources/library-model.zargo | Bin 3853 -> 0 bytes src/site/resources/library.png | Bin 36833 -> 0 bytes src/site/resources/library.zargo | Bin 3812 -> 0 bytes src/site/resources/lutinorange-codelutin.png | Bin 8994 -> 0 bytes src/site/resources/mandatory.png | Bin 1987 -> 0 bytes src/site/resources/modelForTopiaQuery.png | Bin 2836 -> 0 bytes src/site/resources/modelForTopiaQuery.zargo | Bin 4742 -> 0 bytes src/site/resources/recommended.png | Bin 1659 -> 0 bytes src/site/resources/topia.zargo | Bin 11789 -> 0 bytes src/site/resources/topia_224_75.png | Bin 15634 -> 0 bytes src/site/resources/topia_60_20.png | Bin 2940 -> 0 bytes src/site/rst/TopiaDocumentation.rst | 68 ---- src/site/rst/changelog_3.0.rst | 48 --- src/site/rst/docs/devel.rst | 171 -------- src/site/rst/docs/event.rst | 92 ----- src/site/rst/docs/hibernate_mapping.rst | 120 ------ src/site/rst/docs/isolation.rst | 92 ----- src/site/rst/docs/maven_integration.rst | 40 -- src/site/rst/docs/project.rst | 35 -- src/site/rst/docs/schema_migration.rst | 177 -------- src/site/rst/docs/security.rst | 52 --- src/site/rst/docs/todo.rst | 255 ------------ src/site/rst/docs/y_cycle.rst | 56 --- src/site/rst/index.rst.vm | 152 ------- src/site/rst/tutos/from_scratch.rst.vm | 347 ---------------- .../rst/tutos/howto_architecture_with_topia.rst | 27 -- src/site/rst/tutos/howto_customize_generation.rst | 37 -- src/site/rst/tutos/howto_migration_service.rst | 27 -- src/site/rst/tutos/migrate_to_3.0.rst | 446 --------------------- src/site/rst/user/continue_devel.rst | 56 --- src/site/rst/user/extend_model.rst | 141 ------- src/site/rst/user/faq.rst | 60 --- src/site/rst/user/howto.rst.vm | 156 ------- src/site/rst/user/model_generation.rst.vm | 101 ----- src/site/rst/user/ordered_vs_indexed_migration.rst | 132 ------ src/site/rst/user/start_using_api.rst | 157 -------- 46 files changed, 3175 deletions(-) diff --git a/src/site/resources/AppTest.java b/src/site/resources/AppTest.java deleted file mode 100644 index a58bbed..0000000 --- a/src/site/resources/AppTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.company; - -/* - * #%L - * ToPIA - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.topia.persistence.TopiaConfigurationConstants; - -import com.company.app.MyLibraryTopiaApplicationContext; -import com.company.app.MyLibraryTopiaPersistenceContext; -import com.company.app.entities.Author; -import com.company.app.entities.AuthorTopiaDao; -import com.company.app.entities.Book; -import com.company.app.entities.BookTopiaDao; - -public class AppTest { - - @Test - public void testApp() { - // Declaration de la configuration - Map<String, String> config = new HashMap<String, String>(); - config.put(TopiaConfigurationConstants.CONFIG_DRIVER, "org.h2.Driver"); - config.put(TopiaConfigurationConstants.CONFIG_DIALECT, "org.hibernate.dialect.H2Dialect"); - config.put(TopiaConfigurationConstants.CONFIG_USER, "sa"); - config.put(TopiaConfigurationConstants.CONFIG_PASS, ""); - config.put(TopiaConfigurationConstants.CONFIG_URL, "jdbc:h2:file:/tmp/test-" + System.nanoTime()); - config.put(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA, "true"); - - // Creation de l'ApplicationContext (va initialiser la base et les services de ToPIA) - MyLibraryTopiaApplicationContext applicationContext = - new MyLibraryTopiaApplicationContext(config); - - // Démarre une transaction représentée par le PersistenceContext - MyLibraryTopiaPersistenceContext persistenceContext = - applicationContext.newPersistenceContext(); - - // On demande au PersistenceContext les instances des Dao - AuthorTopiaDao authorDao = persistenceContext.getAuthorDao(); - BookTopiaDao bookDao = persistenceContext.getBookDao(); - - Assert.assertEquals(0, authorDao.count()); - Assert.assertEquals(0, bookDao.count()); - - { // On créé un author et on demande au Dao de le persister - Author author = authorDao.newInstance(); - author.setName("Antoine de Saint-Exupéry"); - authorDao.create(author); - } - - Assert.assertEquals(1, authorDao.count()); - - { // On créé un livre en listant les propriétés qui le composent - Author author = authorDao - .forNameEquals("Antoine de Saint-Exupéry") - .findUnique(); - bookDao.create(Book.PROPERTY_NAME, "Le petit prince", - Book.PROPERTY_AUTHOR, author); - } - - Assert.assertEquals(1, bookDao.count()); - - // On commite la transaction - persistenceContext.commit(); - - // Fermeture des contextes - persistenceContext.close(); - applicationContext.close(); - } -} diff --git a/src/site/resources/ClassDiagram_BookAuthor.png b/src/site/resources/ClassDiagram_BookAuthor.png deleted file mode 100644 index 0956209..0000000 Binary files a/src/site/resources/ClassDiagram_BookAuthor.png and /dev/null differ diff --git a/src/site/resources/ClassDiagram_BookAuthorWithOperation.png b/src/site/resources/ClassDiagram_BookAuthorWithOperation.png deleted file mode 100644 index 66fff2f..0000000 Binary files a/src/site/resources/ClassDiagram_BookAuthorWithOperation.png and /dev/null differ diff --git a/src/site/resources/ContactUseCases.png b/src/site/resources/ContactUseCases.png deleted file mode 100644 index 5b22a1d..0000000 Binary files a/src/site/resources/ContactUseCases.png and /dev/null differ diff --git a/src/site/resources/ServiceCall.png b/src/site/resources/ServiceCall.png deleted file mode 100644 index da51553..0000000 Binary files a/src/site/resources/ServiceCall.png and /dev/null differ diff --git a/src/site/resources/css/site.css b/src/site/resources/css/site.css deleted file mode 100644 index a0eb36a..0000000 --- a/src/site/resources/css/site.css +++ /dev/null @@ -1,36 +0,0 @@ -/* - * #%L - * ToPIA - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -blockquote { - border-left: 0px; -} - -blockquote p { - font-size: 14px; - line-height: 18px; -} - -pre { - line-height: 15px; -} diff --git a/src/site/resources/employee.png b/src/site/resources/employee.png deleted file mode 100644 index e7fe324..0000000 Binary files a/src/site/resources/employee.png and /dev/null differ diff --git a/src/site/resources/employee.zargo b/src/site/resources/employee.zargo deleted file mode 100644 index 551af02..0000000 Binary files a/src/site/resources/employee.zargo and /dev/null differ diff --git a/src/site/resources/employeeAndCompany.png b/src/site/resources/employeeAndCompany.png deleted file mode 100644 index 9263a45..0000000 Binary files a/src/site/resources/employeeAndCompany.png and /dev/null differ diff --git a/src/site/resources/info.png b/src/site/resources/info.png deleted file mode 100644 index 05dbc53..0000000 Binary files a/src/site/resources/info.png and /dev/null differ diff --git a/src/site/resources/library-model.zargo b/src/site/resources/library-model.zargo deleted file mode 100644 index daae97c..0000000 Binary files a/src/site/resources/library-model.zargo and /dev/null differ diff --git a/src/site/resources/library.png b/src/site/resources/library.png deleted file mode 100644 index 8418a68..0000000 Binary files a/src/site/resources/library.png and /dev/null differ diff --git a/src/site/resources/library.zargo b/src/site/resources/library.zargo deleted file mode 100644 index 993d588..0000000 Binary files a/src/site/resources/library.zargo and /dev/null differ diff --git a/src/site/resources/lutinorange-codelutin.png b/src/site/resources/lutinorange-codelutin.png deleted file mode 100644 index 4248119..0000000 Binary files a/src/site/resources/lutinorange-codelutin.png and /dev/null differ diff --git a/src/site/resources/mandatory.png b/src/site/resources/mandatory.png deleted file mode 100644 index c45f7ac..0000000 Binary files a/src/site/resources/mandatory.png and /dev/null differ diff --git a/src/site/resources/modelForTopiaQuery.png b/src/site/resources/modelForTopiaQuery.png deleted file mode 100644 index f698f72..0000000 Binary files a/src/site/resources/modelForTopiaQuery.png and /dev/null differ diff --git a/src/site/resources/modelForTopiaQuery.zargo b/src/site/resources/modelForTopiaQuery.zargo deleted file mode 100644 index cddaaff..0000000 Binary files a/src/site/resources/modelForTopiaQuery.zargo and /dev/null differ diff --git a/src/site/resources/recommended.png b/src/site/resources/recommended.png deleted file mode 100644 index 986f1d8..0000000 Binary files a/src/site/resources/recommended.png and /dev/null differ diff --git a/src/site/resources/topia.zargo b/src/site/resources/topia.zargo deleted file mode 100644 index 01b8226..0000000 Binary files a/src/site/resources/topia.zargo and /dev/null differ diff --git a/src/site/resources/topia_224_75.png b/src/site/resources/topia_224_75.png deleted file mode 100644 index b633094..0000000 Binary files a/src/site/resources/topia_224_75.png and /dev/null differ diff --git a/src/site/resources/topia_60_20.png b/src/site/resources/topia_60_20.png deleted file mode 100644 index b80fa75..0000000 Binary files a/src/site/resources/topia_60_20.png and /dev/null differ diff --git a/src/site/rst/TopiaDocumentation.rst b/src/site/rst/TopiaDocumentation.rst deleted file mode 100644 index 43451d3..0000000 --- a/src/site/rst/TopiaDocumentation.rst +++ /dev/null @@ -1,68 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -===== -ToPIA -===== - -Buts -==== - -- Abstraction de la persistence -- Sauvegarde/restauration en XML -- Sécurité sur les instances d'objets -- Génération de code même si ce n'est pas un prérequis pour utiliser ToPIA - -Ce qu'il serait bien de récuperer par rapport à la version 2 - -- support des sous-transactions - -Peut-être plus tard - -- Gestion des services -- Distribution transparente - -La vision ToPIA -=============== - -Un point d'entrée le TopiaContext sur lequel on ouvre des transactions ce qui -retourne un autre TopiaContext à partir duquel on récupère les DAO des -différentes entités qui permettent de faire les traitements que l'on souhaite. - -Ensuite on peut appeler la methode commit de ce sous TopiaContext pour mettre -à jour la base de données et permettre à d'autres TopiaContext d'avoir la -nouvelle vision de nos objets. - -Chaque TopiaContext créé sur le TopiaContext root est indépendant. - -Lorsque l'on travaille avec un objet provenant d'un TopiaContext sur lequel -on a fait un rollback, celui-ci n'est plus valide et il vaut mieux en recupérer -une version correcte sur le TopiaContext. - -Après avoir fait un commit ou un rollback sur un TopiaContext on peut continuer -a l'utiliser et refaire des commits pour synchroniser de temps en temps les -modification faites sur la base. - -Un TopiaContext peu servir aussi longtemps que l'on souhaite, il ne maintient -pas inutilement de transaction sur la base. diff --git a/src/site/rst/changelog_3.0.rst b/src/site/rst/changelog_3.0.rst deleted file mode 100644 index 65022ed..0000000 --- a/src/site/rst/changelog_3.0.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -Les nouveautés de ToPIA 3.0 -=========================== - - -Modularisation de la génération des TopiaId -------------------------------------------- - -La forme des topiaIds générés à changé. Si vous souhaitez conserver l'ancienne forme parce que vous -souhaitez conserver l'uniformité avec une base de données existante ou si vous utilisez -topia-service-security, vous devez explicitement le spécifier à Topia 3.0 via la configuration : - - ``topia.persistence.topiaIdFactoryClassName=org.nuiton.topia.persistence.internal.LegacyTopiaIdFactory`` - -Le classe **TopiaID** est dépréciée, elle sera supprimée dans les prochaines versions. - -:: - - FIXME tchemit : je ne suis pas convaincu par ça, le module security pour moi doit aussi être déprécié, donc la dernière phrase est caduc. - - -TopiaEntities enrichi ---------------------- - -TODO diff --git a/src/site/rst/docs/devel.rst b/src/site/rst/docs/devel.rst deleted file mode 100644 index 53c00a9..0000000 --- a/src/site/rst/docs/devel.rst +++ /dev/null @@ -1,171 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -=================== -TopiaContextFactory -=================== - -Le topia context est créé en faisant la demande sur le *TopiaContextFactory*. -On peut passer en paramètre au *TopiaContextFactory* un object *Property* qui -permet de configurer le context. Si aucun fichier est passé en paramètre, un fichier de -propriété **TopiaContextImpl.properties** est recherché dans le classpath. - -Fichier de configuration -======================== - -Le fichier de configuration est un fichier lisible par un objet *Property*. -Il contient différentes informations : -- liste des entités à gérer -- option de connexion à la base de données -- les services à activer - -Liste des entités à gérer -------------------------- - -Il est possible de définir les entités soit directement en indiquant un -répertoire contenant les mappings hibernate:: - - topia.persistence.directories=<path> - -soit en indiquant une liste de classe séparé par des virgule:: - - topia.persistence.classes=<list de classe> - -Le mieux est d'utiliser la liste de classe qui est non spécifique à une -persistence ou à une plateforme. - -Option de connexion à la base de données ----------------------------------------- - -Hibernate -~~~~~~~~~ - -Les options pour hibernate peuvent être directement dans le fichier de configuration principal ou dans un fichier de configuration secondaire. Dans ce cas il faut indiquer dans le fichier de configuration principal le chemin de ce fichier:: - - topia.persistence.properties.file=<filesystem or classpath path> - -Les options hibernates sont les options hibernate classique : - -- hibernate.connection.username -- hibernate.connection.password -- hibernate.dialect -- hibernate.connection.driver_class -- hibernate.connection.url - -Les services à activer ----------------------- - -Il est possible d'indiquer les services à activer grâce aux options:: - - topia.service.<service name>=<class> - topia.service.security=org.nuiton.topia.security.TopiaSecurityServiceImpl - topia.service.index=org.nuiton.topia.index.LuceneIndexer - topia.service.history=org.nuiton.topia.history.TopiaHistoryServiceImpl - -<service name> doit correspondre au nom de service que <class> retourne, sinon il est désactivé. - -Les services disponibles actuellement sont: - -- Service d'indexation full text -- Service d'historisation des modifications des entités -- Service de sécurité -- Service d'upgrade automatique des données hibernates - -TopiaContext -============ - -Le *TopiaContext* permet de récupérer les services, d'ouvrir des transactions -en récupérant des nouveaux *TopiaContext* fils, de s'enregistrer en tant que -listener pour recevoir les notifications de modification sur les entités. - -Sur les *TopiaContext* fils, on peut récupérer des DAO qui permettent de -créer, modifier, rechercher les entités. - -Entité -====== - -Normalement **Topia** est fait pour pouvoir générer n'importe quel type de POJO -et les rendre persistants. Mais il est plus simple d'utiliser la génération -de code fournit avec **Topia** pour générer les entités à partir d'un -diagramme UML. Dans ce cas toutes les entités héritent de *TopiaEntity* qui -contient des méthodes pour s'enregistrer sur les modifications des attributs -ou pouvoir lever un droit de veto sur une modification. Sont aussi -disponible les méthodes: - -- getTopiaId -- getTopiaVersion -- getTopiaCreationDate -- getTopiaContext -- getComposite: Retourne tous les objets qui seront effacé si cet objet est effacé -- getAggregate: Retourne les objets en lien avec celui-ci - -Lorsque l'on utilise la génération on peut implanter une classe qui hérite -du *Abstract* généré et qui se finisse par Impl. Par exemple si dans notre -modèle nous avons la classe *Toto* il sera généré une interface *Toto* et -une classe abstraite *TotoAbstract*, il faudra alors implanter *TotoImpl*:: - - extends TotoAbstract extends TopiaEntityAbstract implements Toto - extends TopiaEntityAbstract implements *TopiaEntity - -Cette classe impl permet d'ajouter des méthodes métiers à l'entité ou des -méthode d'accès différent sur les attributs. - -DAO -=== - -Il n'y a plus qu'un seul type de persistence possible pour les DAO, à savoir Hibernate (depuis la 2.2.0). Il est possible d'étendre un DAO -pour lui ajouter différentes méthodes plus complexes ou plus spécifiques que celles proposées par défaut : - -- findAll -- findAllByProperties(Map<String, Object> properties) -- findAllByProperties(String param, Object property, ...) -- findByProperty(String property) -- tous les find pour chaque property existante de l'entité -- ... - -Pour spécifier d'autres méthodes, il suffit d'utiliser directement le modèle UML qui sert à la génération des entités. -Un stéréotype <<dao>> doit être précisé sur une méthode d'entité pour indiquer qu'elle doit se situer dans un DAO. -Le fichier *DAOImpl* associé ne sera plus généré et devra être créé par le développeur en héritant du *DAOAbstract*. -(voir FAQ pour un exemple sur l'extension d'un DAO). - -Note sur les signatures de méthodes - Par commodité, les méthodes retournant une liste d'entités commencent par findAllBy tandis que celles retournant une seule entité - commencent par findBy. - -TopiaService -============ - -Pour implanter un TopiaService il faut absolument créer une interface qui -hériter de l'interface *TopiaService* et mettre dans cette interface un -attribut static qui définit le nom du service:: - - public static final String SERVICE_NAME = "monservice"; - -Un service peut avoir besoin de nouvelles entités pour fonctionner. Pour cela -il faut retourner la liste des entités grâce à la méthode -**getPersistenceClasses**. - -Après instanciation du service par le **TopiaContext** celui-ci est -initialisé grâce à la méthode **init(TopiaContextImplementor)**. Il peut -alors se mettre listener sur le context ou les DAO par exemple. diff --git a/src/site/rst/docs/event.rst b/src/site/rst/docs/event.rst deleted file mode 100644 index f406b60..0000000 --- a/src/site/rst/docs/event.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -====================== -Gestion des évènements -====================== - -On peut se mettre listener sur deux sortes d'évènements : les TopiaEntityEvent et -les TopiaVetoableEntityEvent. La difference entre les deux se situe sur le moment de -l'appel. - - -TopiaVetoableEntityEvent ------------------------- - -Les TopiaVetoableEntityEvent sont appelés avant l'action, ce qui -permet de l'interdire en levant une exception (par exemple pour gérer la -sécurité). - -Les TopiaVetoableEntityEvent contiennent la classe à laquelle se rapporte l'event -et si possible l'identifiant de l'objet qui sera impacté. Cela n'est pas -toujours le cas; par exemple lors de la creation, l'identifiant n'existe pas forcément -et donc ne peut-etre donné. - -Propagation -~~~~~~~~~~~ - -Les TopiaVetoableEntityEvent sont aussi levés pour tous les contexts pères -du context qui a produit l'event et ceci juste apres avoir prévenu les -listeners du context courant. - -TopiaEntityEvent ----------------- - -Les TopiaEntityEvent sont appelés après l'action pour prévenir du changement. - -Les TopiaEntityEvent contiennent l'entity à laquelle se rapporte l'event - -Propagation -~~~~~~~~~~~ - -Les TopiaEntityEvent sont propagé au context pere lors du commit du context. - -Si un rollback est fait, alors ce sont les listeners du context eux-même qui -sont prévenus du changement. - -Implantation -============ - -Les DAO sont responsables de l'appel des méthodes fire sur le context qui les -a créés lors de l'appel sur ceux-ci des methodes create, update, delete, find -(pour le chargement). - -Le cas Hibernate ----------------- - -Dans le DAO hibernate le context est listener des différents évènements levés -par la session. Mais ces évènements ne sont levés que lors du commit. Dans Topia -on souhaite avoir directement un évènement lors d'un create, update ou delete -sur le DAO. Le DAO hibernate lève donc des évènements lorsque l'on appelle -ces méthodes. - -On a aussi des évènements lors du commit. Il est donc possible qu'on aie, -par exemple, le même évènement Update envoyé deux fois au listener si on fait -un update sur le DAO suivi du commit sur le context. - -On conserve tout de meme le mécanisme d'évènement levé au moment du commit par -hibernate car il est beaucoup plus puissant. Il permet aussi d'être prévenu de -modifications apportées aux constituants d'une entité et non pas seulement des -évènements portants sur l'entité elle-même comme c'est le cas dans le mecanisme -implanté dans les DAO. diff --git a/src/site/rst/docs/hibernate_mapping.rst b/src/site/rst/docs/hibernate_mapping.rst deleted file mode 100644 index c898bd3..0000000 --- a/src/site/rst/docs/hibernate_mapping.rst +++ /dev/null @@ -1,120 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -================= -Mapping hibernate -================= - -Ce document décrit les choix de mapping faits en fonction -du diagramme de classe UML. - -JDBC -==== - -Généralité ----------- - -- Tous les objets utilisent le versionnement dans un champs version:: - - <version name="topiaVersion" type="long" node="@topiaVersion"/> - -- On utilise les méthodes d'accès pour accêder aux propriétés - -Héritage --------- - -- Seules les classes concrêtes ont un mapping (au travers de l'interface + impl) -- Chaque classe à un fichier de mapping séparé. - -On utilisera union-subclass - -Identifiant ------------ - -Lors de la description de la classe, on peut indiquer de ne pas générer de clé -technique. Dans ce cas, la clé métier est utilisée (tagvalue: technicalKey=false). -Par défaut une clé technique est utilisée et est de la forme uuid.hex:: - - <id name="topiaId" column="topiaId" type="string"> - <generator class="uuid.hex"/> - </id> - -La description de la clé métier est faite par un tagvalue sur la classe -(tagvalue: key=prop1,prop2,prop3). Si une clé technique est utilisée, une -contrainte d'unicité est tout de même faite sur la clé métier. - -La clé métier sert aussi pour le toString, equals, hashCode. - -Si l'id d'une entité est composé de plusieurs champs, ces champs doivent-être -rassemblés dans une classe indépendante de l'entité. Par contre le mapping -assemble l'entity et son id dans la même table:: - - <composite-id name="#field" class="#class"> - <key-property name="#field1" column="#col1"/> - <key-property name="#field2" column="#col2"/> - <key-property name="#field3" column="#col3"/> - </composite> - -Si l'id est un objet simple il peut être directement mis dans l'entité. - -Relation 1-0 ------------- - - - -Relation 1-1 ------------- - -Relation 0-N ------------- - -Relation 1-N ------------- - -Relation N-N ------------- - -Classe d'association --------------------- - -Composition ------------ - -Le composant peut changer de propriétaire (set méthode) mais le -propriétaire perd en même temps le lien vers son composé. - -Aggregation ------------ - -Si une classe est aggrégée avec une autre, alors elle suit la vie de l'entité -à laquelle elle est aggrégée (cascade delete, update) - -Elle ne peut pas être affectée a une autre entité. Pas de set sur cette classe -vers l'autre classe. - -XML -=== - -Toutes les propriétés sont des éléments sauf la clé technique qui est un -attribut. diff --git a/src/site/rst/docs/isolation.rst b/src/site/rst/docs/isolation.rst deleted file mode 100644 index cae5b50..0000000 --- a/src/site/rst/docs/isolation.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -=========================== -Isolation des TopiaContexts -=========================== - - -Remarque: les requètes ne sont pas bonnes, mais sont là pour donner l'idée -générale. - -Pour mettre en place l'isolation entre les différents TopiaContexts créés par -beginTransaction, il faut ajouter un nouvelle propriété sur les -TopiaEntity: TopiaContextId. Cette propriété prend la valeur de l'id du -TopiaContext qui a créé ou chargé l'objet. On voit donc que plusieurs objets -ayant le même id peuvent exister, le TopiaContextId doit donc faire partie -de la clé de l'objet. Il faut aussi ajouter un champs TopiaDeleted pour -savoir si un objet a été effacé ou non. - -Dans le mapping hibernate pour chaque class d'entité, on a un filtre: -where TopiaContextId == :id || (TopiaContextId > 0 && TopiaContextId <= :id) - -Ce filtre n'est pas suffisant car on a toutes les versions commités de -l'objet jusqu'a :id, il faut un autre filtre apres les recherches pour -n'avoir que les dernieres versions des entites et supprimer dans ce groupe -les entitées marquées et effacées. -where TopiaContextId = max(TopiaContextId) && isDeleted=false group by topiaId - -Lors d'un beginTransaction le nouveau TopiaContext active ce filtre pour son -propre id. - -De cette manière un TopiaContext ne voit que les objets qu'il a créé et/ou -modifié, ou les objets plus ancien que lui. - -Cet Id est: - System.nanoTime() et donc toujours négatif. - -Lors d'un commit d'un TopiaContext, on passe tous les TopiaContextId de -toutes les entités qui sont égales a l'id du TopiaContext en sa version -positive: update <table> set TopiaContextId = -:id where TopiaContextId = :id -De plus le TopiaContext renouvelle son id et modifie tous les filtres pour -qu'il aie la vision d'objets créés par d'autre TopiaContext avant son commit. - -Lors d'un rollback il suffit de faire le renouvellement de l'id et la mise à -jour des filtres. - -Sous-transaction -================ - -La gestion des TopiaContextId pourrait offrir les sous-transactions, si -dans le filtre on ajoutait comme condition, au lieu de TopiaContextId == :id, -TopiaContextId in (:idList) ou idList serait la liste des ids du -TopiaContext courant ainsi que des TopiaContext parents. - -Historisation -============= - -La gestion des TopiaContextId permet d'offrir l'historisation de tous les -objets. Car tous les objets commités sont conservés avec un TopiaContextId -différent pour chaque version. - -Implantation -============ - -- Mettre en place les champs supplémentaires: TopiaContextId, TopiaDeleted -- Modifier la clé primaire pour ajouter TopiaContextId -- Ajouter les filtres dans les mappings -- Ajouter un id sur les TopiaContext -- Modifier le comportement de DAO.delete pour qu'il marque juste l'objet - comme effacé sans l'effacer TopiaDeleted=true -- Pour toutes les recherches ajouter un filtre pour ne retourner que les - derniere version non deleted diff --git a/src/site/rst/docs/maven_integration.rst b/src/site/rst/docs/maven_integration.rst deleted file mode 100644 index cb3b080..0000000 --- a/src/site/rst/docs/maven_integration.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - -Détails de l'intégration avec Maven -=================================== - -TODO - - -Comme il s'agit d'une phase de compilation, Maven va ajouter tout le code généré aux -classpath le code généré sera compilé et lié en même temps que le reste de votre application. -Tous les fichiers .class se retrouveront dans target/classes, dans la suite du processus, on -ne distingue plus le code généré du code utilisateur. - -Par la suite, si vous changez le modèle, tout sera re-généré. À chaque ``clean`` -via Maven, tout ce qui a été généré est effacé. Vous pouvez donc re-généré autant -de fois que nécessaire. Attention, Maven ne détecte pas le changement du modèle -si le fichier .zargo a été modifié : il faut donc faire un clean à chaque fois -afin de forcer le re-génération du modèle dans sa dernière version. - diff --git a/src/site/rst/docs/project.rst b/src/site/rst/docs/project.rst deleted file mode 100644 index 03c6da0..0000000 --- a/src/site/rst/docs/project.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin, Chatellier Eric -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -============================================= -Liste de projets similaires ou se rapprochant -============================================= - -subPersistence --------------- - -http://subpersistence.sourceforge.net/ - -Librairie d'abstraction de libraire de mapping O/R -Supporte Hibernate pour l'instant. Semble vouloir supporter aussi Castor. diff --git a/src/site/rst/docs/schema_migration.rst b/src/site/rst/docs/schema_migration.rst deleted file mode 100644 index b572685..0000000 --- a/src/site/rst/docs/schema_migration.rst +++ /dev/null @@ -1,177 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin, Chatellier Eric -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -========================================================= -Comment migrer les version d'un schema de base de données -========================================================= - -Lorsque des modifications sont effectuer dans une application qui impacte -le schema de base de données, celui doit subir des migrations. -ToPIA fournit une API visant a assister le developpeur pour migrer un schema -de base de données. - -Approche --------- - -TODO approche migration par copy -TOOD approche migration par requette sql - -Configuration -------------- - -Pour commencer, topia doit connaitre l'ensemble des versions de la base -de données, et la version actuelle de l'application. Si la version de l'application -diffère de celle de la base de données, une migration sera effectuée. -Après la migration, la version de la base de données est égale à celle de -l'application. - -Dépendances -~~~~~~~~~~~ - -La migration est effectuée par le service de migration de ToPIA. Il est -necessaire de l'ajouter explicitement. - -:: - - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-service-migration</artifactId> - <version>2.5.3</version> - <scope>compile</scope> - </dependency> - -Class de definition des migration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Pour commencer, il faut créer la classe definissant les versions. - -:: - - public class DatabaseMigrationClass extends TopiaMigrationCallbackByClass { - - protected static final Version VERSION_1 = new Version("1"); - protected static final Version VERSION_2 = new Version("2"); - protected static final Version VERSION_3 = new Version("3"); - - public DatabaseMigrationClass() { - super(new MigrationResolver()); - } - - protected static class MigrationResolver implements MigrationCallBackForVersionResolver { - - @Override - public Class<? extends MigrationCallBackForVersion> getCallBack(Version version) { - Class<? extends MigrationCallBackForVersion> result = null; - - if (version.equals(VERSION_1)) { - result = MigrationV0V1.class; - } - else if (version.equals(VERSION_2)) { - result = MigrationV1V2.class; - } - else if (version.equals(VERSION_3)) { - result = MigrationV2V3.class; - } - return result; - } - - } - - @Override - public Version[] getAvailableVersions() { - Version[] result = new Version[] { VERSION_1, VERSION_2, VERSION_3 }; - return result; - } - - @Override - public Version getApplicationVersion() { - Version appVersion = new Version(MyAppDAOHelper.getModelVersion()); - return appVersion; - } - - @Override - public boolean askUser(Version dbVersion, List<Version> versions) { - return true; - } - - } - -Classes de migration de version -------------------------------- - -Ensuite, il faut créer une classe par migration. - -Par exemple, voici la classe migrant le shema de la version 0 à la version 1 : -MigrationV0V1. - -:: - - public class MigrationV0V1 extends MigrationCallBackForVersion { - - public MigrationV0V1(Version version, TopiaMigrationCallbackByClass callBack) { - super(version, callBack); - } - - @Override - protected void prepareMigrationScript(TopiaContextImplementor tx, - List<String> queries, boolean showSql, boolean showProgression) - throws TopiaException { - queries.add("alter table SETOFVESSELS add column TECHNICALEFFICIENCYEQUATION VARCHAR(255);"); - queries.add("alter table STRATEGY add column INACTIVITYEQUATIONUSED BIT default false;"); - queries.add("alter table STRATEGY add column INACTIVITYEQUATION VARCHAR(255);"); - queries.add("alter table STRATEGYMONTHINFO alter NUMBEROFTRIPS double;"); - queries.add("alter table STRATEGYMONTHINFO alter MININACTIVITYDAYS double;"); - } - } - -Configuration du topia context -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Pour finir, il faut ajouter l'utilisation de la migration par ces classe -dans le topia context. En effet, la migration est effectuée automatiquement -lors de l'ouverture d'un TopiaContext. - -Configuration: - -:: - - config.put(TopiaMigrationService.TOPIA_SERVICE_NAME, TopiaMigrationEngine.class.getName()); - config.put(TopiaMigrationService.MIGRATION_CALLBACK, DatabaseMigrationClass.getName()); - -ou dans un fichier de properties : - -:: - - topia.service.migration=org.nuiton.topia.migration.TopiaMigrationEngine - topia.service.migration.callback=org.test.myapp.DatabaseMigrationClass - - -Kettle ------- - -Une autre idee est de ne pas utiliser hibernate mais kettle pour la -migration des données. Nous aurions de la même façon dans le nom des tables -un numero de version de schéma. Un fichier kettle decrirait la migration -d'une version à une autre. Et les différents fichiers serait chaînés pour -arriver au schéma souhaité. diff --git a/src/site/rst/docs/security.rst b/src/site/rst/docs/security.rst deleted file mode 100644 index 41343c6..0000000 --- a/src/site/rst/docs/security.rst +++ /dev/null @@ -1,52 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -======== -sécurité -======== - -Implantation de la sécurité -=========================== - -La sécurité est un simple objet java qui hérite de TopiaHelper - -Il se met alors listener sur tous les events vetoables et lève des exceptions -si la personne qui essaie de charger/créer/modifier/supprimer l'objet n'en a pas -le droit. - -Le service de sécurité vient avec son fichier de configuration. Dans ce fichier -il y a les paramètres utiles au service pour retrouver les informations sur les -droits. - -TopiaHelper est en fait une interface qui contient la méthode -init(TopiaContext, Properties) - - -package -------- - -:org.nuiton.topia.security: pour tout ce qui touche a la sécurité - (TopiaAuthenticationHelper, TopiaAuthorisationHelper, LoginModule, Filter, ...) -:org.nuiton.topia.security.entities: pour les entities utiles à la définition - de la sécurité (user, group, permission) diff --git a/src/site/rst/docs/todo.rst b/src/site/rst/docs/todo.rst deleted file mode 100644 index b35af02..0000000 --- a/src/site/rst/docs/todo.rst +++ /dev/null @@ -1,255 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -==== -TODO -==== - -Recherches à faire ------------------- - -- des persistences hibernates sur LDAP ou FlatFile -- des outils de migration/evolution de schema - -Generic DAO ------------ -http://www.hibernate.org/328.html:: - - public abstract class GenericHibernateDAO<T> { - ... - Class<T> persistentClass = (Class<T>) ((ParameterizedType) getClass() - .getGenericSuperclass()).getActualTypeArguments()[0]; - - -Regarder si TopiaContext ne pourrait pas être remplacé par un PicoContainer -http://www.hibernate.org/180.html -http://www.hibernate.org/182.html - -doc sur l'optimisation des requetes HQL -http://www.jroller.com/page/wakaleo/?anchor=hibernate_optimisation - -Generation ----------- - -- (2) import/export XML dans ToPIA, à mettre dans le mapping hibernate (en partie fait, mais très stable...) - - -Gestion des versions des POJO ------------------------------ - -mettre en place serialVersionUID sur les entités - -Gestion des droits et de la sécurité ------------------------------------- - -Le créateur de l'objet n'est pas dans l'objet lui même mais dans une table a -part. - -Owner: topiaId de l'entity, id du propriétaire - -Les droits des objets sont dans une table a part -(voir http://www.hibernate.org/140.html). - -Il serait bon que les droits s'appliquent sur un group ou un user. Et qu'un user -puisse appartenir a un group, et qu'un group puisse aussi appartenir a un group - -Il faut aussi modifier le Policy ou autre pour pouvoir lire les permissions -dans hibernate lorsqu'on nous les demandes. Mettre des méthodes statique dans -une classe contenant une session hibernate statique pour permettre l'ajout -de permission a l'execution, sans qu'on est besoin de relire toutes les -permissions a chaque fois, la session servant de cache (mais les sessions -ne sont pas multithread d'ou le synchronise) - -synchronized public void addPermission(TopiaPermission); -synchronized public List<TopiaPermission> getAllPermission(); - -Entity directement dans Topia ------------------------------ - -- User: login, password, email -- Group: name, (User|Group)* -- Permission: action(create, load, update, delete, admin permission), classname, - principal, topiaId de l'entity ou null si le droit sur toutes les entites de ce type - - -Les services ------------- - -..image: ServiceCall.png - -Les services on besoin d'avoir le context de l'appelant pour pouvoir faire -des choix: -- choix de la base de données -- droit de l'utilisateur -- ... - -Pour cela le premier argument de chaque methode generee doit etre un token -retourner par le service d'authentification. - -Le service d'authentification (LA/SSO?) permet de recuperer les informations -du TopiaClientContext qui contient des informations utiles: -- applicationId (identifiant de l'application appelant (im.codelutin.com, im.libre-entreprise.com, ...)) -- clientId (identifiant du client appelant (gaim, exodus, gabber, ...)) -- userLogin -- userPassword - -On a un TopiaServiceManager qui permet de recuperer un proxy sur le service -souhaité. Le proxy n'a pas en premier argument ce TopiaClientContext, il est -ajouté automatiquement lors de l'appel. De cette maniere cote client cela -est completement transparent. - - -# Cote client -ChoremServiceHelper csh = ChoremServiceHelper.getInstance("codelutin.chorem.com", "mentawai", "poussin", "xxxxxxxx"); -CRMService crm = csm.getCRMService(); // retourne un proxy sur le service -List<Person> persons = crm.getAllPerson(); // retourne la liste de toutes les personnes visible par poussin - -# Cote serveur dans getAllPerson(String token) -TopiaClientContext tcc = TopiaAuthenticationService.getTopiaClientContext(token); -Properties prop = ChoremUtil.getContextProperties(tcc); -ChoremContext context = ChoremContext.getContext(prop); -List<Person> result = ChoremDAOHelper.getCRMDAO(context).getAllPerson(); -return result; - -Le moyen de recuperer le TopiaAuthentificationService doit etre specifier -dans les fichiers de configuration de l'application. Il doit y avoir -plusieurs implantation pour ce service: -- class avec methode static pour les applications standalone -- EJB -- service web -- ... - -L'application doit pouvoir plugger sa propre methode d'authentification -(acces a un LDAP, a une BD, a un Liberty Alliance, ...), chaque implantation -doit utiliser cette methode d'authentification (delegation). - -De meme pour l'implantation des services, les services doivent être des -classes Java normal (sans le token en parametre) mais contenant une methode -setTopiaContext() qui permet de mettre a jour - - -Autre ------ - -- tag-value transaction sur les operations des services avec les valeurs - traditionnelles de la spec EJB (required, requiresNew, mandatory, - supports, notSupported, never ). ex auto=required -- dernier user ayant modifié une entité -- tag-value auto avec un pattern sur les attributs. ex auto=now -- tag-value mask avec un pattern sur les attributs. ex : mask=price - puis dans les fichiers de traductions : price=#+,## -- tag-value enumName avec un pattern sur les attributs. ex : - enum=projectStatus - La valeur des énumérations est conservé dans un fichier de configuration - qui peut-etre surchargé par des valeurs dans une table en base de - données : projectStatus=a faire, fait, fini -- tag-value i18n avec un pattern sur les attributs. ex : i18n=true (en partie fait :) ) -- Generation des UI par defaut (JAXX et JSP) -- prendre en compte le contenu de l'onglet doc des entités et attributs - jusqu'au -- pour les tooltips (doc tooltips/doc user/doc dev) - -A reflechir (voir si c vraiment utile) --------------------------------------- -- pouvoir monitorer un attribut (user, date, oldValue, new Value) - Ces attributs ont une valeur tagguée versioned à vrai ou faux. - -> getHistory[Attribut]():list<History> - -Amélioration templates ----------------------- - -- préférer définir des variables plutôt que d'injecter du code dans les templates : - -Example : - -avant - -:: - - /*{table="<%=GeneratorUtil.getDBName(attr.getDeclaringElement()) + "_" + getName(attr)%>"*/ - - -après - -:: - - String dbName = GeneratorUtil.getDBName(attr.getDeclaringElement()) + "_" + getName(attr); - -ou - -:: - - String attrName = getName(attr); - String dbName = GeneratorUtil.getDBName(attr.getDeclaringElement()); - - /*{table="<%=dbName+"_"+attrName%>"}*/ - -- mettre une javadoc pour dire ce que la méthode va faire - -- incorporer des tests unitaires de génération :) - -- créer des constantes pour les stereotypes tagValues et les utiliser... - -- aller à la chasse aux constantes (exemple propertiesPattern dans DAOAbstractGenerator) - -- faire la chasse au code inutilisé - -- ajouter hasTagValue sur ObjectModelElement dans lutingenerator - -- réfléchir comment générer les imports pour ne plus utilisers les FQN - -- vérifier les javadocs générées (ajouter les exceptions,...) - -- reussir a résoudre les casts dans les DAOAbstraxct sur la méthode getEntityClass - -- réusiner les codes de génération d'attributs : - -:: - - String lazy = " lazy=\""; - if (notEmpty(attr.getTagValue(GeneratorUtil.TAG_LAZY))){ - lazy += attr.getTagValue(GeneratorUtil.TAG_LAZY); - } else { - lazy += "true"; - } - lazy += "\""; - -mais il ya d'autres cas à prévoir... : - -:: - - String fetch = ""; - if (notEmpty(attr.getTagValue(GeneratorUtil.TAG_FETCH))){ - fetch = " fetch=\"" + attr.getTagValue(GeneratorUtil.TAG_FETCH) + "\""; - } - -- Dans lutingenerator, renommer Util en GeneratorUtil et dans ToPIA, - GeneratorUtil en TopiaGeneratorUtil - -- supprimer les les boucles sur Iterator quand c'est possible et utiliser pluot des for-each - -- étudier la nécessité des GeneratorUtil.toLowerCaseFirstLetter(assocAttrName) présents dans EntityAbstractGenerator à propos des classes d'assoc - -- TODO Check wether this method could be used to generate getter and setters - -- Uniformiser et faire hériter les générateurs des interfaces et classe d'impl pour que le générateur de la classe d'impl soit capable de générer aussi l'interface diff --git a/src/site/rst/docs/y_cycle.rst b/src/site/rst/docs/y_cycle.rst deleted file mode 100644 index ea90c29..0000000 --- a/src/site/rst/docs/y_cycle.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -============================================= -Qu'est-ce qu'un cycle de développement en Y ? -============================================= - -Le cycle de développement en Y traditionnel peut être représenté de la manière -suivante : - -Les deux branches, la branche fonctionnelle (porteuse de la solution logique) et -la branche technique (qui définit la plateforme technique sur laquelle la -solution sera implantée) se rejoignent en amont de la conception détaillée et du -codage. Cette projection peut être accompagnée de génération de code, mais il -reste toujours une certaine quantité de code écrite à la main. - -Cette séparation des responsabilités et ce processsus donnent pleine satisfaction -lors du développement initial d'un logiciel. La vie d'un logiciel commence -toutefois au moment de sa mise en production et les évolutions qui y seront -apportées sont de deux natures : - - - Évolutions fonctionnelles : Ajout de fonctionnalités, correction de bugs, ... - - Evolutions techniques : Changement de bases de données, changement de - technologie sur les UI, nouveaux accès (SOAP ?), ... - -Si les évolutions fonctionnelles sont prises en compte par la nature itérative -des processus de développement, les évolutions techniques sont elles difficiles. - -Comment passer d'Hibernate à JDO, de Swing au client léger, des EJB aux -conteneurs légers ? En supprimant les dépendances de votre code sur les briques -techniques, en codant sur une plateforme technique abstraite, interfaces et -façades au travers desquelles vous pourrez manipuler les différentes solutions -techniques que vous retiendrez. Hibernate et JDO ne sont que deux API d'accès -aux données; Swing et client léger, des UI; les EJB et les conteneurs légers, -des logiques métiers déportées... diff --git a/src/site/rst/index.rst.vm b/src/site/rst/index.rst.vm deleted file mode 100755 index d24995f..0000000 --- a/src/site/rst/index.rst.vm +++ /dev/null @@ -1,152 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -======================================================= -Tools for Portable and Independent Architecture (ToPIA) -======================================================= - -ToPIA est un framework d'abstraction des plateformes techniques. À l'heure actuelle ToPIA se focalise sur la persistence -des données. - -Concrètement, lorsque vous utilisez ToPIA, vous définissez votre modèle UML, puis vous codez votre code métier sans vous -soucier de la persistence. C'est ToPIA qui va s'occuper de ce qui se passe entre ces 2 étapes. - - -Comment ça marche ? -=================== - -Avant tout, vous devez créer un modèle UML qui représente vos objets métier. - -Ici, nous avons un modèle très simple dans lequel un employé est caractérisé par son nom, son genre et sa ville de -résidence. Une société est constituée d'un nom, d'un SIRET et d'une liste d'employés. - -|DIAGRAMME| - -En amont de la compilation, ToPIA va générer (grâce à `Eugene`_)les fichiers nécessaires à son bon fonctionnement. Ces -fichiers générés ajoutés au code que vous avez écrit constituent les sources de l'application. Cela signifie que vous -bénéficiez de toute la robustesse d'une compilation Java, alliée à une sérieuse économie de lignes de code. Lorsque vous -packagez votre application, vous packagez donc des sources déjà générées, rien n'est généré ultérieurement. - -Les fichiers ainsi générés vous permettent de manipuler vos objets, de les charger depuis la base, les persister, -les supprimer ... Pour cela, vous disposez de plusieurs API de base qui donnent accès aux opérations les plus courantes, -mais également des classes générées qui vous évitent de devoir écrire 80% du code nécessaire à la manipulation de vos -objets. - -Par exemple, admettons que vous souhaitiez rechercher tous les emplyés qui habitent Nantes. Vous pouvez le faire en une -seule ligne sans vous soucier de comment charger des objets depuis la base : - -:: - - List<Employee> employees = personDao.forCityEquals("Nantes").findAll(); - -À l'éxécution, ToPIA va traduire ces appels de méthodes en requêtes compréhensibles par le support de persistence. À -l'heure actuelle, ToPIa se base sur `Hibernate`_, mais le framework est pensé de manière à masquer autant que possible -ce choix technique afin de faciliter une éventuelle migration vers un autre framework de mapping objet-relationnel. - -`Plus de détails sur les cycles en Y`_. - - -Les services -============ - -Autour de la persistence, ToPIA propose un certain nombre de services qui peuvent être activés ou non et qui vous -permettent de bénéficier d'autres fonctionnalités ou encore de rajouter des comportements auxquels nous n'aurions pas -pensé. - - - `Service de gestion des mises à jour`_ : permet de gérer les migrations de base lorsque vous déployez une nouvelle - version de votre application ; - - `Service de gestion des mises à jour (Flyway)`_ : permet également de gérer les migrations de base en se basant sur - `Flyway`_ ; - - `Service de gestion des mises à jour (Liquibase)`_ : permet également de gérer les migrations de base en se basant sur - `Liquibase`_ ; - - `Service de réplication`_ : permet de répliquer des données de base à base ; - - `Service CSV`_ : service gérant les imports et expots au format CSV. - - -Avantages -========= - - - Principales méthodes générées pour le recherche/chargement des objets ; - - Pas de mapping ORM à écrire ; - - Génération de code intelligente (basé sur l'héritage Java, compilation, ...) ; - - En dépit de la génération de code, il est toujours possible de remplacer une classe générée ; - - Déjà utilisé dans des projets à forte volumétrie ; - - Quasi-indépendance du code métier par rapport à la solution de persistence ; - - Migrations facilitées lors des livraisons de nouvelles versions ; - - Intégration transparente à l'outil de construction du projet (Maven, ...) ; - - ... - - -Par où commencer ? -================== - -ToPIA est disponible sur Maven Central - -:: - - <dependency> - <groupId>org.nuiton</groupId> - <artifactId>topia-perssitence</artifactId> - <version>${project.version}</version> - </dependency> - -Consultez les tutos pour créer votre projet à base de ToPIA en fonction de votre besoin : - - - `Créer un projet ToPIA en partant de rien`_ ; - - `Migrer de ToPIA 2.x vers ToPIA 3`_ ; - - ... - - -Version 3.0 -=========== - -|INFO| La version 3.0 de ToPIA est en cours de développement. Si vous utilisiez déjà la version 2, `consultez le guide de migration`_. - - - - - - - - -.. _Service de gestion des mises à jour: ./topia-service-migration -.. _Service de gestion des mises à jour (Flyway): ./topia-service-flyway -.. _Service de gestion des mises à jour (Liquibase): ./topia-service-liquibase -.. _Service de réplication: ./topia-service-replication -.. _Service CSV: ./topia-service-csv - -.. _consultez le guide de migration: ./tutos/migrate_to_3.0.html -.. _Migrer de ToPIA 2.x vers ToPIA 3: ./tutos/migrate_to_3.0.html -.. _Plus de détails sur les cycles en Y: ./docs/y_cycle.html -.. _Créer un projet ToPIA en partant de rien: ./tutos/from_scratch.html - -.. _Hibernate: http://hibernate.org/ -.. _Eugene: http://doc.nuiton.org/eugene/ -.. _Flyway: http://flywaydb.org/ -.. _Liquibase: http://www.liquibase.org/ -.. _ArgoUML: http://argouml.tigris.org/ - -.. |RECOMMENDED| image:: recommended.png -.. |INFO| image:: info.png -.. |DIAGRAMME| image:: employeeAndCompany.png diff --git a/src/site/rst/tutos/from_scratch.rst.vm b/src/site/rst/tutos/from_scratch.rst.vm deleted file mode 100644 index f36ea32..0000000 --- a/src/site/rst/tutos/from_scratch.rst.vm +++ /dev/null @@ -1,347 +0,0 @@ - -======================================== -Créer un projet ToPIA en partant de rien -======================================== - -Ce tutoriel explique comment créer un projet from scratch. Il se base sur `Maven`_ mais si vous êtes plus à l'aise avec -un autre outil de construction de projet, ça ne devrait pas poser de problème. - - -Créer le projet -=============== - -Pour commencer, il faut créer un projet Maven en respectant les conventions habituelles. Partons d'un projet Maven vide : - -:: - - mvn archetype:generate -DgroupId=com.company -DartifactId=my-topia-app -Dversion=0.1-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart - -L'arborescence du projet ressemble alors à : - - -:: - - my-topia-app - ├── pom.xml - └── src - ├── main - │ └── java - │ └── com - │ └── company - │ └── App.java - └── test - └── java - └── com - └── company - └── AppTest.java - - - -Ajoutez un dossier ``src/main/xmi``, c'est ici que nous allons placer le modèle. - -:: - - cd my-topia-app - mkdir src/main/xmi - -Dans le pom, on ajoute ToPIA en dépendance, et on configure la génération : - -:: - - <properties> - <topia-version>${project.version}</topia-version> - <eugene-version>${eugeneVersion}</eugene-version> - </properties> - - <dependencies> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${topia-version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.nuiton.eugene</groupId> - <artifactId>eugene-maven-plugin</artifactId> - <version>${eugene-version}</version> - <configuration> - <inputs>zargo</inputs> - <resolver>org.nuiton.util.FasterCachedResourceResolver</resolver> - </configuration> - <executions> - <execution> - <id>generate-entities</id> - <phase>generate-sources</phase> - <configuration> - <!-- Corresponding to extracted package from zargo file --> - <fullPackagePath>com.company.app.entities</fullPackagePath> - <!-- DefaultPackage used for Model classes generation (XxxEntityEnum, XxxTopiaXyz classes, ...) --> - <defaultPackage>com.company.app</defaultPackage> - <templates> - org.nuiton.eugene.java.JavaInterfaceTransformer, - org.nuiton.eugene.java.JavaBeanTransformer, - org.nuiton.eugene.java.JavaEnumerationTransformer, - org.nuiton.topia.templates.TopiaMetaTransformer - </templates> - </configuration> - <goals> - <goal>smart-generate</goal> - </goals> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${topia-version}</version> - </dependency> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-templates</artifactId> - <version>${topia-version}</version> - </dependency> - </dependencies> - </plugin> - </plugins> - </build> - - -Créer le modèle avec ArgoUML -============================ - -Avec `ArgoUML`_, créez un nouveau modèle. Nous allons créer un modèle simplifié pour une application de gestion de -bibliothèque. - -Nous avons modélisé les entités ``Book`` et ``Author`` avec les champs appropriés. Faites attention à bien placer les -entités dans le bon package (``com.company.app.entities``), sinon elles ne seront pas générées. Pour que ToPIA sache que -ces classes décrivent des entités qui ont vocation à être sauvées en base, il faut leur ajouter le stéréotype ``entity``. - -N'oubliez pas de donner un nom et une version au modèle. - -Enregistrez votre modèle dans ``src/main/xmi`` et nommez le ``library-model.zargo``. - - -|MODEL| - -Note : le modèle utilisé pour ce tutoriel est `disponible ici`_. - -C'est prêt ! -============ - -Il suffit de construire l'application avec Maven. - -:: - - mvn clean install - -La compilation va provoquer la phase de génération. Si on examine le contenu du projet, on voit apparaître un dossier -``target/generated-sources/java`` qui va regrouper le code généré : - -:: - - my-topia-app - ├── pom.xml - ├── src - │ ├── main - │ │ ├── java - │ │ │ └── com - │ │ │ └── company - │ │ │ └── App.java - │ │ └── xmi - │ │ └── library-model.zargo - │ └── test - │ └── java - │ └── com - │ └── company - │ └── AppTest.java - └── target - ├── classes - │ └── ... - ├── generated-sources - │ ├── java - │ │ └── com - │ │ └── company - │ │ └── app - │ │ ├── AbstractMyLibraryTopiaApplicationContext.java - │ │ ├── AbstractMyLibraryTopiaDao.java - │ │ ├── AbstractMyLibraryTopiaPersistenceContext.java - │ │ ├── entities - │ │ │ ├── AbstractAuthorTopiaDao.java - │ │ │ ├── AbstractBookTopiaDao.java - │ │ │ ├── AuthorAbstract.java - │ │ │ ├── AuthorImpl.hbm.xml - │ │ │ ├── AuthorImpl.java - │ │ │ ├── Author.java - │ │ │ ├── AuthorTopiaDao.java - │ │ │ ├── BookAbstract.java - │ │ │ ├── BookImpl.hbm.xml - │ │ │ ├── BookImpl.java - │ │ │ ├── Book.java - │ │ │ ├── BookTopiaDao.java - │ │ │ ├── GeneratedAuthorTopiaDao.java - │ │ │ └── GeneratedBookTopiaDao.java - │ │ ├── MyLibraryEntityEnum.java - │ │ ├── MyLibraryTopiaApplicationContext.java - │ │ ├── MyLibraryTopiaDaoSupplier.java - │ │ └── MyLibraryTopiaPersistenceContext.java - │ ├── models - │ │ └── library-model.objectmodel - │ └── xmi - │ └── library-model.xmi - [...] - └── my-topia-app-0.1-SNAPSHOT.jar - - - -ToPIA a donc généré plusieurs fichiers, dont : - - * ``MyLibraryTopiaApplicationContext.java`` : représente le point d'entrée dans l'application. (cf `TopiaApplicationContext`_) ; - * ``MyLibraryTopiaPersistenceContext.java`` : représente un transaction (cf `TopiaPersistenceContext`_) ; - * ``MyLibraryTopiaDaoSupplier.java`` : permet d'obtenir une instance de n'importe quel Dao géré par ToPIA ; - * ``MyLibraryEntityEnum.java`` : liste les contrats et classes d'implémentation du modèle ; - * des classes abstraites pour le ``MyLibraryTopiaApplicationContext`` et ``MyLibraryTopiaPersistenceContext``. - -Dans le package ``com.company.app.entities``, on retrouve nos deux entités ``Book`` et ``Author``. Chaque entité est représentée par plusieurs fichiers : - - * ``Book.java`` : une interface qui expose les informations publiques de l'entité Book ; - * ``BookAbstract.java`` : l'implémentation générée par ToPIA. Cette classe est abstraite ; - * ``BookImpl.java`` : la classe concrète implémentant la classe abstraite ; - * ``BookImpl.hbm.xml`` : le fichier de mapping Hibernate ; - * ``GeneratedBookTopiaDao.java`` : contient le code généré relatif aux entité Book : ``forNameEquals(...)``, ``forIsbnIn(...)``, ``forAuthorEquals(...)`` ; - * ``AbstractBookTopiaDao.java`` : implémentation du ``GeneratedBookTopiaDao`` retournant des entités héritant de Book ; - * ``BookTopiaDao.java`` : implémentation du ``GeneratedBookTopiaDao`` retournant des entités Book. - - -Parmi toutes ces classes relatives aux entités, celles que vous allez principalement utiliser sont ``Book.java`` et ``BookTopiaDao.java``. - - -On teste ? -========== - -L'archetype Maven a créé un projet compatible JUnit, ça tombe bien on va s'en servir ! Par contre, la version proposée -par défaut est un peu vieille, on va la mettre à jour dans le ``pom.xml``. Il nous faut aussi une base pour faire les -tests, ajoutez ``H2`` : - -:: - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>${junitVersion}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>${h2Version}</version> - <scope>test</scope> - </dependency> - - - -Voilà un test qui initialise ToPIA et créé des entités : - -:: - - package com.company; - - import java.util.HashMap; - import java.util.Map; - - import org.junit.Assert; - import org.junit.Test; - import org.nuiton.topia.persistence.TopiaConfigurationConstants; - - import com.company.app.MyLibraryTopiaApplicationContext; - import com.company.app.MyLibraryTopiaPersistenceContext; - import com.company.app.entities.Author; - import com.company.app.entities.AuthorTopiaDao; - import com.company.app.entities.Book; - import com.company.app.entities.BookTopiaDao; - - public class AppTest { - - @Test - public void testApp() { - // Declaration de la configuration - Map<String, String> config = new HashMap<String, String>(); - config.put(TopiaConfigurationConstants.CONFIG_DRIVER, "org.h2.Driver"); - config.put(TopiaConfigurationConstants.CONFIG_DIALECT, "org.hibernate.dialect.H2Dialect"); - config.put(TopiaConfigurationConstants.CONFIG_USER, "sa"); - config.put(TopiaConfigurationConstants.CONFIG_PASS, ""); - config.put(TopiaConfigurationConstants.CONFIG_URL, "jdbc:h2:file:/tmp/test-" + System.nanoTime()); - config.put(TopiaConfigurationConstants.CONFIG_PERSISTENCE_INIT_SCHEMA, "true"); - - // Creation de l'ApplicationContext (va initialiser la base et les services de ToPIA) - MyLibraryTopiaApplicationContext applicationContext = - new MyLibraryTopiaApplicationContext(config); - - // Démarre une transaction représentée par le PersistenceContext - MyLibraryTopiaPersistenceContext persistenceContext = - applicationContext.newPersistenceContext(); - - // On demande au PersistenceContext les instances des Dao - AuthorTopiaDao authorDao = persistenceContext.getAuthorDao(); - BookTopiaDao bookDao = persistenceContext.getBookDao(); - - Assert.assertEquals(0, authorDao.count()); - Assert.assertEquals(0, bookDao.count()); - - { // On créé un author et on demande au Dao de le persister - Author author = authorDao.newInstance(); - author.setName("Antoine de Saint-Exupéry"); - authorDao.create(author); - } - - Assert.assertEquals(1, authorDao.count()); - - { // On créé un livre en listant les propriétés qui le composent - Author author = authorDao - .forNameEquals("Antoine de Saint-Exupéry") - .findUnique(); - bookDao.create(Book.PROPERTY_NAME, "Le petit prince", - Book.PROPERTY_AUTHOR, author); - } - - Assert.assertEquals(1, bookDao.count()); - - // On commite la transaction - persistenceContext.commit(); - - // Fermeture des contextes - persistenceContext.close(); - applicationContext.close(); - } - } - -Cette classe de test est `télécargeable ici`_. - - -Aller plus loin -=============== - - * `Comment personnaliser la génération de code ?`_ - * `Comment intégrer ToPIA dans votre application ?`_ - * `Comment gérer les évolutions de schéma avec ToPIA ?`_ - * `Détails de l'intégration avec Maven`_ - - - -.. _Maven: http://maven.apache.org/ -.. _ArgoUML: http://argouml.tigris.org/ - -.. _disponible ici: ../library-model.zargo -.. _télécargeable ici: ../AppTest.java - -.. _TopiaApplicationContext: http://doc.nuiton.org/topia/topia-persistence/apidocs/index.html?org/nuiton/... -.. _TopiaPersistenceContext: http://doc.nuiton.org/topia/topia-persistence/apidocs/index.html?org/nuiton/... - -.. _Comment personnaliser la génération de code ?: ./howto_customize_generation.html -.. _Comment intégrer ToPIA dans votre application ?: ./howto_architecture_with_topia.html -.. _Comment gérer les évolutions de schéma avec ToPIA ?: ./howto_migration_service.html -.. _Détails de l'intégration avec Maven: ../docs/maven_integration.html - -.. |MODEL| image:: ../library.png diff --git a/src/site/rst/tutos/howto_architecture_with_topia.rst b/src/site/rst/tutos/howto_architecture_with_topia.rst deleted file mode 100644 index 8be89b7..0000000 --- a/src/site/rst/tutos/howto_architecture_with_topia.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - -Comment intégrer ToPIA dans votre application ? -=============================================== - -TODO diff --git a/src/site/rst/tutos/howto_customize_generation.rst b/src/site/rst/tutos/howto_customize_generation.rst deleted file mode 100644 index 007d880..0000000 --- a/src/site/rst/tutos/howto_customize_generation.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - -Comment personnaliser la génération de code ? -============================================= - -TODO - - -Les données associées aux éléments du modèle --------------------------------------------- - -Le modeleur n'est parfois pas suffisant pour décrire toute les subtilités du modèle. Le modèle se voulant indépendant de -la plate-forme cible, on ne peut y inclure directement des notions spécifiques à ToPIA. C'est pourquoi nous allons -pouvoir ajouter ces informations spécifiques via le fichier ``src/main/resources/library-config.properties``. - - diff --git a/src/site/rst/tutos/howto_migration_service.rst b/src/site/rst/tutos/howto_migration_service.rst deleted file mode 100644 index 40e5bed..0000000 --- a/src/site/rst/tutos/howto_migration_service.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - -Comment gérer les évolutions de schéma avec ToPIA ? -=================================================== - -TODO diff --git a/src/site/rst/tutos/migrate_to_3.0.rst b/src/site/rst/tutos/migrate_to_3.0.rst deleted file mode 100644 index 1ff11a9..0000000 --- a/src/site/rst/tutos/migrate_to_3.0.rst +++ /dev/null @@ -1,446 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -================================ -Migrer depuis ToPIA 2.x vers 3.0 -================================ - -.. contents:: - - -Gestion des dépendances -======================= - -|MANDATORY| - -ToPIA nécessite des versions minimum de Eugene et Hibernate. Vous devez utiliser les version suivantes : - - * Eugene >= 2.12 - * Hibernate >= 4.3.5.Final - - -Configuration du plugin Maven -============================= - -|MANDATORY| - -Les templates sont contenus dans un modules à part, il faut désormais utiliser -cette dépendance dans le plugin eugene. - -:: - - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-templates</artifactId> - <version>3.0</version> - </dependency> - -De plus les templates ont changé de package, le nouveau package est le suivant : - -:: - - org.nuiton.topia.templates - - - -Génération des PropertyChangeSupport -==================================== - -|MANDATORY| - -Nous nous sommes aperçus que l'impact des PropertyChangeSupport sur les performances peut ne pas être négligeable. C'est -pourquoi nous avons décidé de désactiver par défaut leur génération. Si vous souhaitez que les PropertyChangeSupport -soient générés, il faut ajouter à votre fichier de properties la tag-value suivante : - -:: - - model.tagValue.generatePropertyChangeSupport=true - -Au même titre, les méthodes permettant d'ajouter/supprimer des listener sur les PropertyChangeSupport ne sont plus sur -le contrat TopiaEntity, mais sur le contrat ListenableTopiaEntity. Si vous utilisiez ces méthodes sur votre entité -métier : pas de changement. En revanche si vous utilisiez ces méthodes sur TopiaEntity, vous devez maintenant caster -l'entité ou utiliser directement le bon contrat. - -:: - - // Topia 2.x - TopiaEntity anEntity = ...; - anEntity.addPropertyChangeListener(listener); - - // Topia 3 (cast) - TopiaEntity anEntity = ...; - if (anEntity instanceof ListenableTopiaEntity) { - ((ListenableTopiaEntity)anEntity).addPostWriteListener(listener); - } - - // Topia 3 (direct) - ListenableTopiaEntity anEntity = ...; - anEntity.addPostWriteListener(listener); - -D'une manière générale, si toutes vos entités sont des ListenableTopiaEntity, nous vous encourageons à utiliser ce -contrat à la place de TopiaEntity. - -Ces méthodes ont également été renommées, voici les correspondances : - -:: - - addVetoableListener -> addPreReadListener - removeVetoableListener -> removePreReadListener - addPropertyListener -> addPostReadListener - removePropertyListener -> removePostReadListener - addVetoableChangeListener -> addPreWriteListener - removeVetoableChangeListener -> removePreWriteListener - addPropertyChangeListener -> addPostWriteListener - removePropertyChangeListener -> removePostWriteListener - -À noter que les méthodes suivantes existent toujours, mais sont dorénavant isolées sur un autre contrat (ListenableBean) : - -:: - - addPropertyChangeListener - removePropertyChangeListener - - -Refonte des indexed/ordered -=========================== - -|MANDATORY| - -Vous devez migrer votre modèle zargo depuis la beta-3 suite à une confusion entre ordered et indexed (stéréotypes -à placer sur une association-end d'un lien entre deux entités). - - * Le stéréotype "indexed" est déprécié, vous devez le remplacer par l'attribut "ordered" - * L'attribut (ou le stéréotype) "ordered" maintient l'ordre d'insertion en base, il faut donc vous assurer qu'une - colonne <champ>_idx est bien présente dans la base de donnée et au besoin écrire la migration nécessaire (voir - `le guide dédié`_) pour ajouter la colonne et fixer les indexes manquants (en commençant à 0). - * Les types des collections générées ont changé afin d'utiliser un contrat plus proche du modèle (selon la présence - des stéréotypes "unique" et/ou "ordered"). - -NB : La documentation contient des `examples de migration pour la refonte des indexed/ordered`_. - -Code déprécié -============= - -La migration vers ToPIA 3.0 voit un certain nombre de classes et attributs dépréciés. - -Gérer les impacts n'est pas *nécessaire* pour passer à ToPIA 3.0, mais c'est fortement recommandé. En effet, ce code -deviendra incompatible avec ToPIA 3.1, gérer les impacts au plus tôt permettra une migration en douceur. - -Pas vrai, à partir de la 3.0-alpha-6, on casse la rétro-compatibilité car sinon -c'est trop compliqué à gérer. - -Propriétés TOPIA_* ------------------- - -|RECOMMENDED| - -Les constantes suivantes sont à remplacer par leurs homologues avec le prefix *PROPERTY_* : - - * ``TopiaEntity#TOPIA_ID`` devient ``TopiaEntity#PROPERTY_TOPIA_ID`` - * ``TopiaEntity#TOPIA_CREATE_DATE`` devient ``TopiaEntity#PROPERTY_TOPIA_CREATE_DATE`` - * ``TopiaEntity#TOPIA_VERSION`` devient ``TopiaEntity#PROPERTY_TOPIA_VERSION`` - * ``TopiaEntityContextable#TOPIA_CONTEXT`` devient ``TopiaEntityContextable#PROPERTY_TOPIA_CONTEXT`` - * ``TopiaEntity#COMPOSITE`` devient ``TopiaEntityContextable#PROPERTY_COMPOSITE`` - * ``TopiaEntity#AGGREGATE`` devient ``TopiaEntityContextable#PROPERTY_AGGREGATE`` - - -TopiaId -------- - -|MANDATORY| - -La classe sera supprimée. Pour manipuler les topiaId, il faut utiliser le **TopiaIdFactory**. - -La forme des topiaIds générés à changé. Si vous souhaitez conserver l'ancienne forme parce que vous -souhaitez conserver l'uniformité avec une base de données existante ou si vous utilisez -topia-service-security, vous devez explicitement le spécifier à Topia 3.0 via la configuration : - - ``topia.persistence.topiaIdFactoryClassName=org.nuiton.topia.persistence.internal.LegacyTopiaIdFactory`` - - -TopiaContextImplementor est supprimé ------------------------------------- - -Cette classe joue un rôle central dans ToPIA 2. Elle n'existe plus dans ToPIA 3. - -TODO Expliquer par quoi remplacer. - -TopiaEntity modifié -------------------- - -Les méthodes (``getComposite()``, ``getAggregate()``) ont été déplacées vers le contrat ``TopiaEntityContextable``. - -TopiaService#[preInit|postInit](...) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -|MANDATORY| - -Les services implémentant **TopiaService** doivent changer leur code. -Les méthodes ``preInit(TopiaContextImplementor)`` et ``postInit(TopiaContextImplementor)`` doivent être remplacées par -``preInit(TopiaContext)`` et ``postInit(TopiaContext)`` - -Service de migration --------------------- - -|MANDATORY| - -Toute référence à **TopiaContextImplementor** a été supprimé et remplacée par -**TopiaContext**, cela change donc les signatures et rend le code incompatible, -il faut donc bien effectuer le remplacement dans les callbacks que vous avez -écrits. - - -Gestion des exceptions ----------------------- - -|RECOMMENDED| - -**TopiaRuntimeException** est dépréciée. Il faut désormais déclarer **TopiaException** dans la clause catch. -**TopiaException** devient Runtime. Il n'est plus nécessaire de l'intercepter. - -Généricité ----------- - -|RECOMMENDED| - -Les methodes suivantes sont désormais génériques : - - * ``TopiaContext#find(...)`` - * ``TopiaContext#findAll(...)`` - * ``TopiaContext#findUnique(...)`` - -Si le code précédent réalisait un cast, il faut le supprimer car cela peut causer maintenant une erreur de compilation. - - -TopiaContextListener --------------------- - -|RECOMMENDED| - -L'API **TopiaContextListener** contenant des opérations de manipulation du schéma de base de données a été déprécié. -L'interface est remplacée par **TopiaSchemaListener**. Les méthodes présentes sur le **TopiaContext** qui servaient à -ajouter/supprimer un **TopiaContextListener** sont elles aussi dépréciées au profit de méthodes manipulant des -**TopiaSchemaListener**. - - -Transformer pour la génération des Dao --------------------------------------- - -|RECOMMENDED| - -Si vous utilisiez explicitement le Transformer de DAO dans la configuration de votre plugin Eugene, il faut maintenant -changer le nouveau Transformer : org.nuiton.topia.templates.EntityDaoTransformer - -Exemple de configuration : - -:: - - <plugin> - <groupId>org.nuiton.eugene</groupId> - <artifactId>eugene-maven-plugin</artifactId> - <executions> - <execution> - <id>generate-entities</id> - <phase>generate-sources</phase> - <configuration> - <inputs>classpath:model:/:myProject.objectmodel</inputs> - <defaultPackage>org.project.entities</defaultPackage> - <templates> - org.nuiton.topia.templates.EntityDaoTransformer - </templates> - </configuration> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - - - -|MANDATORY| - -Si vous aviez surchargé certains des DAO générés, vous devrez probablement les renommer et changer leur signature. -Surveillez les logs de génération des DAO à la recherche des messages tels que : - -:: - - WARN [main] (EntityDaoTransformer.java:384) warnOnLegacyClassDetected - Legacy DAO detected ! - - You should consider renaming 'org.project.entities.ZoneDAOImpl' to 'org.project.entities.AbstractZoneTopiaDao' - - Expected class declaration is : public class AbstractZoneTopiaDao<E extends Zone> extends GeneratedZoneTopiaDao<E> { - -Pour l'entité Zone, vous devez supprimer votre ZoneDAO et votre ZoneDAOImpl et déplacer les méthodes -* dans ZoneTopiaDao si la méthode ne peut être utilisée seulement pour l'entité Zone (et pas les sous-classes de Zone) -* dans AbstractZoneTopiaDao si la méthode peut être utilisée pour Zone ET les entités qui héritent de Zone - - -Méthodes findAll, find et findUnique sur TopiaContext ------------------------------------------------------ - -|MANDATORY| - -Si vous utilisiez ces méthodes, il est désormais recommandé d'utiliser les méthodes sur le DAO associé à votre éntité -ou par l'intermédiare du **TopiaJpaSupport**. - -Depuis un DAO surchargé -~~~~~~~~~~~~~~~~~~~~~~~ - -Pour faciliter la migration, ces méthodes ont été portées sur l'interface deprecated **TopiaDAO**. Donc si dans votre -DAO vous faisiez : - -:: - - List<Zone> zones = context.find("FROM Zone WHERE name=:name" , startIndex, endIndex, "name", "Principale"); - -Il vous suffit de retirer le "context." : - -:: - - List<Zone> zones = find("FROM Zone WHERE name=:name" , startIndex, endIndex, "name", "Principale"); - -Dans tous les cas -~~~~~~~~~~~~~~~~~ - -Dans tous les cas, ces méthodes étant dépréciées, vous devriez consulter leur Javadoc pour savoir par quels appels de -méthodes les remplacer. S'il n'y pas de documentation, il faut remplacer le code appellant par le corps de la méthode dépréciée -(fonctionnalité « inline » dans l'IDE). - -Amélioration du code sql ------------------------- - -Voir TopiaSqlQuery, TopiaSqlWork et TopiaSqlSupport. - - -Refactoring des packages -======================== - -|MANDATORY| - -Un grand nombre de classes ont été déplacées. Voici les principaux renommages : - -:: - - org.nuiton.topia.TopiaException -> org.nuiton.topia.persistence.TopiaException - org.nuiton.topia.TopiaDaoSupplier -> org.nuiton.topia.persistence.TopiaDaoSupplier - org.nuiton.topia.TopiaJpaSupport -> org.nuiton.topia.persistence.support.TopiaJpaSupport - org.nuiton.topia.TopiaPersistenceContext -> org.nuiton.topia.persistence.TopiaPersistenceContext - org.nuiton.topia.TopiaNotFoundException -> org.nuiton.topia.persistence.TopiaNotFoundException - org.nuiton.topia.TopiaApplicationContextCache -> org.nuiton.topia.persistence.TopiaApplicationContextCache - org.nuiton.topia.TopiaTransaction -> org.nuiton.topia.persistence.TopiaTransaction - org.nuiton.topia.persistence.TopiaHibernateSessionRegistry -> org.nuiton.topia.persistence.internal.TopiaHibernateSessionRegistry - org.nuiton.topia.TopiaListenableSupport -> org.nuiton.topia.persistence.support.TopiaListenableSupport - org.nuiton.topia.persistence.HibernateProvider -> org.nuiton.topia.persistence.internal.HibernateProvider - org.nuiton.topia.TopiaContextFactory -> org.nuiton.topia.persistence.TopiaConfigurationConstants - - -Le refactoring peut s'effectuer facilement en appliquant les commandes suivantes : - -:: - - grep -m 1 -nr 'org.nuiton.topia.TopiaException' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaException/org.nuiton.topia.persistence.TopiaException/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaDaoSupplier' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaDaoSupplier/org.nuiton.topia.persistence.TopiaDaoSupplier/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaJpaSupport' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaJpaSupport/org.nuiton.topia.persistence.support.TopiaJpaSupport/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaPersistenceContext' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaPersistenceContext/org.nuiton.topia.persistence.TopiaPersistenceContext/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaNotFoundException' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaNotFoundException/org.nuiton.topia.persistence.TopiaNotFoundException/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaApplicationContextCache' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaApplicationContextCache/org.nuiton.topia.persistence.TopiaApplicationContextCache/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaTransaction' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaTransaction/org.nuiton.topia.persistence.TopiaTransaction/g' - grep -m 1 -nr 'org.nuiton.topia.persistence.TopiaHibernateSessionRegistry' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.persistence.TopiaHibernateSessionRegistry/org.nuiton.topia.persistence.internal.TopiaHibernateSessionRegistry/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaListenableSupport' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaListenableSupport/org.nuiton.topia.persistence.support.TopiaListenableSupport/g' - grep -m 1 -nr 'org.nuiton.topia.persistence.HibernateProvider' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.persistence.HibernateProvider/org.nuiton.topia.persistence.internal.HibernateProvider/g' - grep -m 1 -nr 'org.nuiton.topia.TopiaContextFactory' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/org.nuiton.topia.TopiaContextFactory/org.nuiton.topia.persistence.TopiaConfigurationConstants/g' - grep -m 1 -nr 'TopiaContextFactory.CONFIG_' . | awk -F ':' '{print $1}' | xargs sed -i -e 's/TopiaContextFactory.CONFIG_/TopiaConfigurationConstants.CONFIG_/g' - - -FAQ -=== - -Voici quelques appels faisables en ToPIA 2.x et leur équivalent dans ToPIA 3 - -Démarrage d'une nouvelle transaction ------------------------------------- - -:: - - // ToPIA 2.x : rootTx étant le TopiaContext root - TopiaContext transaction = rootTx.beginTransaction(); - - // ToPIA 3 : rootTx étant le MyModelTopiaApplicationContext - MyModelTopiaPersistenceContext transaction = rootTx.newPersistenceContext(); - // Note : MyModelTopiaPersistenceContext implémente le contrat TopiaTransaction - - -Accès à un Dao depuis un autre Dao ----------------------------------- - -:: - - // ToPIA 2.x - SpeciesDAO speciesDAO = MyModelDAOHelper.getSpeciesDAO(getContext()); - - // ToPIA 3 - SpeciesTopiaDao speciesDAO = topiaDaoSupplier.getDao(Species.class, SpeciesTopiaDao.class); - - - -Accès à la session Hibernate ----------------------------- - -:: - - // ToPIA 2.x : tx étant le TopiaContext - ((MyModelTopiaPersistenceContextImplementor) tx).getHibernate().flush(); - - // ToPIA 3 : tx étant le MyModelTopiaPersistenceContext - tx.getHibernateSupport().getHibernateSession().flush(); - - - -Liste des classes d'implémentation (ou des contrats) ----------------------------------------------------- - -:: - - // ToPIA 2.x - MyModelDAOHelper.getContractClasses(); - MyModelDAOHelper.getImplementationClasses(); - - // ToPIA 3 - MyModelEntityEnum.getContractClasses(); - MyModelEntityEnum.getImplementationClasses(); - - - -TopiaPersistenceHelper renommé ------------------------------- - -Le contrat TopiaPersistenceHelper est renommé en TopiaEntityEnumProvider. À noter que le MyModelTopiaApplicationContext -implémente ce contrat. - - - -.. _le guide dédié: ./user/ordered_vs_indexed_migration.html -.. _examples de migration pour la refonte des indexed/ordered: ./user/ordered_vs_indexed_migration.html - -.. |RECOMMENDED| image:: recommended.png -.. |MANDATORY| image:: mandatory.png diff --git a/src/site/rst/user/continue_devel.rst b/src/site/rst/user/continue_devel.rst deleted file mode 100644 index 588b629..0000000 --- a/src/site/rst/user/continue_devel.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -========================== -Continuer le développement -========================== - -Vous avez maintenant les clés pour développer votre application. Voici quelques -éléments qui vous permettront de poursuivre les développements. - -Gestion des évènements -====================== - -TODO - -Les visiteurs d'entités -======================= - -TODO - -Écrire une migration -==================== - -TODO - -Débugguer l'application -======================= - - * Ajouter ``-Deugene.verbose`` sur la ligne de commande pour voir ce que - EUGene fait pendant la phase de génération. - - * Ne pas hésiter à examiner les fichiers ``.hbm.xml`` générés pour voir - s'ils correspondent bien à ce que vous attendiez. De même, on - peut examiner le fichier ``.objectmodel`` pour voir si l'interprétation - du fichier zargo est bien celle qu'on attend. diff --git a/src/site/rst/user/extend_model.rst b/src/site/rst/user/extend_model.rst deleted file mode 100644 index da8c096..0000000 --- a/src/site/rst/user/extend_model.rst +++ /dev/null @@ -1,141 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -================= -Étendre le modèle -================= - -Nous avons réussi à manipuler les entités d'un modèle simple. Voyons comment -rendre notre modèle plus complet pour nous rapprocher de l'utilisation de ToPIA -dans le contexte d'une véritable application. - -Ajouter une méthode à une entité -================================ - -Dans ArgoUML, vous pouvez ajouter une méthode sur une entité. Pour cela, -ajouter la méthode dans le modèle, sur l'entité elle-même. Si besoin, il -faudra ajouter au modèle les types des paramètres ou de la valeur de retour. - -ToPIA utilise le patron de conception `Generation Gap`_ pour séparer le code -généré du code écrit par le développeur. Ainsi, le ré-génération n'écrase -que du code généré et jamais du code utilisateur. Vous ne devez jamais -modifier les classe générées mais seulement toucher aux implémentations -qui héritent de ces classes. - -Vous remarquerez que ToPIA a bien ajouté la méthode dans l'interface de -l'entité mais à laisser l'implémentation abstraite. C'est donc à vous -d'écrire le code dans le Impl. - -Forcer le chargement d'une association -====================================== - - - -Utiliser une clé métier pour identifier les entité (naturalId) -============================================================== - -Chaque entité possède une cré primaire topiaId, mais dans certains cas il est -important d'avoir une notion d'unicité sur une ou plusieurs propriétés d'une -entité, ce qu'on appele une clé métier. Le comportement souhaité serait de -préserver l'unicité sur ces propriétés ainsi que la création d'un index pour -optimiser l'accès aux données. - -Il est donc nécessaire de préciser cette notion au niveau du modèle, cela -par le biais du tagValue (également propriété hibernate) **naturalId** :: - - fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.class.tagvalue.naturalIdMutable=false - fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.sexe.tagvalue.naturalId=true - fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.ocean.tagvalue.naturalId=true - fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.ocean.tagvalue.notNull=false - fr.ird.observe.entities.referentiel.ParametrageTaillePoidsFaune.attribute.espece.tagvalue.naturalId=true - -Ici, les propriétés "sexe", "ocean" et "espece" forment la clé métier de -l'entité "ParametrageTaillePoidsFaune". Par défaut les propriétés -d'une clé métier sont non null, mais il est possible de préciser dans certains -cas qu'une propriété peut l'être (comme ici avec "ocean"). - -Le naturalId provoque trois résultats : - -- création d'un index unique en base. -- vérification dans hibernate de l'intégrité de l'entité à la création : - il est donc nécessaire de créer l'entité avec des valeurs pour les propriétés - de la clé métier (méthode create sur le dao). -- impossibilité de modifier les valeurs de ces propriétés sur une entité - existante ; à moins de le préciser dans la configuration via le tagValue - "naturalIdMutable" placé à "true" (déconseillé). - -Le DAO de l'entité se voit ajouté les méthodes suivantes : - -- createByNaturalId : qui permet de crée l'entité avec tout les naturalId -- createByNotNull : qui permet de crée l'entité avec tout les naturalId not null (donc obligatoire) -- existByNaturalId : qui permet de vérifié que l'entité correspondant au naturalId existe -- findByNaturalId : qui permet de chercher l'entité sur les naturalId - -Ajouter des requêtes complexes -============================== - -Ajouter une méthode à un DAO ----------------------------- - -Il est possible d'étendre un DAO avec des méthodes définies à partir du modèle -(méthode différente entre version 2.2 et 2.4). - -Il suffit de créer une interface contenant les méthodes à ajouter au dao. -Cette interface doit avoir le stéréotype <<dao>>. De plus l'interface doit -dépendre (lien de dépendance nommé explicitement 'dao') de la classe de l'entité. -Le DAOImpl ne sera pas généré et devra être défini à la charge du développeur. - -Exemple (présent dans topiatest.zargo dans les sources de topia-persistence) : - -Ajout d'une méthode findAllByCompany sur une entité Contact. Chaque société à un ensemble d'employés (Employee) qui ont des -contacts (Tel, Adresse, ...). Ces contacts ne sont pas unique à chaque employé. Il peut être intéressant de connaître directement -tous les contacts d'une société directement avec le DAO:: - - public class ContactDAOImpl<E extends Contact> extends ContactDAOAbstract<E> { - - @Override - public Set<Contact> findAllByCompany(Company company) throws TopiaException { - ... - } - - } - -Une erreur de compilation apparaîtra si ce fichier n'existe pas (car non généré). La signature de la méthode -est présente dans le DAOAbstract (ici ContactDAOAbstract), d'où le @Override. - -Note - L'ajout du throws TopiaException est automatique et n'a pas besoin d'être spécifié au niveau du modèle. - -Implémenter la méthode avec TopiaQuery --------------------------------------- - -Vous pouvez, dans le DAO écrire vos requêtes directement en HQL, toutefois, l'API TopiaQuery vous -permet d'écrire les requêtes avec une API générée, qui suit les évolutions du modèle plutôt que -de coder le HQL en dur. - -Voir TopiaQuery_. - - -.. _Generation Gap: http://fr.wikibooks.org/wiki/Patrons_de_conception/Generation_gap -.. _TopiaQuery: TopiaQuery.html diff --git a/src/site/rst/user/faq.rst b/src/site/rst/user/faq.rst deleted file mode 100644 index 117e3ac..0000000 --- a/src/site/rst/user/faq.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -========================== -Frequently Asked Questions -========================== - -Problème lors du chargement d'une entity -======================================== - -Le chargement utilise les méthodes Set des propriétés, il faut donc faire -attention si on les surcharge. - -Il faut faire attention lors de l'ajout, sur l'entity, de méthodes qui ont la -même signature que des méthods Set de propriétés avec juste des arguments -différents, car elles peuvent être utilisées à la place de la vrai méthode -pour quelque valeur (par exemple null). - -Faire fonctionner les Web Services Topia via RMI -================================================ -L'utilisation des Web Services sur RMI impose la génération de classes sauvées -sur disque. -Elle sont construites à la volée et sauvées dans le dossier "./topiagen". - -Ce dossier doit donc se trouver dans le classpath. - -Comment commit (ou rollback) une transaction directement à partir d'un DAO ? -============================================================================ - -Contrairement à ce que l'on pourrait croire aux premiers abords, les méthodes commitTransaction() -et rollbackTransaction() disponibles dans les DAO ne sont pas prévus à cet effet. Il faut toujours -utiliser le contexte pour commit (ou rollback) une transaction. Donc pour le faire à partir d'un DAO : -dao.getContext().commitTransaction() // on récupère le context (transaction sur le DAO) et on commit. -Le principe reste identique pour le rollback. -Pour revenir sur les méthodes commitTransaction() et rollbackTransaction() disponibles sur le DAO, elles -servent de "callback" au moment du commit (ou rollback) de la transaction. Le context se chargera d'appeler -tous les commitTransaction() des DAO, ceci afin de permettre un traitement spécifique au DAO au moment du commit. -Ce traitement peut donc être effectué directement à partir du dao via cette méthode sans passer par le context. - diff --git a/src/site/rst/user/howto.rst.vm b/src/site/rst/user/howto.rst.vm deleted file mode 100644 index 972e2e1..0000000 --- a/src/site/rst/user/howto.rst.vm +++ /dev/null @@ -1,156 +0,0 @@ -.. - -.. * #%L -.. * ToPIA :: Persistence -.. * -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2011 CodeLutin, Chatellier Eric -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -====== -How to -====== - -Ce document a pour objectif de prendre en main le framework Topia. Le document -est constitué de 4 parties, la modélisation, la génération, la configuration et -l'utilisation. - -Modélisation ------------- - -La première étape constiste à réaliser le modèle UML soit avec Argouml -(http://argouml.tigris.org) soit avec Poséidon (http://www.gentleware.com). - -Le stérotype «entity» sur les classes permet de préciser que la classe est -persistée par Topia. D'autre stérotypes (extern, service, ...) sont disponibles -mais ne sont pas présentés. - -Le fichier de modélisation peut être complété par un fichier de configuration -nommé <nom fichier modélisation>.properties. Il contient des informations -techniques propres aux librairies utilisé par Topia. - -Exemple : - -:: - - # Précise comment est mappé un type - # model.tagvalue.<type java>=<type base de donnée> - model.tagvalue.java.lang.String=text - - # Précise le schema de la base de données par défaut - # model.tagvalue.dbSchema=<nom schéma> - model.tagvalue.dbSchema=test - - # Précise l'entête de l'ensemble des fichiers générés - # model.tagvalue.copyright=<valeur> - model.tagvalue.copyright=/* *##%\n Copyright (C) 2011 Code Lutin\n *##% */ - - # Force le chargement d'un attribut - # <nom paquetage>.<nom entité>.attribute.<nom attribut>.tagvalue.lazy=false - org.codelutin.Person.attribute.association.tagvalue.lazy=false - -Génération ----------- - -La génération des fichiers Topia se font par l'utilisation du plugin maven -Eugene_. Ce plugin est disponible sur le repository central. - -Configuration du plugin maven : - -:: - - <plugin> - <groupId>org.nuiton.eugene</groupId> - <artifactId>eugene-maven-plugin</artifactId> - <version>${eugeneVersion}</version> - <executions> - <execution> - <phase>process-sources</phase> - <!--Configuration of model generator--> - <configuration> - <inputs>zargo</inputs> - <fullPackagePath>org.nuiton.topiatest</fullPackagePath> - <defaultPackage>org.nuiton.topiatest</defaultPackage> - <extractedPackages>org.nuiton.topiatest</extractedPackages> - <templates> - org.nuiton.topia.templates.TopiaMetaTransformer - </templates> - </configuration> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </plugin> - -Le plugin utilise Eugene_ avec les templates de génération de Topia, le -fichier argouml ou poséidon doit se trouver dans le répertoire -``src/main/xmi``. Les fichiers sont générés dans le répertoire -``target/generated-sources/java``. Il faut préciser au plugin les paquetages -à traiter avec le ``defaultPackage`` et ``extractedPackages``. - -Ajout dans des dépendances de Topia pour la compilation des fichiers générés : - -:: - - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${project.version}</version> - <scope>compile</scope> - </dependency> - -Pour une classe modélisée, nous retrouvons 6 fichiers : - * Une interface - * Une classe abstraite - * Une implantation - * Une configuration hibernate - * Un DAO abstrait - * Une implantation du DAO - -Une classe Helper est aussi générée, permettant l'accès à l'ensemble des DAO. - -Configuration -------------- - -Un fichier contenant les informations de connexion à la base de données et de -configuration de Topia doit être créé au niveau des ressources du projet. -Par convention, ce fichier est nommé ``TopiaContextImpl.properties``. - - -Utilisation ------------ - -Implantation des méthodes -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Si des méthodes ont été définies dans le modèle de données, il faut créer -l'implantation correspondante. Le paquetage doit porter le même nom que celui de -la génération. - - - -.. _Eugene: http://doc.nuiton.org/eugene/ diff --git a/src/site/rst/user/model_generation.rst.vm b/src/site/rst/user/model_generation.rst.vm deleted file mode 100644 index 031e651..0000000 --- a/src/site/rst/user/model_generation.rst.vm +++ /dev/null @@ -1,101 +0,0 @@ -.. - -.. * #%L -.. * ToPIA :: Persistence -.. * -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2010 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -====================== -Génération des modèles -====================== - - -Le module "topia-persistence" de topia est capable de -générer la persistence à partir d'un modèle UML. - -Nous allons détailler ici comme inclure la génération dans le -cycle de compilation maven. - - -Architecture maven ------------------- - -+---------------------------------+-----------------------------------------+ -| src/main/xmi/mymodel.zargo | exemple de modele UML avec argoUML | -+---------------------------------+-----------------------------------------+ -| src/main/xmi/mymodel.properties | fichier de propriétés attaché au modele | -+---------------------------------+-----------------------------------------+ - -Configuration du pom.xml ------------------------- - -Pour générer les sources dans la phase "generate-sources" de maven, et utiliser -les sources générées, et faut configurer le pom. - -Plugin Eugene -============= - -:: - - <plugin> - <groupId>org.nuiton.eugene</groupId> - <artifactId>eugene-maven-plugin</artifactId> - <version>${eugeneVersion}</version> - <executions> - <execution> - <id>Generator</id> - <phase>generate-sources</phase> - <configuration> - <inputs>zargo</inputs> - <fullPackagePath>org.company.package</fullPackagePath> - <extractedPackages>org.company.package</extractedPackages> - <templates>org.nuiton.topia.generator.TopiaMetaGenerator</templates> - <defaultPackage>org.company.package</defaultPackage> - </configuration> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </plugin> - -Pour plus d'information à propos d'Eugene, merci de consulter le site : -http://doc.nuiton.org/eugene/ - -Dépendances du projet -===================== - -Il faut enfin ajouter "topia-persistence" en dépendance du projet : - -:: - - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${project.version}</version> - </dependency> diff --git a/src/site/rst/user/ordered_vs_indexed_migration.rst b/src/site/rst/user/ordered_vs_indexed_migration.rst deleted file mode 100644 index 989c79f..0000000 --- a/src/site/rst/user/ordered_vs_indexed_migration.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -============================================= -Migration vers ToPIA 3.0 - ordered vs indexed -============================================= - - -Vous devez migrer votre modèle zargo depuis la beta-3 suite à une confusion entre ordered et indexed (stéréotypes -à placer sur une association-end d'un lien entre deux entités). - - * Le stéréotype "indexed" est déprécié, vous devez le remplacer par l'attribut "ordered" - * L'attribut (ou le stéréotype) "ordered" maintient l'ordre d'insertion en base, il faut donc vous assurer qu'une - colonne <champ>_idx est bien présente dans la base de donnée et au besoin écrire la migration nécessaire (voir ci- - dessous) pour ajouter la colonne et fixer les indexes manquants (en commençant à 0). - * Les types des collections générées ont changé afin d'utiliser un contrat plus proche du modèle (selon la présence - des stéréotypes "unique" et/ou "ordered"). - - -Exemples de scripts de migration SQL -==================================== - -Cas simple d'une relation 1..n ------------------------------- - -:: - - -- - -- relation is : Car -----[*]- Tyre - -- - - -- Add index to be able to order tyres - ALTER TABLE tyre ADD COLUMN car_idx integer; - - -- Generate unique car_idx according to topiaCreateDate and topiaId - UPDATE tyre SET car_idx = ( - SELECT COUNT(topiaId) - FROM tyre t - WHERE t.car = tyre.car - AND (t.topiaCreateDate || t.topiaId) < (tyre.topiaCreateDate || tyre.topiaId) - ); - - -Cas d'une relation 1..n vers une entité abstraite -------------------------------------------------- - -Note : cela n'est nécessaire que pour la stratégie d'héritage union-subclass. - - -:: - - - -- - -- relation is : Person -----[*]- Pet (abstract) - -- ^ - -- | - -- ----------- - -- | | - -- Cat Dog - -- - - -- create a temporary table to be able to orders cats and dogs - CREATE TABLE person_to_pet_tmp ( - person character varying(255) NOT NULL, - type character varying(255) NOT NULL, - petTopiaId character varying(255) NOT NULL, - petTopiaCreateDate timestamp without time zone, - person_idx integer - ); - - -- populate table with cats - INSERT INTO person_to_pet_tmp (person, type, petTopiaId, petTopiaCreateDate) - SELECT person, 'cat', topiaId, topiaCreateDate FROM cat; - - -- populate table with dogs - INSERT INTO person_to_pet_tmp (person, type, petTopiaId, petTopiaCreateDate) - SELECT person, 'dog', topiaId, topiaCreateDate FROM dog; - - -- compute index for cats and dogs together - UPDATE person_to_pet_tmp SET person_idx = ( - SELECT COUNT(ptpt.person) - FROM person_to_pet_tmp ptpt - WHERE ptpt.person = person_to_pet_tmp.person - AND (ptpt.petTopiaCreateDate || ptpt.petTopiaId) < (person_to_pet_tmp.petTopiaCreateDate || person_to_pet_tmp.petTopiaId) - ); - - -- add index to be able to order cats - ALTER TABLE cat ADD COLUMN person_idx integer; - - -- add indexes to cats - UPDATE cat SET person_idx = ( - SELECT person_idx - FROM person_to_pet_tmp ptpt - WHERE ptpt.petTopiaId = cat.topiaId - ); - - -- add index to be able to order dogs - ALTER TABLE dog ADD COLUMN person_idx integer; - - -- add indexes to dogs - UPDATE dog SET person_idx = ( - SELECT person_idx - FROM person_to_pet_tmp ptpt - WHERE ptpt.petTopiaId = dog.topiaId - ); - - -- remove temporary table - DROP TABLE person_to_pet_tmp; - - - diff --git a/src/site/rst/user/start_using_api.rst b/src/site/rst/user/start_using_api.rst deleted file mode 100644 index d89ef1d..0000000 --- a/src/site/rst/user/start_using_api.rst +++ /dev/null @@ -1,157 +0,0 @@ -.. - -.. * #%L -.. * ToPIA -.. * $Id$ -.. * $HeadURL$ -.. * %% -.. * Copyright (C) 2004 - 2014 CodeLutin -.. * %% -.. * This program is free software: you can redistribute it and/or modify -.. * it under the terms of the GNU Lesser General Public License as -.. * published by the Free Software Foundation, either version 3 of the -.. * License, or (at your option) any later version. -.. * -.. * This program is distributed in the hope that it will be useful, -.. * but WITHOUT ANY WARRANTY; without even the implied warranty of -.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -.. * GNU General Lesser Public License for more details. -.. * -.. * You should have received a copy of the GNU General Lesser Public -.. * License along with this program. If not, see -.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. -.. * #L% -.. - - -====================== -Commencer à développer -====================== - -Nous pouvons maintenant ouvrir le projet dans un IDE et commencer à développer. - -Configurer une base de données embarquée -======================================== - -Pour assurer la persitance de nos entités, il faut faire appel à -un SGBD supporté par Hibernate. Pour cela, un peu de configuration JDBC est -nécessaire. Dans le fichier ``src/main/resources/library-config.properties``, on -définit - -:: - - # Pour démarrer, on utilisera une base H2 - hibernate.connection.url=jdbc:h2:file:target/db/h2data - - # Configuration JDBC - hibernate.dialect=org.hibernate.dialect.H2Dialect - hibernate.connection.username=sa - hibernate.connection.password= - hibernate.connection.driver_class=org.h2.Driver - - # On demande à Hibernate de créer toutes les tables nécessaires - # au besoin - hibernate.hbm2ddl.auto=update - - # Un peu de config pour savoir ce que fait hibernate, cette directive - # affiche toutes les requêtes effectuées sur la base dans la console - hibernate.show_sql=true - -Sans oublier les dépendances nécessaires à l'exécution :: - - <dependencies> - ... - - <!-- Implémentation pour les logger --> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <version>${sl4jVersion}</version> - <scope>runtime</scope> - </dependency> - - <!-- Driver pour la base de données H2 --> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>${h2Version}</version> - </dependency> - - </dependencies> - - -Développer un premier service -============================= - -Gestion des transactions ------------------------- - ->>> Properties conf = new Properties(); -URL url = Resource.getURL("TopiaContextImpl.properties"); -conf.load(new FileInputStream(new File(url.toURI()))); - -Permet de charger un fichier contenant les informations de connexion à la base -et de configuration de Topia. - ->>> TopiaContext rootContext = TopiaContextFactory.getContext(conf); - -Récupère le context de départ pour la création de sous context pour la gestion -des entités. - ->>> TopiaContext transaction = rootContext.beginTransaction(); - -Création d'un sous context pour la gestion des entités. - ->>> transaction.commitTransaction(); - -Validation de l'état du context, les modifications des entités sont reportées -dans la base de données. - ->>> transaction.rollBackTransaction(); - -Invalidation de l'état du context, les modifications des entités ne sont pas -reportées dans la base de données. - ->>> transaction.closeContext(); - -Relâche la connexion JDBC d'un sous context et de ses sous contexts sans -validation de l'état des contexts. - ->>> rootContext.closeContext(); - -Relâche l'ensemble des ressources (cache, pools, ...) et relâche la connexion -JDBC des sous contexts avec validation de l'état des contexts. - -Manipulation des entités ------------------------- - ->>> PersonDAO personDAO = <nom modele>DAOHelper.getPersonDAO(transaction); - -Récupération d'un DAO pour accéder à une entité. - ->>> Person person = personDAO.findByTopiaId(id); - -Les méthodes find permettent de récupérer une ou plusieures entités selon différents -critères. - ->>> person.setName("tutu"); - -Manipulation de l'entité par les getters et setters. - ->>> Person person = personDAO.create(); - -Création d'une entité. Si vous utilisez l'instanciation classique java avec le -new, l'entité n'est pas persistée. - ->>> personDAO.update(person); - -Modification d'un entité. - ->>> personDAO.delete(person); - -Suppression d'une entité. - -Exemple complet ---------------- - -Un exemple complet dans StartTest_. - -.. _StartTest: http://svn.nuiton.org/svn/topia/trunk/topia-tutorial/src/test/java/org/nuito... -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm