问题标签 [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
假设我有两个类,第一个类没有任何属性、字段或注释:
还有一个注入 B 的类,如下所示:
现在 A 类在我们使用它之前是毫无用处的,所以有两种选择:
- @注入它
- 使用可靠的“new A()”手动构建它
如果 A 被注入,CDI 会对其进行管理,并且会很好地注入具有 @Dependent 隐式作用域的 B。酷,正是我想要的。
但是,如果我手动构造 A(假设在工厂或构建器中),CDI 将完全忽略我的对象并且不会注入 B 类型的对象。
示例我说的是当它不起作用时,这里对象 a 将始终保持为空:
为什么这不起作用?
类 A 是一个有效的托管 bean 并且具有有效的范围,就像类 B 一样。即使我将 @Producer 添加到静态方法中,它也不会改变任何东西(这很好,因为静态方法的想法是调用它,不要在任何地方注入 Builder)。
jpa - 如果 DAO 不是无状态的,Glassfish 不会启动 EntityManager
我有一个带有 EJB 模块的 EAR 应用程序,它包含一个持久性单元和许多 EJB(作为服务和 DAO 层)。
但不推荐将 DAO 作为无状态 bean。所以我使用 CDI 创建了这个注释:
在我的 DAO 更改为不使用后@Stateless
:
但是 Glassfish 不会在应用程序启动时调出实体管理器。而当我调用 DAO 时,实体管理器处于非法状态。
java.lang.IllegalStateException:无法为 unitName null 检索 EntityManagerFactory
此错误仅发生在 Glassfish 3 中,但不会发生在 JBoss AS 6 中。使用 JBoss AS 6 我可以在启动时看到 Hibernate 日志(但在 Glassfish 中看不到它们)。
作为临时解决方案,我创建了一个具有以下内容的无状态 bean。这不是一个漂亮的解决方案,但在 Glassfish 中运行良好。
@Stateless
那么,当我不在DAO 中使用时,如何强制 Glassfish 调出 EntityManager ?
java-ee-6 - Java 6 EE 世界中的“容器管理对象”到底是什么?
我尝试将 CDI 用于在 glassfish 上运行的 struts 动作。但是java依赖注入对它不起作用。它适用于 JSF,但不适用于 struts。正如我所读到的——容器将依赖项注入到容器管理的 bean 的任何实例(由容器创建的 bean)。
那么,什么是“容器管理 bean”?任何POJO?还是只有jsf back bean、ejb-bean等?
它是如何发生的?Glassfish 有特殊的类加载器可以注入?
jakarta-ee - weblogic 是否支持 CDI Bean?
我开始使用 weblogic 11g 版本 10.3.2.0
weblogic 支持 CDI Bean 吗?
谢谢
gwt - GWT RequestFactory:如何为每个请求使用单个 EntityManager
为了持久RequestFactory
化附加的实体,我需要确保EntityManager
对每个请求都使用相同的。
我基于实现拼凑了我自己的工厂类ThreadLocal
,但我不确定如何正确释放资源(例如如何知道请求已经完成并调用close()
)。
有没有一种简单的方法来确保在整个给定的 ServletRequest 中使用单个 EntityManager 而无需求助于完整的 J2EE/CDI?如果必须的话,我会走这条路,但我希望保持简单,特别是因为我想继续使用 GWT 附带的轻量级开发服务器。
glassfish - Glassfish 和 java:comp/BeanManager
我有部署到 glassfish 的 .war 应用程序。我想做 CDI,所以我需要从我的 POJO 中查找 java:comp/BeanManager。但它不起作用:根本找不到 BeanManager!
怎么了?
我需要在 glassfish 中启用 CDI 吗?或者它仅适用于 .ear 文件?
谢谢。
java - Java 依赖注入:XML 或注解
注释变得流行。Spring-3 支持它们。CDI 严重依赖它们(我不能在没有注释的情况下使用 CDI,对吗?)
我的问题是为什么?
我听到了几个问题:
“它有助于摆脱 XML”。但是xml有什么不好呢?依赖关系本质上是声明性的,而 XML 非常适合声明(而对于命令式编程则非常糟糕)。使用好的 IDE(比如想法)很容易编辑和验证 xml,不是吗?
“在许多情况下,每个接口只有一个实现”。那不是真的!我系统中的几乎所有接口都有用于测试的模拟实现。
还有其他问题吗?
现在我对 XML 的优点:
您可以在任何地方注入任何东西(不仅是具有注释的代码)
如果一个接口有多个实现,我该怎么办?使用限定词?但它迫使我的班级知道它需要什么样的注射。这不利于设计。
基于 XML 的 DI 使我的代码清晰:每个类都不知道注入,因此我可以对其进行配置并以任何方式对其进行单元测试。
你怎么看?
jsf-2 - 应用程序范围的托管 bean 死了吗?
我有一个应用程序范围的托管 bean,其主要目的是为应用程序的其余部分提供较少的动态数据,例如所有可用的语言和更多的东西。
应用控制器
这似乎工作正常。一阵子。当将应用程序单独放置一段时间(可能是一个小时)时,我会出现非常奇怪的行为。get 方法似乎要么开始返回空集合,要么返回带有看似正确但不适用于发布 selectOneMenus 的对象的集合。重新部署使其再次工作,这也使其难以进行试验,因为打开调试模式将通过重新部署使其再次工作。
什么基于时间的事件可能导致这种情况?这不是会话超时,我已经测试过将其设置为一分钟并让会话终止而不会导致此问题,它主要发生在开发服务器整晚不受干扰地运行后的早晨。所有的 EJB 都是无状态的,我无法想象它们是问题所在。可能是序列化问题吗?
我为如此分散而道歉,也许我以某种方式误解了应用程序范围 bean 的工作原理。任何帮助,将不胜感激。
java-ee-6 - 如何将@PersistenceContext 注入 pojo 类
我正在尝试使用 @PersistenceContex 注释将 PersistenceContex 注入 POJO,我读过我需要让 POJO 设法做到这一点。所以我将我的 POJO 类注入到 servlet 中(所以它现在作为依赖对象进行管理,对吗?)但是当 servlet 试图从注入的对象调用 metod 时,我得到错误:
java.lang.IllegalStateException:无法为 unitName null 检索 EntityManagerFactory
所以看起来 PersistenceContext 没有正确注入 POJO,我应该怎么做才能让它工作?
我的 POJO 类如下所示:
注入点:
如果我使用 SLSB 并使用 @EJB 注入它工作正常。
..::更新::..
堆栈跟踪:
警告:StandardWrapperValve [ResourcesServlet]:PWC1406:Servlet ResourcesServlet 的 Servlet.service() 抛出异常 java.lang.IllegalStateException:无法在 com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper) 检索 unitName MambaPU 的 EntityManagerFactory .java:121) 在 com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:162) 在 com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:554 ) 在 pl.zawi.mamba.core.face.servlets.ResourcesServlet.doGet(ResourcesServlet.java:60) 的 pl.zawi.mamba.core.integration.controllers.implementation.FileEntityControlerImpl.retriveFile(FileEntityControlerImpl.java:32) javax.servlet.http.HttpServlet。服务(HttpServlet.java:734)在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 在 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 在 org.apache.catalina .core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641 ) 在 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 在 com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 在 org.apache.catalina.core.StandardHostValve。在 org.apache.catalina.connector.CoyoteAdapter.doService 调用(StandardHostValve.java:185)(CoyoteAdapter.java:325) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 在 com.sun.grizzly 的 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) .http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954 ) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain. java:102) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 在 com.sun.grizzly.http。HttpProtocolChain.execute(HttpProtocolChain.java:76) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 在 com.sun.grizzly .ContextTask.run(ContextTask.java:69) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java :309) 在 java.lang.Thread.run(Thread.java:662)sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.爪哇:662)sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) at java.lang.Thread.run(Thread.爪哇:662)
持久性.xml:
..::UPDATE2::..
如果有人对我的项目感兴趣,我一直在使用 maven,所以它应该很容易构建和运行。(MySql 驱动器不包含在 pom-s 中,所以请记住)
jsf - 将 Weld CDI 集成到 jboss 6 AS 上的 JSF 1.2 EJB 应用程序中
从两个晚上开始,我一直在尝试将焊接 CDI 集成到带有 JSF 1.2 的 EJB 3.1 应用程序中。我只是尝试在 JSF 页面中调用带@Named
注释的控制器。问题是,当我部署项目时没有抛出异常,调用页面时也没有抛出异常。
简单示例仅包含:
控制器:
它的调用:
谢谢