Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

Java 逆プロキシ・オブジェクトの使用法

Java Native SDK は Java 外部サーバ接続を最大限に活用して、InterSystems IRIS と Java アプリケーション間の完全に透過的な双方向通信を可能にします。

逆プロキシ・オブジェクトは、外部サーバ・ゲートウェイ接続を介して ObjectScript ターゲット・オブジェクトを制御するための Java オブジェクトです。逆プロキシ・オブジェクトを使用してターゲットのメソッドを呼び出して、ターゲットのプロパティ値を取得または設定し、ネイティブの Java オブジェクトのように簡単にターゲット・オブジェクトを操作できます。

このセクションでは、以下のトピックについて説明します。

外部サーバの概要

外部サーバ接続によって、InterSystems IRIS ターゲット・オブジェクトと Java オブジェクトは同じ接続を使用して、同じコンテキスト (データベース、セッション、トランザクション) で自由に相互作用することができます。外部サーバのアーキテクチャについては "InterSystems 外部サーバの使用法" で詳しく説明していますが、ここでは、外部サーバ接続を、一方の側のプロキシ・オブジェクトがもう一方の側のターゲット・オブジェクトを制御できる単純なブラック・ボックスとして考えることができます。

外部サーバ接続
Object gateway connecting an ObjectScript application on InterSystems IRIS with a Java application on a Host VM

図に示すように、フォワード・プロキシ・オブジェクトは Java オブジェクトを制御する ObjectScript プロキシです (詳細は、"InterSystems 外部サーバの使用法" の “外部言語の操作” を参照)。Java 逆プロキシは反対方向に動作し、Java アプリケーションが InterSystems IRIS ターゲット・オブジェクトを制御できるようにします。

逆プロキシ・オブジェクトの作成

逆プロキシ・オブジェクトを作成するには、ObjectScript クラス・インスタンスの OREF を取得して (通常は、クラスの %New() メソッドを呼び出して)、IRISObject にキャストします (詳細は、“ObjectScript メソッドおよび関数の呼び出し” を参照)。以下のメソッドを使用して、逆プロキシ・オブジェクトを生成できます。

  • jdbc.IRIS.classMethodObject() は ObjectScript クラス・メソッドを呼び出して、結果を Object のインスタンスとして返します。

  • jdbc.IRIS.functionObject() は ObjectScript 関数を呼び出して、結果を Object のインスタンスとして返します。

%New() メソッドが新しいターゲット・インスタンスを正常に作成すると、そのインスタンスの逆プロキシ・オブジェクトが生成されます。例えば、以下の呼び出しによって、ObjectScript クラス Demo.Test のインスタンスを制御する、test という逆プロキシ・オブジェクトが作成されます。

   IRISObject test = (IRISObject)irisjv.classMethodObject("Demo.Test","%New");
  • classMethodObject() は、Demo.Test という ObjectScript クラスの %New() メソッドを呼び出して、そのクラスの新しいターゲット・インスタンスを作成します。

  • %New() への呼び出しでクラスの有効なインスタンスが返された場合、新しいインスタンスの逆プロキシが生成され、classMethodObject() はそれを Object として返します。

  • Java では、ObjectIRISObject にキャストされ、逆プロキシ変数 test が作成されます。

変数 test は、Demo.Test の新しいターゲット・インスタンスの Java 逆プロキシ・オブジェクトです。以下のセクションでは、test を使用して Demo.Test ターゲット・インスタンスのメソッドとプロパティにアクセスします。

ターゲット・オブジェクトの制御

逆プロキシ・オブジェクトは IRISObject のインスタンスです。ターゲット・インスタンス・メソッドを呼び出すメソッド invoke()invokeVoid()、およびターゲットのプロパティの読み書きを行うアクセサ get()set() を提供します。このセクションの例では、逆プロキシを使用して、ObjectScript クラス Demo.Test のターゲット・インスタンスを制御します。このクラスには、メソッド initialize()add()、およびプロパティ name の宣言が含まれています。

ObjectScript クラス Demo.Test のメソッドとプロパティの宣言
   Class Demo.Test Extends %Persistent
      Method initialize(initialVal As %String)
      Method add(val1 As %Integer, val2 As %Integer) As %Integer
      Property name As %String

以下の例では、最初の行で Demo.Test の新規インスタンスの test という名前の逆プロキシ・オブジェクトを作成します (前のセクションの説明を参照)。残りのコードでは、test を使用して Demo.Test ターゲット・インスタンスを制御します。

逆プロキシ・オブジェクトによる Demo.Test のインスタンスの制御
// Create an instance of Demo.Test and return a proxy object for it
  IRISObject test = (IRISObject)irisjv.classMethodObject("Demo.Test","%New");

// instance method test.initialize() is called with one argument, returning nothing.
  test.invokeVoid("initialize", "Test One");

// instance method test.add() is called with two arguments, returning an int value.
  int sum = test.invoke("add",2,3);  // adds 2 plus 3, returning 5

// The value of property test.name is set and then returned.
  test.set("name", "Einstein, Albert");  // sets the property to "Einstein, Albert"
  String name = test.get("name");   // returns the new property value

上の例では、IRIS.classMethodObject() への呼び出しによって逆プロキシ・オブジェクト test が作成され、以下のメソッドを使用して Demo.Test ターゲット・インスタンスのメソッドとプロパティにアクセスしています。

  • IRISObject.invokeVoid() はターゲット・インスタンス・メソッド initialize() を起動します。このメソッドは、文字列引数を受け入れますが、値は返しません。

  • IRISObject.invoke() は、ターゲット・インスタンス・メソッド add() を起動します。このメソッドは、2 つの整数の引数を受け入れて、合計を整数として返します。

  • IRISObject.set() は、新しい値をターゲット・プロパティ name に割り当てます。

  • IRISObject.get() は、ターゲット・プロパティ name の値を返します。

また、これらのメソッドのデータ型固有のバージョンもありますが、これらについては以下のセクションで説明します。

IRISObject のサポートされているデータ型

前のセクションの例では、汎用の set()get()、および invoke() メソッドを使用しましたが、IRISObject クラスでサポートされるデータ型用にデータ型固有のメソッドも提供します。

IRISObject set() メソッドおよび get() メソッド

IRISObject.set() メソッドは、IRIS.set() でサポートされるすべてのデータ型を含む、任意の Java オブジェクトをプロパティ値として受け入れます (“クラス IRIS のサポートされているデータ型” を参照)。

汎用の get() メソッドに加えて、IRISObject は、getBoolean()getBytes()getDouble()getIRISList()getLong()getObject()getString()、および invokeVoid() のデータ型固有のメソッドを提供します。

IRISObject invoke() メソッド

IRISObject invoke メソッドは、IRIS クラス・メソッド呼び出しと同じセットのデータ型をサポートしています (“クラス・メソッドの呼び出し” を参照)。

汎用の invoke() メソッドに加えて、IRISObject は、invokeBoolean()invokeBytes()invokeDouble()invokeIRISList()invokeLong()invokeObject()invokeString()、および invokeVoid() のデータ型固有のメソッドを提供します。

サポートされる標準のデータ型のメソッドのほかに、IRISObjectinvokeStatusCode() も提供します。これは、ObjectScript %Status 戻り値の内容を取得します (“%Status エラー・コードの取得” を参照)。

invoke メソッドすべては、methodNameString 引数に加え、0 個以上のメソッド引数を取ります。これは以下のいずれかの型にできます : IntegerShortStringLongDoubleFloatbyte[]BooleanTimeDateTimestampIRISList、または IRISObject。接続が双方向の場合、任意の Java オブジェクトを引数として使用できます。

すべての引数の数よりも少ない数の引数を渡すか、末尾の引数に対して null を渡すことで、引数リストで末尾の引数を省略できます。非 null 引数が null 引数の右側に渡されると、例外がスローされます。

FeedbackOpens in a new tab