ApplicationScoped ManagedBean作为Timer / Scheduler,缩短范围问题

时间:2013-12-30 19:01:48

标签: java jsf scope lookup pojo

我正在编写一个必须在不同(可能是旧的)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。 (缩短范围)

0 个答案:

没有答案
相关问题