Adición de mensajes al escucha para IBM MQ

HCL Commerce permite ampliar el escucha para IBM MQ (anteriormente adaptador de transporte) para procesar mensajes adicionales.

Por qué y cuándo se efectúa esta tarea

La adición de mensajes implica hacer lo siguiente:

  • Crear una plantilla XML del mensaje.
  • Correlacionar el mensaje con un mandato de controlador.

Para ello, tendrá que tener conocimientos avanzados de XML y de los mandatos de controlador de HCL Commerce. Si el mensaje requiere que cree un nuevo mandato de controlador, también tendrá que tener conocimientos avanzados del esquema de base de datos HCL Commerce y de programación Java.

Procedimiento

  1. Cree un archivo DTD que se utilizará para analizar el mensaje de entrada y colóquelo en el directorio siguiente, workspace_dir/wc/xml/messaging
  2. Añádalo a la etiqueta del atributo Messaging, ECInboundMessageDtdFiles, en el archivo de configuración de 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" 
    />
    
  3. Cree un archivo de correlación para correlacionar el contenido del mensaje con el nombre del mandato y los parámetros necesarios en el archivo de plantilla del mensaje de usuario. La plantilla inicial se encuentra en el directorio siguiente workspace_dir/WC/xml/messaging/user_template.xml
  4. Para añadir mensajes nuevos, cree un nuevo mandato de controlador (interfaz e implementación) para ejecutar la lógica de negocio necesaria.
    Por ejemplo, para la versión 9.0.0.x de HCL Commerce:
    
    <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>
    
    En la versión 9.0.1+, utilizaría un código como el siguiente:
    <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> 
    Para obtener más información sobre cómo crear vistas, consulte Representación de las implementaciones de vistas: action-mappings y global-forwards.
  5. Si modifica la implementación del mandato existente, añada o actualice la fila correspondiente de la tabla CMDREG y asigne una correlación de nombres de clase adecuada al nombre de interfaz correcto. Si necesita una respuesta, haga lo siguiente:
    Para las instalaciones de la versión 9.0.0.x de HCL Commerce: añada también una vista de reenvío para devicefmt_id -2000. Por ejemplo,
    
    <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>
    
    Añada un resultado para la acción de Struts. Por ejemplo,
    <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>
  6. Si el sitio está bajo desarrollo, puede añadir el atributo DebugMode="true" al código Messaging. Todos los cambios realizados en los archivos DTD se cargarán durante el mensaje de entrada siguiente. El paso 8 será obligatorio si se añadió la DTD a la lista de archivos de DTD anterior.
  7. Utilice la consola de administración de WebSphere Application Server para actualizar el archivo EAR y Stores.war.
    Notes:
    • NewCreation.jsp genera el mensaje de respuesta. Este archivo JSP debe actualizarse utilizando la consola de administración de WebSphere en el directorio WC_eardir/Stores.war.
    • Si no se utiliza el directorio predeterminado "messaging", puede crearse un directorio adicional relativo a WC_eardir/xml. Durante la ejecución, el cargador de clases de WAS intentará cargar estos archivos poniendo el prefijo de este directorio "messaging" o el directorio que acaba de crear, delante de los DTD o el archivo de plantilla de correlación, antes de realizar la carga. De forma predeterminada, se añade el directorio de configuración XML al classpath de la aplicación. El cargador de clases puede cargar cualquier directorio nuevo bajo este directorio de configuración XML.

Resultados

Puede seguir los ejemplos siguientes:

Mensaje de ejemplo:

<?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>
Archivo DTD de ejemplo:

<!ELEMENT Update_First_Element (DataArea)>
<!ATTLIST Update_First_Element
 version CDATA #FIXED "1.0">
<!ELEMENT DataArea (ABC)>
<!ELEMENT ABC (#PCDATA)>
Archivo user_template.xml de ejemplo:

<?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>