![]() | Java データ型 |
この章では、Java クラスまたは ActiveX サーバーとして使用できる Object COBOL クラスの作成方法について説明します。
Java によって Java クラスとして使用される Object COBOL クラス、または OLE オートメーション経由で ActiveX クラスとして使用される Object COBOL クラスを作成することができます。この章を読む前に、「OLE オートメーションと DCOM」 の章、および「Java から Object COBOL を呼び出す」の章を参照して、Java ドメインと OLE オートメーション ドメインについて把握してください。
ActiveX/Java 両用クラスを作成可能にするこのサポートは、componentbase という Object COBOL クラスによって実現されます。ActiveX サーバーは通常、olebase というクラスから継承し、Java クラスは javabase というクラスから継承します。
これらのクラスのどちらかの継承を componentbase に変更すると、この継承は Java ドメイン または OLEオートメーション ドメイン内で使用できるようになります。クラスが利用できるドメインは、プロセス内で最初にロードされた方法によって異なります。
クラス ウィザードを使用して OLE オートメーション用のクラスを作成し、 「Java から Object COBOL を呼び出す」の章の 「Object COBOL で Java クラスを作成する」 の項で説明しているとおり、Java ラッパー クラスとメソッドを作成します。
ActiveX サーバーとして使用できるようにするには、クラスを .dll ファイルにリンクして、さらにこのファイルを dllserver.obj にリンクする必要があります。このリンクを行っても、Java からのロードや呼び出しを妨げません。しかし、.dll ファイルがマルチスレッド ランタイムにもリンクされていることを確認する必要があります。これは、Java で使用するすべてのクラスに必要な操作です。
この技術は、Microsoft Transaction Server (MTS) オブジェクトとして、または Enterprise Java Bean (EJB) として使用できる Object COBOL クラスも作成できるようにします。前項での説明のとおり、Net Express ウィザードを使用して Transaction Server クラスを作成し、Java ラッパーおよびインターフェイス クラスをコーディングします。また、Enterprise Java Bean に必要な次のメソッドを追加する必要もあります。
MTS と動作するための objectcontext クラスは、EJB のクロスドメイン プログラミングをサポートしています。したがって、objectcontext クラスを使用する MTS コードが EJB 環境で実行されると、そのコードは objectcontext オブジェクトによって無視されるか、または同等の EJB 操作を実行します。
さらに生成されたコードを 2 箇所変更する必要があります。最初に、次のコードの各オカレンスを変更します。
invoke objectcontext "getObjectContext" returning theContext
次のように変更します。
invoke objectcontext "getTransactionContext" using self
returning theContext
これにより、objectcontext は、オブジェクトが EJB としてロードされたか、または MTS オブジェクトとしてロードされたかを判断することができます。
次に、クラスの先頭にある OOCTRL コンパイラ指令を次のように変更します。
$set ooctrl(+p-f)
場合によっては、クラスが Java オブジェクト、または OLE オブジェクトのどちらとして実行されているかをプログラムで判断する必要があります。判断するには、componentbase クラスを olebase クラスおよび javabase クラスと比較します。たとえば次のとおりです。
class-control.
olebase is class "olebase"
javabase is class "javabase"
componentbase is class "componentbase"
...
.
procedure division.
if componentbase = olebase
display "OLE オートメーション サーバーとして実行中"
else
if componentbase = javabase
display "Java クラスとして実行中"
end-if
end-if
また、Class-Control 節でユーザー定義の宣言を使用して、実行コンテキストに応じて異なる型のオブジェクトを作成することができます。
class-control.
Account is class accountName
...
.
procedure division.
if componentbase = olebase
*> OLE ドメイン オブジェクトを作成
move "$OLE$Bank.Account" to accountName
else
*> Java ドメイン オブジェクトを作成
move "$Java$Account" to accountName
end-if
Copyright © 2000 MERANT International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。
![]() | Java データ型 |