記事
· 2021年2月5日 5m read

Java クラスのモジュールを IRIS から実行する方法

これは InterSystems FAQ サイトの記事です。

Java ゲートウェイを使用することで、Java クラスのモジュールを InterSystems IRIS から実行できます。

【メモ】Java ゲートウェイは、外部 Java オブジェクトを InterSystems IRIS 内のネイティブ・オブジェクトと同じようにインスタンス化し、Javaオブジェクトを操作するための方法です。

詳細は以下ドキュメントをご参照ください。
Java ゲートウェイについて

 

Java ゲートウェイを使用する手順は以下の通りです。

1) Java ゲートウェイサーバを開始する

2) プロキシオブジェクト(ダイナミック・プロキシ・オブジェクト)を作成して Java オブジェクトを操作する

 


1) Java ゲートウェイサーバを開始する

Java ゲートウェイサーバを開始する方法は 3 種類あります。以下のいずれかの方法で、Java ゲートウェイサーバを開始します。

A) 管理ポータルの「オブジェクトゲートウェイ」を利用する

B) プロダクションにJavaゲートウェイサービスを追加する

C) java コマンドを使用する

 

A)~C) の方法は以下の通りです。

A) 管理ポータルの「オブジェクトゲートウェイ」を利用する

管理ポータル > [システム管理] > [構成] > [接続性] > [オブジェクトゲートウェイ] の画面で Java ゲートウェイサーバを作成します。

 

 

設定保存後、「開始」をクリックして Java ゲートウェイサーバを開始します。

 

開始後の画面は以下の通りです。

 

これで、Java ゲートウェイサーバの開始は終了です。停止する場合は、オブジェクトゲートウェイの設定画面で「停止」のリンクをクリックします。

 

B) プロダクションにJavaゲートウェイサービスを追加する

任意のネームスペースにプロダクションを作成し、EnsLib.JavaGateway.Service クラスを「サービス」に追加します。

管理ポータル > [Interoperability] > [一覧] > [プロダクション] > [新規]ボタンクリック > パッケージ名、プロダクション名(=クラス名)を指定し OK ボタンクリック

サービスの右側にある + のボタンをクリックし [EnsLib.JavaGateway.Service] を追加します。

 

設定を行うため、EnsLib.JavaGateway.Service をクリックします(クラス名の字の部分をクリックします)。

画面右側の「設定」タブで、アドレス/ポート を設定します。

 

この後、プロダクションを「開始する」ボタンで開始することで、Java ゲートウェイサーバも開始します。
停止する場合は、プロダクションを「停止する」ボタンで停止してください。

詳細は、ドキュメントもご参照ください。
Java ゲートウェイのビジネスサービスの追加

 

C) java コマンドを使用する

以下のコマンドで開始できます。

java -classpath [IRISインストールディレクトリ]\dev\java\lib\JDK18\intersystems-jdbc-3.1.0.jar;[IRISインストールディレクトリ]\dev\java\lib\JDK18\intersystems-gateway-3.1.0.jar com.intersystems.gateway.JavaGateway ポート番号 ログファイルフルパス プロキシクラスの識別子 ホスト名

実行例) IRISのインストールディレクトリが c:\InterSystems\IRIS1 、ホスト名は localhost、ポート番号は 12345 で開始する例

java -classpath C:\InterSystems\IRIS1\dev\java\lib\JDK18\intersystems-jdbc-3.1.0.jar;C:\InterSystems\IRIS1\dev\java\lib\JDK18\intersystems-gateway-3.1.0.jar com.intersystems.gateway.JavaGateway 12345 c:\kit\javag.log abc localhost

 

詳細は、ドキュメントもご参照ください。
コマンド・プロンプトの使用法
 

 

2) プロキシオブジェクト(ダイナミック・プロキシ・オブジェクト)を作成して Java オブジェクトを操作する。

上記3手法のいずれか1つで Java ゲートウェイサーバを開始してから実行します。

なお、Java 側のクラスや Jar ファイルが更新された場合、Java ゲートウェイサーバの再起動が必要です。ご注意ください。

テストに使用している Java クラス(test.java)は以下の通りです。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
  public int num = 1234;
  public String data;

  // test1 は文字列を返す
  public static String test1() { return "abc"; }
  // test2 は test3()で作成したリストの個数を返す
  public static int test2(List obj) { return obj.size(); } 
  // test3 は 可変個の引数として文字列を受け取り、testインスタンスを作成しListに格納して戻す
  public static List test3(String... input) {
    List testlist=new ArrayList();
    for (String str : input) {
      test obj=new test();
      obj.data=str;      
      testlist.add(obj);
    }
    return testlist;
  }
}

 

例では、 c:\temp\test.java に配置した状態でコンパイルを実行し、c:\temp\test.class を作成しています。

IRIS から test.class のインスタンスを生成するコードは以下の通りです。

// クラス/JARファイルの位置を指定するためリストオブジェクトを作成
set class=##class(%ListOfDataTypes).%New()
// 作成したJavaクラスの場所をリストに追加
do class.Insert("c:\temp")
// Javaゲートウェイサーバに接続するためのインスタンス生成
set GW=##class(%Net.Remote.Gateway).%New()
// 第1引数:ホスト名/第2引数:ポート番号/第3引数:ネームスペース/第5引数:クラスファイルを指定したリスト
set st=GW.%Connect("localhost",55555,"USER",,class)
// 1が返れば、接続成功
write st
// 1以外が戻った時にエラーメッセージ表示方法
write $system.Status.GetErrorText(st)
// ダイナミックプロキシオブジェクトを利用して test.classのインスタンス生成
set testobj=##class(%Net.Remote.Object).%New(GW,"test")
// test1()メソッドの実行
write testobj.test1()
// インスタンス変数 num の表示
write testobj.num
// Javaクラスに用意した test3()メソッドを利用して testインスタンスをListに格納して返送
set newobj=testobj.test3("あ","い","abc")
// test3()の結果を変数に設定し、test2()に渡して何個のリストが格納されているか確認(3が返る予定)
write testobj.test2(newobj)
// 接続切断
set st=GW.%Disconnect()
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください