2015-11-13 47 views
-1

嗨我有一個問題,注入一個普通的Java類(Pojo類)到EJB bean。CDI無法注入pojo java類。 (類型Pojo的不滿意的依賴性與限定條件@Default)

@ApplicationScoped 
public class DomainRouteFinderService { 

    @Inject 
    private Pojo pojo; 

    private AtomicInteger sequencer; 

    @PostConstruct 
    private void init(){ 
     sequencer = new AtomicInteger(); 
     sequencer.lazySet(0); 
    } 

    @Produces 
    @Named("sequencer") 
    public String getText(){ 
     return "Number: "+ sequencer.getAndIncrement(); 
    } 
} 

POJO類:

public class Pojo { 
} 

在我的多項目中包含結構:

根 - 耳

  1. EJB
  2. 網絡

Web模塊依賴於ejb。

在Web模塊的beans.xml豆發現模式=「所有」

回答

-1

我加入另一個的beans.xml到EJB解決我的問題。 我把這個文件放到 main/java/resources/META-INF本地化。

爲什麼?

CD 1.1/Java EE 7中最重要的變化之一是通過 受歡迎的請求,CDI現在默認啓用。這意味着 不需要顯式添加beans.xml來啓用DI。 但是,理解CDI現在也可以通過 'bean-discovery-mode'屬性爲組件掃描提供更精細的控制,這也是非常重要的。這個屬性有三個可能的 值:

'annotated' - loosely translated, means that only components with a class-level annotation are processed. 
'all' - all components are processed, just like they were in Java EE 6 with the explicit beans.xml. 
'none' - CDI is effectively disabled. 

默認情況下,如果你指定什麼也沒有beans.xml中的「註釋」,而不是「全部」假定豆 發現模式。

但我想爲ejb模塊和war模塊的beans.xml。

+1

CDI是爲每個模塊單獨配置的,就是這樣。您不要將另一個beans.xml添加到ejb模塊中,插入Pojo的唯一方法是使用'@ Dependent'註釋對其進行註釋 - 這是默認範圍CDI bean,但您需要明確以便CDI認爲您的POJO作爲一個bean,沒有額外的beans.xml。如果你不能修改你的Pojo,你可以爲它創建一個CDI製作者。 – OndrejM

+0

所以我的解決方案可以嗎? – KamilJ

+1

你真的需要部署爲EAR嗎?您現在可以在WAR文件內部署您的EJB。 –