JavaCompute ノードに組み込まれている Java™ コードからデータベースにアクセスします。
Type 4 接続用の JDBCProvider または MbSQLStatement を使用する場合、アクセス先のデータベースは、グローバル整合済みトランザクションに参加できます。 他の場合はすべて、データベース・アクセスをグローバル整合することはできません。
JDBC Type 4 接続を確立して、JavaCompute ノードからデータベースと対話することができます。 ブローカーは、Type 4 ドライバーをサポートしますが、このドライバーを提供することはありません。 このドライバーは、データベース・ベンダーから入手する必要があります。サポートされているドライバーについては、サポートされるデータベース を参照してください。
ブローカーが分散システム上で稼働する場合、他のリソース・アクティビティーとの調整が行われるように、データベースと接続を構成することができます。 分散システム上のグローバル整合は WebSphere® MQ により提供されますが、これには、z/OS システムで定義されているリモート・データベースも含め、ローカルまたはリモートのデータベースとの対話を組み入れることができます。 z/OS で稼働するブローカーからデータベースへの JDBC Type 4 接続を確立した場合、調整は提供されません。 接続と調整のセットアップの詳細は、データベースへの JDBC 接続の使用可能化を参照してください。
ノード用として作成するコードにこの機能を組み入れるには、それに必要な環境を事前に構成する必要があります。 アクセス・セキュリティーがデータベースで必要かどうかと、グローバル整合済みのトランザクションに参加できるようにデータベースを更新するかどうかを決断します。 必須およびオプションのタスクについては、データベースへの JDBC 接続の使用可能化を参照してください。
JDBCProvider の構成を完了したら、MbNode インターフェース上で getJDBCType4Connection 呼び出しを使って、データベースへの JDBC Type 4 接続を確立することができます。 以下のコードは、その使用例を示しています。
public class MyJavaCompute extends MbJavaComputeNode {
public void evaluate(MbMessageAssembly inAssembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbMessage inMessage = inAssembly.getMessage();
// create new message
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();
}
}
}
この例の詳細は次のとおりです。
障害の発生を表示し、トランザクションをロールバックするには、JavaCompute ノードから例外を発行します。これによりブローカーがロールバックを処理します。
getJDBCType4Connection 呼び出しは、主に JavaCompute ノードの evaluate() メソッド内で使用されます。その目的は、ブローカーによって管理される JDBC 接続を取得するためです。
onitialize() メソッド内で getJDBCType4Connection を使用するときには、この処理で発生する可能性のあるすべての例外が処理されることを確実にしてください。 例外が処理されないと、メッセージ・フローのデプロイメントまたは起動が失敗します。 詳しくは、JavaCompute ノードを参照してください。
MbSQLStatement クラスは、ESQL および ODBC を使用した完全なトランザクション・データベース・アクセスを提供します。 ブローカー・リソース・マネージャーは、MbSQLStatement の使用時にデータベース・アクセスを調整します。 グローバル整合は、分散システムでは WebSphere MQ から提供され、z/OS では RRS から提供されます。 必要な ODBC リソースのセットアップ方法の詳細は、データベースへの ODBC 接続の使用可能化を参照してください。
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 呼び出しも含め、JavaCompute ノード用に作成したコード内で、標準の Java API にアクセスすることができます。 したがって、JDBC API を使用して、データベースへの接続、データベースを対象とした書き込みまたは読み取り、およびデータベースからの切断を行うことができます。 z/OS 以外のオペレーティング・システムにおいて、ブローカーは、この環境で Type 2 と Type 4 の両方の JDBC ドライバーを呼び出す JDBC 接続コードをサポートしますが、それを提供するわけではありません。 データベース・ベンダーからこれらのドライバーを入手する必要があります。 z/OS では、Type 2 ドライバーがサポートされません。
このデータベース・アクセス方式を選択した場合、ブローカーはトランザクションの管理をサポートしません。 独自のコードで、データベースの変更のローカル・コミットおよびロールバックを管理する必要があります。 また、接続のライフサイクル、接続スレッドの親和性、および接続プールもコードで管理する必要があります。 さらに、そのような接続が原因で、ブローカーによって確立された接続が妨害を受けないようにするためにこの技法を使用する場合には、データベースへのアクセスもモニターする必要があります。 特に、ESQL からデータベースにアクセスするために、メッセージ・フロー内で使用中の ODBC 接続に、Type 2 ドライバーがブリッジすることに注意してください。