EAR 中的有效项目结构
Valid project structure in EAR
我有一个打包在 .ear 文件中的应用程序。这是结构:
员工经理
|---EmployeeManagerEJB.jar
---src/ (1)
|---EmployeeManagerJSF.war/
---index.xhtml
---WEB-INF/
---类/ (2)
---库/
|---库/
---EmployeeManagerIntegration.jar
---src/ (3)
我使用 CDI 注入位于 (2) EJB 中的 类,接口在 (3) 中,实现在 (1) 中。然而,CDI 抛出异常“类型不满足的依赖关系......”。我假设我的 EAR 结构有问题。我应该怎么做才能解决这个问题?
默认情况下,CDI 在子部署之间不起作用,因为它们不使用相同的 classloader。
- 您可以尝试将 CDI bean 放在 EAR/lib 文件夹中,这可能有效
- 确保所有子部署都包含 beans.xml 如果它们使用 CDI
- 没有理由将其作为 EAR 部署,您可以将两个 jar 放入 WAR/lib 并且一切正常
- 您可以通过将 class-path 值添加到 meta-inf/manifest.mf 来定义子部署间的依赖关系(这在容器之间有点标准,这里是 wildfly 示例:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly )
- 或者您可以依靠您的容器实现并关闭子部署隔离(对于 wildfly,请参见以下内容:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly)
- 您可以将 CDI bean 复制到使用它们的每个子部署
我有一个打包在 .ear 文件中的应用程序。这是结构:
员工经理
|---EmployeeManagerEJB.jar
---src/ (1)
|---EmployeeManagerJSF.war/
---index.xhtml
---WEB-INF/
---类/ (2)
---库/
|---库/
---EmployeeManagerIntegration.jar
---src/ (3)
我使用 CDI 注入位于 (2) EJB 中的 类,接口在 (3) 中,实现在 (1) 中。然而,CDI 抛出异常“类型不满足的依赖关系......”。我假设我的 EAR 结构有问题。我应该怎么做才能解决这个问题?
默认情况下,CDI 在子部署之间不起作用,因为它们不使用相同的 classloader。
- 您可以尝试将 CDI bean 放在 EAR/lib 文件夹中,这可能有效
- 确保所有子部署都包含 beans.xml 如果它们使用 CDI
- 没有理由将其作为 EAR 部署,您可以将两个 jar 放入 WAR/lib 并且一切正常
- 您可以通过将 class-path 值添加到 meta-inf/manifest.mf 来定义子部署间的依赖关系(这在容器之间有点标准,这里是 wildfly 示例:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly )
- 或者您可以依靠您的容器实现并关闭子部署隔离(对于 wildfly,请参见以下内容:https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly)
- 您可以将 CDI bean 复制到使用它们的每个子部署