Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to implements java timer in server side?

Hello I am currently working on a middleware application

Im using JSF and primefaces and the deployment is in tomcat server ,
I was able to develop a notification system using JAVA.mail and i am using java timer to schedule the notification every 24H

For the moment it works fine when I run my main class but when i run the whole project the process of javaTimer doesn’t work and i have no idea how to make run in server side without launching the class Main

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

So i ask if should add something to make it run when i launch my project

Here my code :

public class Job1 {
    public static void main(String[] args) throws Exception {
        // execute method review_date() every 1 minute
        risk r = new risk();
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {

                try {
                    r.review_date2();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, 0, 1000 * 60);
    }
}

>Solution :

If I need app-wide resources, I usually implement the ServletContextListener, then specify it to be run in web.xml. However, swing timers likely don’t work so you’ll need a ScheduledExecutorService instead.

package mypackage;

import javax.servlet.*;

public class MainContextListener implements ServletContextListener {

    ScheduledExecutorService service;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        service = newSingleThreadScheduledExecutor();
        risk r = new risk();
        service.scheduleAtFixedRate(() -> {
            try {
                r.review_date2();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }, 0, 1, TimeUnit.DAYS);
    }
    
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        service.shutdown();
    }
}
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
 id="WebApp_ID" 
version="4.0">
  <!-- etc. -->
  <listener>
    <listener-class>mypackage.MainContextListener</listener-class>
  </listener>
</web-app>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading