Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス


2.9 interface

IDLのインタフェースは,次に示す二つのJavaパブリックインタフェースにマッピングされます。

拡張子Helperの付いた追加Helperクラス名がインタフェース名に付加されます。Javaインタフェースはマッピングしたベースインタフェースorg.omg.CORBA.Objectを継承します。

Javaインタフェースは,マッピング後のオペレーションシグニチャを格納します。メソッドは,Javaインタフェースのオブジェクトリファレンスについて呼び出せます。

Helperクラスは静的narrowメソッドを宣言します。このメソッドによって,org.omg.CORBA.Objectのインスタンスをさらに詳細な型のオブジェクトリファレンスにナロウイングできます。オブジェクトリファレンスが要求型をサポートしていないためナロウイングに失敗すると,IDL例外CORBA::BAD_PARAMが発生します。別の種類のエラーを報告するためには,異なるシステム例外が発生します。nullのナロウイングは常にnullを返して成功します。

特別な「nil」オブジェクトリファレンスはありません。Javaのnullは,オブジェクトリファレンスに,いつでも自由に渡されます。

属性はJavaアクセッサと変更メソッドのペアにマッピングされます。これらのメソッドにはIDL属性と同じ名前があり,オーバーロードされます。IDL readonly属性に対する変更メソッドはありません。

interfaceのHolderクラスも生成されます。その名前は,次のようにインタフェースがマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-20 interfaceのHolderクラス
final public class <interface_class>Holder
       implements org.omg.CORBA.portable.Streamable {
    public <interface_class> value;
    public <interface_class>Holder( ) {}
    public <interface_class>Holder(
                    <interface_class> initial) {
        value = initial;
    }
    public void _read(org.omg.CORBA.portable.InputStream i)
        {...}
    public void _write(
                    org.omg.CORBA.portable.OutputStream o)
        {...}
    public org.omg.CORBA.TypeCode _type( ) {...}
}
コードサンプル2-21 IDL interfaceのJavaへのマッピング
/*From Example.idl:*/
module Example {
    interface Foo {
        long method(in long arg)raises(AnException);
        attribute long assignable;
        readonly attribute long nonassignable;
    };
};
 
//Generated java
package Example;
 
public interface Foo extends
    com.inprise.vbroker.CORBA.Object,
    Example.FooOperations,
    org.omg.CORBA.portable.IDLEntity {
}
public interface FooOperations {
    public int method(int arg) throws Example.AnException;
    public int assignable( );
    public void assignable(int assignable);
    public int nonassignable( );
}
 
public final class FooHelper {
    //...other standard helper methods
    public static Foo narrow(org.omg.CORBA.Object obj)
        {...}
    public static Example.Foo bind(org.omg.CORBA.ORB orb,
        java.lang.String name,
        java.lang.String host,
        com.inprise.vbroker.CORBA.BindOptions _options)
                                                    {...}
    public static Example.Foo bind(org.omg.CORBA.ORB orb,
        java.lang.String fullPoaName, byte[ ] oid)) {...}
    public static Example.Foo bind(org.omg.CORBA.ORB orb,
        java.lang.String fullPoaName,byte[ ] oid,
        java.lang.String host,
        com.inprise.vbroker.CORBA.BindOptions _options)
                                                    {...}
    public Foo read(org.omg.CORBA.portable.InputStream in)
                                                    {...}
    public void write(org.omg.CORBA.portable.OutputStream
                      out, Foo foo) {...}
    public Foo extract(org.omg.CORBA.Any any) {...}
    public void insert(org.omg.CORBA.Any any, Foo foo)
                                                  {...}
}
 
public final class FooHolder
        implements org.omg.CORBA.portable.Streamable {
    public Foo value;
    public FooHolder( ) {}
    public FooHolder(final Foo initial) {...}
    public void _read(org.omg.CORBA.portable.InputStream i)
                                                      {...}
    public void _write(
                    org.omg.CORBA.portable.OutputStream o)
        {...}
    public org.omg.CORBA.TypeCode_type( ) {...}
}

リポジトリIDの長さが,512を2の(サーバエンジン数 -1)乗で割ったサイズ(単位:バイト)以下になるように,interfaceをIDLに記述してください。IDLで#pragmaを使用して,リポジトリIDを指定している場合も同様です。

上記のサイズを超える値を指定した場合,osagentとの通信が失敗することがあります。

〈この節の構成〉