前へJava データ型

第 6 章 ActiveX/Java 両用クラス

この章では、Java クラスまたは ActiveX サーバーとして使用できる Object COBOL クラスの作成方法について説明します。

6.1 概要

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オートメーション ドメイン内で使用できるようになります。クラスが利用できるドメインは、プロセス内で最初にロードされた方法によって異なります。

6.2 クラスの作成

クラス ウィザードを使用して OLE オートメーション用のクラスを作成し、 「Java から Object COBOL を呼び出す」の章の 「Object COBOL で Java クラスを作成する」 の項で説明しているとおり、Java ラッパー クラスとメソッドを作成します。

6.2.1 クラスのリンク

ActiveX サーバーとして使用できるようにするには、クラスを .dll ファイルにリンクして、さらにこのファイルを dllserver.obj にリンクする必要があります。このリンクを行っても、Java からのロードや呼び出しを妨げません。しかし、.dll ファイルがマルチスレッド ランタイムにもリンクされていることを確認する必要があります。これは、Java で使用するすべてのクラスに必要な操作です。

6.3 Transaction Server コンポーネント/Enterprise Java Bean の混用

この技術は、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) 

6.4 実行コンテキストの判断

場合によっては、クラスが 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 データ型