问题标签 [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.

0 投票
1 回答
5582 浏览

java - 具有非托管对象的 CDI

假设我有两个类,第一个类没有任何属性、字段或注释:

还有一个注入 B 的类,如下所示:

现在 A 类在我们使用它之前是毫无用处的,所以有两种选择:

  • @注入它
  • 使用可靠的“new A()”手动构建它

如果 A 被注入,CDI 会对其进行管理,并且会很好地注入具有 @Dependent 隐式作用域的 B。酷,正是我想要的。

但是,如果我手动构造 A(假设在工厂或构建器中),CDI 将完全忽略我的对象并且不会注入 B 类型的对象。

示例我说的是当它不起作用时,这里对象 a 将始终保持为空:

为什么这不起作用?

类 A 是一个有效的托管 bean 并且具有有效的范围,就像类 B 一样。即使我将 @Producer 添加到静态方法中,它也不会改变任何东西(这很好,因为静态方法的想法是调用它,不要在任何地方注入 Builder)。

0 投票
1 回答
3014 浏览

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 ?

0 投票
1 回答
2928 浏览

java-ee-6 - Java 6 EE 世界中的“容器管理对象”到底是什么?

我尝试将 CDI 用于在 glassfish 上运行的 struts 动作。但是java依赖注入对它不起作用。它适用于 JSF,但不适用于 struts。正如我所读到的——容器将依赖项注入到容器管理的 bean 的任何实例(由容器创建的 bean)。

那么,什么是“容器管理 bean”?任何POJO?还是只有jsf back bean、ejb-bean等?

它是如何发生的?Glassfish 有特殊的类加载器可以注入?

0 投票
2 回答
3128 浏览

jakarta-ee - weblogic 是否支持 CDI Bean?

我开始使用 weblogic 11g 版本 10.3.2.0

weblogic 支持 CDI Bean 吗?

谢谢

0 投票
3 回答
3419 浏览

gwt - GWT RequestFactory:如何为每个请求使用单个 EntityManager

为了持久RequestFactory附加的实体,我需要确保EntityManager对每个请求都使用相同的。

我基于实现拼凑了我自己的工厂类ThreadLocal,但我不确定如何正确释放资源(例如如何知道请求已经完成并调用close())。

有没有一种简单的方法来确保在整个给定的 ServletRequest 中使用单个 EntityManager 而无需求助于完整的 J2EE/CDI?如果必须的话,我会走这条路,但我希望保持简单,特别是因为我想继续使用 GWT 附带的轻量级开发服务器。

0 投票
1 回答
1622 浏览

glassfish - Glassfish 和 java:comp/BeanManager

我有部署到 glassfish 的 .war 应用程序。我想做 CDI,所以我需要从我的 POJO 中查找 java:comp/BeanManager。但它不起作用:根本找不到 BeanManager!

怎么了?

我需要在 glassfish 中启用 CDI 吗?或者它仅适用于 .ear 文件?

谢谢。

0 投票
10 回答
10494 浏览

java - Java 依赖注入:XML 或注解

注释变得流行。Spring-3 支持它们。CDI 严重依赖它们(我不能在没有注释的情况下使用 CDI,对吗?)

我的问题是为什么

我听到了几个问题:

  1. “它有助于摆脱 XML”。但是xml有什么不好呢?依赖关系本质上是声明性的,而 XML 非常适合声明(而对于命令式编程则非常糟糕)。使用好的 IDE(比如想法)很容易编辑和验证 xml,不是吗?

  2. “在许多情况下,每个接口只有一个实现”。那不是真的!我系统中的几乎所有接口都有用于测试的模拟实现。

还有其他问题吗?

现在我对 XML 的优点:

  1. 您可以在任何地方注入任何东西(不仅是具有注释的代码)

  2. 如果一个接口有多个实现,我该怎么办?使用限定词?但它迫使我的班级知道它需要什么样的注射。这不利于设计。

基于 XML 的 DI 使我的代码清晰:每个类都不知道注入,因此我可以对其进行配置并以任何方式对其进行单元测试。

你怎么看?

0 投票
1 回答
890 浏览

jsf-2 - 应用程序范围的托管 bean 死了吗?

我有一个应用程序范围的托管 bean,其主要目的是为应用程序的其余部分提供较少的动态数据,例如所有可用的语言和更多的东西。

应用控制器

这似乎工作正常。一阵子。当将应用程序单独放置一段时间(可能是一个小时)时,我会出现非常奇怪的行为。get 方法似乎要么开始返回空集合,要么返回带有看似正确但不适用于发布 selectOneMenus 的对象的集合。重新部署使其再次工作,这也使其难以进行试验,因为打开调试模式将通过重新部署使其再次工作。

什么基于时间的事件可能导致这种情况?这不是会话超时,我已经测试过将其设置为一分钟并让会话终止而不会导致此问题,它主要发生在开发服务器整晚不受干扰地运行后的早晨。所有的 EJB 都是无状态的,我无法想象它们是问题所在。可能是序列化问题吗?

我为如此分散而道歉,也许我以某种方式误解了应用程序范围 bean 的工作原理。任何帮助,将不胜感激。

0 投票
4 回答
17321 浏览

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 中,所以请记住)

曼巴核心

0 投票
1 回答
1061 浏览

jsf - 将 Weld CDI 集成到 jboss 6 AS 上的 JSF 1.2 EJB 应用程序中

从两个晚上开始,我一直在尝试将焊接 CDI 集成到带有 JSF 1.2 的 EJB 3.1 应用程序中。我只是尝试在 JSF 页面中调用带@Named注释的控制器。问题是,当我部署项目时没有抛出异常,调用页面时也没有抛出异常。

简单示例仅包含:

控制器:

它的调用:

谢谢