Recherche

Sommaire

Pages enfant
  • Principaux fichiers d'un plugin nuxeo

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.
Balise Wiki
h1. {color:#000000}{_}MANIFEST.MF{_}{color}

{note} Fichier src/main/resources/META-INF/MANIFEST.MF dans le projet {note}

Le fichier *MANIFEST.MF* est le fichier de configuration principal d'un plugin OSGI.

Exemple :
{code}
Manifest-Version: 1.0
*Bundle-ManifestVersion*: 1
*Bundle-Name*: Nuxeo Sample project
*Bundle-SymbolicName*: org.orioai.nuxeo.workflow;_singleton_:=true
*Bundle-Version*: 1.0.0
*Bundle-Vendor*: ORI-ORI.org
*Provide-Package*: org.orioai.nuxeo.workflow
*Require-Bundle*: org.nuxeo.runtime,
 org org.nuxeo.ecm.core.api,
 org org.nuxeo.ecm.core,
 org org.nuxeo.ecm.webapp.core
Nuxeo-Component: OSGI-INF/core-types-contrib.xml,
 OSGI OSGI-INF/actions-contrib.xml,
 OSGI OSGI-INF/orioaiworkflow-service-contrib.xml,
 OSGI OSGI-INF/wsdl-orioaiworkflow-contrib.xml,
 OSGI OSGI-INF/orioainuxeo2xml-service-contrib.xml,
 OSGI OSGI-INF/xsl-orioainuxeo2xml-contrib.xml
*Bundle-ClassPath*: qname.jar
*Import-Package*: javax.xml.namespace
{code}

h2. Explications


h3. Information générale sur le plugin
\\
| | |
| Bundle-SymbolicName | ID |
| Bundle-Version | Version |
| Bundle-Name | Nom |
| Bundle-Vendor | Fournisseur |
Gestion de dépendances
| Provide-Package | Chaîne de caractère qui devra être utilisé par des plugin qui seront dépendant de ce plugin |
| Require-Bundle | Liste des plugins dont est dépendant le plugin courant. Cette liste influera sur  l'ordre de chargement des plugins au démarrage de nuxeo |  

 Autres paramètres 
| Nuxeo-Component | Autres fichiers, appelés XML descriptor, de configuration du plugin. Ils servent à spécifier les points d'extension utilisés par le plugin et/ou à spécifier les points d'extension exposés par le plugin |
| Bundle-ClassPath | Liste de répertoires ou de jar à charger pour la bonne exécution du plugin |
| Import-Package | ??? |   |

h1. {color:#000000}{_}XML descriptor{_}{color}

{note} Fichiers src/main/resources/OSGI-INF/*-contrib.xml dans le projet {note}

Ce sont les fichiers spécifiés dans Nuxeo-Component du fichier MANIFEST.MF

Ils servent à spécifier les points d'extension utilisés par le plugin et/ou à spécifier les points d'extension exposés par le plugin.

Par convention ils sont de la forme :
* \*-contrib.xml quand ils servent à spécifier l'utilisation de points d'extension existants
* \*-service-contrib.xml quand ils servent à spécifier de nouveaux points d'extension

Le développement des points d'extension est traité dans ??? mais voici 2 exemples de fichiers XML descriptor.

Exemple de core-types-contrib.xml :

<?xml version="1.0"?>
<component name="org.orioai.nuxeo.workflow.core-types">
&nbsp; <extension target="org.nuxeo.ecm.core.schema.TypeService"
&nbsp;&nbsp;&nbsp; point="schema">
&nbsp;&nbsp;&nbsp; <schema name="ori" src="schemas/ori.xsd"  prefix="ori" />
&nbsp; </extension>
&nbsp; <extension target="org.nuxeo.ecm.core.schema.TypeService"
&nbsp;&nbsp;&nbsp; point="doctype">
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; <doctype name="File" extends="Document">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="common" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="file" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="dublincore" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="uid" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="files" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <schema name="ori" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <facet name="Downloadable" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <facet name="Versionable" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <facet name="Publishable" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <facet name="Indexable" />
&nbsp;&nbsp;&nbsp; <facet name="Commentable" />
&nbsp;&nbsp;&nbsp; </doctype>
&nbsp; </extension>
</component>

Explications
| /component@name | Nom du composent. \\
Ce nom prend la forme d'une classe java mais il ne s'agit pas obligatoirement d'une classe. En effet, le plus souvent, on étend un point d'extension pour lui passer des paramètres de configuration. |
| /component/extension@target | Nom du composant que l'on va étendre. Correspond au /component@name du point d'extension utilisé. |
| /component/extension@point | Un composant peut contenir plusieurs points d'extension utilisables. On spécifie avec ce paramètre celui que l'on veut étendre. |
| /component/extension/\* | Liste des informations que l'on va passer un point d'extension que l'on étend. Cette liste est spécifique à chaque point d'extension. |
Exemple de orioaiworkflow-service-contrib.xml&nbsp;:

<?xml version="1.0"?>
<component name="org.orioai.nuxeo.workflow.OriOaiWorkflowService">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <implementation
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.orioai.nuxeo.workflow.OriOaiWorkflowServiceMock" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <service>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <provide
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interface="org.orioai.nuxeo.workflow.OriOaiWorkflowService" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </service>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <documentation>explication sur le service</documentation>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <extension-point name="wsUrl">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <documentation>explication sur le point d'extension</documentation>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <object class="org.orioai.nuxeo.workflow.WsDescriptor" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </extension-point>
</component>

Explications
| /component@name | Nom du composent. \\
Ce nom prend la forme d'une classe java. Une bonne pratique consiste à utiliser ici la même valeur que pour /component/service/provider@interface |
| /component/implementation@class | Classe java concrète implémentant le service |
| /component/service/provider@interface | Nom de l'interface java qui est implémentée par /component/implementation@class |
| /component/documentation | Texte d'information sur le service. Il est utile pour les personnes qui seront amenés à travailler avec votre point d'extension. Il est utilisé pour la génération automatique de la documentation de référence sur les points d'extension. |
| /component/extension-point@name | Nom du point d'extension offert par le composant. Il peut y avoir plusieurs balises /component/extension-point |
| /component/extension-point/documentation | Texte d'information sur le point d'extension |
| /component/extension-point/object | Nom du bean qui contiendra les configurations du point d'extension lorsqu'il sera étendu. | | 

h1. {color:#000000}{_}Déploiement fragment{_}{color}

{note} Fichiers src/main/resources/OSGI-INF/deployment-fragment.xml dans le projet {note}

Une application web java classique a des fichiers de configuration qui sont lus au lancement du serveur d'applications. De même, les fichiers de ressources ou les librairies sont lus au lancement. Ceci n'est pas compatible avec la notion de plugin.

En effet, un plugin se matérialise par un simple fichier jar qui sera chargé en fonction des règles de dépendances définies dans le fichier MANIFEST.MF. Il peut néanmoins nécessiter des ressources spécifiques ou une configuration particulière de l'application java qui la contient.

Le fichier deployment-fragment.xml permet justement de spécifier comment le plugin va adapter l'environnement d'exécution java dans lequel il sera appelé.

Exemple&nbsp;:

<?xml version="1.0"?>
<fragment>
&nbsp; <extension target="application#MODULE">
&nbsp;&nbsp;&nbsp; <module>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <java>$
{bundle.fileName}</java>
&nbsp;&nbsp;&nbsp; </module>
&nbsp; </extension>
&nbsp; <extension target="web#CONTEXT-PARAM">
&nbsp;&nbsp;&nbsp; <context-param>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <param-name>org
   
 
 
   
     org.jboss.seam.core.init.debug</param-name>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <param-value>true</param-value>
&nbsp;&nbsp;&nbsp; </context-param>
&nbsp; </extension>
&nbsp; <install>
&nbsp;&nbsp;&nbsp; <\!-\- Unzip the war template \-->
&nbsp;&nbsp;&nbsp; <unzip from="${bundle.fileName}" to="/">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <include>nuxeo.war/*\*</include>
&nbsp;&nbsp;&nbsp; </unzip>
&nbsp;&nbsp;&nbsp; <\!-\- Append .properties files \-->
&nbsp;&nbsp;&nbsp; <delete path="orioainuxeodir.tmp" />
&nbsp;&nbsp;&nbsp; <mkdir path="orioainuxeodir.tmp" />
&nbsp;&nbsp;&nbsp; <unzip from="${bundle.fileName}" to="orioainuxeodir.tmp">debug
     true
   
 
 
    <\!-\- Unzip the war template \-->
   

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <include>\**/*.properties</include>
&nbsp;&nbsp;&nbsp; </unzip><include>nuxeo.war/**</include>
&nbsp;&nbsp;&nbsp; <append from="orioainuxeodir.tmp/OSGI-INF/l10n/messages.properties"</unzip>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to="nuxeo.war/WEB-INF/classes/messages.properties"
&nbsp;&nbsp; <\!-\- Append .properties files -->
&nbsp;&nbsp;&nbsp; <delete addNewLinepath="trueorioainuxeodir.tmp" />
&nbsp;&nbsp;&nbsp; <append<mkdir frompath="orioainuxeodir.tmp/OSGI-INF/l10n/messages_fr.properties"" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; <unzip from="$
{bundle.fileName}" to="orioainuxeodir.tmp">
     \**/*.properties
   
         to="nuxeo.war/WEB-INF/classes/messages_fr.properties"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      addNewLine="true" />
&nbsp;&nbsp;&nbsp; <delete path="orioainuxeodir.tmp         to="nuxeo.war/WEB-INF/classes/messages_fr.properties"
      addNewLine="true" />
&nbsp; </install>
</fragment>

&nbsp;Explications&nbsp;
   
 


 Explications :
| /fragment/extension@target | Nuxeo utilise des fichiers templates (dans le répertoire nuxeo.ear/OSGI-INF/templates). la&nbsp;la  propriété /fragment/extension@target permet de cibler ce fichier (partie avant le # sans l'extension .xml) ainsi que le positionnement dans ce fichier (partie après le # qui permet de pointer sur une balise de la forme %{MODULE}%) |
| /fragment/extension/\* | Portion de XML qui sera intégrée dans le fichier template |
| /fragment/install | Contient du code de type ant permettant de faire certaines actions sur le système de fichiers de l'application.\\
Ici&nbsp;:\\
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\
Ici :\\
\-         on copie le contenue du répertoire src/main/resources/nuxeo.war de notre projet vers le répertoire d'exécution de l'application java\\
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         On vient ajouter des chaines de caractère dans le fichier de message de l'application |
| Note à propos de ${bundle.fileName} 

\| $
{bundle.fileName} 
correspond au fichier jar du plugin courant \| &nbsp;

h1. {color:#000000}{_}Nuxeo.war{_}{color}

{note} répertoire src/main/resources/nuxeo.war dans le projet {note}

Ce répertoire&nbsp;contient l'ensemble des fichiers (pages JSP en .xtml, image, etc.) qui seront déployés dans le répertoire d'exécution de l'application Web de nuxeo grâce au deployment-fragment.xml.