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

外部言語サーバとの接続

外部言語で記述された PEX コンポーネントを登録する際に、プロダクションでリモート・クラスとの通信に使用する外部言語サーバを指定します。この外部言語サーバは一般的にゲートウェイと呼ばれます。

ほとんどの言語では、PEX プロダクションの実行に必要な機能は PEX 言語用の組み込みの外部言語サーバにすべて含まれており、カスタム・サーバを作成する必要はありません。ただし、Java を使用する場合は、外部言語サーバのクラスパスに特殊なユーティリティ jar ファイルを追加する必要があります。したがって、既定またはカスタムの Java サーバのクラスパスに install-dir/dev/java/lib/1.8/intersystems-utils-version.jar を追加する必要があります。install-dir はインターシステムズ製品のインストール先のディレクトリです。このファイルの場所を手動で入力する場合は、キーワード $$IRISHOME を使用して、インストール・ディレクトリを特定します。

接続の共有

場合によっては、PEX アダプタで、別個の外部言語サーバ接続を使用するのではなく、関連する PEX ビジネス・サービスまたはビジネス・オペレーションの接続を使用できます。各 PEX コンポーネントで別個の接続を使用する場合、コンポーネント間で渡されるオブジェクトを JSON 文字列にシリアル化し、コンポーネント間でオブジェクトを直接渡さないようにする必要があります。1 つの接続を共有することで、アダプタとビジネス・ホストは、オブジェクトを直接渡し、同じオブジェクトを受け取ることができます。接続を共有するには、PEX アダプタおよび関連する PEX ビジネス・ホストを同じ外部言語で記述する必要があります。

PEX アダプタがそのビジネス・サービスまたはビジネス・オペレーションと接続を共有するように指定するには、管理ポータルを使用して、ビジネス・ホストの [Alternative Adapter Connection] > [Use Host Connection] 設定を選択します。この設定を有効にすると、PEX フレームワークは、PEX アダプタの登録時に指定した外部言語サーバ設定を無視するようになります。

以下の例は、アダプタとその関連するビジネス・ホストとの間で接続を共有することの利点を示しています。

ビジネス・サービスと受信アダプタ

受信アダプタがビジネス・サービスと接続を共有する場合、ビジネス・サービスは、送信アダプタが送信したオブジェクトと同じオブジェクトを受け取ります。以下に例を示します。

// Code from the inbound adapter:
public void OnTask() throws Exception {
  SimpleObject request = new SimpleObject("message #1");
  String response = (String) BusinessHost.ProcessInput(request);
}

// Code from the business service:
public Object OnProcessInput(Object messageInput) throws Exception {
  SimpleObject obj = (SimpleObject)messageInput;
  System.out.print("\r\n[Java] Object received: " + obj.value);
  return "...Service received " + obj.value;
}

一方、以下のコードは、ビジネス・サービスと受信アダプタが接続を共有しない場合、受信アダプタからビジネス・サービスに送信されたオブジェクトをどのように処理する必要があるのかを示しています。

// Code from the inbound adapter:
public void OnTask() throws Exception {
  SimpleObject request = new SimpleObject("message #1");
  String response = (String) BusinessHost.ProcessInput(request);
}

// Code from the business service:
public Object OnProcessInput(Object messageInput) throws Exception {
  com.intersystems.jdbc.IRISObject obj = (com.intersystems.jdbc.IRISObject)messageInput;
  System.out.print("\r\n[Java] Object received: " + obj.get("value"));
  return "...Service received" + obj.get("value");
}

ビジネス・オペレーションと送信アダプタ

送信アダプタがビジネス・オペレーションと接続を共有する場合、アダプタは、ビジネス・オペレーションが送信したオブジェクトと同じオブジェクトを受け取ります。以下に例を示します。

// Code from the business operation:
public Object OnMessage(Object request) throws Exception {
  SimpleObject myObj = new SimpleObject("my string");
  Adapter.invoke("passObj", myObj);
  return null;
}

// Code from the associated adapter:
public Object passObj(SimpleObject obj) {
  System.out.print("\r\n[Java]Object received: " + obj.value);
  return null;
}

一方、以下のコードは、ビジネス・オペレーションと送信アダプタが接続を共有しない場合、ビジネス・オペレーションからアダプタに送信されたオブジェクトをどのように処理する必要があるのかを示しています。

// Code from the business operation:
public Object OnMessage(Object request) throws Exception {
  SimpleObject myObj = new SimpleObject("my string");
  Adapter.invoke("passObj", myObj);
  return null;
}

// Code from the associated adapter:
public Object passObj(com.intersystems.jdbc.IRISObject obj) {
  System.out.print("\r\n[Java]Object received: " + obj.get(“value”));
  return null;
}

FeedbackOpens in a new tab