看来我们使用Quartz-JDBCJobStore以及Spring,Hibernate和Websphere的实现抛出了非托管线程。
我读了一些书,发现IBM的一篇技术文章指出将Quartz与Spring结合使用会导致这种情况。他们提出使用CommnonJ解决此问题的建议。
我进行了一些进一步的研究,到目前为止,我所看到的唯一示例都处理了不在数据库中的旧JobStore计划。
因此,我想知道是否有人有解决此问题的示例。
谢谢
我们有一个可行的解决方案(实际上有两个)。
1)更改石英源代码,以将WorkManager守护程序线程用于主调度程序线程。它可以工作,但需要更换夸脱。不过我们没有使用它,因为我们不想维护被黑的石英版本。(这使我想起了,我打算将其提交给项目,但完全忘记了)
2)创建一个WorkManagerThreadPool用作石英线程池。实现石英ThreadPool的接口,以便在石英中触发的每个任务都包装在commonj Work对象中,然后将在WorkManager中调度该对象。关键是必须在启动调度程序之前从Java EE线程(例如Servlet初始化)初始化WorkManagerThreadPool中的WorkManager。然后,WorkManagerThreadPool必须创建一个守护程序线程,该线程将通过创建和调度新的Work对象来处理所有调度的任务。这样,调度程序(在其自己的线程上)将任务传递到托管线程(工作守护程序)。
不简单,不幸的是,我没有包含的代码。