2010-10-26 95 views
3

我有一个无状态的EJB SessionBean,带有bith @local和@remote注释。该代码在weblogic服务器上正常工作。然而,在将其部署到Websphere时,会给出以下例外。如何在Websphere上配置本地和远程的ejb

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

的oracle.odc.session.ODCSession业务接口类不能既远程和本地。

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

回答

2

一种解决方法是使方法声明的基接口&具有本地接口&远程接口,其扩展了基接口,例如,

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

@Local 
public interface MyEJBLocal extends MyEJBBase {} 

@Remote 
public interface MyEJBRemote extends MyEJBBase {} 
1

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

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

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

相关问题