2015-11-13 48 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。 –