我有一个带有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的情况下使其工作?
答案 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 { /* ... */ }
请注意,远程接口上方法的参数和返回值将是按值传递,但本地接口上方法的参数和返回值将按引用传递。