Adaptador de ejemplo

Si desea utilizar un transporte que no se proporciona con HCL Commerce, se proporciona un adaptador de ejemplo que puede utilizar como base para desarrollar un adaptador de recursos JCA.

El adaptador de ejemplo de HCL Commerce consta de los siguientes elementos:
  • Clases Java
  • Archivos de metadatos
  • Archivo descriptor de despliegue
Nota: Para crear una nueva clase de adaptador es preciso tener unos conocimientos razonables de cómo funciona el adaptador de recursos JCA. Para obtener información sobre cómo funciona el adaptador de recursos JCA, consulte el documento: J2EE Connector Architecture (JCA) Version 1.5.

Clases Java de adaptador de ejemplo

Las clases Java de ejemplo están en el siguiente directorio:

  • WCServer_enterprise_archive/Enablement-JCASampleConnector/connectorModule
Nota: *Para evitar problemas al conectarse con una base de datos remota, implemente los métodos necesarios y asegúrese de que estas clases de implementación implementan java.io.Serializable.

Archivo de metadatos

El adaptador de ejemplo contiene los archivos de metadatos siguientes:

META-INF/MANIFEST.MF
Lista los archivos y las clases JAR que las clases de implementación del adaptador de ejemplo necesitan en tiempo de ejecución. Este adaptador de recursos de ejemplo hace referencia al archivo Enablement-BaseComponentsLogic.jar y al archivo Enablement-IntegrationLogic.jar.

Archivo descriptor de despliegue

El adaptador de ejemplo contiene el archivo descriptor de despliegue siguiente:

META-INF/ra.xml
El archivo ra.xml lista las clases de implementación para los métodos JCA. Para obtener un ejemplo del archivo ra.xml, consulte Ejemplo: Archivo descriptor de despliegue ra.xml.

Cómo se envía un mensaje utilizando el adaptador de transporte de ejemplo

A continuación se describe el flujo de mensajes cuando se envía un mensaje a través del adaptador de ejemplo en un entorno gestionado como WebSphere Application Server. Un mensaje enviado a través del adaptador de transporte de ejemplo sigue estos pasos:

  1. El sistema de mensajería de HCL Commerce encuentra la fábrica de conexiones de J2C del adaptador a través del nombre JNDI asociado con el adaptador de ejemplo, eis/JCASample. La clase de implementación del método de fábrica de conexiones J2C se especifica mediante el valor del elemento connectionfactory-impl-class en el archivo descriptor de despliegue ra.xml.
  2. El objeto SampleConnectionFactory se construye y se pasa a la clase de implementación javax.resource.spi.ConnectionManager y a la clase de implementación javax.resource.spi.ManagedConnectionFactory.
  3. El sistema de mensajería llama al método SampleConnectionFactory.getConnection(javax.resource.cci.ConnectionSpec) para obtener un objeto javax.resource.cci.Connection mediante la construcción de un objeto SampleConnectionRequestInfo. Los objetos SampleConnectionRequestInfo y SampleManagedConnectionFactory se pasan al método SampleConnectionManager.allocate(ManagedConnectionFactory,ConnectionRequestInfo). Esto crea el objeto javax.resource.cci.Connection.
  4. El método SampleConnectionManager.allocate(ManagedConnectionFactory,ConnectionRequestInfo) llama a uno de los métodos siguientes:
    • SampleManagedConnectionFactory.createManagedConnection(javax.security.auth.Subject, javax.resource.spi.ConnectionRequestInfo), que construye y devuelve SampleManagedConnection().
    • (Se utiliza junto con la agrupación de conexiones) SampleManagedConnectionFactory.matchManagedConnection(java.util.Set, javax.security.auth.Subject, javax.resource.spi.ConnectionRequestInfo), que obtiene una conexión correspondiente. SampleManagedConnectionFactory.matchManagedConnection devuelve un nulo. Llama a createManagedConnection para crear un nuevo objeto SampleConnection.

    El objeto SampleConnectionSpec consta de dos campos: userName y password El objeto SampleInteractionSpec contiene un campo: input (tipo java.lang.String). Normalmente se requiere ConnectionRequestInfo para crear el objeto ManagedConnection, de modo que ConnectionRequestInfo contiene los campos de ConnectionSpec. Por consiguiente, el objeto SampleConnectionRequestInfo del adaptador de ejemplo contiene los campos userName y password.

  5. (Se utiliza junto con la agrupación de conexiones) Para utilizar la agrupación de conexiones que se ejecuta en WebSphere Application Server, deben implementarse los métodos ConnectionRequestInfo.equals(java.lang.Object) y hashCode(). SampleConnectionRequestInfo.hashCode() devuelve el código hash de las series concatenadas: userName y password WebSphere Application Server utiliza estos métodos para determinar las posibles conexiones y para pasar las conexiones reutilizables a ManagedConnectionFactory.matchManagedConnection(java.util.Set, javax.security.auth.Subject, javax.resource.spi.ConnectionRequestInfo). El método matchManagedConnection busca un objeto ManagedConnection adecuado en el conjunto de conexiones reutilizables que se han pasado desde WebSphere Application Server.
  6. SampleConnection se devuelve al sistema de mensajería. Se llama a las interfaces Connection.createInteraction() y javax.resource.cci.Interaction.execute(javax.resource.cci.InteractionSpec, com.ibm.commerce.messaging.outboundservice.WCMSRecord, com.ibm.commerce.messaging.outboundservice.WCMSRecord) y javax.resource.cci.Interaction.close() para enviar el mensaje. SampleInteraction.execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record, javax.resource.cci.Record) escribe lo siguiente en el archivo SystemOut.log:
    
    ************************************************** 
    a test message
    ************************************************** 
    

    Donde:

    mensaje de prueba
    El contenido del mensaje de salida, si el campo input del objeto SampleInteractionSpec es test messages. Si el valor del campo input no son mensajes de prueba, se generará una excepción.
  7. SampleConnection.close() llama a SampleManagedConnection.sendEvent(javax.resource.spi.ConnectionEvent.CONNECTION_CLOSED, java.lang.Exception, Object) para activar el suceso CONNECTION_CLOSED.
  8. WebSphere Application Server llama a SampleManagedConnection.cleanup() y destroy().
    Nota: Si se utiliza la agrupación de conexiones, el método destroy(), que destruye la conexión física con el recurso de empresa, se invoca una vez transcurrido el tiempo de espera no utilizado especificado en los valores de la agrupación de conexiones.