Ajout de messages au programme d'écoute pour IBM MQ
HCL Commerce vous permet d'étendre le programme d'écoute pour IBM MQ (anciennement l'adaptateur de transport) pour traiter des messages supplémentaires.
Pourquoi et quand exécuter cette tâche
L'ajout de messages implique de faire ce qui suit :
- Création d'un modèle XML du message.
- Mappage du message à une commande de contrôleur.
Pour ce faire, vous devrez avoir une connaissance avancée de XML et des commandes du contrôleur HCL Commerce. Si votre message vous oblige à créer une nouvelle commande de contrôleur, vous devrez également avoir une connaissance avancée du schéma de base de données HCL Commerce et de la programmation Java.
Procédure
-
Créez un fichier DTD à utiliser pour analyser le message entrant et placez-le le répertoire suivant, workspace_dir/wc/xml/messaging
- Ajoutez-le à la balise de l'attribut Messaging, ECInboundMessageDtFiles, dans le fichier de configuration HCL Commerce :
<Messaging EcInboundMessageDtdFiles="NCCommon.mod, NCCustomer_10.mod, Create_NC_Customer_10.dtd, Update_NC_Customer_10.dtd, Update_NC_OrderStatus_10.dtd, Update_NC_ProductInventory_10.dtd, Update_NC_ProductPrice_10.dtd, Create_WCS_Customer_20.dtd, Update_WCS_Customer_20.dtd, Update_WCS_OrderStatus_20.dtd, Update_WCS_ProductPrice_20.dtd, Inquire_WCS_PickPackListDetail_10.dtd, Create_WCS_PickBatch_10.dtd, Create_WCS_ExpectedInventoryRecord_10.dtd, Create_WCS_InventoryReceipt_10.dtd, Update_WCS_InventoryReceipt_10.dtd, Create_WCS_ShipmentConfirmation_10.dtd, Update_WCS_ProductInventory_20.dtd, Request_WCS_BE_ProductInventory_10.dtd, Update_WCS_OrderStatus_30.dtd, Update_WCS_PriceAndAvailability_10.dtd, Update_WCS_ShoppingCartTransfer_10.dtd, Update_WCS_BatchAvailability_10.dtd, Update_New_Message.dtd" EcInboundMessageDtdPath="messaging" EcMimePropFile="lang_mime.data" EcSystemTemplateFile="sys_template.xml" EcTemplatePath="messaging" EcUserTemplateFile="user_template.xml" XMLWebControllerUserId="wcsadmin" /> - Créez un fichier de mappage pour mapper le contenu du message au nom de commande et aux paramètres nécessaires dans le fichier de modèle de message utilisateur. Ce fichier se trouve dans le répertoire suivant : workspace_dir/WC/xml/messaging/user_template.xml
-
Pour ajouter de nouveaux messages, créez une nouvelle commande de contrôleur (interface et implémentation) pour exécuter la logique métier nécessaire.
Parexemple, pour HCL Commerce version 9.0.0.x :
<action-mappings type="com.ibm.commerce.struts.ECActionMapping"> .... <action parameter="com.ibm.companyA.NewCreationCmd" path="/NewCreation" type="com.ibm.commerce.struts.BaseAction"> <set-property property="authenticate" value="0:0"/> <set-property property="https" value="0:1"/> </action> .... </action-mappings>Dans la version 9.0.1+, vous utiliseriez le code comme suit :Pour plus d'informations sur la création de vues, voir Représentation des implémentations de vues : mappages d'action et réacheminements globaux.<action class="com.ibm.commerce.struts.v2.BaseAction" name="NewCreation"> <param name="authenticate">0:0</param> <param name="https">0:1</param> <param name="parameter">com.ibm.companyA.NewCreationCmd</param> </action> -
Si vous remplacez l'implémentation de commande existante, ajoutez ou mettez à jour la ligne correspondante du tableau CMDREG et affectez un mappage de nom de classe approprié au nom d'interface correct. Si une réponse est requise, procédez comme suit :
Pour les installations HCL Commerce version 9.0.0.x : ajoutez également une vue avant pour
devicefmt_idde -2000. Par exemple,<global-forwards> ... <forward className="com.ibm.commerce.struts.ECActionForward" name="NewCreationRedirectView/0/-20000" path="/NewCreation.jsp"> <set-property property="resourceClassName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl"/> <set-property property="properties" value="storeDir=no"/> <set-property property="interfaceName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommand"/> <set-property property="implClassName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl"/> <set-property property="direct" value="true"/> </forward> ... </global-forwards>Ajoutez un résultat pour l'action struts. Par exemple,<action class="com.ibm.commerce.struts.v2.BaseAction" name="NewCreation"> <param name="authenticate">0:0</param> <param name="https">0:1</param> <param name="parameter">com.ibm.companyA.NewCreationCmd</param> <result name="NewCreationRedirectView"> <param name="location">/NewCreation.jsp</param> <param name="resourceClassName">com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl</param> <param name="interfaceName">com.ibm.commerce.messaging.viewcommands.MessagingViewCommand</param> <param name="implClassName">com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl</param> <param name="properties">storeDir=no</param> <param name="direct">true</param> </result> </action> - Si le site est en cours de développement, vous pouvez ajouter l'attribut DebugMode="true" à la balise Messaging. Toute modification des fichiers DTD sera chargée au cours du message entrant suivant. L'étape 8 sera nécessaire si le DTD a été ajouté pour la première fois à la liste de fichiers DTD ci-dessus.
-
Utilisez la console d'administration du serveur d'applications WebSphere pour mettre à jour l'EAR et le fichier Stores.war.
Notes :
- Le NewCreation.jsp génère le message de réponse. Ce fichier JSP doit être mis à jour à l'aide de la console d'administration WebSphere dans le répertoire WC_eardir/Stores.war.
- Si le répertoire par défaut "messagerie" n'est pas utilisé, un répertoire supplémentaire peut être créé par rapport à WC_eardir/xml. Au moment de l'exécution, le chargeur de classe WAS tentera de charger ces fichiers en ajoutant ce répertoire de "messagerie" ou le répertoire nouvellement créé aux DTD ou au fichier de modèle de mappage avant le chargement. Par défaut, le répertoire de configuration XML est ajouté au chemin de classe de l'application. Tout nouveau répertoire sous ce répertoire de configuration XML peut être chargé par le chargeur de classe.
Résultats
Voici des exemples que vous pouvez suivre :
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Update_First_Element SYSTEM 'Update_New_Message.dtd'>
<Update_First_Element version='1.0'>
<DataArea>
<ABC>123456</ABC>
</DataArea>
</Update_First_Element>
<!ELEMENT Update_First_Element (DataArea)>
<!ATTLIST Update_First_Element
version CDATA #FIXED "1.0">
<!ELEMENT DataArea (ABC)>
<!ELEMENT ABC (#PCDATA)>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE ECTemplate SYSTEM 'ec_template.dtd' >
<ECTemplate>
<TemplateDocument>
<DocumentType version='1.0'>Update_First_Element</DocumentType>
<StartElement>Update_First_Element</StartElement>
<TemplateTagName>NewMessageMap</TemplateTagName>
<CommandMapping>
<Command CommandName='NewCommand' />
</CommandMapping>
</TemplateDocument>
<TemplateTag name='NewMessageMap'>
<Tag XPath='DataArea/ABC' Field='ABC_id' />
</TemplateTag>
</ECTemplate>