Refresh/Reload Application scope managed bean

前端 未结 1 391
时光取名叫无心
时光取名叫无心 2020-12-14 05:11

I have a problem to refresh or reload an application scoped managed bean. It behaves as cached data bean. So once data is changed on db side, i want to reload the the list i

相关标签:
1条回答
  • 2020-12-14 05:37

    Just add a method to the aplication scoped bean which does exactly that.

    public void reload() {
        list = dao.list();
    }
    

    Then grab/inject this bean in another bean and call the method.

    data.reload();
    

    Update sorry, I overlooked the "once a day" bit. You mean automatic reloading in the background? This is best to be achieved by a background thread which is managed by ScheduledExecutorService. Create a ServletContextListener like follows:

    @WebListener
    public class Config implements ServletContextListener {
    
        private ScheduledExecutorService scheduler;
    
        @Override
        public void contextInitialized(ServletContextEvent event) {
            Reloader reloader = new Reloader(event.getServletContext());
            scheduler = Executors.newSingleThreadScheduledExecutor();
            scheduler.scheduleAtFixedRate(reloader, 1, 1, TimeUnit.DAYS);
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent event) {
            scheduler.shutdownNow();
        }
    
    }
    

    Where the class Reloader look like this (assuming that the managed bean name is data)

    public class Reloader implements Runnable {
    
        private ServletContext context;
    
        public Reloader(ServletContext context) {
            this.context = context;
        }
    
        @Override
        public void run() {
            Data data = (Data) context.getAttribute("data");
            if (data != null) {
                data.reload();
            }
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题