Associateurs d'événements

Dans des scénarios plus complexes, il ne sera peut-être pas suffisant d'adapter uniquement les noms d'événement ou les QNames. Vous devrez parfois transformer le contenu.

Par exemple, sur un site de voyage, un portlet d'informations passager portlet1 émet un ID passager sous la clé passengerID. Le contenu est de type Integer. Un deuxième portlet d'informations sur les loueurs de véhicules, portlet2, attend un ID passager sous la clé userID, en envoie un contenu de type String.

Comme pour les clés DCX, vous disposez des deux options suivantes pour permettre au portlet d'informations passager portlet1 de communiquer avec le portlet d'informations sur les loueurs de véhicules portlet2 :
  • Vous pouvez faire en sorte que le portlet d'informations passager portlet1 enregistre son contenu sous la clé userID avec le type String, même s'il émet un événement avec QName employeeID et type Integer.
  • Vous pouvez faire en sorte que le portlet d'informations sur les loueurs de véhicules portlet2 lise la clé employeeID avec le type Integer, même si un événement avec QName userID et type String. est attendu.

Les associateurs ont un accès complet au segment DCX de l'instance de boîte de dialogue en cours de traitement et également à la charge en cours de traitement. Par conséquent, les associateurs sont des outils puissants capables d'exécuter plusieurs transformations.

Implémentez MapperFactory pour rendre les associateurs disponibles. Vous pouvez enregistrer MapperFactory avec un point d'extension Eclipse. Cette approche offre l'avantage d'enregistrer de nouveaux associateurs sans avoir à redémarrer le serveur. Cette méthode est également appelée déploiement à chaud. Pour utiliser MapperFactory, vous devez implémenter l'interface MapperFactory et renvoyer une instance d'objet de type ContextToPayloadMapper ou PayloadToContextMapper. Cette implémentation dépend de l'associateur d'événements concret requis.

L'exemple de code suivant montre l'aspect que peut prendre MapperFactory.

Exemple de code

 public class MapperFactory implements com.ibm.portal.pcm.events.MapperFactory {
 
  public ContextToPayloadMapper getContextToPayloadMapper(String name) {      
      ContextToPayloadMapper result = null;       
      if (name.equals("myPackage.myMapper")) {
          result = new MyMapper();
      }
 
      return result;
  }
 
  public PayloadToContextMapper getPayloadToContextMapper(String name) {
      // ...
  }
 }

L'exemple de code suivant montre comment enregistrer une interface MapperFactory avec un fichier plugin.xml.

Exemple de code

 <plugin
     id="com.ibm.wps.portlet.pcm.demo"
     name="Portlet Control Manager Demo"
     version="1.0.0"
     provider-name="IBM">

     <!-- Mapper Factory -->
     <extension point="com.ibm.portal.pcm.MapperFactory" id="PcmMapperFactory">
         <factory class="com.ibm.wps.pcm.demo.mapper.MapperFactory"/>
     </extension>
 </plugin>