我正在编写一个必须在不同(可能是旧的)Java应用程序服务器上运行的简单Web应用程序。所以我不能使用最新的JEE好东西:)请在回答之前考虑一下。
该项目使用JSF 2.0
jsf-myfaces.version2.1.7
jsf-mojarra.version 2.1.7
javax.servlet 1.2
我有一个托管bean,它处理GUI请求,创建对象并使用另一个托管bean来持久保存这些对象。
@Entity
@Table (name = "HOSTS")
public class Host implements Comparable<Host>{
//...
}
@ManagedBean(name = "HostController")
@RequestScoped
public class HostController {
@PersistenceContext
private EntityManager em;
@Resource
private UserTransaction utx;
public void merge(Host host) {
//....
}
//....
}
到目前为止,一切都按计划进行。
下一个要求是每24小时运行一次的批处理作业。假设在这里:Spawning threads in a JSF managed bean for scheduled tasks using a timer我创建了一个托管bean(ApplicationScoped)并尝试将其用作计时器。 (我不能使用其他解决方案,因为目标AS可能没有提供必要的库)
批处理作业应该从数据库中获取所有Host对象并在其上运行一些任务。这些任务的结果是需要存储在数据库中的新对象。我已经有一个类似于HostController的requestScoped托管bean,可以进行数据库操作。
正如在另一个Thread中所假设的那样,实现批处理作业的类不是bean。 (上面的链接:SomeDailyJob) 因此我无法获取HostController类的实例。 (至少我不知道该怎么做)。 注意:javax.enterprise.inject.spi不可用 - 如果您认为这个软件包有帮助我需要知道提供它的最古老的JBoss和WebLogic版本。
应用程序作用域bean也无法访问HostController。 (缩短范围)