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