我需要安排一项任务,并且我正在使用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());
}
}
}
...然后我有另一个课程扩展了这个。
编辑:除了不能使它成为一个抽象类之外,它还不允许该类成为最终的......为什么?
答案 0 :(得分:0)
基本上你需要一个bean的实例来运行任何函数 - 在你的情况下是预定的函数。
从抽象类运行函数是不可能的,因为它是抽象的 - 容器无法创建实例来运行代码。因此,创建实例并运行方法必须是非抽象的。