このドキュメントでは、次のトピックについて説明します。
「アプリケーションの例」 の章では 2 つの例となるアプリケーションについて説明します。
ActiveX ブリッジは、JavaBeans(TM) コンポーネントアーキテクチャ (「Bean」) に基づくコンポーネントを、ActiveX コントロールとして効率的にパッケージすることができます。そのため ActiveX コントロールを ActiveX コンテナ内の機能的なコンポーネントとして使用できます。
この ActiveX ブリッジの実装は、SDK/JRE 1.1 から 1.3.1 までの以前の実装とは互換性がないことに注意してください。この新しいブリッジを使用するには、Beans を再パッケージ化する必要があります。
開発目的用に、この実装は次の OS と ActiveX コンテナをサポートします。
OS: Windows NT、2000、XP
ActiveX コンテナ: Visual Studio 6.0 (SP3)
パッケージ化された Beans は、上記のプラットフォームとコンテナだけでなく、すべての Windows プラットフォームと ActiveX コンテナで稼動することに注意してください。
| 説明 1. パッケージャ ( 
 2. パッケージャを実行するためには、最初に  | 
packager.exe を使用して、Bean に対する .dll を生成します。
packager.exe の使用方法を次に示します。
| パッケージャの使用方法使用方法:packager [-options] <jar file name> <bean name> | 
.dll には、1 つだけパッケージ化された Bean を含めることができる。したがって、各 Bean に対して、個別の.jar ファイルが必要.jar ファイルが他の .jar ファイルまたは .class ファイルに依存している場合は、CLASSPATH の設定が必要<jar file name> には、.jar ファイルへのパスを含める必要がある。パスはフルパスまたは相対パス<bean name> は、sunw.demo.jelly.JellyBean のように、Bean の完全指定されたパッケージ名である必要がある-clsid オプションが使用されない場合、パッケージ化された Bean CLSID がランダムに生成される。この -clsid オプションにより、毎回指定された Bean に対する同様の CLSID を指定できる-out が指定されない限り、packager.exe が実行される同じディレクトリに .dll を生成する。-out パラメータを指定する場合、パッケージャは .dll ファイルを指定したディレクトリに格納する。たとえば、.dll を アプリケーションを展開する <jre_home>\axbridge\bin と呼ばれるディレクトリに格納することができる。<jre_home> は、公開 JRE であり、非公開ではないことに注意。Windows での公開 JRE は、通常 C:\Program Files\Java\j2re1.4.2 にある。SDK と関連する非公開 JRE は、通常 C:\j2sdk1.4.2\jre にある-out が指定されない場合、または -out が <jre_home>\axbridge\bin を指定しない場合、-reg オプションは使用できないたとえば、<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
パッケージャは次に示す事柄を行います。
JellyBean.dll) を使用する  .dll ファイルを生成し、j2re\axbridge\bin  ディレクトリに入れるj2re1.4.2\axbridge\lib ディレクトリを作成し、jelly.jar をそこに置くCLSID D824B185-AE3C-11D6-ABF5-00B0D07B8581 を使用して、Bean .dll を登録する.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
これにより以下が行われます。
HKEY_CLASSES_ROOT 下に、JellyBean.dll に対する CLSID レジストリエントリを作成するj2re1.4.2\axbridge\lib ディレクトリを作成し、jelly.jar をそこに置く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 ディレクトリに格納されます。
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 アクセス権が付与されるからです。
Java Plug-in Control Panel を通して JVM を構成できることに注意してください。次のタブが ActiveX ブリッジに関連しています。
Beans をデバッグするために Java Console を使用できます。