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