我可以将自己的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的角度?
内容:
new Date()
。我也可以使用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
希望能有所帮助。
问题内容: 使用新的EJB 3.1规范,是否可以将EJB注入pojo?我知道在EJB 3.0中,@ EJB批注可用于注入EJB,但这不适用于简单的pojos。 如果不是,我必须在JNDI中查找bean,因为我知道您不能简单地使用new关键字。 问题答案: 是的,使用JNDI查找。 由于您的POJO是由您创建的(我假设),因此容器不负责注入依赖项。
CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses
我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。 应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中: 我的抽象类: 我的CDIBean: 当我部署应用程序并访问
问题内容: 我的配置是:Wildfly 8.2.0,焊接 是否可以在bean中而不是在CDI中的接口中注入bean? 问题答案: 是的,可以,但是当EJB注入业务视图时,您要公开的唯一业务视图是该视图,该视图是实现接口(在您的情况下是本地业务接口)时的默认视图。因此,如果要注入bean本身,则需要告诉容器您正在使用无接口视图。 在您的示例中,如果仍然要实现接口并进行注入,则应使用注释,这意味着Be
在Spring DI中,将autowired字段声明为可选字段可以使客户端不向其注入任何值。使用Java EE的CDI是否可能做到这一点?我试过可选但失败了。我想知道是否有一个等价的机制我可以使用。 下面是我尝试的: 我得到一个错误消息:线程“main”org.jboss.weld.exceptions.deploymentexception:WELD-001408在注入点[[BackedAnno
我的配置是:Wildfly8.2.0,Weld 是否可以在CDI中注入bean而不是在其接口中注入?