3

我有一个带有@local 和@remote 注释的无状态EJB SessionBean。该代码在 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

一种解决方法是有一个带有方法声明的基本接口,然后有一个本地接口和一个远程接口,它们扩展了基本接口,例如

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 回答