问题标签 [cdi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - CDI 和 EJB 如何比较?相互影响?
我很难理解两者如何相互作用以及它们之间的界限在哪里。它们重叠吗?他们之间有冗余吗?
我知道两者都有相关的注释,但我无法找到两者的完整列表以及简要说明。不确定这是否有助于弄清楚它们的不同之处或重叠之处。
真的只是一头雾水。我(认为我)对 EJB 的理解相当不错,我想我很难准确理解 CDI 带来了什么以及它如何取代或增强 EJB 已经提供的功能。
jsf-2 - 使用 f:event 将 ConversationScoped bean 注入 ViewScoped bean
我无法将 ConversationScoped bean 注入 ViewScoped bean,因为 ConversationScoped bean 的寿命可能比 ViewScoped 的寿命短,反之亦然,具体取决于 ConversationScoped bean 是否寿命长。
为了克服这个限制,我尝试使用 f:event 作为 preRenderView 侦听器执行注入:
这不起作用,侦听器 initializeTask 和 getter getWorkPackage 都没有被调用。
我意识到我可以使用 FacesContext 从另一个托管 bean 中查找一个托管 bean,但我很好奇为什么这不起作用。是因为当我从另一个视图导航到一个视图时没有调用 f:event 侦听器吗?IE。没有重定向或直接页面查看?
我还尝试了 Seam 3 Faces 中的 s:viewAction 标签,但无济于事。它也不会被调用。
提前致谢。
glassfish - Glassfish 3.1 多模块布局的 CDI 问题
我不确定这是 Weld 或 Glassfish 中的错误,还是我做错了什么。
我有三个罐子:api、impl 和 base。这些 jar 包被打包到部署到 Glassfish 3.1 (b37) 的 war 中。结果是一个错误,指出在 impl 中的 pojo 中不满足注入点。注入失败的 pojo 在基础 jar 中。奇怪的是,我可以在我的战争中毫不费力地将同样失败的 pojo 注入到支持 bean,而且我也可以使用老式的 new 关键字手动实例化注入依赖项。
有什么想法吗?我也有基于 Maven 的测试项目,如果有人有兴趣看到它,它会复制它。
每个 jar 在 META-INF 中都有 beans.xml - 甚至战争也有 beans.xml。
- 维尔
gwt - 将 GWT 与 CDI 集成(缝/焊)
将 CDI 与 GWT 集成的最佳方式是什么?特别是,我想知道如何使依赖注入为我的 RemoteServiceServlet 扩展工作。显然 CDI 不适用于从 javax.servlet.Servlet 派生的类。如果有替代方案,我很乐意放弃 RemoteServiceServlet。
我真的不需要 GWT 客户端上的 DI,但如果它刚刚工作,我会很乐意使用它。
glassfish - Glassfish + CDI 导致 IncompatibleClassChangeError
第一次在 CDI 尝试我的手。我正在使用 Glassfish v3。当我部署我的应用程序时,出现以下故障:
java.io.IOException:com.sun.enterprise.admin.cli.remote.RemoteFailureException:加载应用程序时出现异常:org.glassfish.deployment.common.DeploymentException:java.lang.IncompatibleClassChangeError:com.example.arizona.client。 ArizonaService 和 com.example.arizona.client.ArizonaService$App 在 InnerClasses 属性上存在分歧
在 com.fuhrer.idea.glassfish.server.GlassfishServer3.doParseResponse(GlassfishServer3.java:28) 在 com.fuhrer.idea.glassfish.server.GlassfishServer3Base.parseResponse(GlassfishServer3Base.java:156) 在 com.fuhrer.idea.glassfish .server.GlassfishServer3Base.invoke(GlassfishServer3Base.java:127) 在 com.fuhrer.idea.glassfish.server.GlassfishServer3Base.handleDeployment(GlassfishServer3Base.java:78) 在 com.fuhrer.idea.javaee.server.JavaeeServerInstance$2.run( JavaeeServerInstance.java:131)
我应该提一下,我什至还没有真正使用注入或任何其他 CDI 功能。这只是试图理顺依赖关系。
dependency-injection - 我可以在石英调度程序作业中使用 CDI 注入吗?
我正在使用 Glassfish 和 CDI 进行注射,(大部分)成功。我似乎无法让 Quartz 工作与注入注释的 bean 一起工作,@Inject
从未被注入。
Quartz 是否使用了某种不同的类加载器来阻止注入的发生?
我在 web.xml 中像这样配置 Quartz:
我的quartz.properties 看起来像:
java - CDI/焊接与 JEE5 和 Tomcat6
我正在开发一个 Java EE 5 的 Web 应用程序。我可能会在某个时候将其升级到 EE 6,但目前还不能。Web 应用程序在 Tomcat 6 中运行。我可以使用 CDI 吗?
我注意到在Weld 文档中有一条说明我不能使用会话 bean:
There is a major limitation to using a servlet container. Weld doesn't support deploying session beans, injection using @EJB or @PersistenceContext, or using transactional events in servlet containers. For enterprise features such as these, you should really be looking at a Java EE application server.
这是否意味着我不能使用@SessionScoped
注释?如果是这样,那将是目前使用 CDI 的障碍。
有什么想法吗?谢谢。
java - 如何在 Servlet 中注入 ConversationScoped bean
我需要将一个ConversationScoped
bean注入一个servlet。我使用标准的简单@Inject
标记,并使用 cid 参数调用 servlet,但是当它调用注入 bean 中的任何方法时,我收到以下错误:
org.jboss.weld.context.ContextNotActiveException
:WELD-001303
范围类型没有活动上下文javax.enterprise.context.ConversationScoped
我可以在 servlet 中注入这些 bean,还是只能注入 Session 和 Request 范围的 bean?
java - Weld/CDI 的最佳调试技巧是什么?
Java EE 6 的优点之一是新的依赖注入框架 - 带有 Weld 参考实现的 CDI - 这促使我们开始以与实现无关的方式在内部迁移到 JSR-330,其明确目标是能够拥有一个被冻结的核心 jar,然后能够添加额外的 jar,提供新模块替换核心 jar 中的功能。
我现在正在与 Weld 一起完成上述工作,坦率地说,幕后的魔法实在是太多了。它要么起作用,要么不起作用,并且默认情况下它不会对发生的事情提供太多帮助,因此您可以调查错误并修复它。
我希望有一些开关可以轻松启用以下功能:
- 扫描了哪些类路径条目以及在哪里扫描?结果如何?
- 哪些 bean 可用于哪个类的注入?
- 是什么导致给定的 bean 以后不考虑?给定的罐子?
换句话说,我需要更详细地了解决策过程。出于某种原因,这不是 Guice 所需要的,也许是因为魔法少得多,也许是因为错误消息非常好。
您如何调试 Weld 应用程序,它有多大帮助?
scope - 在 CDI Weld 中查看范围
我想@ViewScoped
在我的应用程序中使用 - 范围作为某些网页的支持 bean。我还使用 CDI 将依赖项注入支持 bean。
但是,当我使用像这样注释的支持 bean
@Inject
注释不会注入任何东西,NullPointerException
一旦我访问依赖项,我就会得到一个。
然而,当我用
注入工作正常,但现在@ViewScoped
被忽略,因为它不是 CDI / Weld 的一部分。
如何@ViewScoped
与 CDI Weld 一起使用?