@WebListener
public class QuartzContextListener extends QuartzInitializerListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// Scheduler are started in web.xml parm FILE
super.contextInitialized(sce);
// Get Access to the Factory
ServletContext ctx = sce.getServletContext();
factory = (StdSchedulerFactory) ctx.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY);
// Register the Listeners implemented by this Class
//addListeners();
// Default State
//SchedulerState = SchedulerStateEnum.SHUTDOWN;
// Start the Scheduler
startScheduler();
} //contextInitialized
@Override
public void contextDestroyed(ServletContextEvent sce) {
// De-Register the Listeners implemented by this Class
//removeListeners();
// Destroy Last - Order of Operation
super.contextDestroyed(sce);
} //contextDestroyed
public static void startScheduler() {
try {
if( getScheduler().isShutdown() || getScheduler().isInStandbyMode() ) {
getScheduler().start();
}
} catch(SchedulerException ex) {
throw new RuntimeException(ex);
}
}
}
2条答案
按热度按时间zd287kbt1#
Tomcat 10.0是一个Jakarta Servlet 5.0容器。这基本上意味着它使用新的
jakarta.servlet.*
包而不是javax.servlet.*
,而在9.0版本上它使用very few improvements。另一方面,它与依赖于Java EE Servlet 4.0之前的所有库(绝大多数库)二进制不兼容。
石英也不例外:即使是
master
git分支仍然使用javax.servlet
,因此正式版本将无法在Tomcat 10.0上运行。不过,您可以对代码进行分支,将类such as this中的(几乎)所有javax.*
更改为jakarta.*
,然后重新编译。就我个人而言,我看不出迁移到Tomcat 10.0有什么好处,这意味着要么放弃对Tomcat 9.0的支持,要么维护两个版本的Web应用程序,要么使用一些
ClassTransformer
技巧。9bfwbjaz2#
解决这个问题并不难,我们所做的就是重构和重新实现QuartzInitializerListener.javaQuartzInitializerServlet.java在org.quartz.ee.servlet包中找到的www.example.com和www.example.com类,反映jakarta.servlet.* 名称空间。
例如: