IBM Support

[Db2] Java ルーチンのデプロイ方法と置き換え方法

Question & Answer


Question

Java ルーチンをデプロイする際の手順と、JAR ファイルを置き換える際の手順を教えてください。

Answer

Java ルーチンは、Java 言語でロジックを実装したプロシージャーやユーザー定義関数です。
SQL によりルーチンが呼び出されると、関連付けられたプログラム・コード上のメソッドが呼び出されます。

ルーチンは Fenced モード・プロセス (db2fmp) 内で Fenced ユーザーの権限により実行されます。
Java ルーチンは必ず THREADSAFE なので Fenced モード・プロセス内の各スレッドで実行されます。

デプロイ方法
  1. 1. ルーチンのコンパイルと JAR ファイルの作成
    Java ファイルをコンパイルしてクラス・ファイルを作成します。クラス・ファイルを JAR としてパッケージします。
    $ export PATH=$HOME/sqllib/java/jdk64/bin:$PATH
    $ javac SpServer.java
    $ jar cvf SpServer.jar SpServer.class
    [SpServer.java 抜粋]
    public class SpServer
    {
    
      public static void outLanguage(String[] outLanguage) // CHAR(8)
      throws SQLException
      {
        ...
      }
    }
  2. JAR ファイルの配置
    sqlj.install_jar ルーチンを利用して JAR ファイルを Db2 インスタンスへ配置します。
    AR ファイルは sqlj.install_jar で指定した JAR ID を用いて管理されます。
    $ db2 connect to SAMPLE
    $ db2 "call sqlj.install_jar('file:/home/db2inst1/SpServer.jar', 'MYJAR')"
  3. ルーチンの定義の作成
    CREATE PROCEDURE もしくは CREATE FUNCTION ステートメントで、ルーチンの定義を作成します。EXTERNAL NAME には、JAR ファイルをデプロイした際に指定した JAR ID、パッケージ名で修飾されたクラス名、およびメソッド名を指定します。
    $ db2 "CREATE PROCEDURE OUT_LANGUAGE (OUT LANGUAGE CHAR(8)) LANGUAGE JAVA READS SQL DATA EXTERNAL NAME 'MYJAR:SpServer.outLanguage' PARAMETER STYLE JAVA"
  4. ルーチンの挙動の確認
    デプロイしたルーチンを実行し、正常に動作することを確認します。
    $ db2 "CALL OUT_LANGUAGE(?)"
    
      出力パラメーターの値
      --------------------------
      パラメーター名: LANGUAGE
      パラメーター値: JAVA
    
      リターン状況 = 0
置き換え方法
Java ではクラス・ローダーによりクラス・ファイルの再ロードを行えるため、JAR ファイルの動的置き換えが可能です。ただし、クラス・ファイルもしくは JAR ファイルを置き換えた後に、ロードされるクラスを更新する必要があります。
  1. 1. JAR ファイルの置き換え
    sqlj.replace_jar ルーチンを利用して、JAR ファイルを置き換えます。置き換える対象は JAR ID で指定します。
    $ db2 "call sqlj.replace_jar('file:/home/db2inst1/SpServer.jar', 'MYJAR')"
  2. ロードされるクラスの更新
    sqlj.refresh_classes ルーチンを実行して、インスタンスにロードされるクラスを更新します。
    $ db2 "call sqlj.refresh_classes()"
    $ db2 commit
運用上の考慮点
手順では Db2 のサンプル・プログラムとして提供されるファイル (sqllib/samples/java/jdbc/SpServer.java) を利用しています。

関連情報
外部ルーチンのライブラリーおよびクラスの管理
外部ルーチン・ライブラリーおよびクラスのデプロイメント
外部ルーチンのライブラリーおよびクラス・ファイルに対する変更
Db2 ルーチンの共用ライブラリーの再構築
Java ルーチン・クラス・ファイルの DB2 データベース・サーバーへのデプロイ
データベース・サーバーでの JAR ファイル管理
Java ルーチン・クラスの更新
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PmjAAE","label":"Routines - Stored Procedures and UDF-\u003EJava\/Non-SQL Routines"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
25 August 2023

UID

swg21574451