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

CDI和EJB真的兼容吗?

杨君之
2023-03-14

我目前在Wildfly 8.2上面临EJB3.1和CDI1.2的一些问题。0.5决赛。我认为CDI和EJB并不是完全可互操作的,因为web上到处都有这样的建议。

我的设置如下所示:

EAR A
  |
  +- JAR A.1 (containing some Stateless Session Beans)
  +- JAR A.2 (containing some persistence things)

EAR B
  |
  +- JAR B.1 (containing some classes that use A.1)

进一步资料:

  • A.1的会话bean使用@EJB注入同一模块的其他会话bean
  • CDI为A.1激活
  • EARB有一个jboss部署结构。声明从B.1到a.1的依赖关系的xml,aso
  • CDI已为B.1激活
  • 为了避免显式查找的需要(@EJB(lookup=“java:global/…)对于模块B.1中的依赖注入,模块A.1的会话bean(DAO)的注入应使用CDI的@Inject完成

现在有两个核心问题:

  • 如果模块A.1包含持久性。xml和激活的CDI,CDI会在我尝试部署具有依赖项B.1的模块B时抱怨缺少持久性单元-
  • 会话bean的类似乎是使用CDI而不是EJB实例化的

是否有人知道如何解决这些问题,或者是什么导致了这种行为?

谢谢!

共有1个答案

唐弘和
2023-03-14

理论上,您可以让EAR A依赖于EAR B(通过向deployment.EAR.B或其他内容添加模块依赖项,使用jboss-deployment-structure.xml)。如果EARB的META-INF包含CDI激活文件(beans.xml),EARA可能会从EARB注入依赖项。

在JBoss AS7和WildFly 8中,部署在大多数情况下都可以被视为“普通”模块。

 类似资料:
  • 我在WebSphere上部署了一个应用程序,它使用jdk 1.5和ejb 2.1技术。我必须将其迁移到Jboss eap 6.4和JDK 1.8。我可以继续使用ebj 2.1版本吗?谢谢 RB

  • 问题内容: Java EE7由一堆“ bean”定义组成: 托管Beans 1.0(JSR-316 / JSR-250) Java 1.0的依赖注入(JSR-330) CDI 1.1(JSR-346) JSF托管Beans 2.2(JSR-344) EJB 3.2(JSR-345) 为了摆脱头脑中的混乱,我研究了几篇“何时使用哪种bean类型”的文章。 EJB 的优点之一似乎是 它们仅支持声明式容

  • 问题内容: 我尚未遇到任何与序列化相关的问题。但是PMD和Findbugs发现了一系列关于序列化的潜在问题。典型的情况是注入的记录器被检测为不可序列化。但是还有更多- 还有几个CDI bean。 我还没有找到有关如何正确处理序列化的最佳实践。 反序列化注入的和注入的字段是否会被注入? 应该将它们标记为吗? 还是应该忽略/关闭代码检查? 我真的应该按照PMD的建议为所有这些字段提供访问者吗? 问题答

  • 问题内容: 我很难理解两者之间的相互作用以及两者之间的界线。它们重叠吗?它们之间是否有冗余? 我知道两者都有相关的批注,但是我还没有找到简短说明的完整列表。不知道这是否有助于弄清它们之间的差异或重叠之处。 真的只是糊涂了。我(认为我)相当了解EJB,我想很难确切地了解CDI给表带来了什么,以及它如何取代或增强EJB已经提供的功能。 问题答案: CDI: 关于依赖注入。这意味着您可以在任何地方注入接

  • 我的项目计划使用SSO(可能使用Gluu或Auth0,…)并且正在考虑将GraphQL应用到我们的API中。 乍一看,这两个应该很容易兼容,因为它们在不同的层上工作。但是我仍然想听听有这两个方面经验的人在将它们应用于项目时是否有任何问题、考虑因素或指导方针?

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