在 CDI 项目中启动 EJB 依赖项
Starting a EJB dependency in CDI project
好吧,我需要使用@Schedule (EJB) 在crontab 中放置一个任务。我知道 CDI 没有这个(不开心),只有 EJB。我所有的 bean 都是 CDI 管理的,所以我对在这个项目中包含 EJB 有一些疑问,我希望你能帮助我:
1) 我将创建一个新的 bean 来使用 @Schedule,但是我不知道这个 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) CDI Bean inside a EJB Bean, this is possible ?
CDI && EJB 一起工作得很好。事实上,CDI 将检测 EJB bean 并将它们也转换为 CDI bean。因此,如果您创建 @Stateful
bean,它也将被拾取为 CDI bean。这意味着您将能够在那里执行任何与 CDI 相关的魔术,同时仍然具有 EJB 功能。
至于注释的选择,@Singleton
听起来很合理;或者可能 @Stateful
? @RequestScoped
只会在请求期间存活并在之后死亡,从而终止您的周期性任务。根据您的任务性质选择范围(一个 bean 与多个/短暂的与永久的/..)。只需确保 将其设为 EJB bean,CDI 就会随之而来。
2) How can i add the ejb to my pom.xml ?
假设您有 Maven 项目,添加对 EJB 的依赖 api,实现将由您的 Java EE 应用程序服务器提供。
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>${desiredVersion}</version>
</dependency>
3) If i add EJB to my project can have any conflicts ?
恐怕这个问题太笼统了;我不知道你的项目。但我会继续说 "no"。至少就CDI和EJB而言,你应该能应付得了。
好吧,我需要使用@Schedule (EJB) 在crontab 中放置一个任务。我知道 CDI 没有这个(不开心),只有 EJB。我所有的 bean 都是 CDI 管理的,所以我对在这个项目中包含 EJB 有一些疑问,我希望你能帮助我:
1) 我将创建一个新的 bean 来使用 @Schedule,但是我不知道这个 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) CDI Bean inside a EJB Bean, this is possible ?
CDI && EJB 一起工作得很好。事实上,CDI 将检测 EJB bean 并将它们也转换为 CDI bean。因此,如果您创建 @Stateful
bean,它也将被拾取为 CDI bean。这意味着您将能够在那里执行任何与 CDI 相关的魔术,同时仍然具有 EJB 功能。
至于注释的选择,@Singleton
听起来很合理;或者可能 @Stateful
? @RequestScoped
只会在请求期间存活并在之后死亡,从而终止您的周期性任务。根据您的任务性质选择范围(一个 bean 与多个/短暂的与永久的/..)。只需确保 将其设为 EJB bean,CDI 就会随之而来。
2) How can i add the ejb to my pom.xml ?
假设您有 Maven 项目,添加对 EJB 的依赖 api,实现将由您的 Java EE 应用程序服务器提供。
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>${desiredVersion}</version>
</dependency>
3) If i add EJB to my project can have any conflicts ?
恐怕这个问题太笼统了;我不知道你的项目。但我会继续说 "no"。至少就CDI和EJB而言,你应该能应付得了。