【问题标题】:Remote EJB Access using the EJB client jar使用 EJB 客户端 jar 进行远程 EJB 访问
【发布时间】:2014-01-01 16:48:54
【问题描述】:

我有一个 EJB 耳朵部署到 Weblogic。 EJB 有一些 JMS 队列设置,它通过设计发送消息。 调用 EJB 的客户端 Web 应用程序正在同一台机器上的另一个 JVM 上运行(模拟远程调用)

EJB 接口

@Remote
public interface MyLog {
    public void doSomething();
}

在客户端,

Maven 依赖包括以下内容。我正在使用 ejb jar 本身。如何生成 ejb 客户端 jar,两者有什么区别?

org.ihc.myLog myLog-ejb 1.0 罐

我正在使用 spring 来查找 ejb,我正在使用 ejb jar(不确定我是否完全理解 ejb jar 和 ejb-client jar 之间的区别)。

<bean id="myLog" parent="MyEjbParent" lazy-init="false">
   <property name="jndiName" value="MyLog#org.ihc.My.MyLog"/>
   <property name="businessInterface" value="org.ihc.audit.AuditLog"/>
   <property name="lookup-home-on-startup" value="false"/>
</bean>

我正在使用 Spring DI 将 myLog 连接到类的适当属性并执行我的操作。

myLog.doSomething();

问题是,当我尝试部署调用 EJB 的 Web 应用程序时,部署失败,提示未在客户端应用程序服务器上设置 JMS 队列。我不明白为什么客户端应用程序服务器需要设置 JMS 队列,因为它们已经在运行 EJB 实例的 Weblogic 服务器上设置。客户不应该只关心调用远程方法并让 EJB 做这件事吗?可能是我的配置错误或其他原因?谢谢。

这是我在部署调用 ejb 的客户端 Web 应用程序期间遇到的错误

|Exception while loading the app : EJB Container initialization error
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: JMS resource
not created : jms.mylog_queue

【问题讨论】:

  • 如果我的回答对你有帮助,请投票;-)

标签: java jakarta-ee ejb weblogic ejb-3.0


【解决方案1】:

您的 ejb 客户端是否包含 ejb 或配置文件 还是只包含接口类。 似乎您的客户端服务器也尝试初始化您的 bean 确实没必要。

尝试将客户端代码与服务器代码分开。您的客户只需要知道 远程接口和您的客户端服务器需要所有 ejb-client 依赖项 为了调用所有 ejb 远程 --> rmi-iiop 的东西。

由于评论而更新:

创建一个单独的 WEB 项目。仅使用它需要调用的依赖项 远程 EJBS。在这种情况下,远程接口。 如果它是一个 Web 项目,则不仅仅是放入以下配置 此 WEB 项目所必需的并将其部署为 WAR 文件而不是 JAR 或 EAR。

【讨论】:

  • 客户端 jar 包含所有 EJB 类。它还有一个包含 ejb-jar.xml 文件的 META-INF 文件夹。这应该在客户端罐子里吗?我认为你是对的,它试图初始化它不应该初始化的 EJB 容器本身。如何将客户端代码与服务器代码分开。我的配置根本不应该触发 EJB 的创建吗?
  • 这就是问题所在。删除所有配置文件或带注释的 ejb 实现。因为在部署过程中它也会尝试初始化 ejbs,但客户端服务器中不存在 jms 配置,所以部署失败。
  • 有道理。但是我在客户端代码中没有任何注释或 ejb 声明。我有提到的 spring 配置来创建业务接口的实例。我将其注入 Spring 托管 bean。我正在使用这个注入的实例来调用业务接口方法。所以让我感到困惑的是,为什么在部署客户端 Web 应用程序时会触发 EJB 创建。我错过了一些鬼鬼祟祟的东西!
  • 如果您将包部署到任何符合 JEE 的服务器,部署过程会尝试解析位于包中的所有配置文件。 -> 热部署。您为客户端应用使用哪种服务器。
  • 我正在为客户端 Web 应用程序使用 Glassfish 完整版。 “尝试解析位于包中的所有配置文件”。我正在尝试查找我的客户端代码中的哪一段触发了 EJB 的初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 2015-04-26
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多