接続のシリアライゼーション

DB2 Everyplace データベースに対する接続は一度に 1 つのみです。DB2 Everyplace は、Palm を除いた すべてのプラットフォームで接続のシリアライゼーションをサポートします。接続の シリアライゼーションによって、データ・ソースに対する接続要求がシリアライズされます。 特定のデータ・ソースに対して同時に確立できるアクティブな接続は 1 つのみです。 その他の接続要求はキューに入れられます。 タイムアウト期間は、SQLSetConnectAttr() 関数の SQL_ATTR_LOGIN_TIMEOUT 属性を使用して設定することができます。 一般的なシリアライゼーションのシナリオは、以下のとおりです。

例として、以下の CLI /JDBC 呼び出しでは接続のタイムアウト期間を 10 に 設定します。つまり、同じデータベースに対して別の接続があると、 アプリケーションがエラーを受け取ります。

CLI の場合:

 int i = 10; // 10 seconds timeout
rc = SQLSetConnectAttr(hdbc, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER) i, 0); 

JDBC の場合:

int waitTime = 10;
String url = "jdbc:db2e:mysample";

Properties prop = new Properties(); 
prop.setProperty("LOGIN_TIMEOUT", Integer.toString(waitTime)); 

Connection con = driver.connect(url,prop); 
 

注:

  1. デフォルトのタイムアウト期間は 0 秒です。

  2. マルチスレッド・アプリケーションでは、あるスレッドを使用してデータベースに接続したら、 別のスレッドを使用してデータベースから切断します。

  3. アプリケーションがデータベースに正常に接続すると、'DSYLOCK' という名前のファイルが 作成されます。アプリケーション・プロセスが異常終了すると、ファイル DSYLOCK は自動的に除去されます。

  4. 制限: 接続のシリアライゼーションは、ネットワーク・ドライブに常駐している データベースについては動作しないことがあります。

  5. JDBC プログラムでは、タイムアウト値はプロパティーとして DriverManager.getConnection() メソッドに渡されると、無視されてゼロに設定されます。

関連したタスク