Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При старте TomCat автоматически запустить класс. 
V
    Опции темы
Fameing
Дата 15.3.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Возможно ли сделать что-то подобное для того как только запускается Application или весь TomCat то и запустить какой ныбуть класс ?

В классе есть метод main() и вот его нужно запустить.

PM MAIL ICQ   Вверх
Pantein
Дата 15.3.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java developer



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.6.2005
Где: Минск

Репутация: 2
Всего: 3



...очень просто...создай сервлет, укажи в web.xml параметр load-on-startup равный 0. Пример:
Код
<servlet>
            <servlet-name>.....</servlet-name>
            <servlet-class>......</servlet-class>
            <load-on-startup>0</load-on-startup>
</servlet>

и в методе init сервлета дергай нужный тебе класс и его метод. Сервлет будет инициализироваться сразу при запуске сервера или приложения и соответственно запускать нужный тебе метод.
PM MAIL WWW   Вверх
3,14
Дата 15.3.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Боюсь, Pantein, не совсем понял задачу, так как у класса есть main() это наверняка не сервлет.

Запустить класс при запуске Tomcat просто, нужно просто добавить в bat файл строку:
java -classpath <bla-bla-bla> MyClass
А как запускать при старте webapp это ещё подумать нужно.

Не скромный вопрос, а зачем это нужно?


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Fameing
Дата 15.3.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Как сказал Pantein все заработало. 3,14 ты прав это не сервлет а простой клас.


Код

public class RTimerTask extends TimerTask {
    private static Logger logger = Logger.getLogger("simple");
    private static String time;

    public void run() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            SimpleDateFormat formadata = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
            ResultSet rset;
            condb condb = new condb();
            conn = condb.opencon("PPS3");

            String SQL = "SELECT * FROM pps_adm.safe_history_date";

            pstmt = conn.prepareStatement(SQL);

            rset = pstmt.executeQuery();

            if (rset.next()) {
                time = formadata.format(rset.getTimestamp(1));
            }

            rset.close();
        } catch (SQLException e) {
            logger.error("SQLException RTimerTask" + e);
        } finally {
            try {
                if (pstmt != null) {
                    pstmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e1) {
                logger.error("SQLException RTimerTask close() " + e1);
            }
        }
    }

    public void main() {
        Timer timer = new Timer();
        RTimerTask task = new RTimerTask();
        timer.schedule(task, 0L, 30000L);
    }

    public static String getTime() {
        return time;
    }
}



а в сервлете зделал так

Код

public class loadonstartup extends HttpServlet {

    public void init() {
         RTimerTask RTimerTask = new RTimerTask();
         RTimerTask.main();
    }

}






PM MAIL ICQ   Вверх
Fameing
Дата 15.3.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Цитата(Pantein @ 15.3.2006, 10:51)
...очень просто...создай сервлет, укажи в web.xml параметр load-on-startup равный 0. Пример:
Код
<servlet>
            <servlet-name>.....</servlet-name>
            <servlet-class>......</servlet-class>
            <load-on-startup>0</load-on-startup>
</servlet>

и в методе init сервлета дергай нужный тебе класс и его метод. Сервлет будет инициализироваться сразу при запуске сервера или приложения и соответственно запускать нужный тебе метод.

А какие есть еще параметры в <load-on-startup> ?
PM MAIL ICQ   Вверх
3,14
Дата 15.3.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Цитата(Fameing @ 15.3.2006, 11:33 Найти цитируемый пост)
а в сервлете зделал так

public class loadonstartup extends HttpServlet {

    public void init() {
        RTimerTask RTimerTask = new RTimerTask();
        RTimerTask.main();
    }

}

Это не очень хороший код, потомучто в памяти у тебя будет висеть ничего не делающий сервлет, к-ый только и сделал что запустил таймер.

Это сообщение отредактировал(а) 3,14 - 15.3.2006, 12:16


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Pantein
Дата 15.3.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java developer



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.6.2005
Где: Минск

Репутация: 2
Всего: 3



To3.14 Я правильно понял задачу smile, просто может ты меня не понял, я написал чтометод надо дергать в сервлете, а не то, что нужный класс является сервлетом, и имел в виду как раз то, что и получилось, метод main такой же обычный метод как и все и его использовать можно как и любой другой метод, и для решения в рамках одного приложения так и нужно делать, потому что создание батника немного не то что нужно, насколько я понял класс должен крутиться и выполнять опред. действие веб приложения, а не как standalone application.

Fameing параметр <load-on-startup> это order для инициализации сервлета, если этого параметра нету, то определение порядка инициализации и ее время отводится сервлет контейнеру.
PM MAIL WWW   Вверх
Fameing
Дата 15.3.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Ну а как подругому можно реализовать ? Если по таймеру лезу в базу. А то что пришло исползую на протежении 30 сек в других сервлетах и jsp.
PM MAIL ICQ   Вверх
Pantein
Дата 15.3.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java developer



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.6.2005
Где: Минск

Репутация: 2
Всего: 3



ели действие надо будет проводить постоянно, или часто, тогда, используй Quartz, тебе сюда

http://www.opensymphony.com/quartz/
PM MAIL WWW   Вверх
3,14
Дата 15.3.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



А разве нельзя это приложение запускать отдельно от web приложения, как я понял RTimerTask туда ничего не передаёт. Пусть у тебя запуск RTimerTask так же будет прописан в какой нибудь start up скрипт, обычно так делают.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Fameing
Дата 17.3.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Скорее всего RTimerTask нужно запукать всесте с приложением так-как через метод getTime() нужно получать дату и время. Или можно поместить в path class и оттуда я тоже буду получать информацию ?
PM MAIL ICQ   Вверх
3,14
Дата 17.3.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Fameing, тогда запускай таймер из какого либо существующего сервлета, а не создвай новый, это должен быть тот сервлет, к-ый использует данный таймер.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Fameing
Дата 17.3.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 21.2.2006
Где: Ukraine. Kiev

Репутация: 2
Всего: 2



Просто есть проблема в том что данние нужно получить до того когда будет использован сервлет.
PM MAIL ICQ   Вверх
alexsmirnov
Дата 19.3.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.8.2005

Репутация: 5
Всего: 7



Лучше не в сервлете, а в context Listener - запускается до всех сервлетов, не остается в памяти ( а если надо - можно поместить в servlet Context ) cm javax.servlet.ServletContextListener .
Конфигурится в web.xml или tld

PM MAIL   Вверх
FatherFrost
Дата 20.3.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: 5
Всего: 6



Fameing, наиболее правильным будет решение с листнером контекста сервлета... Потому что код, предложенный тобой выше, рабочий, но так делать не корректно...

alexsmirnov, Но листнер то как раз все время висит, но один для всех сервлетов... (ИМХО)


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.