ActiveX ブリッジ開発者ガイド

SDK/JRE 1.4.2 以降のリリースに対する実装


このドキュメントでは、次のトピックについて説明します。

「アプリケーションの例」 の章では 2 つの例となるアプリケーションについて説明します。

概要

ActiveX ブリッジは、JavaBeans(TM) コンポーネントアーキテクチャ (「Bean」) に基づくコンポーネントを、ActiveX コントロールとして効率的にパッケージすることができます。そのため ActiveX コントロールを ActiveX コンテナ内の機能的なコンポーネントとして使用できます。

この ActiveX ブリッジの実装は、SDK/JRE 1.1 から 1.3.1 までの以前の実装とは互換性がないことに注意してください。この新しいブリッジを使用するには、Beans を再パッケージ化する必要があります。

サポートされる OS と ActiveX コンテナ

開発目的用に、この実装は次の OS と ActiveX コンテナをサポートします。

OS: Windows NT、2000、XP

ActiveX コンテナ: Visual Studio 6.0 (SP3)

パッケージ化された Beans は、上記のプラットフォームとコンテナだけでなく、すべての Windows プラットフォームと ActiveX コンテナで稼動することに注意してください。

Bean のパッケージ化

説明

1. パッケージャ (packager.exe) を実行するためには、お使いのコンピュータに次に示すものがインストールされている必要があります。

  • SDK 1.4.2 以降
  • Microsoft Visual C++ 6.0 (SP3)

2. パッケージャを実行するためには、最初に VCVARS32.BAT を実行する必要があります。Microsoft Visual C++ をインストールしたディレクトリにある、/bin ディレクトリに cd して、VCVARS32 と入力します。

packager.exe を使用して、Bean に対する .dll を生成します。

packager.exe の使用方法を次に示します。

パッケージャの使用方法

使用方法:packager [-options] <jar file name> <bean name> 

次のオプションがあります。
-clsid <class-id>         パッケージ化された Bean 用 CLSID
-out <output directory>   パッケージ化された Bean の生成先ディレクトリ
-reg                      Active-X コントロールを登録するための同意

関連情報

例

たとえば、<bean>.jar が jelly.jar で、jelly.jar は C:\my_bean_jars に置かれていて、完全修飾名は sunw.demo.jelly.JellyBean、SDKは j2sdk1.4.2 と想定します。この場合、packager.exe を次の方法で実行できます。

C:\j2sdk1.4.2\bin\packager -clsid {D824B185-AE3C-11D6-ABF5-00B0D07B8581} -out C:\Program Files\Java\j2re1.4.2\axbridge\bin -reg C:\my_bean_jars\jelly.jar sunw.demo.jelly.JellyBean

パッケージャは次に示す事柄を行います。

Bean .dll の手動登録

上記のように、packager.exe を使用するときに -reg オプションを使用しない場合、regsvr32.exe を使用して、.dll を手動で登録できます。.dll ファイルが置かれているディレクトリ (例 C:\Program Files\Java\j2re1.4.2\axbridge\bin) に cd し、次を入力します。

<path_regsvr32>\regsvr32 <bean name>.dll

Windows 2000 が稼動しているとします。Windows 2000 の regsvr32.exe は C:\winnt\system32 にあります。この場合に JellyBean.dll を登録するには、次のようにします。

C:\Program Files\Java\j2re1.4.2\axbridge\bin>C:\winnt\system32\regsvr32 JellyBean.dll

これにより以下が行われます。

アプリケーションでの Bean の使用

Bean は ActiveX コントロールとして登録されたので、ActiveX コンテナに挿入することができます。 Visual Studio 付属の ActiveX コントロールテストコンテナの場合、メインメニューで「Edit」>「Insert New Control...」に進み、「bean control」が表示されるまでリストを下にスクロールします。「JellyBean.dll」コントロールの場合、「JellyBean Bean Control」を表示します。以下に Visual Studio テストコンテナへの挿入を表示します。

配備

アプリケーションの ActiveX コントロールとしてパッケージ化された Bean を配備するには、.dll をインストールプロセスの一部とする登録を含める必要があります。.dll は、<jre_home>axbridge\bin ディレクトリにインストールされ、regsvr32.exe を使用して登録されます。前述したように、.dll が登録されたときに、Bean .jar は、<jre_home>\axbridge\lib ディレクトリに格納されます。

ActiveX ブリッジ環境での Java オブジェクト

Java オブジェクトは、IDispatch インタフェースをサポートするラッパーオブジェクトを介してアクセスできます。つまり、ActiveX ブリッジを通して間接的にアクセスされます。たとえば Visual Basic (VB) で、パッケージ化された Bean を扱い、Java オブジェクトを Bean メソッドに引数として渡す場合、(1) Bean に Java オブジェクトの要求される型を返すメソッドがあること、または (2) Java オブジェクトが Bean プロパティとして利用可能であるというどちらかが必要です。

たとえば、例の章にある、カレンダの例、JCalendarPanel を考慮してください。

この Bean を使用して Java を直接扱う場合、Date オブジェクトを作成し、プロパティを設定し、次に JCalendarePanel の setSelectedDate() に対する引数として渡します。これを ActiveX ブリッジを使用して行う方法を次に示します。

VB で作業していると仮定し、JCalendarPanel1 と呼ばれる JCalendarPanel のインスタンスがあるとします。VB では JCalendarPanel1.selectedDate プロパティを使用して Date オブジェクトを、次のようにして得ることができます。

Set dat = JCalendarPanel1.selectedDate

次に Date オブジェクト (dat) の VB メソッドを使用して設定を行います。たとえば、次のようにします。

dat.setYear (1986 - 1900)
dat.setMonth (11 - 1)
dat.setDate 24

最後に、JCalendarPanel1 の setSelectedDate メソッドを使用して date を設定します。

JCalendarPanel1.setSelectedDate dat

他の考慮事項

メソッドとメソッドのオーバーロード

getMethodDescriptors() を介する BeanInfo により提供されるすべてのメソッドは、ActiveX コンテナからアクセス可能です。

しかし、メソッドがオーバーロードされた場合、もっとも高い数の引数をとるメソッドだけが利用可能です。これは COM IDL がオーバーロードをサポートしないからです。しかし、引数と戻り値の型は、VARIANT になります。それぞれの引数はオプションです。どのオーバーロードしたメソッドに対しても Bean ドキュメントを参照して引数と型の正確な値を知る必要があります。MIDL キーワードと同じメソッドまたはプロパティ名は、すべて削除されます。

プロパティ

すべてのプロパティは、PropertyDescriptor を通して BeanInfo で定義したのと同じアクセス権を使用するブリッジを通してアクセス可能です。ActiveX ブリッジは PropertyDescriptor で定義したアクセサメソッドを呼び出します。

Bean プロパティが bound または constrained の場合、bindable または requestedit フラグが COM プロパティの属性内に設定されます。コンテナは IPropertyNotifySink インタフェースを通して、プロパティの変更を通知されます。プロパティに制限があり、コンテナがプロパティの変更を拒否した場合、Bean PropertyVetoException がブリッジによりスローされます。

プリミティブ型および文字列、フォント、カラープロパティについては、Visual Basic のような ActiveX コンテナのほとんどは、PropertySheet 内でプロパティの直接的な操作ができます。他のすべてのプロパティ、たとえば配列やオブジェクトのプロパティは PropertySheet ではアクセスできませんが、コンテナに関連するスクリプト言語を通して呼び出すことができます。

環境プロパティ

ブリッジは 4 つの環境プロパティをサポートします。それらは、Bean コンポーネントがそれらのプロパティを実装する場合に、Beanプロパティに翻訳されます。これらの環境プロパティは、コンポーネントが初期化されるときに Bean コンポーネントにより読み込まれ設定され、環境プロパティに対する変更の通知が行われます。

DISPID_BACKCOLOR
DISPID_FORECOLOR
DISPID_FONT
DISPID_ENABLED

ブリッジは、ActiveX コンテナの環境プロパティの変更を、設定プロパティを通して Bean に転送します。

イベント

BeanInfo により返された EventSetDescriptor 配列でデフォルトとして宣言されたすべてのソースインタフェースは、 ActiveX のデフォルトのソースインタフェースとして宣言された 1 つのインタフェースに組み込まれます。ActiveX コンテナによりデフォルトのソースインタフェースがアクセス可能であることが、ActiveX の最低限の要件です。

EventSetDescriptor の getListenerMethodDescriptors API により返される各メソッドは、ActiveX イベントにマッピングされます。イベント名はメソッド名です。Beans のすべてのデフォルトインタフェースは固有のインタフェースにマージされるので、同じメソッド名を含むインタフェースは許可されません。

次の java.awt.event.ActionListener ソースインタフェースについての例を考えましょう。

public interface ActionListener extends EventListener {

  public void actionPerformed(ActionEvent e);

}

このインタフェース定義により生成される ActiveX イベント名は、actionPerformed です。たとえば Visual Basic の場合、イベントシグニチャーは次のようになります。

Private Sub Button_actionPerformed (ByVal evt As Object)

  MsgBox evt.toString

End-Sub

コンテナに提供された evt は、オートメーションオブジェクトで、java.awt.AWTEvent Object を表します。コンテナは AWTEvent クラスによりサポートされるメソッドを呼び出すことによってイベントの情報にアクセスできます。

セキュリティ

ActiveX コントロールとしてパッケージ化される Bean はスタンドアロンのアプリケーションの一部です。このため、アプレットのサンドボックスセキュリティモデル外で実行可能です。

Internet Explorer での Bean のスクリプトは安全ではありません。AllPermission アクセス権が付与されるからです。

JVM 構成

Java Plug-in Control Panel を通して JVM を構成できることに注意してください。次のタブが ActiveX ブリッジに関連しています。

Beans をデバッグするために Java Console を使用できます。