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

时间:2010-10-26 13:20:47

标签: websphere websphere-7

我有一个带有bith @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的情况下使其工作?

3 个答案:

答案 0 :(得分:2)

一种解决方法是使用方法声明的基本接口&然后有一个本地界面&远程接口,扩展基接口,例如

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

答案 1 :(得分:1)

AFAIK没有办法,错误似乎很有描述性。

答案 2 :(得分: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 { /* ... */ }

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