【问题标题】:Valid project structure in EAREAR 中的有效项目结构
【发布时间】:2016-06-17 06:50:38
【问题描述】:

我有一个打包在 .ear 文件中的应用程序。这是结构:

员工经理
|---EmployeeManagerEJB.jar
---src/                (1)
|---EmployeeManagerJSF.war/
---index.xhtml
---WEB-INF/
---类/      (2)
---lib/
|---库/
---EmployeeManagerIntegration.jar
---src/               (3)

我使用 CDI 注入位于 (2) EJB 中的类,其中接口位于 (3) 中,实现位于 (1) 中。然而,CDI 抛出异常“类型不满足的依赖项......”。我认为我的 EAR 结构有问题。我应该怎么做才能解决这个问题?

【问题讨论】:

  • 为什么内置ear中有src文件夹?你应该只在那里编译类而没有源代码。
  • 这是我为 EJB 项目配置的部署程序集:link 我想这就是你的意思

标签: java jakarta-ee cdi wildfly ear


【解决方案1】:

默认情况下,CDI 在子部署之间不起作用,因为它们不使用相同的类加载器。

  1. 您可以尝试将 CDI bean 放在 EAR/lib 文件夹中,这可能会起作用
  2. 如果所有子部署都使用 CDI,请确保其中包含 beans.xml
  3. 这没有理由成为 EAR 部署,您可以将两个 jar 放在 WAR/lib 中,一切都会正常工作
  4. 您可以通过将类路径值添加到 meta-inf/manifest.mf 来定义子部署间的依赖关系(这在容器之间有点标准,这里是 wildfly 示例:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly
  5. 或者您可以依赖您的容器实现并关闭子部署隔离(对于 Wildfly,请参阅以下内容:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly
  6. 您可以将 CDI bean 复制到使用它们的每个子部署中

【讨论】:

  • 出色的答案。你节省了我的许多工作日。我欠了非常好的啤酒:) 非常感谢你。附言。我用了第三个灵魂
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多