簡體   English   中英

CDI可以將標准庫POJO注入EJB嗎?

[英]Can CDI inject standard library POJOs into an EJB?

我可以將自己的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的理解存在很大漏洞。

有人可以解釋為什么這不起作用? 從CDI角度看SomePojojava.util.Date有什么區別?

語境:

  • Java EE 6
  • GlassFish 3.1.2.2
  • 我沒有這方面的用例。 我知道我可以指定new Date()

我也可以使用EAP 6.3重現這一點。

問題最有可能是因為使用Java EE 6. java.util.Date位於rt.jar中,並且此JAR不包含將啟用CDI的beans.xml文件。 您只能從包含beans.xml的JAR中注入對象。

常見的解決方法是使用生產者方法來注入此類對象。 你必須親自對這個生產者進行研究,但是你可以從任意類中注入對象,而不管它們屬於哪個JAR。

據我所知,Java EE 7中的行為發生了變化,其中beans.xml在某些情況下是可選的: https//blogs.oracle.com/theaquarium/entry/default_cdi_enablement_in_java

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM