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

发布于 2024-09-28 22:55:16 字数 347 浏览 4 评论 0原文

我有一个带有 @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?

I have a stateless EJB SessionBean with bith @local and @remote annotations. The code is working fine in weblogic server. However on deploying it to Websphere it gives following exception.

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

The oracle.odc.session.ODCSession business interface class cannot be both remote and local.

Is there any workaround available to make it work without writing seperate EJBs for remote and local invocation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

娇纵 2024-10-05 22:55:17

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

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

One workaround is to have a base interface with the method declarations & then have a local interface & a remote inteface, which extend the base interface, e.g.

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}
傾城如夢未必闌珊 2024-10-05 22:55:17

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

AFAIK there is no way, the error seems pretty descriptive.

坏尐絯 2024-10-05 22:55:17

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

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

From section 4.9.7 of the EJB 3.2 specification:

The same business interface cannot be both a local and a remote
business interface of the bean.

You can use subinterfaces as a workaround:

public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }

@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }

Note that the parameters and return values of the methods on the remote interface will be pass-by-value but the parameters and return values of the methods on the local interface will be pass-by-reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文