Zugriff auf Datenbanken über den im JavaCompute-Knoten enthaltenen Java™-Code.
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.
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.
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:
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.
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.
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.
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);
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.