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.
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
portlet1enregistre son contenu sous la cléuserIDavec le typeString,même s'il émet un événement avecQName employeeIDet typeInteger. - Vous pouvez faire en sorte que le portlet d'informations sur les loueurs de véhicules
portlet2lise la cléemployeeIDavec le typeInteger, même si un événement avecQName userIDet typeString.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.
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.
<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>