4. カスタマイズ

本編では、VISコネクタが生成したコネクタAPのソースのカスタマイズの例について説明します。

4.1. ACOS-4(VISU)の機能を利用した設計

ACOS-4(VISU)の複数業務へログインする場合

4.1.1. 複数業務ログイン

複数業務ログインを行うためのカスタマイズ方法を記述します。


<サンプル作成手順:作成方法の一例>

コネクタAP(自動生成されるソース)は、以下の2つの部分から構成されています。

カスタマイズ部分は、インタフェース部の派生クラスとして実装します。
コンポーネント名が変わるとWebOTX提供のIDLコンパラが生成するソース部分のクラスの生成を派生クラスに変更しなければなりません。しかし、このサンプルではIDLコンパイラが生成したソースの変更を行わないようにするため、派生クラス(カスタマイズ部分)を派生元クラスの元の名称とし、派生元のクラス名(コネクタAP:自動生成されるソース)を変更しています。
#WebOTXのIDLコンパイラがコネクタAPとして生成しているのは「NewComponent1Obj」です。

以上のことをまとめると以下のようになります。

<カスタマイズ内容>

カスタマイズしたソース(変更点のみ抜粋)

…
import NewComponent1Obj2;

public class NewComponent1Obj extends NewComponent1Obj2 {
  NewComponent1Serv  VCA_Obj2 ;

  /***********************************************
  // CONSTRUCTOR
  ***********************************************/
  public NewComponent1Obj() {
    VCA_Obj2 = new NewComponent1Serv() ; // VISコネクタが使用する通信クラスを追加(*1)
  }

  /***********************************************
  // connect
  ***********************************************/
  public synchronized int connect ()
  {
    try {
      VCA_Obj.connect();
      VCA_Obj2.connect();   // ホストとの接続を追加(*2)
    }catch (VISConException ve){
      …
    }catch (Exception e){
      …
    }
    return 0;
  }

  /***********************************************
  // METHOD::MTD
  ***********************************************/
  public synchronized int MTD(
    String AS_TXID,
    String AS_DATA,
    StringHolder AR_TXID,
    StringHolder AR_DATA,
    String BS_DATA,
    StringHolder BR_DATA
  )
  {
    try {
      // Allocate output object 
      MTD_ALLOC(
        AS_TXID,
        AS_DATA,
        AR_TXID,
        AR_DATA,
        BS_DATA,
        BR_DATA
      );

      VCA_Obj.A_Send(AS_TXID,AS_DATA);    //処理部分を作成
      VCA_Obj2.B_Send(BS_DATA);
      VCA_Obj.A_Recv(AR_TXID,AR_DATA);
      VCA_Obj2.B_Recv(BR_DATA);

    }catch (VISConException ve){
      VCA_Obj.RESET();
        …
    }catch (Exception e){
      VCA_Obj.RESET();
        …
    }
    return 0 ;
  }

  /***********************************************
  // disconnect
  ***********************************************/
  public synchronized int disConnect ()
  {
    try {
      VCA_Obj.disconnect();
      VCA_Obj2.disconnect();    // ホストとの切断を追加
    }catch (Exception e){
      …
    }
    return 0;
  }

  /***********************************************
  // LOGIN
  ***********************************************/
  public synchronized int LI (String  loginName)
  {
    try {
      VCA_Obj.LI("AAA");
      VCA_Obj2.LI("BBB");   // 業務ログインを追加(*3)
    }catch (VISConException ve){
      …
    }catch (Exception e){
      …
    }
    return 0;
  }

  /***********************************************
  // LOGOUT
  ***********************************************/
  public synchronized int LO ()
  {
    try {
      VCA_Obj.LO();
      VCA_Obj2.LO();     //業務ログアウト(ログオフ)を追加
    }catch (VISConException ve){
      …
    }catch (Exception e){
      …
    }
    return 0;
  }

  /***********************************************
  // initialize (for OUTPUT ONLY) 
  ***********************************************/
  private void MTD_ALLOC(
    String AS_TXID,
    String AS_DATA,
    StringHolder AR_TXID,
    StringHolder AR_DATA,
    String BS_DATA,
    StringHolder BR_DATA
  )
  {
    int cnt;
    AR_TXID.value = new String();
    AR_DATA.value = new String();
    BR_DATA.value = new String();
    return;
  }
}

(*1)通信クラスを1つ生成するとACOSとのパスができ、ライセンスがさらに1つ使われます。VISコネクタのライセンス数はパス数となります。
(*2)通常、処理部の生成時に接続はされます(切断を行わない場合は不要)。
(*3)サンプルのため業務名を直接指定(「AAA」と「BBB」)。サンプル例では、ログインはデータの送受信とは別メソッドで行っています。

上記カスタマイズ例について

<VISコネクタが生成するソースの処理概要>

Connector Developer(サーバAPデザイナ)で指定できるコネクタAPとホスト(ACOS)の関係は大きく分けて以下の3パターンとなります。
#一回のコネクタAPメソッド呼出に対して行うことのできる処理

【パターン1】送受信を行う
【パターン2】送信のみを行う
【パターン3】受信のみを行う

以下に、各パターンのイメージを示します。

【パターン1】送受信

クライアントAPコネクタAPVIS(TPP)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(要求)(1)(2)
メソッド呼出−−>コード/データ変換
電文組立
−−>業務処理
(結果)(4)(3)
<−−コード/データ変換
電文分解
<−−

【パターン2】送信のみ

クライアントAPコネクタAPVIS(TPP)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(要求)(1)(2)
メソッド呼出−−>コード/データ変換
電文組立
−−>業務処理

【パターン3】受信のみ

クライアントAPコネクタAPVIS(TPP)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(結果)(2)(1)
<−−コード/データ変換
電文分解
<−−

<複数業務ログインのサンプル>

一回の処理(メソッド呼出)で、複数の送信/受信を行うには、カスタマイズが必要となります。
以下に、カスタマイズ方法のサンプルを記述します。
(注意)ステートフル方式のコネクタAPです。

クライアントAPコネクタAPVIS(TPP)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(要求)(1)(2)
メソッド呼出−−>コード/データ変換
電文組立
−−>業務処理
(3)
コード/データ変換
電文組立
−−>業務処理
(4)
コード/データ変換
電文組立
<−−
(6)(5)
<−−コード/データ変換
電文組立
<−−業務処理

上記例では、(1)〜(6)について以下のようなパターンでメソッドの生成を行い、それを使ってカスタマイズを行っています。

(1)(6)パターン1で定義
(「コネクタ」−「VIS」の部分を下記パターン2,3で生成した部分に置き換えます)
(2)(3)パターン2 で定義
(4)(5)パターン3 で定義

サンプルとの対応

(1)(6):MTD
(2):A_Send
(3):B_Send
(4):A_Recv
(5):B_recv
クライアントAPコネクタAPVIS(TPP)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(1)(2)
メソッド呼出−(MTD)−>−(A_Send)−>業務処理
(3)
−(B_Send)−>業務処理
(4)
<−(A_Recv)−
(6)(5)
<−(MTD)−<−(B_recv)−