Interfaces d'extension de servlet

Les générateurs et les gestionnaires d'extension permettent d'ajouter des contenus au message distant pour les appels de servlet et de portlet. L'extension de servlet peut également modifier le comportement existant en exploitant le concept de filtre. Le cadre d'extension RRD (Remote Request Dispatcher) s'appuie d'une part sur des générateurs d'extension, lesquels attachent des données arbitraires à une demande RRD sortante, et d'autre part sur des gestionnaires d'extension, lesquels réceptionnent les données et réalisent les actions en fonction des données reçues. Pour plus d'informations sur le package com.ibm.wsspi.rrd.extension, voir l'article sur les interfaces de programme d'application supplémentaires dédiées aux administrateurs.

Générateurs d'extension

Les générateurs d'extension, qui font partie d'une chaîne de générateur d'extension, sont appelés avant d'initier une demande RRD. Cette chaîne de générateur d'extension est définie dans le point d'extension com.ibm.wsspi.rrd.generators du fichier plugin.xml, lequel peut résider à l'un des emplacements suivants :
  • Dans un autre regroupement OSGI.
  • Dans toute bibliothèque partagée. Par exemple, une bibliothèque partagée associée au chargeur de classe serveur.
  • Dans le répertoire WEB-INF d'une application web locale compatible RRD.

Chaque générateur d'extension est défini par un élément generator qui contient un attribut id servant à affecter un identificateur unique au générateur d'extension. De cette manière, tout générateur d'extension peut être visé par des extensions ajoutées à des données de réponse RRD. L'attribut classe est utilisé pour spécifier le nom de classe du générateur d'extension qui doit implémenter l'interface com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator. Chaque générateur d'extension peut également être associé à un ordre d'exécution via l'attribut order. Ceci permet d'appliquer l'ordre d'exécution du générateur d'extension dans un environnement où plusieurs fichiers de descripteur de générateur d'extension sont présents. Le type des générateurs est en outre défini par un attribut type obligatoire. Pour RRD servlet, la valeur est “servlet” et la classe doit implémenter l'interface com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator.

Chaque générateur peut également disposer d'un nombre arbitraire de paramètres d'initialisation, spécifiés en incluant zéro élément init-param ou plus comme enfant(s) de l'élément generator. Ci-après un exemple de déclaration de générateur d'extension :
<extension point="com.ibm.wsspi.rrd.generators">
  <generator id="int1"
        class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
        order="1"
        type=”servlet”>
	   <init-param>
              <param-name>intValue</param-name>
              <param-value>100</param-value>
	   </init-param>
   </generator>
   <generator id="string1"
        class="com.ibm.ws.rrd.example.extension.StringExtensionGenerator"
        order="2"
        type=”servlet”>
      <init-param>
              <param-name>stringValue</param-name>
              <param-value>This is an example string</param-value>
      </init-param>
   </generator>
   <generator id="int2"
        class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
        order="3"
        type=”servlet”>
      <init-param>
              <param-name>intValue</param-name>
              <param-value>200</param-value>
      </init-param>
   </generator>
</extension>
Pour plus d'informations sur le package com.ibm.wsspi.rrd.extension.generator, voir l'article sur les interfaces de programme d'application supplémentaires dédiées aux administrateurs.

Gestionnaires d'extension

Les gestionnaires d'extension, qui font partie d'une chaîne de gestionnaire d'extension, sont appelés après réception d'une demande RRD. Cette chaîne de gestionnaire d'extension est définie dans le point d'extension com.ibm.wsspi.rrd.handlers du fichier plugin.xml, lequel peut résider à l'un des emplacements suivants :
  • Dans un autre regroupement OSGI.
  • Dans toute bibliothèque partagée. Par exemple, une bibliothèque partagée associée au chargeur de classe serveur.
  • Dans le répertoire WEB-INF d'une application web locale compatible RRD.

Chaque gestionnaire d'extension est défini par un élément handler qui contient les attributs namespaceURI et localName ; la combinaison des deux définit le nom qualifié des données d'extension que le gestionnaire d'extension peut traiter. Chaque gestionnaire d'extension nécessite en outre un identificateur unique spécifié par l'attribut d'id. La valeur spécifiée par cet attribut doit correspondre à un générateur d'extension, lequel génère les données d'extension d'un nom qualifié et d'un identificateur correspondants. L'attribut classe est utilisé pour spécifier le nom de classe du gestionnaire d'extension qui doit implémenter l'interface com.ibm.wsspi.rrd.extension.handler.ExtensionHandler. Le type des gestionnaires est en outre défini par un attribut type obligatoire. Sa valeur est “servlet” et la classe doit implémenter l'interface com.ibm.wsspi.rrd.extension.handler.ExtensionHandler.

Chaque gestionnaire peut également disposer d'un nombre arbitraire de paramètres d'initialisation, spécifiés en incluant zéro élément init-param ou plus comme enfant(s) de l'élément handler. Ci-après un exemple de déclaration de gestionnaire d'extension :
  <extension point="com.ibm.wsspi.rrd.handlers">
      <handler id="int1"
               class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="1"
               type=”servlet”/>
      <handler id="string1"
               class="com.ibm.ws.rrd.example.extension.StringExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="2"
               type=”servlet”/>
      <handler id="int2"
               class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="3"
               type=”servlet”/>
</extension>
Pour plus d'informations sur le package com.ibm.wsspi.rrd.extension.handler, voir l'article sur les interfaces de programme d'application supplémentaires dédiées aux administrateurs.

Délégataires d'extension

Les délégataires d'extension permettent à RRD de traiter des conteneurs de servlet arbitraires en autorisant les utilisateurs à spécifier quelles instances de chaîne de générateur et de gestionnaire d'extension spécifiques doivent être utilisées au cours d'un appel RRD. RRD conserve une liste de délégataires d'extension complétable par l'utilisateur qui lui permet de sélectionner pendant l'exécution le délégataire approprié en fonction du type de demande de servlet émise.

Ces délégataires d'extension peuvent être définis dans le point d'extension com.ibm.wsspi.rrd.rrd-extension-delegator du fichier plugin.xml, lequel peut résider à l'un des emplacements suivants :
  • Dans un autre regroupement OSGI.
  • Dans toute bibliothèque partagée. Par exemple, une bibliothèque partagée associée au chargeur de classe serveur.
  • Dans le répertoire WEB-INF d'une application web locale compatible RRD.
Chaque délégataire d'extension est défini d'une part par un élément ExtensionDelegator qui contient un attribut priority permettant de définir l'ordre relatif dans lequel les délégataires d'extension doivent être initiés, et d'autre part par un attribut classname qui définit la classe d'implémentation d'un délégataire d'extension particulier dont l'objet est d'implémenter l'interface com.ibm.wsspi.rrd.extension.factory.ExtensionDelegator. Notez que l'ordre d'exécution de deux ou plusieurs délégataires d'extension avec la même priorité n'est pas prévisible. Ci-après un exemple de déclaration de délégataire d'extension :
<extension point="com.ibm.wsspi.rrd.rrd-extension-delegator">
  <ExtensionDelegatorRegistration>
    <ExtensionDelegator priority="1" classname="com.ibm.ws.rrd.extension.PortletExtensionDelegator"/>
    <ExtensionDelegator priority="2" classname="com.ibm.ws.rrd.extension.ServletExtensionDelegator"/>
  </ExtensionDelegatorRegistration>
</extension>

Modules EMF personnalisés

Les données d'extension produites par un générateur d'extension et réceptionnées par un gestionnaire d'extension sont sérialisées à l'aide du framework EMF (Eclipse Modeling Framework). Les utilisateurs désirant faire usage des données d'extension personnalisées doivent employer le point d'extension com.ibm.wsspi.rrd.rrd-emf-packages afin de s'assurer que les modules EMF appropriés sont initialisés avant d'être utilisés par RRD. Ce point d'extension fait partie du fichier plugin.xml, lequel peut résider à l'un des emplacements suivants :
  • Dans un autre regroupement OSGI.
  • Dans toute bibliothèque partagée. Par exemple, une bibliothèque partagée associée au chargeur de classe serveur.
  • Dans le répertoire WEB-INF d'une application web locale compatible RRD.
Chaque module EMF est défini par un élément emfPackage qui contient lui-même un élément className devant désigner la classe d'implémentation de la fabrique d'EMF générée pour un module EMF particulier (la classe du modèle généré qui implémente org.eclipse.emf.ecore.impl.EFactoryImpl). Ci-après un exemple de déclaration de module EMF :
<extension point="com.ibm.wsspi.rrd.rrd-emf-packages">
  <emfPackages>
    <emfPackage className="com.ibm.ws.rrd.webservices.types.emf.impl.TypesFactoryImpl" />
  </emfPackages>
</extension>
Remarque : Si un code de modèle EMF généré est partagé par plusieurs applications web s'exécutant dans le même serveur d'applications, ce code devra se trouver dans une bibliothèque de serveurs partagée. Ce n'est généralement pas le cas en production et un code de modèle EMF commun peut exister au niveau de l'application web.

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rweb_rrd_servlet_ext
Nom du fichier : rweb_rrd_servlet_ext.html