Vous avez peut-être souvent besoin d'alimenter un serveur Nuxeo avec un jeu de données existant. Par exemple pour disposer du même jeu de données sur plusieurs environnement ou simplement pour importer le jeu de données lors de la configuration de votre serveur. Aujourd'hui, je vais vous expliquer comment créer un ensemble de données facile à importer en utilisant notre plug-in nuxeo-showcase-content-importer, comme nous le faisons dans Nuxeo Showcase Content, avec de nombreux documents Nuxeo de base, ou dans Nuxeo Getting Started.

Création du jeu de données

La première étape est d'importer les données dans un serveur Nuxeo en cours d'exécution. Vous pouvez utiliser le bouton import dans l'UI JSF, ou le bouton + dans Web UI. Si vous avez un grand nombre de documents et que vous avez besoin d'une solution plus performante, l'API REST ou d'autres outils d'import sont parfaits, mais un peu plus complexes.

Optimisation de l'export

Votre serveur Nuxeo contient désormais tous les documents/fichiers importés à l'étape précédente. Vous souhaitez désormais les exporter, mais avant d'utiliser notre export zip, je tiens à attirer votre attention sur le fait que le plug-in showcase-content-importer déclenche à nouveau tous les éléments générés, ce qui vous évitera d'exporter un énorme fichier zip avec les différentes vues des images, les encodages des vidéos, etc.

Supprimons donc tous ces éléments générés avant l'export et assurons-nous que tous ces documents ont bien été effacés, le but étant de ne pas les inclure dans notre export. La méthode la plus efficace est d'arrêter votre serveur puis d'exécuter la requête SQL suivante dans votre base de données :

delete from hierarchy where primarytype  = 'view' or primarytype = 'storyboarditem' or primarytype = 'transcodedVideoItem';

Vous pouvez ensuite redémarer votre serveur, aller à la racine et lancer l'action Zip Export à partir du menu export de Web UI ou de l'UI JSF.

Création du bundle de données

Maintenant que nous avons exporté notre fichier zip sans inclure les documents techniques inutiles, nous allons en faire un package Nuxeo pouvant être déployé n'importe où.

Préparation du package

Nous allons utiliser Nuxeo Generator qui permet de créer un package Nuxeo vide en une seule commande.

$ yo nuxeo --type="ressources" single-module package

   create Generating Multi module (Your project parent POM)
     info   Parameters: Use a parent artifact, Parent group, Parent artifact, Parent version, Import nuxeo in the `dependency management`, Nuxeo version, Project group, Project artifact, Project version, Project description
? Use a parent artifact (for instance your company's BOM or the org.nuxeo.ecm.distribution:nuxeo-distribution POM)? Yes
? Parent Group id: org.nuxeo.ecm.distribution
? Parent Artifact id: nuxeo-distribution
? Parent Version: 8.10
? Project Group id: org.nuxeo.provisioning
? Project Artifact id: easy-provisioning-parent
? Project Version: 1.0-SNAPSHOT
? Project Description:

   create Generate Module: easy-provisioning-ressources

   create Generating Single module
     info   Parameters: Nuxeo version, Project group, Project artifact, Project version, Project description
? Project Group id: org.nuxeo.provisioning
? Project Artifact id: easy-provisioning-ressources
? Project version: 1.0-SNAPSHOT
? Project description:

   create Generate Module: easy-provisioning-package

   create Generating Package
     info   Parameters: Package artifact, Package version, Package name, Company name
? Package Artifact id: easy-provisioning-package
? Package Version: 1.0-SNAPSHOT
? Package name: easy-provisioning
? Company name:

Votre répertoire devrait ressembler à ça :

$ tree -d
.
├── easy-provisioning-package
│   └── src
│       └── main
│           ├── assemble
│           └── resources
│               └── install
│                   └── templates
│                       └── easy-provisioning
└── easy-provisioning-ressources
    └── src
        ├── main
        │   ├── java
        │   │   └── org
        │   │       └── nuxeo
        │   │           └── provisioning
        │   └── resources
        │       ├── META-INF
        │       └── OSGI-INF
        └── test
            ├── java
            │   └── org
            │       └── nuxeo
            │           └── provisioning
            └── resources

Ajout d'une dépendance au plug-in nuxeo-showcase-content-importer

Notre package Nuxeo est prêt à être déployé, mais nous avons besoin d'une dépendance vis-à-vis de nuxeo-showcase-content-importer, qui doit importer le zip précedemment exporté.

Nous devons nous assurer que le fichier assembly.xml va copier les bundles attendus lors du processus. Pour ce faire, il suffit d'ajouter une dépendance directe à org.nuxeo.ecm.platform:nuxeo-showcase-content-importer dans le fichier easy-provisioning-package/pom.xml :

<dependencies>
  <!-- Additional bundles to be deployed by the MP -->
  ..
  <dependency>
    <groupId>org.nuxeo.ecm.platform</groupId>
    <artifactId>nuxeo-showcase-content-importer</artifactId>
  </dependency>
</dependencies>

Ajout du fichier exporté

Le package Nuxeo a été créé à l'aide du générateur. Il contient tout ce dont nous avons besoin, à l'exception de notre fichier zip exporté. Nommez-le easy-provisioning.zip et copiez-le vers le répertoire easy-provisioning-ressources/src/main/resources. Ajoutez une contribution pour le déclarer (easy-provisioning-ressources/src/main/resources/OSGI-INF/) :

<?xml version="1.0" encoding="UTF-8" ?>
<component name="org.nuxeo.provisioning">
  <extension target="org.nuxeo.ecm.showcase.content" point="contents">
    <content name="easy-provisioning">
      <!-- Use the name of your zip file -->
      <filename>easy-provisioning.zip</filename>
    </content>
  </extension>
</component>

Ajoutez ensuite cette contribution au fichier easy-provisioning-ressources/src/main/resources/META-INF/MANIFEST.MF :

Nuxeo-Component: OSGI-INF/showcasecontent-resources-contrib.xml

Déploiement du package

Il ne vous reste plus qu'à déployer et installer votre package :

$ mvn install
$ cd $NUXEO_HOME
$ ./bin/nuxeoctl mp-install easy-provisioning-package/target/easy-provisioning-package-1.0-SNAPSHOT.zip

Et c'est tout ! Votre contenu n'est importé qu'une fois et tous les convertisseurs vont travailler d'arrache-pied pour recréer toutes les vues des images, les storyboards des vidéos et les vidéos encodées.