Pages enfant
  • 05 - Migration de données uPortal 3.2 vers uPortal 4.0

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

...

Dans le cadre de la maintenance et de l’évolution de leur portail, le consortium ESUP a souhaité s’intéresser davantage quant à la migration de données d’un portail uPortal contenues dans une instance de base de données en version 3.2 vers une instance de base en version 4.x0. Ce processus n’étant pas totalement défini et validé par Jasig, il est important d’en définir ses limites ainsi que la liste exhaustive des données traitées.

...

Comme indiqué sur la page de Jasig, le processus de migration nécessite une installation d'une version 4.x 0 servant de socle pour l’import des données exportées depuis le portail en version 3.2.

A l’heure actuelle, il semble en effet impossible de réaliser ce genre de migration avec la démarche inverse, consistant à installer une version 4.x 0 du portail sur une instance de base de données d’une version 3.2.

Il est donc nécessaire pour réaliser cette migration d'installer la version 4.x 0 cible en créant :

  • une nouvelle base de données configurée avec le même utilisateur que la version 3.2.
  • une nouvelle instance du serveur d'application qui « contiendra » l'application uPortal en version 4.x0.

Export des données de la version 3.2

 Après installation de la version 4.x0, il est nécessaire de réaliser l'export des données de la base de la version 3.2. Ceci se fait via la commande Ant suivante:

...

Il est également recommandé, une fois l’export terminé, de copier l’ensemble du répertoire d'export obtenu vers un répertoire de travail qui fera l’objet de différentes modifications nécessaires à la procédure de migration vers une version 4.x0.

Import des données dans la version 4.

...

0

Import des « channel-type »

...

Pour les « channel-type » restant, c’est-à-dire ceux à importer en version 4.x0, il est alors nécessaire de les transformer en fichiers « .portlet-type.xml » tout en modifiant la définition contenu dans chacun des fichiers (Cf. https://wiki.jasig.org/display/UPM40/Upgrade+Data+Import).

...

  • modifier l'extension du fichier « .channel-type » par l'extension « .portlet-type.xml » utilisée en version 4.x0

Exemple pour le channel-type « Bookmarks_Portlet.channel-type »

...

Bloc de code
languagehtml/xml
linenumberstrue
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<portlet-type xmlns="https://source.jasig.org/schemas/uportal/io/portlet-type" xmlns:ns2="https://source.jasig.org/schemas/uportal/io/permission-owner" xmlns:ns3="https://source.jasig.org/schemas/uportal/io/stylesheet-descriptor" xmlns:ns4="https://source.jasig.org/schemas/uportal/io/portlet-definition" xmlns:ns5="https://source.jasig.org/schemas/uportal" xmlns:ns6="https://source.jasig.org/schemas/uportal/io/user" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.0" xsi:schemaLocation="https://source.jasig.org/schemas/uportal/io/portlet-type https://source.jasig.org/schemas/uportal/io/portlet-type/portlet-type-4.0.xsd">
	<name>Bookmarks Portlet</name>
	<description>UWisc Bookmarks Portlet</description>
	<uri>/org/jasig/portal/portlets/bookmarks/BookmarksPortlet.cpd.xml</uri>
</portlet-type>

Import des « channel-type » dans uPortal v4.

...

0

Après transformation des fichiers « channel-type » l’import peut être réalisé dans le portail en version 4.x 0 via la commande :

Bloc de code
languagebash
ant data-import -Ddir="./V3-EXPORT/channel-type"

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

Import des « entity-type »

Dans le but de réaliser un import de données cohérent, il est nécessaire pour les « entity-type » de ne conserver seulement ceux qui sont personnalisés et qui ont été définis « manuellement » dans le portail 3.2 servant de socle de migration. Ainsi, identiquement aux « channel-type », tous les « entity-type » inclus nativement dans la version 3.2 pourront être supprimés du répertoire de travail utilisé pour l’import des données en base en version 4.x0.

Afin de réaliser cette tâche de manière rigoureuse, il est également conseillé d’effectuer une comparaison entre le répertoire « entity-type » obtenu depuis l'export et les répertoires « entity-type » du portail en version 3.2 situés dans « UPORTAL_ROOT/uportal-impl/src/main/resources/properties/db/entities/entity-type » et « UPORTAL_ROOT/uportal-impl/src/main/resources/properties/db/base_entities/entity-type ».

Les « entity-type » personnalisés peuvent alors être importés dans le portail v4.x 0 via la commande Ant suivante :

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

Import des « user »

Pour effectuer l'import dans le portail v4.x 0 des utilisateurs depuis les données exportées en v3.x, il suffit juste de jouer la commande Ant ci-dessous :

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

Import des « group-membership »

Afin de pouvoir importer dans la version 4.x 0 les groupes exportés depuis la version 3.2 il est nécessaire de réaliser deux modifications majeures dans la configuration  d’uPortal v4.x0.

Modification de la configuration de la version 4.

...

0

Les modifications permettant la mise en conformité des groupes concernent deux fichiers XML :

...

Concernant le premier fichier « PAGSGroupStoreConfig.xml », le travail consiste à ajouter dans le fichier l’ensemble des groupes personnalisés (groupes LDAP entre autres)  définis dans le fichier « PAGSGroupStoreConfig.xml » de la version 3.2.  Il est donc juste nécessaire de réaliser une comparaison entre les deux fichiers afin d’inclure dans le fichier de la version 4.x 0 tous les groupes ajoutés dans le fichier source de la version 3.2

...

Une fois ces modifications effectuées, il est recommandé de redéployer et redémarrer l’application en version 4.x 0 afin de s’assurer que les modifications apportées n’ont pas affecté son bon fonctionnement.

...

Afin de réaliser l’import des « channels », il est seulement nécessaire d'importer les fichiers exportés correspondants dans la version 4.x 0 via la commande Ant :

Bloc de code
languagebash
ant data-import -Ddir="./V3-EXPORT/channel"

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

ATTENTION : Les channels correspondants à des IChannel de la version 3.x n'existent plus dans les versions 4.x0. De ce fait, ceux-ci ne seront pas importés dans la nouvelle version et le message d'avertissement suivant sera affiché pour chacun d'eux dans la console durant la phase d'import :

...

  • si les fichiers sont identiques (ou presque : champ "iconURL" seulement qui diffère)
    • supprimer le fichier du dossier d'export pour utiliser celui déjà existant en base car sa définition est plus fidèle à la version 4.x 0 d'uPortal.
  • sinon : renommer la zone causant l'anomalie.

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

ATTENTION : Si des IChannel sont utilisés dans certains « fragment-layout » alors ces fichiers ne pourront être importés dans la version 4.x0. Deux cas sont alors envisageables :

...

L’import des « permission_set » ne devrait nécessiter aucune étape supplémentaire de traitement ou modification. Il suffit juste d'importer tout le contenu du répertoire dans la version 4.x 0 via la commande Ant :

Bloc de code
languagebash
ant data-import -Ddir="./V3-EXPORT/permission_set"

...

Si l'import s'est déroulé avec succès, un message « Build successful » devrait alors être affiché dans la console. Dans le cas échéant, un message « Build failed » sera alors affiché et les traces détaillant les différentes erreurs rencontrées seront alors visibles dans le répertoire « UPORTAL_ROOT/target/data-import-reports » du portail en version 4.x0.

Migration des « fragment-definition »

...

Afin que ces « fragment-definition » exportés depuis la version 3.2 soient bien intégrés lors de la migration vers la 4.x 0 deux possibilités sont proposées par Jasig :

  • la première solution consiste à modifier le comportement d'uPortal v4.x 0 afin de revenir à une gestion des définitions de fragment via le fichier « dlm.xml ».
  • la deuxième consiste à laisser la gestion des « fragment-definition » en base des données et à créer les fichiers « fragment-definition » associés à ceux de la version 3.2.

...

  • La première consiste à modifier le fichier « layoutContext.xml » (situé dans « UPORTAL_ROOT/uportal-war/src/main/resources/properties/contexts ») comme suit :
    • commenter le bean lié à la classe « RDBMConfigurationLoader » :

      Bloc de code
      languagehtml/xml
      <!-- Mise en commentaire du bean lié à la gestion des fragments en base
      <bean id="dlmConfigurationLoader" class="org.jasig.portal.layout.dlm.RDBMConfigurationLoader">
              <property name="fragmentDao" ref="fragmentDefinitionDao" />
          </bean>
      -->
    • Il faut alors décommenter dans ce même fichier le bean lié à la classe « LegacyConfigurationLoader » permettant de gérer les définitions de fragments via le fichier « dlm.xml » :

      Bloc de code
      languagehtml/xml
      <bean id="dlmConfigurationLoader" class="org.jasig.portal.layout.dlm.LegacyConfigurationLoader">
              <property name="configurationFile" value="classpath:/properties/dlm.xml" />
      </bean>
    • Désormais le portail utilisera la gestion des « fragment-definition » via le fichier « dlm.xml » qu’il est nécessaire de récupérer depuis la version 3.2.

  • Afin d’utiliser dans la version 4.x 0 du portail les « fragment-definition » définis dans la version 3.2, il est alors nécessaire de copier le fichier « dlm.xml » situé dans le répertoire « UPORTAL_ROOT/uportal-impl/src/main/resources/properties » du portail 3.2 vers le répertoire « UPORTAL_ROOT/uportal-war/src/main/resources/properties » du portail 4.x0.

L’application est désormais configurée pour utiliser convenablement les « fragment-definition » de la version 3.2. Il est juste nécessaire de redéployer uPortal via la commande Ant suivante afin que la modification soit répercutée sur le répertoire « uPortal » placé dans le serveur d’application :

...

Il est nécessaire pour cela d’importer chaque « fragment-definition » associé en base afin que l’ensemble de celles-ci soient disponibles depuis l’application en version 4.x0. En voici la procédure à suivre :

...

  • La première étape consiste en la lecture du fichier « dlm.xml » :

    Bloc de code
    languagehtml/xml
    linenumberstrue
    <?xml version="1.0"?>
    <managedLayoutFragments xmlns:dlm="http://org.jasig.portal.layout.dlm.config">
    
      <dlm:property name='defaultLayoutOwner' value='fragmentTemplate'/>
    
      <!-- Controls clearing of dlm fragment cache.  This allows changes  made to layout
      owners to be reflected once the cache has been updated.  Specified in minutes. -->
    
      <dlm:property name='org.jasig.portal.layout.dlm.RDBMDistributedLayoutStore.fragment_cache_refresh' value="5"/>
    
        <dlm:fragment name='Admin' ownerID='admin-lo' precedence='3'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactory'>
              <paren mode="AND">
                <attribute name="username" mode='equals' value='admin'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Guests' ownerID='guest-lo' precedence='3'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GuestUserEvaluatorFactory'/>
        </dlm:fragment>
    
        <dlm:fragment name='All' ownerID='all-lo' precedence='2'>
          <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
            <paren mode="AND">
              <attribute mode='memberOf' name='Tout le monde'/>
              <paren mode="NOT">
                <attribute mode='memberOf' name='Proprietaires de fragment'/>
              </paren>
              <paren mode="NOT">
                <attribute mode='memberOf' name='Administrateurs Portail'/>
              </paren>
              <paren mode="NOT">
                <attribute mode='memberOf' name='Anonymes'/>
              </paren>
    
            </paren>
          </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='AdministrateurCentral' ownerID='administrateurCentral-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Administrateurs Centraux'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='AgentTechnique' ownerID='agentTechnique-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Agents techniques'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='AssistantEducation' ownerID='assistantEducation-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Assistants education'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='ChefTravaux' ownerID='chefTravaux-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Chefs de travaux'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='ConseillerEducation' ownerID='conseillerEducation-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Conseillers education'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='ConseillerOrientation' ownerID='conseillerOrientation-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Conseillers orientation'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Directeur' ownerID='directeur-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Directeurs'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Documentaliste' ownerID='documentaliste-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Documentalistes'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Eleve' ownerID='eleve-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Eleves'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Enseignant' ownerID='enseignant-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Enseignants'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='Inspecteur' ownerID='inspecteur-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Inspecteurs'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='PersonnelAdministratif' ownerID='personnelAdministratif-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels administratif'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    
        <dlm:fragment name='PersonnelEtablissementAutre' ownerID='personnelEtablissementAutre-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels etablissement autre'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>    
    
        <dlm:fragment name='PersonnelLaboratoire' ownerID='personnelLaboratoire-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels laboratoire'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>   
    
        <dlm:fragment name='PersonnelMedical' ownerID='personnelMedical-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels medicaux'/>
              </paren>
            </dlm:audience>
        </dlm:fragment> 
    
        <dlm:fragment name='PersonnelServAcademique' ownerID='personnelServAcad-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels service academique'/>
              </paren>
            </dlm:audience>
        </dlm:fragment> 
    
        <dlm:fragment name='PersonnelTOS' ownerID='personnelTOS-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Personnels TOS'/>
              </paren>
            </dlm:audience>
        </dlm:fragment> 
    
        <dlm:fragment name='PersonnelRelation' ownerID='personneRelation-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">     
                <attribute mode='deepMemberOf' name='Parents'/>
              </paren>
            </dlm:audience>
        </dlm:fragment> 
    
         <!-- definition du fragment pour le personnel de collectivité territoriale -->
          <dlm:fragment name='PersonnelCollectivite' ownerID='personnelCollectivite-lo' precedence='10'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
              <paren mode="AND">
                <attribute mode='deepMemberOf' name='Personnels collectivite'/>
              </paren>
            </dlm:audience>
          </dlm:fragment>
    
    </managedLayoutFragments>
  • Le premier bloc <dlm :fragment » suivant est alors extrait de celui-ci :

    Bloc de code
    languagehtml/xml
    <dlm:fragment name='Admin' ownerID='admin-lo' precedence='3'>
        <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactory'>
          <paren mode="AND">
            <attribute name="username" mode='equals' value='admin'/>
          </paren>
        </dlm:audience>
    </dlm:fragment>

    Il est alors copié dans un nouveau fichier XML nommé « fragmentDLM1.fragment-definition.xml » (avec ajout de l’entête XML :<?xml version="1.0" encoding="UTF-8"?>)

     

  • L’élément  <fragment-definition> est alors ajouté autour du bloc <dlm :fragment> :

    Bloc de code
    languagehtml/xml
    linenumberstrue
    <?xml version="1.0" encoding="UTF-8"?>
    <fragment-definition xmlns:dlm="http://org.jasig.portal.layout.dlm.config" script="classpath://org/jasig/portal/io/import-fragment-definition_v3-1.crn">
    <dlm:fragment name='Admin' ownerID='admin-lo' precedence='3'>
            <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactory'>
              <paren mode="AND">
                <attribute name="username" mode='equals' value='admin'/>
              </paren>
            </dlm:audience>
        </dlm:fragment>
    </fragment-definition>
  • Le nouveau fichier « fragmentDLM1.fragment-definition.xml » est alors sauvegardé et il peut être alors importé de manière dans la base de données 4.x 0 via la commande Ant :

    Bloc de code
    languagebash
    ant data-import -Dfile="PATH/TO/ fragmentDLM1.fragment-definition.xml"

    , avec –Dfile ayant pour valeur le chemin vers le fichier « fragmentDLM1.fragment-definition.xml »

...

  • Si l’import est effectué avec succès le message « build successful » devrait alors être affiché dans la console, le fragment défini précédemment est désormais présent dans le portail uPortal v4.x0.

Migration des « theme », « structure », « profile » et « layout »

Tous ces éléments ne correspondant pas à des « données brutes » mais plutôt à la présentation, aucune procédure n’a été définie. De ce fait, aucun de ces éléments ne sera migré vers la version 4.x 0 d’uPortal.

Migration des données spécifiques aux développements

...