Bei Worklight-Adaptern handelt es sich um den serverseitigen Code von Anwendungen, die auf der Worklight-Plattform für mobile Anwendungen implementiert sind und dort gewartet werden. Adapter stellen eine Verbindung vom Worklight-Server zu Unternehmensanwendungen her, beispielsweise zu denen, die in WebSphere Message Broker ausgeführt werden. Die folgende Sequenz durchläuft die Übergabe von Benachrichtigungen und startet dabei mit einer Provideranwendung und endet mit einer mobilen Anwendung:
In diesem Abschnitt werden die Dateien erläutert, die für den Worklight-Adapter generiert wurden.
Das Muster erstellt einen Worklight-Adapter mit zwei Konfigurationsdateien. Bei der ersten Konfigurationsdatei handelt es sich um die XML-Datei des Adapters. Mit der XML-Datei des Adapters wird die Verbindung zu Message Broker konfiguriert. Im folgenden Beispiel wird die generierte XML-Konfigurationsdatei des Adapters gezeigt:
<?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: push notifications adapter</description> <connectivity> <connectionPolicy xsi:type="http:HTTPConnectionPolicyType"> <protocol>http</protocol> <domain>localhost</domain> <port>7800</port> </connectionPolicy> <loadConstraints maxConcurrentConnectionsPerNode="1" /> </connectivity> </wl:adapter>
Viele der Werte in dieser XML-Datei des Adapters werden aus Musterparametern konfiguriert (z. B. displayName
, domain
und port
).
Das Muster generiert auch eine JavaScript-Datei, die die Adapterimplementierung für die Benachrichtigung enthält. Der Schlüsselabschnitt befindet sich am Anfang dieser generierten Datei, wo der Adapter die Ereignisquelle konfiguriert. Der Ereignisquellenname muss mit dem Namen der Ereignisquelle übereinstimmen, welche die mobile Anwendung subskribiert.
WL.Server.createEventSource({ name : "PushEventSource", onDeviceSubscribe : "deviceSubscribeFunc", onDeviceUnsubscribe : "deviceUnsubscribeFunc", poll : { interval : 30, onPoll: "getNotifications" } });
Das unten gezeigte XML-Schema gibt das Format der Benachrichtigungen an, die in die Warteschlange gestellt und vom Web-Service zurückgegeben werden.
<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="en">Request message to get the next available pending notification.</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="en">Response message for next available pending notification.</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="en">Request message to add a pending notification message.</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="en">Response message for putting a pending notification messages.</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="en">Application specific data in the notification messages.</xsd:documentation> </xsd:annotation> <xsd:sequence> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Notification"> <xsd:annotation> <xsd:documentation xml:lang="en">Data definition for notification messages.</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>
Das Element Payload
(Nutzdaten) wird vom Muster mit den Namen aller zusätzlichen anwendungsspezifischen Felder gefüllt.
Ein Auszug aus der WSDL für den Web-Service der Push-Benachrichtigung wird im Anschluss gezeigt.
<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>
Der durch dieses Muster generierte Adapter verwendet die Operation GetNotification
, um anstehende Push-Benachrichtigungen aus Message Broker abzurufen. Der Web-Service stellt ebenfalls
eine PutNotification
-Operation bereit. Diese Operation richtet sich an Provideranwendungen, die das Einreihen von Benachrichtigungen in Message Broker durch den Aufruf eines Web-Service dem Schreiben einer Nachricht in eine Warteschlange vorziehen.
Zurück zur Spezifikation des Musters 'Worklight: push notification from WebSphere MQ'