インターフェースを同時にローカルとリモートにすることはできません。ただし、すべてのメソッドを単一のインターフェースで定義してから、そのインターフェースを拡張し、アノテーションまたはエレメントで参照できる別個のローカル・インターフェースおよびリモート・インターフェースを作成できます。
この規則により、同じクラスにおいて javax.ejb.Local と javax.ejb.Remote の両方のアノテーションで使用されているインターフェースにフラグを立てます。
また、ejb-jar.xml ファイルの同じ session エレメント内の同じインターフェースを参照している business-local エレメントおよび business-remote エレメントにもフラグを立てます。
以下の Java コードでは、javax.ejb.Local アノテーションおよび javax.ejb.Remote アノテーションに対して、MyInterface.class の参照にフラグが立てられます。
パブリック・インターフェース MyInterface () { .. }
@Stateless(名前 = "MyEJB")
@Remote(MyInterface.class) @Local(MyInterface.class) public final クラス MyEJB implements MyInterface {
...
}
以下の ejb-jar.xml ファイルでは、この規則は business-local エレメントおよび business-remote エレメントにフラグを立てます。
<session> <ejb-name>MyEJB</ejb-name> <business-local>com.ibm.sample.MyInterface</business-local> <business-remote>com.ibm.sample.MyInterface</business-remote> <ejb-class>com.ibm.sample.MyEJB</ejb-class> < session-typegt; Stateless</session-type>
< transaction-typegt; コンテナー</transaction-type> </session>
この問題を解決するには、以下のように、インターフェースを拡張してローカル用とリモート用の別個のインターフェースを作成し、アノテーションまたはエレメントでそのインターフェースを参照します。
public interface MyInterfaceLocal extends MyInterface()
{ .. }
public interface MyInterfaceRemote extends MyInterface()
{ .. }