问题描述
我也可以使用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.Date
到SomeEjb
,我得到部署以下异常:
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()
。