CDI可以将标准库POJO注入EJB吗?

如何解决CDI可以将标准库POJO注入EJB吗?

我也可以使用EAP 6.3进行复制。

由于使用Java EE 6,最有可能发生此问题。java.util.Date位于rt.jar中,并且此JAR不包含启用CDI的bean.xml文件。您只能从包含bean.xml的JAR中注入对象。

常见的解决方法是使用生产者方法来注入此类对象。您必须自己烦扰此生产者,但是无论对象属于哪个JAR,都可以注入任意类的对象。

据我所知,行为在Java EE 7中已更改,在某些情况下,beans.xml是可选的:https ://blogs.oracle.com/theaquarium/entry/default_cdi_enablement_in_java

希望能有所帮助。

解决方法

我可以将自己的POJO注入到托管对象中,如下所示:

import javax.ejb.Stateless;
import javax.inject.Inject;
@Stateless
public class SomeEjb {
    @Inject
    private SomePojo somePojo;
}

我有这个POJO:

// No annotations
public class SomePojo {   
}

这很好。如果将EJB注入到JSF支持bean中,则可以看到somePojo,按预期,该值是非null值。

但是,如果我尝试注入java.util.DateSomeEjb,我得到部署以下异常:

Severe: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)

SomeEjb现在:

// No annotations
public class SomeEjb {
    @Inject
    private Date date;    
}

Date有一个公开的,无参数的构造函数,我认为CDI只需“满足依赖性”即可。我确信这种行为是“符合规格”的,但是显然我对CDI的理解还存在很大的漏洞。

有人可以解释为什么这行不通吗?什么之间的区别SomePojo,并java.util.Date从CDI的角度?

内容:

  • Java EE 6
  • GlassFish 3.1.2.2
  • 我没有用例。我知道我可以指定new Date()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?