在CDI项目中启动EJB依赖项

时间:2016-07-10 21:10:26

标签: ejb cdi

好吧,我需要使用@Schedule(EJB)将任务放在crontab中。我知道CDI没有这个(不开心),只有EJB。我的所有bean都是CDI管理的,所以我有点怀疑在这个项目中包含EJB,我希望你能帮助我:

1)我将创建一个使用@Schedule的新bean,但我不知道这个bean是否应该使用@Singleton(EJB)或@Named + @RequestScoped(CDI)。我的意思是:

@Singleton
public class RoboFtp implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    private VideoBOImpl videoBO;

    @Schedule(...)
    public void coletarVideo(){
        //do something each 3 seconds
    }

}

请注意,我在EJB Bean中有一个CDI Bean,这是可能的吗?这上面的豆是正确的吗?

2)如何将ejb添加到我的pom.xml中?

3)如果我将EJB添加到我的项目中会有任何冲突吗?因为我的项目已经投入生产。

1 个答案:

答案 0 :(得分:1)

消除您的后顾之忧:

  

1)EJB Bean中的CDI Bean,这可能吗?

CDI&& EJB可以很好地协同工作。事实上,CDI将检测EJB bean并将它们转换为CDI bean。因此,如果您创建,请说@Stateful bean,它也将被选为CDI bean。这意味着您将能够在具有EJB功能的同时执行任何与CDI相关的魔术。

至于注释的选择,@Singleton听起来合理;或者可能@Stateful@RequestScoped只会在请求期间生存并在之后死亡,因此会终止您的定期任务。根据任务的性质选择范围(一个bean vs many / short living vs permanent / ..)。只需确保使其成为EJB bean ,然后CDI将会跟进。

  

2)如何将ejb添加到我的pom.xml中?

假设你有Maven项目,添加对EJB api的依赖,实现将由Java EE应用服务器提供。

<dependency>
  <groupId>javax.ejb</groupId>
  <artifactId>ejb-api</artifactId>
  <version>${desiredVersion}</version>
</dependency>
  

3)如果我将EJB添加到我的项目中会有任何冲突吗?

我担心的一般问题;我不知道你的项目。但是我会继续说'不是&#34;。至少就CDI和EJB而言,你应该能够处理它。