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


Автор: Foli 1.11.2007, 15:02
Привет народ. 

Помогите начинающему. :(

Задача:  Как сделать Servlet чтобы он работал столько сколько и WebServer?

Я создал проект в NB добавил Servlet и в WEB.xml прописал у него  <load-on-startup>1</load-on-startup>
Это значит он будет работать всё время? 

В голове всё перемишалось после Delphi. Нучто чтобы этот сервлет запускал поток и всё время кое что в потоке делал. 

Прошу разьясните что и как?

Автор: Се ля ви 1.11.2007, 15:54
Цитата(Foli @  1.11.2007,  15:02 Найти цитируемый пост)
Нучто чтобы этот сервлет запускал поток и всё время кое что в потоке делал. 

Что делал? Ты уверен, что тебе нужен именно сервлет? Вообще-то он для других целей...

Автор: Foli 1.11.2007, 18:25
Есть сенсор который подключён к ком порту. нужно егов всё время слушать. и записывать данные в БД.
По уму я думаю нужно сделать отдельное приложение которое будет работать не зависимо от вэб сервера. 
Типа swing клиента, который будет общаться с сервисом который слушает порт. 

Но тут задача именно сделать это всё без swinga. Вот запусстил web проект а там можно запустить поток в сервлете. 
На сайте можно глянуть что там с потоком и так далие. Поток должен работать всегда. 


Я понимаю что всё это будет работать пока работает вэб сервер. Но так хотят. 

Автор: DEER 1.11.2007, 18:50
Я так и делал правда юзал не сервелт а листенер
в contextInitialized создаешь поток
в contextDestroyed его убиваешь
Код

public class MsgListener implements ServletContextListener, Runnable {
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        log.info("Start message server");
        thread = new Thread(this, ("Message server"));
        thread.start();
    }
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        if(thread != null) {
            Thread threadToStop = thread;
            try {
                work = false;
                threadToStop.join(20 * 1000); //wait 10 seconds until send thread dies
                if(threadToStop.isAlive()) {
                    log.warn("Timeout expired for \" Message server\" thread. Interrupt them");
                    threadToStop.interrupt();
                }
            } catch (InterruptedException e) {
                if(threadToStop.isAlive())
                    threadToStop.interrupt();
            }
            finally {
            }
        }
    }
    public void run() {
        do {
            try {
                Thread.sleep(15 * 1000);
            } catch (Exception e) {
                work = false;
            }
            //Что надо делать
        } while (work);
    }
}

web.xml
Код

    <listener>
         <listener-class>ru.MsgListener</listener-class>
    </listener>

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