WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Interaktion mit Datenbanken mithilfe des JavaCompute-Knotens

Zugriff auf Datenbanken über den im JavaCompute-Knoten enthaltenen Java™-Code.

Wählen Sie für die Datenbankinteraktion eine der folgenden Optionen aus:

Wenn Sie den JDBC-Provider für Typ-4-Verbindungen bzw. MbSQLStatement verwenden, kann die Datenbank, auf die Sie zugreifen, an global koordinierten Transaktionen teilnehmen. Bei allen anderen Optionen ist die globale Koordination des Datenbankzugriffs nicht möglich.

JDBC-Provider des Brokers für Typ-4-Verbindungen

Für die Interaktion mit Datenbanken über JavaCompute-Knoten können Sie JDBC-Typ-4-Verbindungen einrichten. Der Broker unterstützt Typ-4-Treiber, stellt diese aber nicht bereit. Die Treiber erhalten Sie von Ihrem Datenbankhersteller. Die unterstützten Treiber sind im Abschnitt Unterstützte Datenbanken aufgelistet.

Der JDBC-Provider des Brokers für Typ-4-Verbindungen bietet folgende Vorteile:
  • Sie können die Konfigurationsmöglichkeiten des Brokers zur Definition der Verbindung und zur Bereitstellung optionaler Sicherheitsfunktionen verwenden. Dadurch ersparen Sie sich die Codierung dieser Aktionen.
  • In der Konfiguration des Brokers und der Datenbanken können Sie den Zugriff auf andere Ressourcen, auf die Sie über Ihre Nachrichtenflüsse zugreifen, sowie die Aktualisierung mit diesen Ressourcen koordinieren (Ausnahme: bei Ausführung des Brokers unter z/OS).
  • Sie können die Verbindung mit der Java-API getJDBCType4Connection des Brokers initiieren und nachfolgende SQL-Operationen mit den Standard-JDBC-APIs ausführen. Der Broker verwaltet die Verbindungen, die Thread-Affinität, das Verbindungspooling und die Verbindungsdauer. Bei Inaktivität einer Verbindung für etwa eine Minute oder nach Abschluss des Nachrichtenflusses schließt der Broker die Verbindung.

Bei Ausführung des Brokers in einem verteilten System können Sie die Datenbanken und Verbindungen mit anderen Ressourcenaktivitäten koordinieren. Die globale Koordination auf verteilten Systemen wird von WebSphere MQ bereitgestellt. Sie kann Interaktionen mit lokalen oder fernen Datenbanken, einschließlich fernen Datenbanken auf z/OS-Systemen, umfassen. Bei einer JDBC-Typ-4-Datenbankverbindung von einem Broker, der unter z/OS ausgeführt wird, ist keine Koordination möglich. Informationen zum Einrichten von Verbindungen sowie Informationen zur Koordination finden Sie im Abschnitt JDBC-Verbindungen zu den Datenbanken herstellen.

Bevor Sie diese Funktion in den Code für den Knoten integrieren, müssen Sie die erforderliche Umgebung konfigurieren. Überlegen Sie sich zuvor, ob für die Datenbank ein sicherer Zugriff erforderlich ist und ob die Datenbankaktualisierungen an global koordinierten Transaktionen teilnehmen sollen. Im Abschnitt JDBC-Verbindungen zu den Datenbanken herstellen finden Sie Informationen zu den erforderlichen und optionalen Tasks.

Nach der Konfiguration des JDBC-Providers können Sie in der MbNode-Schnittstelle mit dem Aufruf von getJDBCType4Connection eine JDBC-Typ-4-Verbindung zur Datenbank einrichten. Nachfolgend finden Sie ein Code-Beispiel:

public class MyJavaCompute extends MbJavaComputeNode {
    public void evaluate(MbMessageAssembly inAssembly) throws MbException {
      MbOutputTerminal out = getOutputTerminal("out");
      MbMessage inMessage = inAssembly.getMessage();

      // Neue Nachricht erstellen 
      MbMessage outMessage = new MbMessage(inMessage);
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,outMessage);

      try {
        // Obtain a java.sql.Connection using a JDBC Type4 datasource - in this example for a 
        // JDBC broker configurable service called "MyDB2"  

        Connection conn = getJDBCType4Connection("MyDB2",JDBC_TransactionType.MB_TRANSACTION_AUTO);

        // Example of using the Connection to create a java.sql.Statement  
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_READ_ONLY);
        ResultSet srs0 = stmt.executeQuery("SELECT NAME, CITY FROM MySchema.MyTable");    

        stmt.executeUpdate("UPDATE MySchema.MyTable SET CITY = \"Springfield\" WHERE Name = \"Bart\"");
        .
        // Perform other database updates   
        . 

      } catch (SQLException sqx ){
        sqx.printStackTrace();
      } finally {
        // Clear the outMessage
        outMessage.clearMessage();
      }     
    }  
  }  

In diesem Beispiel gilt Folgendes:

  • MyDB2 ist der Name des konfigurierbaren Service des JDBC-Providers. Geben Sie den Namen des Service ein, den Sie für die Verbindung mit Ihrer Datenbank erstellt haben.
  • MySchema steht für den Namen des Datenbankschemas (nicht den Namen der Datenbank).
  • MB_TRANSACTION_AUTO legt die für den Knoten erforderliche Transaktionskoordinationsstufe fest. Es wird nur dieser Wert unterstützt. Er gibt an, dass die Koordinationseinstellung für den Knoten aus der auf Meldungsflussebene konfigurierten Koordination übernommen wird.

Geben Sie zum Anzeigen eines Fehlers (und anschließenden Rollbacks einer Transaktion) eine Ausnahmebedingung aus dem JavaCompute-Knoten aus. Der Broker führt dann die Rollback-Operation durch.

Die primäre Verwendung des Aufrufs getJDBCType4Connection ist die Methode evaluate() eines JavaCompute-Knotens, in der er zum Abruf einer vom Broker verwalteten JDBC-Verbindung verwendet wird.

WebSphere Message Broker verwaltet JDBC-Verbindungen wie folgt:
  • Nicht gepoolte Verbindungen:
    • WebSphere Message Broker erstellt bei Bedarf eine JDBC-Verbindung für jede Nachrichtenflussinstanz, die eine Verbindung anfordert.
    • Jede JDBC-Verbindung wird der Nachrichtenflussinstanz zugeordnet, für die sie erstellt wurde. Diese Zuordnung wird aufrechterhalten, bis die Verbindung geschlossen wird.
    • Jede JDBC-Verbindung, die 60 Sekunden lang inaktiv ist, wird geschlossen und ist nicht mehr einer Nachrichtenflussinstanz zugeordnet.
    • Nachdem eine JDBC-Verbindung, die einer Nachrichtenflussinstanz zugeordnet war, geschlossen wurde, erstellt WebSphere Message Broker bei Bedarf eine neue JDBC-Verbindung, falls dieselbe Nachrichtenflussinstanz eine JDBC-Verbindung anfordert.
  • Gepoolte Verbindungen:
    • Wenn eine Nachrichtenflussinstanz eine JDBC-Verbindung anfordert, ordnet WebSphere Message Broker eine nicht verwendete Verbindung aus dem Pool zu.
    • Wenn bereits alle gepoolten JDBC-Verbindungen zugeordnet sind, aber die maximale Poolgröße noch nicht erreicht ist, erstellt WebSphere Message Broker eine neue gepoolte JDBC-Verbindung. Die maximale Poolgröße wird mit der Eigenschaft maxConnectionPoolSize des Konfigurierbarer JDBCProviders-Service festgelegt.
    • Jede gepoolte JDBC-Verbindung bleibt einer Nachrichtenflussinstanz nur für die Verarbeitung einer einzigen Eingabenachricht zugeordnet.
    • Sobald eine Nachrichtenflussinstanz die Verarbeitung einer Eingabenachricht beendet hat, wird die Zuordnung der JDBC-Verbindung aufgehoben und die JDBC-Verbindung wieder in den Pool gestellt.
    • Jede gepoolte JDBC-Verbindung, die 15 Minuten lang inaktiv ist, wird geschlossen und aus dem Pool entfernt.
    • Gepoolte JDBC-Verbindungen sind nicht für DatabaseRetrieve- und DatabaseRoute-Knoten verwendbar.
Bei der Verwendung des getJDBCType4Connection-Aufrufs gelten für Ihren Code die folgenden Einschränkungen:
  • Fügen Sie keinen Code ein, der explizite Transaktionsaufrufe wie beispielsweise COMMIT oder ROLLBACK ausführt. Diese Einschränkung umfasst explizite Transaktionsaufrufe einer in einer Datenbank gespeicherten Prozedur.
  • Schließen Sie in einem JavaCompute-Knoten keine Verbindung und stellen Sie keine Verbindung in den Cache.
Eine sekundäre Verwendung des Aufrufs getJDBCType4Connection ist die Methode onitialize() eines JavaCompute-Knotens. Die Methode onitialize() wird während der Implementierung oder beim Brokerstart einmal aufgerufen, bevor der Nachrichtenfluss die Verarbeitung der Eingabe startet. Mit dem Aufruf getJDBCType4Connection in der Methode onitialize() können Sie die Arbeit an einer Datenbank abschließen, bevor der Nachrichtenfluss gestartet wird; Beispiel:
  • Erstellung eines Speichercache mit schreibgeschützten Daten, die aus einer Datenbank abgerufen wurden, um den Abfragebedarf der Datenbank im Nachrichtenfluss zu verringern
  • Einsetzen von Daten in eine Datenbank vor dem Start des Nachrichtenflusses

Bei der Verwendung von getJDBCType4Connection in der Methode onitialize() müssen Sie sicherstellen, dass alle Ausnahmebedingungen, die bei der Verarbeitung auftreten können, behandelt werden. Alle Ausnahmebedingungen, die nicht behandelt wurden, führen dazu, dass die Implementierung oder der Start des Nachrichtenflusses fehlschlägt. Der Abschnitt JavaCompute-Knoten enthält weitere Informationen hierzu.

MbSQLStatement

Die MbSQLStatement stellt mittels ESQL oder ODBC vollständigen transaktionalen Datenbankzugriff bereit. Bei Verwendung von MbSQLStatement koordiniert der Ressourcenmanager des Brokers den Datenbankzugriff. Die globale Koordination wird auf verteilten Systemen von WebSphere MQ und unter z/OS von RRS bereitgestellt. Informationen zum Einrichten der erforderlichen ODBC-Ressourcen finden Sie im Abschnitt ODBC-Verbindungen zu den Datenbanken herstellen.

Erstellen Sie mithilfe der MbNode-Methode createSQLStatement() Instanzen der MbSQLStatement-Klasse, durch die die ODBC-Datenquelle, die EQSL-Anweisung eines Brokers und (optional) der Transaktionsmodus an die Methode übergeben werden.
  • Durch den Aufruf von select() auf diesem Objekt werden die Ergebnisse der Abfrage zurückgegeben.
  • Durch den Aufruf von execute() in diesem Objekt wird eine Abfrage ausgeführt, in der keine Ergebnisse wie beispielsweise die Aktualisierung einer Tabelle zurückgegeben werden.
Der folgende Java-Code zeigt, wie auf eine Datenbank mithilfe von MbSQLStatement zugegriffen wird:
MbMessage newMsg = new MbMessage(assembly.getMessage());
MbMessageAssembly newAssembly = new MbMessageAssembly(assembly, newMsg);

String table = "dbTable";

MbSQLStatement state = createSQLStatement( "dbName", 
	"SET OutputRoot.XMLNS.integer[] = PASSTHRU('SELECT * FROM " + table + "');" );

state.setThrowExceptionOnDatabaseError(false);
state.setTreatWarningsAsErrors(true);
state.select( assembly, newAssembly );

int sqlCode = state.getSQLCode(); 
if(sqlCode != 0)
{
	// Do error handling here
}

getOutputTerminal("out").propagate(assembly); 

JDBC-API in einer nicht verwalteten Umgebung

Im Code, den Sie für Ihre JavaCompute-Knoten schreiben, können Sie auf Java-Standard-APIs einschließlich JDBC-Aufrufe zugreifen. Zum Herstellen der Verbindung mit einer Datenbank, zum Lesen aus oder Schreiben in eine Datenbank und zum Trennen einer Datenbankverbindung können Sie daher JDBC-APIs verwenden. Der Broker unterstützt auf allen Betriebssystemen mit Ausnahme von z/OS im JDBC-Verbindungscode sowohl den Aufruf von Typ-2-JDBC-Treibern als auch den Aufruf von Typ-4-JDBC-Treibern, stellt diese Treiber allerdings nicht bereit. Sie erhalten diese Treiber von Ihrem Datenbankhersteller. Unter z/OS werden Typ-2-Treiber nicht unterstützt.

Bei dieser Datenbankzugriffsmethode unterstützt der Broker keine Transaktionsverwaltung. Das bedeutet, dass die Verwaltung des lokalen Commits und Rollbacks von Datenbankänderungen in Ihrem Code integriert sein muss. Auch die Verbindungsdauer, die Thread-Affinität der Verbindungen und das Verbindungspooling müssen vom Code verwaltet werden. Darüber hinaus müssen Sie bei Verwendung dieser Methode den Zugriff auf die Datenbanken überwachen, um sicherzustellen, dass sich die vom Broker hergestellten Verbindungen und Ihre eigenen Verbindungen nicht gegenseitig beeinträchtigen. Beachten Sie in diesem Zusammenhang, dass Typ-2-Treiber zu einer ODBC-Verbindung überbrückt werden, die eventuell in Nachrichtenflüssen verwendet wird, deren Datenbankzugriff über ESQL erfolgt.

SQLJ

SQLJ ist eine Java-Erweiterung zum Einbetten statischer SQL-Anweisungen in Java-Code. SQLJ-Dateien erstellen Sie im WebSphere Message Broker Toolkit. Bei Verwendung von SQLJ koordiniert der Ressourcenmanager des Brokers den Datenbankzugriff nicht.
  1. Aktivieren Sie die SQLJ-Funktion im WebSphere Message Broker Toolkit:
    1. Wählen Sie Fenster > Einstellungen aus.
    2. Erweitern Sie Allgemein.
    3. Wählen Sie Capabilities (Funktionen) aus.
    4. Wählen Sie Daten aus.
    5. Klicken Sie auf OK.
  2. Erstellen Sie eine SQLJ-Datei in einem Java-Projekt:
    1. Klicken Sie mit der rechten Maustaste auf das Java-Projekt, in der die Datei erstellt werden soll.
    2. Klicken Sie nacheinander auf Neu > Sonstige.
    3. Erweitern Sie Daten.
    4. Erweitern Sie SQLJ Applications (SQLJ-Anwendungen).
    5. Wählen Sie SQLJ File (SQLJ-Datei) aus.
    6. Klicken Sie auf Weiter.
    7. Folgen Sie zum Generieren der SQLJ-Datei den Anweisungen den Assistenten zur Erstellung einer neuen SQLJ-Datei.
Sie können jetzt in dieser SQLJ-Datei aus einer JavaCompute-Knotenklasse in diesem Projekt oder in einem anderen Projekt, auf das verwiesen wird, auf die Klasse verweisen.
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:20:10


TaskthemaTaskthema | Version 8.0.0.5 | ac30494_