Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Tomcat+java.util.Timer


Автор: bio_hazard 2.6.2009, 13:44
Никогда не работал с java.util.Timer, сегодня решил попробовать. Написал небольшой пример, вроде получилось, но появилось некоторые "особенности". Таймер запускаю из сервлета в томкате. Вот код:
Код

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Timer;

/**
 *
 * @author bio_hazard
 */
public class index extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Timer timer = new Timer();
        timerProcess task = new timerProcess();
     
        timer.schedule(task, 500, 1000);



    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}




а вот объект, экземпляр которого за пускается "по таймеру". 

Код


package testTimerJsp;

import java.util.TimerTask;

/**
 *
 * @author bio_hazard
 */
public class timerProcess extends TimerTask {

    @Override
    public void run() {
        System.out.println("15 метод");
    }

}



Запускаю все пока из нетбинса, после запуска в консоле пишется "15 метод" бесконечное кол-во раз. Это нормально, я и предпологал такую работу. Странности (на мой взгляд) начинаются потом, из томката я удаляю данное приложение. Но строки продолжают печататся. А если изменить строку на "16 метод" и заново запустить то в консоле будет "15 метод" чередоваться с "16 метод" и так до бесконечности. Такую работу я не предпологал. Кто нибуть сможет объяснить почему так происходит?

Автор: Kangaroo 2.6.2009, 14:10
Цитата(bio_hazard @  2.6.2009,  13:44 Найти цитируемый пост)
Странности (на мой взгляд) начинаются потом, из томката я удаляю данное приложение. Но строки продолжают печататся. А если изменить строку на "16 метод" и заново запустить то в консоле будет "15 метод" чередоваться с "16 метод" и так до бесконечности. Такую работу я не предпологал. Кто нибуть сможет объяснить почему так происходит? 

Если ты не останавливаешь Томкет (точнее JVM), то и таймер будет продолжать работать.

Автор: bio_hazard 2.6.2009, 14:22
Я хотел приспособить таймер для обработки писем. Но если мне понадобится допустим поменять интервал запуска, я перекомпилирую приложение, и заново задеплою его на томкат то старый таймер будет продолжать тикакть, выполняю ту же работу что и новый, чем будет вызывать конфликт ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)