| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > При старте TomCat автоматически запустить класс. |
| Автор: Fameing 15.3.2006, 10:24 |
| Возможно ли сделать что-то подобное для того как только запускается Application или весь TomCat то и запустить какой ныбуть класс ? В классе есть метод main() и вот его нужно запустить. |
| Автор: Pantein 15.3.2006, 10:51 | ||
...очень просто...создай сервлет, укажи в web.xml параметр load-on-startup равный 0. Пример:
и в методе init сервлета дергай нужный тебе класс и его метод. Сервлет будет инициализироваться сразу при запуске сервера или приложения и соответственно запускать нужный тебе метод. |
| Автор: 3,14 15.3.2006, 11:24 |
| Боюсь, Pantein, не совсем понял задачу, так как у класса есть main() это наверняка не сервлет. Запустить класс при запуске Tomcat просто, нужно просто добавить в bat файл строку: java -classpath <bla-bla-bla> MyClass А как запускать при старте webapp это ещё подумать нужно. Не скромный вопрос, а зачем это нужно? |
| Автор: Fameing 15.3.2006, 11:33 | ||||
Как сказал Pantein все заработало. 3,14 ты прав это не сервлет а простой клас.
а в сервлете зделал так
|
| Автор: Fameing 15.3.2006, 11:51 | ||||
А какие есть еще параметры в <load-on-startup> ? |
| Автор: Pantein 15.3.2006, 12:20 |
| To3.14 Я правильно понял задачу Fameing параметр <load-on-startup> это order для инициализации сервлета, если этого параметра нету, то определение порядка инициализации и ее время отводится сервлет контейнеру. |
| Автор: Fameing 15.3.2006, 12:21 |
| Ну а как подругому можно реализовать ? Если по таймеру лезу в базу. А то что пришло исползую на протежении 30 сек в других сервлетах и jsp. |
| Автор: Pantein 15.3.2006, 12:34 |
| ели действие надо будет проводить постоянно, или часто, тогда, используй Quartz, тебе сюда http://www.opensymphony.com/quartz/ |
| Автор: 3,14 15.3.2006, 13:03 |
| А разве нельзя это приложение запускать отдельно от web приложения, как я понял RTimerTask туда ничего не передаёт. Пусть у тебя запуск RTimerTask так же будет прописан в какой нибудь start up скрипт, обычно так делают. |
| Автор: Fameing 17.3.2006, 15:09 |
| Скорее всего RTimerTask нужно запукать всесте с приложением так-как через метод getTime() нужно получать дату и время. Или можно поместить в path class и оттуда я тоже буду получать информацию ? |
| Автор: 3,14 17.3.2006, 15:34 |
| Fameing, тогда запускай таймер из какого либо существующего сервлета, а не создвай новый, это должен быть тот сервлет, к-ый использует данный таймер. |
| Автор: Fameing 17.3.2006, 16:09 |
| Просто есть проблема в том что данние нужно получить до того когда будет использован сервлет. |
| Автор: alexsmirnov 19.3.2006, 22:06 |
| Лучше не в сервлете, а в context Listener - запускается до всех сервлетов, не остается в памяти ( а если надо - можно поместить в servlet Context ) cm javax.servlet.ServletContextListener . Конфигурится в web.xml или tld |
| Автор: FatherFrost 20.3.2006, 14:04 |
| Fameing, наиболее правильным будет решение с листнером контекста сервлета... Потому что код, предложенный тобой выше, рабочий, но так делать не корректно... alexsmirnov, Но листнер то как раз все время висит, но один для всех сервлетов... (ИМХО) |
| Автор: alexsmirnov 20.3.2006, 22:05 |
| Listener сам не висит - просто создается экземпляр класса ( class.newInstance() ) и 1 раз запускается его метод, после чего контейнер про этот экземпляр забывает - а оставлять дальше что-либо или нет - дело вкуса разработчика. |
| Автор: FatherFrost 22.3.2006, 08:48 |
| alexsmirnov, а какже тогда листнер может отлавливать событие на уничтожение (прекращение работы веб приложения). Ведь в интерфейсе javax.servlet.ServletContextListener есть два метода: contextInitialized(ServletContextEvent sce) и contextDestroyed(ServletContextEvent sce). Так что контейнер про него если и забывает, то только до коннца работы... |
| Автор: Fameing 28.3.2006, 11:10 |
| А можно примерчик как должное это виглядить чтото я немогу понять. |