gpt4 book ai didi

java - 从外部 JVM 通过 Remote bean 调用 EJB3 Local bean

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:20 26 4
gpt4 key购买 nike

使用 EJB 的经验不是很丰富,我遇到了以下问题,希望你们中的某个人能帮忙解决。

假设以下情况:定义了一组@Local bean 来提供对数据库的访问。这些bean 非常简单,部署在应用服务器A (Weblogic 10.3.3) 上。我们希望通过远程提供对这些本地 beans 的访问,并且由于我们已经有一个“服务”模块设置来提供对我们服务的外部访问,我们的想法是创建一个新的 @Remote 服务,该服务使用上述 local beans(通过 @EJB 注入(inject))。这些服务bean也部署在应用服务器A上,例如:

@Local
public interface DatabaseBeanLocal { doStuff(); }

@Stateless(name = "ejb/DatabaseBean", mappedName = "DatabaseBean")
public class DatabaseBean implements DatabaseBeanLocal { doStuff() { ... } ; }

@Remote
public interface ServiceBean { doSomeOtherStuff(); }

@Stateless
public class ServiceBeanImpl implements ServiceBean
{
@EJB(name = "ejb/DatabaseBean", mappedName = "DatabaseBean")
private DatabaseBeanLocal myDatabaseBean;

... methods etc. ...

}

实际使用这些远程 bean 的客户端实际上运行在不同的应用服务器上; 应用程序服务器 B(也是 Weblogic 10.3.3)。当我们从客户端查找 ServiceBean bean 时,它工作正常。但是,当我们调用需要访问 DatabaseBean 的方法时,调用失败。 Weblogic 服务器说它找不到 DatabaseBean 接口(interface)的 bean。

我的问题:这种设置是否可行?换句话说:Weblogic(或另一个容器)会将本地 bean 注入(inject)到远程 bean 中,以便客户端获得能够调用本地 bean 上的操作的远程 bean 实例(我假设不会,但我在问无论如何要确定)?

如果没有,我想我们别无选择,只能跳过服务层并通过 @Remote 提供对上面的 DatabaseBean 示例的直接访问。

更新 1

在做了一些测试之后,简单地将上面的 DatabaseBean 定义为 @Remote 而不是 @Local “修复”了这个问题。当然,这并不是真正的修复,因为这将远程调用 DatabaseBean,这很荒谬,因为它与服务位于同一模块中。我开始怀疑用远程 EJB 包装本地 EJB 根本不可能。

更新2

到目前为止我们发现了什么:

  • 到目前为止,我们还无法手动注入(inject)本地 EJB,因为我们实际上无法在运行时找到它。
  • Weblogic 显然不在 JNDI 树中包含本地 EJB。
  • 从部署它的 AS 外部调用 ServiceBean 仍然不起作用,因为对本地 EJB 的依赖从未解决,或者在客户端解决,这意味着它找不到。

最佳答案

本地意味着 EAR 本地而不是 AS。

您的本地和远程 Bean 必须在同一个 EAR 中(不仅在同一个 AS 中)。是吗?

-- 编辑--

嗯.. 如果它们在同一个 EAR 中,那么它应该可以工作。 IE。回答您的问题“这样的设置是否可行?”是肯定的。

不幸的是,现在我们谈论的是纯粹而简单的调试。我要做的第一件事是尝试检查本地 bean(DatabaseBean 我猜)是否实际注册并使用 WebPhere UTC 工作WebLogic 中的等效项(我从未在 WebLogic 中工作过)。我可以列出 100 项其他内容,您可以检查更多日志/跟踪/症状,但是好吧,这就是调试的方式。

关于java - 从外部 JVM 通过 Remote bean 调用 EJB3 Local bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com