JBoss AS 7.1.3。JBoss 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我还有另一个war (ControlWeb-portlet.war),它是一个liferay项目,我正在尝试从ControlWeb-portlet访问bean中的上述EJB。该bean为@ViewScoped这是基于找到的链接here完成的
我尝试了所有这些组合,但似乎都不起作用。
@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,部署如下
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时,有没有什么特定的东西需要我去做?
提前感谢
查利
发布于 2017-07-05 09:23:38
显然,我不久前在JBoss forums上回答了这个问题。由于它在那里被标记为正确答案,我想我也可以在这里重现它。
我使用以下方法使其正常工作:
首先,使用@Produces注释将EJB定义为资源:
public class Resources {
@Produces
@EJB(lookup = "java:global/.../WhateverService")
private WhateverService whateverService;
}然后,使用@Inject注释将EJB资源注入到bean中:
// ...
@Inject
private WhateverService whateverService;
// ...就像一种护身符。我还使用了类似的CDI视图作用域方法。
发布于 2013-05-14 22:32:11
如果我理解正确的话,您应该继续使用@EJB作为远程bean。
发布于 2013-05-28 20:39:56
一种可能的修复方法是在第二个war中将对VWeb.war的依赖项添加到jboss-deployment-structure.xml文件中。它看起来像这样:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="deployment.VWeb.war" />
</dependencies>
</deployment>
</jboss-deployment-structure>如果这不起作用,您还可以尝试here所述的变通方法。
(在ControlWeb-portlet.war中创建一个@Stateless EJB,它通过@EJB注入所需的bean,然后通过生产者方法公开它,这允许您在最终目的地中使用@Inject。)
https://stackoverflow.com/questions/16524420
复制相似问题