Tomcat 10和石英

cgvd09ve  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(156)

大家好:今天我们正在运行Tomcat 9.0.5和quartz 2.3。我们想迁移到Tomcat 10,但是quartz 2.3坏了。您知道quartz 2.4是否适合Tomcat 10吗?谢谢Pietro

zd287kbt

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技巧。

9bfwbjaz

9bfwbjaz2#

解决这个问题并不难,我们所做的就是重构和重新实现QuartzInitializerListener.javaQuartzInitializerServlet.java在org.quartz.ee.servlet包中找到的www.example.com和www.example.com类,反映jakarta.servlet.* 名称空间。
例如:

@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);
        }
    }

}

相关问题