Informationen zum Mustercode 'WBI JDBC Adapter Migration'

Mit dem DatabaseInput-Knoten können Sie Nachrichtenflüsse migrieren, damit diese anstelle von WBI JDBC-Adaptern auf Datenbankaktualisierungen reagieren. Auf diese Weise kann die gesamte Komplexität innerhalb von Message Broker eingebunden werden. Ein Nachrichtenfluss, der einen WBI JDBC-Adapter nutzt, wird für gewöhnlich von einem MQInput-Knoten aufgerufen, der für die Annahme von Daten konfiguriert wurde, die aus einer Warteschlange stammen, welche von einem JDBC-Connector mit einem durch eine Nachrichtengruppe interpretierten Geschäftsobjekt gefüllt wird:

Struktur einer WBI JDBC-Adapterimplementierung

Sobald eine Änderung (INSERT, UPDATE oder DELETE) an der Datenbank vorgenommen wird, wird ein Auslöser gestartet und eine Zeile in die Ereignistabelle eingefügt, in der die Änderung beschrieben wird. Bei diesem Beispiel werden in eine Kundentabelle Zeilen eingefügt.

Die folgende Abbildung enthält die Ereignisfolge in einem Szenario mit einer WBI JDBC Adapter-Implementierung. Sobald eine Änderung an der Anwendungsdatentabelle stattfindet, wird ein Auslöser gestartet. Die Ereignistabelle wird dann mit so vielen Informationen gefüllt, dass die Ermittlung der geänderten Zeilen möglich ist.

Anwendungstabelle

PKEY FIRSTNAME LASTNAME CCODE
cust1 Joe Bloggs sales

Ereignistabelle

EVENT_ID CONNECTOR_ID OBJECT_KEY OBJECT_NAME OBJECT_VERB EVENT_PRIORITY EVENT_TIME EVENT_STATUS EVENT_COMMENT
1 JDBCCustomerConnector cust1 customer Create 1 2010-08-02 13:54:16843 0 NULL

Ein neuer Kunde wird mit dem Primärschlüssel cust1 erstellt und JDBCCustomerConnector wird für die Handhabung des Ereignisses festgelegt. Der Datenhandler für den Connector liest diese Zeile aus dem Ereignis und erstellt ein Geschäftsobjekt aus der entsprechenden Zeile in der Anwendungstabelle. Dieses Geschäftsobjekt wird in eine WebSphere MQ-Warteschlange gestellt und kann jederzeit vom MQInput-Knoten abgerufen werden.

Die Nachrichtenflüsse und die von ihnen ausgeführte Verarbeitung werden in den folgenden Abschnitten näher erläutert.

Adapternachrichtenfluss

Der Adapternachrichtenfluss führt folgende Verarbeitung aus:

  1. Er liest eine WebSphere MQ-Nachricht, die XML-Nutzdaten enthält, welche von einem WBI JDBC-Adapter generiert wurden. Die Nutzdaten enthalten das zu verarbeitende Geschäftsobjekt.
  2. Er entscheidet abhängig von einem Segment im RFH2-Header über die Verarbeitung der Nachricht.
  3. Er leitet die Nachricht an den richtigen Bereich des Flusses weiter.
  4. Er sendet ein WebSphere MQ-Nachricht zur weiteren Verarbeitung an eine Ausgabewarteschlange.
  5. Er verarbeitet sämtliche Fehler, indem er die Nachricht und Ausnahmebedingungen in einer Fehlerwarteschlange protokolliert.

Der Nachrichtenfluss 'Adapter' besteht aus folgenden Knoten:

Screenshot des Nachrichtenflusses 'Adapter'

Der MQInput-Knoten liest das eingehende Geschäftsobjekt in der MRM-Domäne. Dieses Objekt wird einer Ausgabenachricht zugeordnet und in eine andere Warteschlange gestellt. Mithilfe einer Testnachricht kann ein JDBC-Adapter imitiert werden, der eine Nachricht einreiht.

Eingabenachrichtenformate befinden sich im Projekt AdapterMigration Input Messages. Diese Formate wurden über die XSD-Dateien erstellt, die wiederum vom WBI Adapter Business Object Designer erstellt wurden.

Der Fluss wird dann geändert, indem der Adapter gestoppt, der MQInput-Knoten entfernt und ein DatabaseInput-Knoten hinzugefügt wird; durch eine sorgfältige Entwicklung des Extended SQL ist die Ausgabenachricht mit dem vorherigen, vom Adapter gesteuerten, MQInput-Knoten identisch. Durch diese Änderung wird die Gesamtinteraktion einfacher:

Struktur der Implementierung eines DatabaseInput-Knotens

Die vorhandenen Anwendungstabellen, Auslöser und die bestehende Ereignistabelle bleiben unverändert.

Nachrichtenfluss 'MigratedAdapter'

Der Nachrichtenfluss 'MigratedAdapter' ist mit dem vorherigen Fluss identisch, allerdings wurde der MQInput-Knoten durch einen funktional entsprechenden DatabaseInput-Knoten ersetzt:

Screenshot des Nachrichtenflusses 'MigratedAdapter'

Testnachrichten und Scripts

In diesem Mustercode stehen zwölf Nachrichten und Scripts zur Verfügung:
Beachten Sie, dass die SQL-Scripts zum Einfügen vor den Scripts zum Aktualisieren oder Löschen ausgeführt werden sollten. Außerdem sollten die Zeilen für Adressen und Kunden vor denjenigen für Rechnungen hinzugefügt werden, um fehlschlagende Schlüssel zu vermeiden.

  1. Eine Nachricht, die einen Adapterdatenhandler emuliert, der eine Nachricht in eine Warteschlange für eine aktualisierte Rechnung stellt
  2. Eine Nachricht, die einen Adapterdatenhandler emuliert, der eine Nachricht in eine Warteschlange für einen aktualisierten Kunden stellt
  3. Eine Nachricht, die einen Adapterdatenhandler emuliert, der eine Nachricht in eine Warteschlange für eine aktualisierte Adresse stellt
  4. Eine Nachricht, die einen Adapterdatenhandler emuliert, der eine Nachricht in eine Warteschlange für eine gelöschte Rechnung stellt
  5. Ein SQL-Script zum Einfügen einer Zeile in die Anwendungstabelle für Adressen, Kunden und Rechnungen
  6. Ein SQL-Script zum Einfügen einer Zeile in die Anwendungstabelle für Adressen
  7. Ein SQL-Script zum Einfügen einer Zeile in die Anwendungstabelle für Kunden
  8. Ein SQL-Script zum Einfügen einer Zeile in die Anwendungstabelle für Rechnungen
  9. Ein SQL-Script zum Aktualisieren einer Zeile in der Anwendungstabelle für Kunden
  10. Ein SQL-Script zum Löschen einer Zeile aus der Anwendungstabelle für Rechnungen
  11. Ein SQL-Script zum Löschen einer Zeile aus der Anwendungstabelle für Kunden
  12. Ein SQL-Script zum Löschen einer Zeile aus der Anwendungstabelle für Adressen

Adapternachricht über eine Rechnung

Dies ist eine Message Broker-Testclientnachricht, die den XML-Code und die Header einer WBI JDBC-Nachricht für eine aktualisierte Rechnung (Invoice) enthält. Sie umfasst Unterelemente aus den verknüpften Anwendungstabellen Customer (Kunde) und Address (Adresse). Die RFH2-Header geben an, dass die Nachricht den Typ ADAPTERINVOICE aufweist.

Adapternachricht über einen Kunden

Dies ist eine Message Broker-Testclientnachricht, die den XML-Code und die Header einer WBI JDBC-Nachricht für einen aktualisierten Kunden (Customer) enthält. Sie umfasst Unterelemente aus den verknüpften Anwendungstabellen des Typs Address (Adresse). Die RFH2-Header geben an, dass die Nachricht den Typ ADAPTERCUSTOMER aufweist.

Adapternachricht über eine Adresse

Dies ist eine Message Broker-Testclientnachricht, die den XML-Code und die Header einer WBI JDBC-Nachricht für eine aktualisierte Adresse (Address) enthält. Die RFH2-Header geben an, dass die Nachricht den Typ ADAPTERADDRESS aufweist.

Adapternachricht über eine gelöschte Rechnung

Dies ist eine Message Broker-Testclientnachricht, die den XML-Code und die Header einer WBI JDBC-Nachricht für eine gelöschte Rechnung (Invoice) enthält. Die RFH2-Header geben an, dass die Nachricht den Typ ADAPTERINVOICE aufweist.

Adapter-SQL-Script für eine Einfügung aller Elemente

INSERT INTO ADAPTER_ADDRESS
  VALUES ('add0', '301', 'Cobblestone Way', '1', 'Bedrock', 'Rock');

INSERT INTO ADAPTER_CUSTOMER
  VALUES ('cust0', 'Fred', 'Flintstone', 'add0', 'Dev');
  
INSERT INTO ADAPTER_INVOICE 
  VALUES ('inv0', 'Paper', 300, 'cust0');

Adapter-SQL-Script für eine Einfügung einer Adresse

INSERT INTO ADAPTER_ADDRESS
  VALUES ('add1', 'MP211', 'IBM Hursley Park', 'SO21 2JN', 'Winchester', 'GB')

Adapter-SQL-Script für eine Einfügung eines Kunden

INSERT INTO ADAPTER_CUSTOMER
  VALUES ('cust1', 'Beloved', 'Customer', 'add1', 'GB')

Adapter-SQL-Script für eine Einfügung einer Rechnung

INSERT INTO ADAPTER_INVOICE
  VALUES ('inv1', 'hats', 10, 'cust1')

Adapter-SQL-Script für eine Aktualisierung eines Kunden

UPDATE ADAPTER_CUSTOMER SET FIRSTNAME = 'Barney', LASTNAME = 'Rubble' WHERE PKEY='cust1';

Adapter-SQL-Script für das Löschen einer Adresse

DELETE FROM ADAPTER_ADDRESS WHERE PKEY='add01';

Adapter-SQL-Script für das Löschen eines Kunden

DELETE FROM ADAPTER_CUSTOMER WHERE PKEY='cust01';

Adapter-SQL-Script für das Löschen einer Rechnung

DELETE FROM ADAPTER_INVOICE WHERE PKEY='inv1';

Zurück zum Beginn des Mustercodes