如何在Websphere上配置本地和远程ejb

如何在Websphere上配置本地和远程ejb,websphere,websphere-7,Websphere,Websphere 7,我有一个带有bith@local和@remote注释的无状态EJB SessionBean。代码在weblogic server中运行良好。但是,在将其部署到Websphere时,会出现以下异常 bm.ejs.container.ejbConfiguration异常:业务接口指定为远程和本地:“oracle.odc.session.ODCSession” oracle.odc.session.ODCSession业务接口类不能同时为远程和本地 是否有任何解决方法可以使其在不为远程和本地调用编写单

我有一个带有bith@local和@remote注释的无状态EJB SessionBean。代码在weblogic server中运行良好。但是,在将其部署到Websphere时,会出现以下异常

bm.ejs.container.ejbConfiguration异常:业务接口指定为远程和本地:“oracle.odc.session.ODCSession”

oracle.odc.session.ODCSession业务接口类不能同时为远程和本地


是否有任何解决方法可以使其在不为远程和本地调用编写单独的EJB的情况下工作?

AFAIK没有办法,错误似乎非常具有描述性。

来自EJB3.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 { /* ... */ }

请注意,远程接口上方法的参数和返回值将按值传递,但本地接口上方法的参数和返回值将按引用传递。

一种解决方法是使用方法声明创建一个基本接口,然后使用本地接口和远程接口,它扩展了基本接口,例如

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}