本編では、VISコネクタが生成したコネクタAPのソースのカスタマイズの例について説明します。
ACOS-4(VISU)の複数業務へログインする場合
複数業務ログインを行うためのカスタマイズ方法を記述します。
<サンプル作成手順:作成方法の一例>
コネクタAP(自動生成されるソース)は、以下の2つの部分から構成されています。
| :インタフェース部 | |
| :処理部 |
カスタマイズ部分は、インタフェース部の派生クラスとして実装します。
コンポーネント名が変わるとWebOTX提供のIDLコンパラが生成するソース部分のクラスの生成を派生クラスに変更しなければなりません。しかし、このサンプルではIDLコンパイラが生成したソースの変更を行わないようにするため、派生クラス(カスタマイズ部分)を派生元クラスの元の名称とし、派生元のクラス名(コネクタAP:自動生成されるソース)を変更しています。
#WebOTXのIDLコンパイラがコネクタAPとして生成しているのは「NewComponent1Obj」です。
以上のことをまとめると以下のようになります。
| : | インタフェース部 VISコネクタで自動生成した「NewComponent1Obj」のクラス名を「NewComponent1Obj2」に変更。名称変更以外は変更なし。 | |
| : | 処理部 VISコネクタで自動生成したクラス。変更なし。 | |
| : | カスタマイズソース 複数業務ログインのカスタマイズを行う。 |
<カスタマイズ内容>
カスタマイズしたソース(変更点のみ抜粋)
…
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】送受信
| ||||||||||||||||||||||||||||||
【パターン2】送信のみ
| ||||||||||||||||||||
【パターン3】受信のみ
| ||||||||||||||||||||
<複数業務ログインのサンプル>
一回の処理(メソッド呼出)で、複数の送信/受信を行うには、カスタマイズが必要となります。
以下に、カスタマイズ方法のサンプルを記述します。
(注意)ステートフル方式のコネクタAPです。
| ||||||||||||||||||||||||||||||||||||||||||||||||||
上記例では、(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 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||