我正在开发一个部署在 web-sphere 应用程序服务器 8.0 上的应用程序。该应用程序在一张表中插入记录并通过 jndi 查找使用数据源。
我需要创建一个批处理作业,该作业将从上表中读取数据,并以固定的时间间隔连续插入到其他表中。它将部署在同一台 WAS 服务器上,并使用相同的 jndi 查找数据源。
我在互联网上读到,Web 领域应用程序服务器调度是一个选项,并且是使用 EJB 和 session Bean 完成的。
我还阅读了jdk的ScheduledThreadPoolExecutor。我可以创建一个具有 ScheduledThreadPoolExecutor 实现的 war ,并将其部署在 WAS 上。
我试图找出这两者在使用、复杂性、性能和可维护性方面的区别,但没有成功。
请帮助我决定哪种方法更适合为插入批处理作业创建调度程序以及原因。如果 WAS 调度程序更好,请向我提供创建和部署相同调度程序的链接。
谢谢!
最佳答案
WAS Scheduler 和 Java SE ScheduledThreadPoolExecutor 之间的一些主要区别在于,WAS Scheduler 是事务性的(任务执行可以回滚或提交)、持久性(任务存储在数据库中)并且可以跨集群成员进行协调(例如任务可以从任何成员安排,但只能在一个成员上运行)。 ScheduledThreadPoolExecutor 是一种轻量级方法,因为它没有任何这些功能,并且在单个 JVM 中完成所有调度。任务执行既不会回滚,也不会重试,并且不会保存在外部数据库中,以防服务器出现故障。应该注意的是,WebSphere Application Server 还具有 CommonJ TimerManager(以及通过 WorkManager 的 AlarmManager),如果您需要的话,它与您使用 ScheduledThreadPoolExecutor 获得的更相似。在这种情况下,应用程序服务器仍然管理线程并确保调度线程的上下文在执行线程上可用。希望这对您的决定有所帮助。
关于java - 用于插入的 WebSphere 应用程序服务器调度程序或 java 调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47070605/