java - 使用 EJB 客户端 jar 进行远程 EJB 访问

标签 java jakarta-ee ejb weblogic ejb-3.0

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

EJB接口(interface)

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

在客户端,

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

org.ihc.myLog myLog-ejb 1.0 jar

我正在使用 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

最佳答案

您的 ejb 客户端是否有包含 ejb 或配置文件的 jar 或者它只包含接口(interface)类。 看来你的客户端服务器也尝试初始化你的bean 确实没有必要。

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

因评论而更新:

创建一个单独的 WEB 项目。只需要调用的依赖项 远程 EJBS。在本例中为远程接口(interface)。 如果它是一个 Web 项目,那么只需放入以下配置即可 此 WEB 项目所必需的,并将其部署为 WAR 文件,而不是 JAR 或 EAR。

关于java - 使用 EJB 客户端 jar 进行远程 EJB 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20574613/

相关文章:

java - AspectJ - 从 inside 子句中排除内部类

java - Mockito 使用参数模拟新实例调用

java - 将文本插入 Quartz Schedule 上的 Swing 文本区域

java - 如何创建 EJB 3.2 Stateless Bean 项目并在 Wildfly 8 上运行它?

java - 如何在WildFly(耳朵中)中配置EJB WebServices

java - Tomcat : shared static variables and methods across sessions.

java - 自动生成的邮件

java - IntelliJ : XDoclet, EJB等

java - Ejb 从 jar 返回 CustomClass

java - 为什么要使用java bean?