Los adaptadores Worklight son el código del lado del servidor de las aplicaciones desplegadas en la plataforma de aplicaciones móviles de Worklight y a las que ésta da servicio. Los adaptadores conectan Worklight Server con las aplicaciones empresariales, como las que se ejecutan en WebSphere Message Broker. La secuencia siguiente describe la entrega de notificaciones comenzando por una aplicación de proveedor y terminando por una aplicación móvil:
Esta sección describe los archivos generados para el adaptador Worklight.
El patrón crea un adaptador Worklight con dos archivos de configuración. El primer archivo de configuración es el archivo XML de adaptador. El archivo XML de adaptador se utiliza para configurar la conectividad con Message Broker. El ejemplo siguiente muestra el archivo de configuración XML de adaptador generado:
<?xml version="1.0" encoding="UTF-8"?> <wl:adapter name="PushAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wl="http://www.worklight.com/integration" xmlns:http="http://www.worklight.com/integration/http"> <displayName>PushAdapter</displayName> <description>Worklight: adaptador de notificaciones push</description> <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>http</protocol> <domain>localhost</domain> <port>7800</port> </connectionPolicy> <loadConstraints maxConcurrentConnectionsPerNode="1" /> </connectivity> </wl:adapter>
Muchos de los valores de este archivo XML de adaptador están configurados a partir de parámetros de patrón (por ejemplo, displayName
, domain
y port
).
El patrón también genera un archivo JavaScript que contiene la implementación del adaptador de notificaciones. La sección clave de este archivo generado se encuentra en la parte superior, donde el adaptador configura el origen de los sucesos. El nombre del origen de sucesos debe coincidir con el nombre del origen de sucesos al que está suscrita la aplicación móvil.
WL.Server.createEventSource({ name : "PushEventSource", onDeviceSubscribe : "deviceSubscribeFunc", onDeviceUnsubscribe : "deviceUnsubscribeFunc", poll : { interval : 30, onPoll: "getNotifications" } });
El esquema XML que se muestra a continuación especifica el formato de los mensajes de notificación puestos en la cola y devueltos por el servicio web.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:tns="urn://patterns/worklight" targetNamespace="urn://patterns/worklight"> <xsd:element name="GetNotification"> <xsd:annotation> <xsd:documentation xml:lang="es">Mensaje de solicitud para obtener la siguiente notificación pendiente disponible.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="AdapterName" type="xsd:string"/> <xsd:element name="EventSource" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="GetNotificationResponse"> <xsd:annotation> <xsd:documentation xml:lang="es">Mensaje de respuesta para la siguiente notificación pendiente disponible.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="Notification" type="tns:Notification"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="PutNotification"> <xsd:annotation> <xsd:documentation xml:lang="es">Mensaje de solicitud para añadir un mensaje de notificación pendiente.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="Notification" type="tns:Notification"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="PutNotificationResponse"> <xsd:annotation> <xsd:documentation xml:lang="es">Mensaje de respuesta para colocar un mensaje de notificación pendiente.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="AdapterName" type="xsd:string"/> <xsd:element name="EventSource" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="Payload"> <xsd:annotation> <xsd:documentation xml:lang="es">Datos específicos de la aplicación en los mensajes de notificación.</xsd:documentation> </xsd:annotation> <xsd:sequence> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Notification"> <xsd:annotation> <xsd:documentation xml:lang="es">Definición de datos para mensajes de notificación.</xsd:documentation> </xsd:annotation> <xsd:sequence> <xsd:element name="UserId" type="xsd:string"/> <xsd:element minOccurs="0" name="Badge" type="xsd:string"/> <xsd:element minOccurs="0" name="Sound" type="xsd:string"/> <xsd:element minOccurs="0" name="ActivateButtonLabel" type="xsd:string"/> <xsd:element minOccurs="0" name="NotificationText" type="xsd:string"/> <xsd:element minOccurs="0" name="Payload" type="tns:Payload"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
El patrón rellena el elemento Payload
con los nombres de los campos específicos de aplicación adicionales.
El siguiente es un extracto del WSDL del servicio web de envío de notificaciones.
<wsdl:definitions name="Notification" targetNamespace="urn://patterns/worklight" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn://patterns/worklight" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xsd:schema targetNamespace="urn://patterns/worklight" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:include schemaLocation="Notification.xsd"/> </xsd:schema> </wsdl:types> <wsdl:message name="GetNotification"> <wsdl:part element="tns:GetNotification" name="GetNotification"/> </wsdl:message> <wsdl:message name="GetNotificationResponse"> <wsdl:part element="tns:GetNotificationResponse" name="GetNotificationResponse"/> </wsdl:message> <wsdl:message name="PutNotification"> <wsdl:part element="tns:PutNotification" name="PutNotification"/> </wsdl:message> <wsdl:message name="PutNotificationResponse"> <wsdl:part element="tns:PutNotificationResponse" name="PutNotificationResponse"/> </wsdl:message> <wsdl:portType name="NotificationPortType"> <wsdl:operation name="GetNotification"> <wsdl:input message="tns:GetNotification"/> <wsdl:output message="tns:GetNotificationResponse"/> </wsdl:operation> <wsdl:operation name="PutNotification"> <wsdl:input message="tns:PutNotification"/> <wsdl:output message="tns:PutNotificationResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="NotificationSOAPBinding" type="tns:NotificationPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="GetNotification"> <soap:operation soapAction="http://notification/get"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="PutNotification"> <soap:operation soapAction="http://notification/put"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> </wsdl:definitions>
El adaptador generado por este patrón utiliza la operación GetNotification
para recuperar notificaciones de envío pendientes de Message Broker. El servicio web también proporciona una operación PutNotification
. Esta operación está disponible para las aplicaciones de proveedor que prefieren poner en cola las notificaciones con Message Broker llamando a un servicio web, en lugar de escribir un mensaje en una cola.
Volver a la especificación del patrón Worklight: envío de notificaciones desde WebSphere MQ