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

EAR中的CDI+EJB失败:未满足的依赖项

殷耀
2023-03-14

我正在尝试将两个独立的战争迁移到一个耳朵里。

运行在WebLogic 12.2.1上,所以Java EE 7(CDI 1.1和EJB 3.1)。

每个WAR都包含相同的JAR库,其中包含许多@Stateless EJB和@Named CDI托管bean:

WAR1
|- WEB-INF/lib/ejb-cdi.jar      (type=jar)
|- WEB-INF/lib/**.jar

WAR2
|- WEB-INF/lib/ejb-cdi.jar      (type=jar)
|- WEB-INF/lib/**.jar
EAR
|- WAR1.war                     (skinny, without ejb-cdi.jar)
|- WAR2.war                     (skinny, without ejb-cdi.jar)
|- ejb-cdi.jar                  (type=ejb)
|- lib/**.jar

我已经执行了几个必需的步骤:

  • 将包含ejb和CDI托管bean的ejb-cdi.jar的打包类型更改为ejb
  • 将ejb-cdi.jar配置为pom.xml中的ejbModule
  • 将WAR1和WAR2配置为pom.xml中的webModule
  • 将WAR1和WAR2配置为不带ejb-cdi.jar的skinny WAR
  • 通过使用@stateless(MappedName=“xx”)和@EJB(Beanname=“xx”)确保EJB查找成功

EJB查找工作,EAR启动。在启动期间,我的所有CDI@injects都失败,但有以下例外:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied
dependencies for type MyBean with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private my.package.Foo.myBean

我试过的:

  • 将ejb-cdi.jar添加到类路径->EJB现在定义不明确
  • 使ejb-cdi.JAR再次成为常规JAR->EJB查找完全失败
  • 将ejb-cdi.jar添加到/lib之外的不同分类器->EJB现在定义不明确

(我希望我不必重新组织JAR,因为我已经简化了情况,并且实际上有超过1个这样的组合JAR。)

要使EJB和CDI正常工作,最好的解决方案是什么?

共有1个答案

仇阳州
2023-03-14

我终于明白哪里出了问题:

一些EJB和CDI管理的bean位于同一个ejb-cdi.jar jar中。对JAR进行了一些重组,将所有EJB放入一个JAR,并将其作为ejbModule放入/中。此ejbModule不再包含任何CDI托管bean。

CDI管理的beans jar最终是在WAR内部还是在/lib中,这取决于带有skinnyWar设置的maven-war-plugin的决定,但这两种方式都起作用。

 类似资料:
  • 我正在尝试创建一个带有Wildfly和数据库连接的EJB Web项目,以持久化我的类“article”。但当我启动我的应用程序时,我得到了错误 包装服务; ArticleDaoImpl

  • 我是CDI的新手。这是我的第一个例子,我正在尝试运行它。在互联网上搜索后,我编写了以下代码:我想要注入的类 servlet 我做错了什么?

  • 我创建了一个Java项目作为其他项目的库,减少了项目之间的代码重复。这个lib项目被导出到jar以包含在Web项目中(WAR,而不是EAR)。 在Web项目中(这些类被移除),所有的类都照常工作,而所有的类都保留在这些项目上──简单和复杂对象(带有生产者和设置的对象)的注入都正常工作。 移除Web项目的这些类并将具有这些相同类的jar添加到Web项目中(在Maven项目中的pom.xml中设置此库

  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入

  • 嗨,我定义了以下限定符类型。。 还有两个实现。 我从客户那里注射。。 在运行时,每件事情都可以正常工作。。 但是当我运行单元测试时,问题就来了。。 我得到以下例外情况。。 组织。jboss。焊接例外情况。DeploymentException:WELD-001408:SortAndFilterProvider类型的未满足依赖项,在注入点[BackedAnnotatedField]@Inject@S