Question & Answer
Question
Java ルーチンをデプロイする際の手順と、JAR ファイルを置き換える際の手順を教えてください。
Answer
Java ルーチンは、Java 言語でロジックを実装したプロシージャーやユーザー定義関数です。
SQL によりルーチンが呼び出されると、関連付けられたプログラム・コード上のメソッドが呼び出されます。
ルーチンは Fenced モード・プロセス (db2fmp) 内で Fenced ユーザーの権限により実行されます。
Java ルーチンは必ず THREADSAFE なので Fenced モード・プロセス内の各スレッドで実行されます。
デプロイ方法
関連情報
外部ルーチンのライブラリーおよびクラスの管理
外部ルーチン・ライブラリーおよびクラスのデプロイメント
外部ルーチンのライブラリーおよびクラス・ファイルに対する変更
Db2 ルーチンの共用ライブラリーの再構築
Java ルーチン・クラス・ファイルの DB2 データベース・サーバーへのデプロイ
データベース・サーバーでの JAR ファイル管理
Java ルーチン・クラスの更新
SQL によりルーチンが呼び出されると、関連付けられたプログラム・コード上のメソッドが呼び出されます。
ルーチンは Fenced モード・プロセス (db2fmp) 内で Fenced ユーザーの権限により実行されます。
Java ルーチンは必ず THREADSAFE なので Fenced モード・プロセス内の各スレッドで実行されます。
デプロイ方法
- 1. ルーチンのコンパイルと JAR ファイルの作成
Java ファイルをコンパイルしてクラス・ファイルを作成します。クラス・ファイルを JAR としてパッケージします。$ export PATH=$HOME/sqllib/java/jdk64/bin:$PATH $ javac SpServer.java $ jar cvf SpServer.jar SpServer.class
public class SpServer { public static void outLanguage(String[] outLanguage) // CHAR(8) throws SQLException { ... } }
- 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')"
- ルーチンの定義の作成
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"
- ルーチンの挙動の確認
デプロイしたルーチンを実行し、正常に動作することを確認します。$ db2 "CALL OUT_LANGUAGE(?)" 出力パラメーターの値 -------------------------- パラメーター名: LANGUAGE パラメーター値: JAVA リターン状況 = 0
置き換え方法
Java ではクラス・ローダーによりクラス・ファイルの再ロードを行えるため、JAR ファイルの動的置き換えが可能です。ただし、クラス・ファイルもしくは JAR ファイルを置き換えた後に、ロードされるクラスを更新する必要があります。
- 1. JAR ファイルの置き換え
sqlj.replace_jar ルーチンを利用して、JAR ファイルを置き換えます。置き換える対象は JAR ID で指定します。$ db2 "call sqlj.replace_jar('file:/home/db2inst1/SpServer.jar', 'MYJAR')"
- ロードされるクラスの更新
sqlj.refresh_classes ルーチンを実行して、インスタンスにロードされるクラスを更新します。$ db2 "call sqlj.refresh_classes()" $ db2 commit
運用上の考慮点
手順では Db2 のサンプル・プログラムとして提供されるファイル (sqllib/samples/java/jdbc/SpServer.java) を利用しています。関連情報
外部ルーチンのライブラリーおよびクラスの管理
外部ルーチン・ライブラリーおよびクラスのデプロイメント
外部ルーチンのライブラリーおよびクラス・ファイルに対する変更
Db2 ルーチンの共用ライブラリーの再構築
Java ルーチン・クラス・ファイルの DB2 データベース・サーバーへのデプロイ
データベース・サーバーでの JAR ファイル管理
Java ルーチン・クラスの更新
[{"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"}]
Was this topic helpful?
Document Information
Modified date:
25 August 2023
UID
swg21574451