3

@localおよび@remoteアノテーションが付いたステートレスEJBSessionBeanがあります。コードはweblogicサーバーで正常に機能しています。ただし、Websphereにデプロイすると、次の例外が発生します。

bm.ejs.container.EJBConfigurationException:BUSINESS_INTERFACE_DESIGNATED_AS_BOTH_REMOTE_AND_LOCAL:'oracle.odc.session.ODCSession'

oracle.odc.session.ODCSessionビジネス・インタフェース・クラスは、リモートとローカルの両方にすることはできません。

リモート呼び出しとローカル呼び出し用に別々のEJBを作成せずに動作させるために利用できる回避策はありますか?

4

3 に答える 3

2

回避策の1つは、メソッド宣言を含むベースインターフェイスを用意してから、ベースインターフェイスを拡張するローカルインターフェイスとリモートインターフェイスを用意することです。

public interface MyEJBBase {
    public void foo();
    public void bar();
}

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}
于 2012-08-08T19:02:22.480 に答える
1

AFAIK方法はありません、エラーはかなり説明的なようです。

于 2010-11-04T08:57:29.620 に答える
1

EJB 3.2仕様のセクション4.9.7から:

同じビジネスインターフェースを、Beanのローカルビジネスインターフェースとリモートビジネスインターフェースの両方にすることはできません。

回避策としてサブインターフェイスを使用できます。

public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }

@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }

リモートインターフェイスのメソッドのパラメーターと戻り値は値渡しになりますが、ローカルインターフェイスのメソッドのパラメーターと戻り値は参照渡しになることに注意してください。

于 2010-12-11T17:23:39.380 に答える