3. Sommaire
• Qui nous sommes?
• On va migrer vers DXP ou pas?
• Quelle est notre stratégie de migration?
• Migration des données
– Volumétrie
– Difficultés
– Optimisations
– Astuces
4. Quang Tu LE
Consultant Technique indépendant
• Technologies Java/Web depuis 2000
• 11 ans d’expériences sur la technologie Liferay
– Depuis la version 4.2.2 (2006)
@qtle linkedin.com/in/quangtule
5. Nicolas GRUE
Consultant Technique
• Technologies du Web depuis 1999
• 11 ans d’expériences sur la technologie Liferay
– Depuis la version 4.2.1 (2006)
• GFI Informatique, partenaire Gold depuis 2009
6. On va migrer vers DXP ou pas?
OUI
• Vouloir utiliser
fonctionnalités de Liferay
DXP
• Prêt pour intégrer des
nouvelles fonctionnalité de
DXP dans le futur
• Approche microservices
• Support éditeur étendu (vs
support limité)
NON
• Le projet est stable, pas ou
peu d ’évolution
• Peu d’utilisateurs, peu de
valeur ajoutée
• Le projet va disparaître dans
les 2 ans (ROI hasardeux)
9. DXP compatibility matrix
• Explication de texte :
– Certifié = Le support Liferay dispose d’un environnement de référence et a validé la
plateforme logicielle
– Supporté = éligible au support Liferay
• Serveur d’application
– Java 8 obligatoire.
• Tomcat 8 est la solution la plus testée, la mieux maintenue, etc.
– Mais dans tous les cas, il faut en priorité cibler un serveur d’application certifié
(sinon, c’est le risque d’essuyer les plâtres d’un déploiement peu courant).
• OS
– RHEL/CentOS 6 est supporté, certifié en v7. Le couplage étant faible, on peut rester
en 6 (et laisser la porte ouverte à une mise à jour OS dans le futur)
• Navigateurs
– Attention, le support d’IE 10 et 9 est « limité » (et concernant IE9, c’est un
euphémisme !).
10. Sauvegarder!
Exécuter l’upgrade tool.
Noter des erreurs.
Restaurer!
Corriger des erreurs.
Exécuter encore et encore!
Livrer un PTI final
Un script sql de correction.
Une procédure de lancement.
Upgrade database
11. Notre base de donnés
Oracle 11g
~100Go de donnés
~256Go de fichiers dans data
13. Pre-upgrade
• Nettoyage
– Données qui ne sont plus utilisées
– Version intermédiaire
– Données orphelines
• NormalizeDuplicateFields
– https://dev.liferay.com/fr/discover/deployment/-
/knowledge_base/6-2/upgrading-liferay#find-and-
remove-duplicate-field-names
– Optimisation
14. Préparation
• Config pour Document and Media
– portal-ext.properties
• dl.store.impl=com.liferay.portal.store.file.s
ystem.AdvancedFileSystemStore
– $liferay.home/osgi/config/com.liferay.portal.store.file.system.co
nfiguration.AdvancedFileSystemStoreConfiguration.cfg
• rootDir=chemin_vers_data
• Désactivation index
– $liferay.home/osgi/configcom.liferay.portal.search.configuration
.IndexStatusManagerConfiguration.cfg
• indexReadOnly=true
17. Erreur de validation de champ
Caused by: com.liferay.dynamic.data.mapping.exception.TemplateNameException: Name is null
at
com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validateName(DDMTemplateLocalServiceImpl.java:16
81)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1668)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1619)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.validate(DDMTemplateLocalServiceImpl.java:1608)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:206)
at com.liferay.dynamic.data.mapping.service.impl.DDMTemplateLocalServiceImpl.addTemplate(DDMTemplateLocalServiceImpl.java:130)
...
at com.sun.proxy.$Proxy392.addTemplate(Unknown Source)
at
com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.getNewDDMTemplateId(UpgradeKaleoProcess.java:1
72)
at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.updateKaleoProcess(UpgradeKaleoProcess.java:272)
at com.liferay.portal.workflow.kaleo.forms.internal.upgrade.v1_1_0.UpgradeKaleoProcess.doUpgrade(UpgradeKaleoProcess.java:81)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
... 84 more
18. Explication
• Champs non traduits => localisés en DXP.
• Locale par défaut
– system-ext.properties
• user.country=FR
• user.language=fr
– Params de upgrade tool
java -jar com.liferay.portal.tools.db.upgrade.client.jar
-j "-Dfile.encoding=UTF8 -Duser.country=FR -Duser.language=fr "
19. Erreurs non blocantes, temps perdu
2018-01-26 13:55:38.575 WARN [main][UpgradeProcess:437] Fallback to recreating the table
java.sql.SQLException: ORA-22858: invalid alteration of datatype_ [Sanitized]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
...
at com.liferay.portal.dao.db.BaseDB.runSQL(BaseDB.java:264)
at com.liferay.portal.kernel.dao.db.BaseDBProcess.runSQL(BaseDBProcess.java:66)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.alter(UpgradeProcess.java:409)
at com.liferay.portal.upgrade.v7_0_0.UpgradeExpando.doUpgrade(UpgradeExpando.java:32)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:119)
at com.liferay.portal.upgrade.UpgradeProcess_7_0_0.doUpgrade(UpgradeProcess_7_0_0.java:82)
at com.liferay.portal.kernel.upgrade.UpgradeProcess.upgrade(UpgradeProcess.java:90)
...
at com.liferay.portal.tools.db.upgrade.client.DBUpgraderLauncher.main(DBUpgraderLauncher.java:55)
2018-01-26 13:55:38.577 INFO [main][LoggingTimer:72] Starting
com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue
2018-01-26 13:55:38.578 INFO [main][Table:168] Starting backup of ExpandoValue to /tmp/temp-db-ExpandoValue-
1573805557879341259.tmp
2018-01-26 14:09:52.921 INFO [main][Table:204] Finished backup of ExpandoValue to /tmp/temp-db-ExpandoValue-
1573805557879341259.tmp in 854343 ms
2018-01-26 18:39:26.811 INFO [main][LoggingTimer:38] Completed
com.liferay.portal.kernel.upgrade.UpgradeProcess#upgradeTable#ExpandoValue in 17028234 ms (4h43m)
20. Optimisation
• Il est possible de surcharger les
UpgradeProccess
– Core Liferay: Portal-ext.properties
– Modules: Override lpkg de Liferay
• https://dev.liferay.com/fr/develop/tutorials/-
/knowledge_base/7-0/overriding-lpkg-files
• Ne sert qu’à l’upgrade des données
– Ne pas oublier de désintaller les surcharges
ensuite…
22. Optimisation / Modules
• Il est prévu de pouvoir faire un override partiel des lpkg
de Liferay
• https://dev.liferay.com/fr/develop/tutorials/-/knowledge_base/7-
0/overriding-lpkg-files
• Concrètement, il suffit de reconstruire un .jar présent
dans le lpkg,
• Le déposer dans /override
• et Liferay va le substituer
• Attention à bien retirer l’override après migration: ça
ne doit servir que pour du « one-shot »,
• pour résoudre un problème ponctuel, ajouter des logs, etc.
23. Optimisations: principe
• Une fois que l’on sait quel problème on va
rencontrer, on peut l’anticiper dans le code
que l’on surcharge. Exemple dans notre cas:
• Catch SQLException contenant le message « ORA-
22858 » => bascule sur une autre implémentation
adaptée à Oracle
• équivalent alter column type CLOB: ajout d’une colonne
en copie puis drop de l’originale
• Plus rapide que le backup de toute la table;
• permet aussi d’implémenter les préconisations des DBA
(storage spécifique des CLOB…)
24. Resultat
2018-02-05 19:40:21.997 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn ADD (defaultData_clob CLOB null) LOB
(defaultData_clob) STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING
STORAGE (INITIAL 104 K NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE
DEFAULT CELL_FLASH_CACHE DEFAULT))
2018-02-05 19:40:22.011 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.012 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoColumn SET defaultData_clob = defaultData
2018-02-05 19:40:22.023 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.024 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn DROP COLUMN defaultData
2018-02-05 19:40:22.053 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.054 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoColumn RENAME COLUMN defaultData_clob TO
defaultData
2018-02-05 19:40:22.064 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.065 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue ADD (data__clob CLOB null) LOB (data__clob)
STORE AS SECUREFILE (TABLESPACE INTRANET_RECETTE ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING STORAGE (INITIAL 104 K
NEXT 1 M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT))
2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:40:22.078 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: UPDATE ExpandoValue SET data__clob = data_
2018-02-05 19:45:00.264 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:45:00.266 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue DROP COLUMN data_
2018-02-05 19:46:49.341 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:46:49.342 INFO [main][CustomUpgradeProcessUtil:56] exec SQL: ALTER TABLE ExpandoValue RENAME COLUMN data__clob TO data_
2018-02-05 19:46:49.355 INFO [main][CustomUpgradeProcessUtil:58] exec SQL: success
2018-02-05 19:46:49.356 INFO [main][UpgradeProcess:99] Completed upgrade process
com.company.liferay.portal.upgrade.v7_0_0.CustomUpgradeExpando in 387361ms (6m27s)
26. Optimisation
• Augmenter la valeur -Xmx
– Test en cours avec 8G
• Diminuer le property
model.tree.rebuild.query.results.batch.size
– 10000 par défaut
– Test en cours avec 5000
27. Notre avis
• Outil séparé
– Plus pratique
– Config séparée
• Dommage que UpgradeProcess (Core) n’a pas
été conçu pour être repris après incident
• Pour l’upgrade des modules, en revanche,
c’est possible avec Gogo Shell
– Sauf pour les modules « à moitié upgradés »
28. Comment réussir
• Code source de Liferay
• Logs
– META-INF/portal-log4j-ext.xml
• Gogo Command
– https://dev.liferay.com/fr/develop/reference/-
/knowledge_base/7-0/gogo-shell-command
• Avoir un bon serveur avec les volumétries
suffisants
• Support de DBA