Migrate from ToPIA 2.x, ToPIA 3.x
This documentation section is french-only
Gestion des dépendances
ToPIA nécessite des versions minimum de Eugene et Hibernate. Vous devez utiliser les version suivantes :
ToPIA 3.0
- Eugene >= 2.13
- Hibernate >= 4.3.7.Final
ToPIA 3.1.x
- Eugene >=
- Hibernate >= 4.3.11.Final
ToPIA 3.2.x
- Eugene >=
- Hibernate >= 5.1.3.Final
Configuration du plugin Maven
Les templates sont contenus dans un modules à part, il faut désormais utiliser cette dépendance dans le plugin eugene.
De plus les templates ont changé de package, le nouveau package est le suivant :
org.nuiton.topia.templates.*
Génération des PropertyChangeSupport
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 :
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.
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
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
_idx est bien présente dans la base de donnée et au besoin écrire la migration nécessaire 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_*
Les constantes suivantes sont à remplacer par leurs homologues avec le prefix PROPERTY_ :
TopiaEntity#TOPIA_ID
devientTopiaEntity#PROPERTY_TOPIA_ID
TopiaEntity#TOPIA_CREATE_DATE
devientTopiaEntity#PROPERTY_TOPIA_CREATE_DATE
TopiaEntity#TOPIA_VERSION
devientTopiaEntity#PROPERTY_TOPIA_VERSION
TopiaEntityContextable#TOPIA_CONTEXT
devientTopiaEntityContextable#PROPERTY_TOPIA_CONTEXT
TopiaEntity#COMPOSITE
devientTopiaEntityContextable#PROPERTY_COMPOSITE
TopiaEntity#AGGREGATE
devientTopiaEntityContextable#PROPERTY_AGGREGATE
TopiaId
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 :
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(…) et TopiaService#postInit(…)
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
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
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é
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
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
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 :
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 :
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
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 :
Il vous suffit de retirer le “context.” :
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.
Remaniement des packages
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 :
FAQ
Voici quelques appels faisables en ToPIA 2.x et leur équivalent dans ToPIA 3
Démarrage d’une nouvelle transaction
Accès à un Dao depuis un autre Dao
Accès à la session Hibernate
Liste des classes d’implémentation (ou des contrats)
TopiaPersistenceHelper renommé
Le contrat TopiaPersistenceHelper est renommé en TopiaEntityEnumProvider. À noter que le MyModelTopiaApplicationContext implémente ce contrat.
Changement de l’API de configuration de ToPIA
À partir de ToPIA 3.0-beta-16, des configurations par défaut ont changés. Pour être iso-fonctionnel vous devez préciser dans votre configuration les anciennes valeurs par défaut :
Il n’est plus possible de fixer la propriété hibernate.hbm2ddl.auto : vous devez utiliser l’API de migration.