目次 | 前の項目 | 次の項目 | JavaBeans の拡張可能ランタイム包含関係およびサービスプロトコル |
java.beans.instantiate() の現行の実装には、アプレットでもある JavaBeans のインスタンスを生成するための最小限のサポートが含まれています。 特に、このメソッドは、新たにインスタンス生成された JavaBean 用の AppletContext および AppletStub を構築し、まだ呼び出されていない場合には、新たにインスタンス生成されたアプレットにスタブを設定してから、アプレットに対して init() を実行します。残念なことに、java.beans.instantiate() により作成された AppletContext および AppletStub を操作することはできないため、現行の実装では大半のアプレットが十分に機能するほどのサポートが提供されることはありません。 これは、既存の Applet API に AppletContext および AppletStub 実装の構築方法を規定する仕様が不足しているために生じた結果です。また、そのような仕様が存在したとしても、あとで適切に初期化されたオブジェクトのインスタンスを生成するには、Codebase、Parameters、AppletContext、および Documentbase などの多数の Applet 属性を java.beans.instantiate() に伝搬する API が必要です。
完全に機能するアプレットをサポートする鍵は、アプレットに完全に機能する AppletContext および AppletStub のインスタンスを提供することであるため、設計上の目標は instantiate() を実行してこの状態を実現する機構を提供し、適切な初期化およびバインディング1を実行できるようにすることです。 このため、提案されるインタフェースは次のようになります。
public static Object instantiate(ClassLoader cl, String beanName, BeanContext bCtxt, AppletInitializer ai ); public interface AppletInitializer { void initialize(Applet newApplet, BeanContext bCtxt); void activate(Applet newApplet); }
新たにインスタンス生成された JavaBean コンポーネントが java.applet.Applet のインスタンスである場合、新たに構築されたアプレット (Bean) が initialize() への呼び出しを介して AppletInitializer に渡されます。仕様に準拠した AppletInitializer.initialize() の実装は、次のようになります。
- 新たにインスタンス生成したアプレットを、適切な AppletContext に関連付けます。
- AppletStub() のインスタンスを生成してから、setStub() の呼び出しを介して AppletStub をアプレットに関連付けます。
- BeanContextパラメータが null の場合、add() の呼び出しを介してアプレットを適切なコンテナに追加することにより、アプレットをそのコンテナに関連付けます。 BeanContext パラメータが null ではない場合、それに続く addChildren() メソッドの呼び出し時にアプレットをそのコンテナに関連付けるのは BeanContext の役割です。
仕様に準拠した AppletInitializer.activate() の実装は、アプレットにアクティブであるとのマーク付けを行います。 またオプションで、アプレットの start() メソッドを呼び出すこともできます。新たにインスタンス生成された JavaBean が、アプレットのインスタンスではない場合は、AppletInitializer インタフェースは無視されることに留意してください。