首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过注入从JBoss中的不同WAR访问EJB

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

Stack Overflow用户
提问于 2013-05-13 22:23:05
回答 3查看 2.2K关注 0票数 1

JBoss AS 7.1.3。JBoss redhat-4

一个包含EJB的war VWeb.war,当部署VWeb时,我会得到以下内容

代码语言:javascript
复制
 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

我还有另一个war (ControlWeb-portlet.war),它是一个liferay项目,我正在尝试从ControlWeb-portlet访问bean中的上述EJB。该bean为@ViewScoped这是基于找到的链接here完成的

我尝试了所有这些组合,但似乎都不起作用。

代码语言:javascript
复制
@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;

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

代码语言:javascript
复制
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

代码语言:javascript
复制
@EJB
CdiServiceImpl cdiServiceImpl;

在从不同的WAR访问EJB时,有没有什么特定的东西需要我去做?

提前感谢

查利

EN

回答 3

Stack Overflow用户

发布于 2017-07-05 09:23:38

显然,我不久前在JBoss forums上回答了这个问题。由于它在那里被标记为正确答案,我想我也可以在这里重现它。

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

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

代码语言:javascript
复制
public class Resources {
          @Produces
          @EJB(lookup = "java:global/.../WhateverService")
          private WhateverService whateverService;
}

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

代码语言:javascript
复制
// ...
@Inject
private WhateverService whateverService;
// ...

就像一种护身符。我还使用了类似的CDI视图作用域方法。

票数 1
EN

Stack Overflow用户

发布于 2013-05-14 22:32:11

如果我理解正确的话,您应该继续使用@EJB作为远程bean。

票数 0
EN

Stack Overflow用户

发布于 2013-05-28 20:39:56

一种可能的修复方法是在第二个war中将对VWeb.war的依赖项添加到jboss-deployment-structure.xml文件中。它看起来像这样:

代码语言:javascript
复制
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="deployment.VWeb.war" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

如果这不起作用,您还可以尝试here所述的变通方法。

(在ControlWeb-portlet.war中创建一个@Stateless EJB,它通过@EJB注入所需的bean,然后通过生产者方法公开它,这允许您在最终目的地中使用@Inject。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16524420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档