繁体   English   中英

通过注入从JBoss AS中的不同WAR访问EJB

[英]Access EJB from different WAR in JBoss AS via injection

我的项目结构如下

JBoss AS 7.1.3.Final-redhat-4

一个包含EJB的war VWeb.war,在部署VWeb时,我得到以下信息

 java:global/VWeb/QServiceImpl!com.vi.qciapi.QService
java:app/VWeb/QServiceImpl!com.vi.qciapi.QService
java:module/QServiceImpl!com.vi.qciapi.QService
java:global/VWeb/QServiceImpl
java:app/VWeb/QServiceImpl
java:module/QServiceImpl

我遇到了另一个战争(ControlWeb-portlet.war),这是一个liferay项目,我正在尝试从ControlWeb-portlet在bean中访问上述EJB。 Bean是@ViewScoped。此操作基于此处的链接完成

我已经尝试了所有这些组合,但似乎无济于事

@Inject
QService qService;

@EJB
QService qService;

@EJB(mappedName="java:global/VWeb/QServiceImpl!com.vi.qciapi.QService")
QService qService;

@EJB(beanInterface=QService.class)
QService qService;

@EJB(mappedName="java:global/VWeb/QServiceImpl!com.vi.qciapi.QService")
QService qService;

我将EJB保留在同一项目ControlWeb-portlet中,其部署如下

java:global/ControlWeb-portlet/CdiServiceImpl!com.clink.cdi.CdiServiceImpl
    java:app/ControlWeb-portlet/CdiServiceImpl!com.clink.cdi.CdiServiceImpl
    java:module/CdiServiceImpl!com.clink.cdi.CdiServiceImpl
    java:global/ControlWeb-portlet/CdiServiceImpl
    java:app/ControlWeb-portlet/CdiServiceImpl
    java:module/CdiServiceImpl

而且我可以用注入

@EJB
CdiServiceImpl cdiServiceImpl;

从其他WAR访问EJB时,我有什么特别的需要

提前致谢

查理

显然,我早在JBoss论坛上回答了这个问题。 由于它在那里被标记为正确答案,因此我想我也将在此处进行复制。


我使用以下方法使其工作:

首先,使用@Produces批注将EJB定义为资源:

public class Resources {
          @Produces
          @EJB(lookup = "java:global/.../WhateverService")
          private WhateverService whateverService;
}

然后,使用@Inject批注将EJB资源注入到bean中:

// ...
@Inject
private WhateverService whateverService;
// ...

奇迹般有效。 我也在使用类似的CDI视图作用域方法。

如果我理解正确,则应继续将@EJB用于远程bean。

一种可能的解决方法是在第二次战争中VWeb.war的依赖项添加到jboss-deployment-structure.xml文件中。 看起来像这样:

<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="deployment.VWeb.war" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

如果这不起作用,您还可以尝试此处描述的解决方法。
(在ControlWeb-portlet.war创建一个@Stateless EJB,该@Stateless EJB通过@EJB注入所需的bean,然后通过生产者方法公开此豆,该方法允许您在最终目标中使用@Inject 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM