Starting a threadpool in a servlet container

后端 未结 5 885
野性不改
野性不改 2021-01-14 14:27

I have a servlet S which handles callbacks from a 3rd party site.

The callback invocations happen in a specific order. Thus, I need to queue them.

I propos

5条回答
  •  青春惊慌失措
    2021-01-14 14:44

    Using Listeners I created a ThreadPool that I can integrate with a legacy Tomcat app using the ServletContext to store the ThreadPool and let the listener manage the life cycle so it won't linger.

    @WebListener
    public class MyThreadPool implements ServletContextListener {
    
        private static final String CONTEXT_ATTRIBUTE = "MyThreadPool";
        private ExecutorService myThreadPool;
    
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            myThreadPool = Executors.newFixedThreadPool(10);
            sce.getServletContext().setAttribute(CONTEXT_ATTRIBUTE, myThreadPool);
        }
    
        public static ExecutorService getPool(Servlet servlet) {
            return (ExecutorService) servlet.getServletConfig()
                   .getServletContext().getAttribute(CONTEXT_ATTRIBUTE);
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            myThreadPool.shutdown();
            sce.getServletContext().removeAttribute(CONTEXT_ATTRIBUTE);
        }
    }
    

提交回复
热议问题