HOME

Cloudscape をデータベースサーバとして使用する

2005.07.11

  1. Cloudescapeを複数ユーザ環境で使用する
  2. ある意味では、Cloudscapeは常に組み込み型のデータベースであるといえます。 ひとつのJVMからのみユーザアクセスを受け付けるアプリケーションに組み込むことも、 異なったJVMから、同時に複数のユーザアクセスを受け付けるサーバフレームワークに組み込むこともできます。 Cloudscapeがアプリケーションに組み込まれた場合、ローカルのJDBCドライバが、ローカルのCloudscapeを呼び出します。 Cloudscapeがサーバフレームワークに組み込まれた場合は、そのサーバフレームワークの接続プログラムが、 複数ユーザ対応のJDBCアプリケーションに、ネットワークやインターネットを介してデータを提供します。

    ローカルまたは、リモートの複数ユーザ接続(複数ユーザの異なるJVMからの接続)には、Cloudscape Network Server を利用します。 もし、Network Serverに含まれる以外の機能が必要であれば、Cloudscapeの基本機能を他のサーバフレームワークに埋め込む事もできます。

    1. 接続方法
    2. サーバフレームワークにCloudscapeを組み込むには幾多の方法があります。

    3. 複数ユーザからの接続を許可する
    4. Cloudscapeは、複数ユーザ接続アプリケーション開発に便利な、以下の機能を含んでいます。

      Row-Level Locking
      複数ユーザからの接続に対応するため、Cloudscapeは、行レベルロックを行います。 いくつかのトランザクションが同時に実行される環境では、Cloudscapeは表レベルロックを行うように設定されます。 (たとえば、読み取り専用データベース)
      表レベルのロックに比較し、行レベルのロックの方が本質的に、多数のクライアントからの同時接続においては、 パフォーマンスがよいといえます。Cloudscapeのオプティマイザがどちらのロックを使用するかを自動で判断します。

      Multiple Concurrency Levels
      Cloudscapeは、直列化可能(RR)、繰り返し可能読み取り(RS)、コミット済み読み取り(CS)、そして、非コミット読み取り(UR)の 分離レベルをサポートします。コミット済み読み取り(デフォルトの分離レベル)は、複数ユーザ環境での 同時実行性と、整合性について、最適なバランスを提供します。
      繰り返し可能読み取り(RS)は、直列化可能(RR)に比較して整合性は劣りますが、同時実行性は優れます。
      直列化可能(RR)は、最大の整合性を提供します。
      また、非コミット読み取り(UR)は、非コミット値を許容するのであれば、最大の同時実行性を提供します

      Multi-Connection and Multi-Threading
      組み込みモードでも、Cloudscapeへデータベースへの複数の同時接続を行うことができます。 Cloudscapeもまた、完全なマルチスレッドで動作し、複数のスレッドを同時に実行することができます。
      しかしながら、JDBCのセマンティクスが、マルチスレッディングに対して、いくつかの制約を課します。

      Administrative Tools
      Cloudscapeは、以下のツールおよび機能をデータベース管理に提供します。
      • Consistency checker
      • On-line backup
      • The ability to put a databease's log on separate device

    5. Cloudscape Network Server
    6. Cloudscape Network Serverは、単一システム、または、ネットワークを介した複数ユーザ接続を提供します。 Network Serverは、クライアントから問い合わせを受け、返答します。問い合わせには、標準の Distributed Relational Database Architecture(DRDA) プロトコルを使用します。 データベースは、IBM JDBCドライバ、DB2 JDBC Universal ドライバを使用し、Cloudscape Network Server を通して、アクセスされます。

      Network Serverは、複数のJVMからのデータベース接続を解決します。 CloudscapeがひとつのJVMで稼動するアプリケーションに組み込まれた場合、JDBCドライバが、ローカルのCloudscapeを呼び出します。
      Cloudscapeがサーバフレームワークに組み込まれた場合は、そのサーバフレームワークの接続プログラムが、 複数ユーザ対応のJDBCアプリケーションに、ネットワークやインターネットを介してデータを提供します。

      Cloudscape Network Serverを実行するためには、以下のファイルをインストールする必要があります。

      サーバ側
      derby.jar
      derbynet.jar

      クライアント側
      db2jcc.jar
      db2jcc_license_c.jar

      Cloudscape Network Serverを管理するにはいくつかの方法があります。

  3. Cloudescapeアプリケーションを伴い、Network Server を利用する
  4. 現在、組み込みモードで起動しているJavaアプリケーションに対して、Cloudscape Network Serverを 適用させるためには、以下の変更を間違いなく行う必要がある。

    1. Network Server と JVM
    2. Cloudscape Network Serverは、Java 2 Platform, Standard Edition, v 1.3.1(J2SE) 以上に対応しています。

    3. クラスパスの変更
    4. 以下の JarファイルがNetwork Server および Universal Driver を使用するサーバのクラスパスに設定されていること。

      Jarファイル 内容
      derbynet.jar Network Server Jarファイルは Network Serverのコードを含みます。 Cloudscape Jarファイルに、このJarファイルを追加すれば、Network Serverを開始することができます。
      derby.jar このJarファイルは、どんなCloudscape Network Serverの機能を使用する場合も、クラスパスに設定されている必要があります。
      db2jcc.jar このJarファイルは、DB2 JDBC Universal Droverを使用する場合、クラスパスに含める必要があります。 db2jcc.jarファイルは、クライアント側のクラスパスに設定されている必要があります。
      db2jcc_license.jar このライセンスJarファイルも、DB2 JDBC Universal Droverを使用する場合、クライアントマシンのクラスパスに含める必要があります。

      Cloudscapeでは、Nerwork Server を起動させるためのクラスパスを設定するスクリプトファイルを提供しています。

      $CLOUDSCAPE_INSTALL/frameworks/NetworkServer/bin

    5. Network Serverの開始
    6. startNetworkServer.bat (Windows)、もしくは startNetworkServer.ksh(UNIX) スクリプトで、サーバを開始できます。
      これらのスクリプトは、

      $CLOUDSCAPE_INSTALL/frameworks/NetworkServer/bin

      ディレクトリにあります。

      Network Serverが開始されたホストでのみ、NetworkServerControlコマンドを起動することができます。

      Network Server自体は $CLOUDSCAPE_INSTALL/lib にあります。

      たとえば、Windowsで、Cloudscapeを規定のディレクトリにインストールした場合で、正しくクラスパスが設定されているなら、

      "%CLOUDSCAPE_INSTALL%\frameworks\NetworkServer\bin\startNetworkserver.bat"
      						

      とタイプすることで、Nerwork Serverを起動できます。 デフォルトでは、Network Server は、localhostからのループバック接続のみを受け付けるようになっています。

    7. System Information
    8. Network Serverについて、たとえばバージョンや、プロパティの値、JavaやCloudscapeの情報を、 sysinfo ツールを使用して得ることができます。Sysinfoは、スクリプト、コマンドライン、NetworkServerControl API サーブレットのインターフェースを通して利用できます。

    9. DB2 Unibersal Driverを利用した Network Serverへの接続
    10. Network Serverへ接続するとき、アプリケーションはドライバのロードと、接続URLの設定、 さらに、ユーザ名とパスワードの設定が必要です。 もし、認証を設定していないなら、任意のユーザ名とパスワードを設定することができます。 ネットワークを介してサーバに接続するのに必要なドライバは

      com.ibm.db2.jcc.DB2Driver

      です。

      また、ネットワークを介してサーバに接続するURLは、

      jdbc:derby:net://server:[<port>]/
      <databaseName>[;<Cloudscape URL attribute>=<value>[;...]]
      [:<Universal Driver attribute>=<value>[;...]]

      Network Serverへ接続する構文は、組み込みモードで、Cloudscapeへ接続する場合の構文と少し違います。 データベース名とその属性の後に、DB2 JDBC ドライバの属性を含めることができますし、 最終のUniversal Driverの属性には、末尾にセミコロンをつけなければなりません。

      設定項目内容
      server サーバが起動しているマシン名。buffyのようなマシン名もしくは、158.58.62.225のようなアドレス。
      注意 : Network Server が -h オプションつきで起動されているか、 derby.drda.host プロパティが設定されていない場合、この値は localhost を設定しなければなりません。
      port サーバがリスンしているポート。デフォルトでは、1527
      database name 接続しようとしているデータベース名。データベース名は、最大18桁に設定できる。 データベース名にパス情報を含む場合、二重引用符(")で囲まなければならない。 derby.system.nomederby.propertieファイル、 Network Server 起動時の Java環境のいずれにも、パス情報を設定した場合のシステムホームの決定については、 IBM Cloudscape Developer's Guide に情報があります。
      cloudscape URL attribute=value Cloudscapeは、データベース接続URLのオプション属性をサポートしています。IBM Cloudscape Developer's Guide に情報があります。
      Universal Driver Attribute=value DB2 Universal JDBC ドライバは、データベース接続URLのオプション属性をサポートしています。
      DB2 Universal JDBC ドライバは、nullでない、ユーザIDとパスワードを要求します。
      以下に、DB2 Universal JDBC ドライバで、Network Serverに対して使用可能な属性示します。

      userユーザ名(Uniersal JDBC Driverにより要求されます)
      passwordユーザパスワード(Uniersal JDBC Driverにより要求されます)
      portNumberNetwork Serverがデータソースへの接続をリスンしている、TCP/IP ポート番号 デフォルトは 1527
      retrieveMessagesFromServerOnGetMessageサーバからのエラーメッセージを表示
      readOnly読み取り専用接続を生成。規定値は false
      logWriter文字出力ストリーム。すべてのログとトレースメッセージは logWriterへ書き出されます。
      traceLevellogWriterへログ出力する場合の粒度を指定
      traceFileトレースの出力を行うファイルを明示。
      securityMechanismどの種類のセキュリティ機能を使用するのか指示する。
      deferPreparesデータベースサーバで、プリペアードステートメントを物理的に準備させる。規定値は true

      接続例 : 1
      デフォルトサーバのデフォルトポート1527sampleM データベースに接続する例です。

      jdbc:derby:net//localhost:1527//sample:user=judy;password=nol2see;
      retrieveMessagesFromServerOnGetMessage=true;

      接続例 : 2
      CloudscapeとUniversal Driverの両方の属性を設定する例です。

      jdbc:derby:net://localhost:1527//sample;create=true:user=judy;
      password=nol2see;retreiveMessagesFromServerOnGetMessage=true;

      接続例 : 3
      デフォルトサーバ localhost のデフォルトポート 1527 に接続する例です。 データベース名のパスをURLの一部に含んでいます。

      jdbc:derby:net//localhost:1527/"c:/my-db-dir/my-db-name":user=judy;
      password=no12see;retreiveMessagesFromServerOnGetMessage=true;

      接続例 : 4
      以下の例では、Universal Driverを使用したNetwork Serverへの接続を各部分に分けています。

      String databaseURL = "jdbc:derby:net://localhost:1527/sample";
      // IBM JDBC Universal Driver のロード
      Class.forName("com.ibm.db2.jcc.DB2Driver");
      // ユーザ名、パスワード、プロパティのセット
      Properties properties = new Properties();
      properties.put("user", "APP");
      properties.put("password", "APP");
      properties.put("retreiveMessagesFromServerOnGetMessage", "true");
      // コネクションの取得
      Connection conn = DriverManager.getConnection(databaseURL, properties);
      								

    11. DataSource を利用した Network Serverへの接続
    12. DB2 Universal Driver DataSource、com.ibm.db2.jcc.DB2SimpleDataSource 、 および、 com.ibm.db2.jcc.DB2ConnectionPoolDataSource は、Network Server をサポートしています。 詳細は、DB2 Universal Driver のドキュメントを参照してください。

      com.ibm.db2.jcc.DB2SimpleDataSource を使用して Network Serverに接続する例です。

      public static javax.sql.DataSource getDS(String database, String user, String password) throws SQLException {
      	com.ibm.db2.jcc.DB2SimpleDataSource ds = new com.ibm.db2.jcc.DB2SimpleDatasource();
      	
      	// DatabaseName は、Cloudscapeの URL属性を含むことができます
      	ds.setDatabaseName(database);
      
      	if (user != null) 
      		ds.setUer(user);
      	if (passowrd != null)
      		ds.setPassword(password);
      
      	ds.setServerName("localhost");
      	ds.setPortNumber(1527);
      
      	// Driver タイプは、4で、Network Serverに接続すること
      	ds.setDriverType(4);
      	return ds;
      }
      								
      このプログラムは、以下のように接続できます。
      javax.sql.DataSource ds = getDS("mydb;create=true", null, null);
      // 注意: ユーザと、パスワードは接続に必要です
      Connection con = ds.getConnection("usr2", "pass2");