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.

...

  • 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
      linenumberstrue
      <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 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.x.

...

Bloc de code
languagebash
ant clean deploy-war -Dmaven.test.skip=true

 

Import des « fragment-definition » via base de données

La deuxième méthode d’import des « fragment-definition » permet quant à elle de conserver la gestion des fragments en base de données telle qu’elle a été mise en place à partir de la version 4.0.4 d’uPortal.

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.x. En voici la procédure à suivre :

  • Edition du fichier « dlm.xml » de la version 3.2 situé dans le répertoire « UPORTAL_ROOT/uportal-impl/src/main/resources/properties ».
  • Copie de chaque bloc (élément) <dlm:fragment> dans un nouveau fichier ayant pour extension « .fragment-definition.xml » et ayant pour nom le nom correspondant au fragment défini.
  • Ajout d’un bloc englobant <fragment-definition></fragment-definition> autour de l’élément XML : <dlm:fragment>.
  • Sauvegarde du nouveau fichier obtenu : « xxx.fragment-definition.xml ».
  • Import de ces nouveaux fichiers « .fragment-definition.xml » via la commande Ant :

    Bloc de code
    languagebash
    ant data-import -Ddir="path/to/fragment-def.dir"

    , avec « path/to/fragment-def.dir » correspondant au répertoire contenant l’ensemble des nouveaux fichiers « .fragment-definition.xml »

Afin d’automatiser ces différentes tâches un script Shell Unix : « Migration-fragment-definition.sh » a été développé. Celui-ci utilise AWK afin de « découper » chaque fragment contenu dans le fichier dlm.xml vers un nouveau fichier ayant pour convention de nommage : « fragmentDLMXXX.fragment-definition.xml » où XXX correspondant au numéro du fragment traité.

Pour lancer ce script, il suffit alors de jouer la commande suivante dans la console :

Bloc de code
languagebash
Migration-fragment-definition.sh « ./PATH/TO/3.2/DLM/FILE/dlm.xml »

, avec « ./PATH/TO/3.2/DLM/FILE/dlm.xml » correspondant au chemin versle fichier dlm.xml de la version 3.2.

Autant de fichiers « .fragment-definition.xml » que de fragments définis dans le fichier « dlm.xml » seront alors créés dans le répertoire où est situé le script. Il ne suffit donc plus qu’à importer chacun de ces fichiers via la commande d’import Ant suivante :

Bloc de code
languagebash
ant data-import -Dfile="path/to/fragmentDLMXXX.fragment-definition.xml"

Voici un exemple décrivant les tâches effectuée par ce script pour le premier fragment défini dans le fichier « dlm.xml » de la version 3.2 :

  • 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 on peut être importé dans la base de données 4.x 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.x.

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 d’uPortal.

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

Dans le cas où le portail ESUP 3.2 comprendrait des données en base liées à des développements spécifiques réalisés par ESUP, il sera nécessaire de définir des procédures de migration propre à chacun de ces développements. En effet, la procédure décrite dans la page courante permet de traiter l’ensemble des données génériques gérées par uPortal et non les données qui peuvent être issues de développements spécifiques.