当前位置: 首页 > 知识库问答 >
问题:

WELD-001408:尝试@将EJB从JAR注入到WAR

魏鹤轩
2023-03-14

我和EJB 3.1有冲突,我需要在战争中使用它。JAR和WAR都单独部署在同一个JBoss上(AS 7.1)。当我在战争中给一个CDI豆注射EJB时,我得到了这个错误:

16:45:19,003 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean]
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:83)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean]
        at     org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127)
        at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346)
        at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331)
        at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366)
        at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)
        at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)

从我目前的观点来看,@Inject没有看到EJB,但是如果我使用手动JNDI查找(来自WAR),我就可以获得这个bean的实例。可以使用@inject注释从另一个JAR注入EJB吗?

WAR中的类(CDIBean),它从JAR中@Inject EJB:

@Model
public class ViewPortlet implements Serializable {
     @Inject
     TestSessionEJBLocal testBean;
}

我试图用本地和远程接口@Inject的JAR中的EJB类:

@Stateless
public class TestSessionEJBBean implements TestSessionEJB, TestSessionEJBLocal

感谢任何想法。

共有2个答案

司空学智
2023-03-14

因此,经过大量研究,唯一可行的解决方案可能是使用单独的类(EJBProducer),该类使用CDI@生成注释并隐藏JNDI查找。然后可以在应用程序中使用@Inject。唯一的问题是必须分别为每个bean编写JNDI。下面是一个例子:http://pastebin.com/3V3kKgD9

我必须感谢马丁·波拉克提出了这个解决方案。

冯亮
2023-03-14

简短的回答是:没有

JNDI查找是首选

您的WAR无法从JAR文件中看到任何内容,因为它不依赖于JAR文件。它很可能也会被另一个类加载器加载。如果将JAR添加为依赖项,它可能会工作。但是,我想您不想这样做,因为您有其他依赖于该JAR的部署。

 类似资料:
  • 我是Java EE新手。我使用Eclipse、jBoss/WildFly和Maven。我有一个多模块Maven项目: 父Maven项目(pom) 目前,EJB项目打包在Web应用程序中,整个解决方案部署为一个文件。 我想更改它:我需要将war和jar项目独立地部署到应用服务器(作为两个独立的应用程序)。然后web项目可以通过远程接口访问EJB。 问题是: 我可以使用在Eclipse中部署项目 如何

  • 问题内容: 我试图将EJB注入到Spring(3.1.2)服务中(都在不同的 WAR中)两者都非常简单(删除了方法以简化示例): EJB: Service: 事情很简单,但我尝试过: 它没有用。然后我还尝试了: and 但都没有奏效。 我设法使用以下方法注入了EJB: 在我的spring配置和服务中: 但我真的不喜欢这种解决方案。我希望在某些注释中包含我的JNDI路径,例如: 问题答案: 我们找到

  • 有没有办法将@Named bean注入Singleton? 这是需要注入的类 bean用于视图实用程序(由Forge生成) 问题是我需要从@Startup@Singleton访问 但它总是失败,并抱怨说游戏会话不是一个实体 有没有办法将命名的有状态bean注入Singleton?如果没有,有什么解决办法吗? 谢谢

  • 问题内容: 使用新的EJB 3.1规范,是否可以将EJB注入pojo?我知道在EJB 3.0中,@ EJB批注可用于注入EJB,但这不适用于简单的pojos。 如果不是,我必须在JNDI中查找bean,因为我知道您不能简单地使用new关键字。 问题答案: 是的,使用JNDI查找。 由于您的POJO是由您创建的(我假设),因此容器不负责注入依赖项。

  • CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses

  • 总结一下我失败的项目:我的类与bean一起打包在一个WAR中。xml文件。我的WAR反过来被打包在一个EAR中,这个EAR文件被部署到内部使用Tyrus的GlassFish 4服务器上。 WebSocket规范说: 在JavaEE平台中运行的WebSocketendpoint必须具有CDI规范中描述的完全依赖注入支持。WebSocket实现JavaEE平台的一部分需要支持字段、方法和构造函数注入,