为什么使用EJB @Schedule的类不能成为抽象类?

时间:2018-04-12 18:09:35

标签: java ejb scheduled-tasks

我需要安排一项任务,并且我正在使用EJB @Schedule这样做。它工作正常,但我想我可能会尝试概括我的设计,以便我可以从一些抽象的调度程序扩展,继承某些功能,并在扩展抽象类的子类中指定其他功能。这样,当我需要执行类似操作的其他调度程序时,我不必重写一堆代码。我写了它,没有任何错误,我认为一切都很好,然后当我尝试重新启动服务器时, 我得到了:

EJB class com.schedule.SubmissionScheduler must not be defined as abstract : mcftEAR#mcftWeb.war#SubmissionSchedule在控制台中。

也许我对@Schedule注释的工作方式知之甚少,但我无法想到抽象类不会被允许的任何原因。任何见解都将不胜感激

import java.util.List;
import javax.ejb.Schedule;
import javax.ejb.Stateless;


public abstract class SubmissionScheduler {


  public abstract SubmissionScheduler getInstance();

  @Schedule(hour= "0")
  public void every24Hours() {
    // Pull all forms and submit every 24 hours
    List<Form> forms = getFormsThatAreReadyForSubmission();

    // Loop through the list of forms and submit
    if (forms != null  || !forms.isEmpty()) {
      for (Form form : forms) {
        form.getFormDao().submit());
      }
    }
}

...然后我有另一个课程扩展了这个。

编辑:除了不能使它成为一个抽象类之外,它还不允许该类成为最终的......为什么?

1 个答案:

答案 0 :(得分:0)

基本上你需要一个bean的实例来运行任何函数 - 在你的情况下是预定的函数。

从抽象类运行函数是不可能的,因为它是抽象的 - 容器无法创建实例来运行代码。因此,创建实例并运行方法必须是非抽象的。