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


Автор: faceoff 31.12.2009, 00:13
необходимо запустить поток-демон вместе с War Deploy
не запускается и я туплю ...

делаю так:
файл инициализации для запуска
Код

package пакет;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServlet;

public class InitServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    static final DateFormat FORMAT = new SimpleDateFormat("HH:mm:ss");

    public void init() {
        log( getServletName() + " initialised\n" );
        new Daemons();
        log( "Done!\n" );
    }
    
    public void log(String msg){
        System.out.println(FORMAT.format(new Date())+": "+msg);
    }

}


web.xml
Код

<servlet>
<servlet-name>InitServlet</servlet-name>
    <servlet-class>пакет.InitServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>


тут все нормально InitServlet отрабатывает, правда 
вот строка new Daemons(); в init() методе никак себя не проявляет
т.е. никаких ошибок и никаких выводов

ниже классы реазирующие старт демонов

Код

package пакет;

public class Daemons {

      public static void main(String[] args) throws Exception {
        Thread d = new Daemon();
        System.out.println("d.isDaemon() = " + d.isDaemon());
        // Allow the daemon threads to
        // finish their startup processes:
        Thread.sleep(1000);
      }
    }


Код

package пакет;

class Daemon extends Thread {
      private Thread[] t = new Thread[10];

      public Daemon() {
        setDaemon(true);
        start();
      }

      public void run() {
        for (int i = 0; i < t.length; i++)
          t[i] = new DaemonSpawn(i);
        for (int i = 0; i < t.length; i++)
          System.out.println("t[" + i + "].isDaemon() = " + t[i].isDaemon());
        while (true)
          yield();
      }
    }

    class DaemonSpawn extends Thread {
      public DaemonSpawn(int i) {
        start();
        System.out.println("DaemonSpawn " + i + " started");
      }

      public void run() {
        while (true)
          yield();
      }
    }


так вот... сообщения    log( getServletName() + " initialised\n" ); и  log( "Done!\n" ); выводятся, а между ними пустота
хотя когда запускаю отдельно то отрабатывает main нормально

где косяк?


Автор: Joss 31.12.2009, 09:54
Цитата(faceoff @  31.12.2009,  00:13 Найти цитируемый пост)
строка new Daemons(); в init() методе никак себя не проявляет

А как она должна себя проявлять? )) В конструкторе Daemons разве что-то происходит?

Автор: faceoff 31.12.2009, 16:25
Цитата(Joss @ 31.12.2009,  09:54)
Цитата(faceoff @  31.12.2009,  00:13 Найти цитируемый пост)
строка new Daemons(); в init() методе никак себя не проявляет

А как она должна себя проявлять? )) В конструкторе Daemons разве что-то происходит?

smile в конструкторе ничего ....

а каким образом можно выполнить метод main?
я то считал, что он должен был выполниться :(

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