Jakarta ee JavaEE定期数据库查询

Jakarta ee JavaEE定期数据库查询,jakarta-ee,java-ee-5,Jakarta Ee,Java Ee 5,我正在开发一个JavaEE5应用程序,我需要创建一个任务,定期查询数据库中的一些信息,然后将结果提供给jsp页面 所有页面请求的结果都是相同的,只需要定期更新。在下一次更新准备就绪之前,web组件应该可以使用给定的结果。如果请求页面时没有可用的结果,则不会显示它(页面不会等待结果)。因此,我有一个生产者查询数据库和多个消费者,他们只检查结果是否可用,如果不可用则继续 在JavaSE环境中,我只需要创建一个新线程并将结果放在一个共享的线程安全对象中,但我了解到在JavaEE容器中手动生成线程不是一

我正在开发一个JavaEE5应用程序,我需要创建一个任务,定期查询数据库中的一些信息,然后将结果提供给jsp页面

所有页面请求的结果都是相同的,只需要定期更新。在下一次更新准备就绪之前,web组件应该可以使用给定的结果。如果请求页面时没有可用的结果,则不会显示它(页面不会等待结果)。因此,我有一个生产者查询数据库和多个消费者,他们只检查结果是否可用,如果不可用则继续

在JavaSE环境中,我只需要创建一个新线程并将结果放在一个共享的线程安全对象中,但我了解到在JavaEE容器中手动生成线程不是一个好主意

因此,我的问题是:

  • 如何安排一个bean每x分钟进行一次数据库查询?计时器服务是JavaEE5的好解决方案吗

  • 与web组件共享查询结果的最佳方式是什么?我应该把它们放在servlet上下文中吗?EnterpriseBean甚至可以写入它吗


  • 我不太了解您的需求,但是定期查询是一个非常糟糕的主意,仅仅是用新信息刷新网页,这将破坏您的应用程序性能,并且将其存储在servlet上下文中甚至是最糟糕的。 您可以做的是,在创建/更新一个实体并查询该更改时,发送事件,然后您可以使用WebSocket将此信息添加到页面中,而无需刷新页面,并使用数千个性能因子,这可以通过连接的所有客户端完成,甚至可以通过位于同一主题中的客户端进行过滤

    或者,您可以使用ajax定期检查信息是否发生更改,并仅在需要时获取该信息,这不会扩展为websocket,但如果您不能使用它,这是一个更好的选择


    但是我有JavaEE6的经验,我不认为你有CDI事件和拦截器,但是你可以使用观察者模式,只是为了实现。CDI拦截器在这种情况下非常有用,因为您可以以一种集中的方式截获事件,然后处理该信息并使用任何技术发送给客户端,在这种情况下websocket最适合。

    您可以使用像Quartz这样的作业调度器,并将其嵌入jsp或servlet中