powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
5 сообщений из 5, страница 1 из 1
Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
    #32827651
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно-ли стартовать приложение без WEB интерфейса (просто class JAVA) при старте (перезапуске) Tomcat без участия пользователя?


Вопрос: Для чего это нужно?
Отвечаю: например это приложение должно периодически проделывать какую-то операцию и иметь возможность при этом обратится к ресурсам прописанным для JNDI в конфигурационном файле Tomcat ...


Electronic Insect
...
Рейтинг: 0 / 0
Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
    #32827657
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Сервлетом, - с опцией load-on-startup в состоянии включено.
2. JMX - на версии от 5.5 вроде как это возможно сделать автоматически.
3. Еще можно напридумывать... - вариантов просто масса :), но проще всего первый наверное
...
Рейтинг: 0 / 0
Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
    #32829373
GammiBear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть решение лучше

создаем класс , реализующий интерфейс javax.naming.spi.ObjectFactory
что-то в духе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
 package  servers.impl.jndi;

 import  org.apache.log4j.Logger;

 import  java.io.File;
 import  java.util.Hashtable;

 import  javax.naming.Context;
 import  javax.naming.Name;
 import  javax.naming.RefAddr;
 import  javax.naming.Reference;
 import  javax.naming.spi.ObjectFactory;

 public   class  Tm_ServerFactory  implements  ObjectFactory {
    /**
     * Logger for this class
     */
     protected   static  Logger log = Logger.getLogger(Tm_ServerPluginRegistryFactory. class );

    /**
     *  
     */
     public  Tm_ServerFactory() {
         super ();
    }

    /*
     * (non-Javadoc)
     * 
     * @see javax.naming.spi.ObjectFactory#getObjectInstance(java.lang.Object,
     *      javax.naming.Name, javax.naming.Context, java.util.Hashtable)
     */
     public  Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable theEnvironment)
             throws  Exception {
        String theName = name !=  null  ? name.toString() : "NULL!!!";
        String theCtx = nameCtx !=  null  ? nameCtx.toString() : "NULL!!!";
         if  (log.isDebugEnabled()) {
            log.debug("Tm_ServerFactory::getObjectInstance{" + theName + "/" + theCtx
                    + "}");
        }
         if  (Tm_ServerObjectProvider.isInitialized()) {
             return  Tm_ServerObjectProvider.getInstance( null ,  null ,  null );
        }  else  {
            String theCfgFile =  null ;
            String thePluginDir =  null ;
            String thePluginDataDir =  null ;
             if  (obj  instanceof  Reference) {
                Reference ref = (Reference) obj;
                RefAddr addr = ref.get(CFG_KEY_REGISTRY_CONFIG);
                 if  (addr !=  null ) {
                    theCfgFile = (String) addr.getContent();
                }
                addr = ref.get(CFG_KEY_PLUGINS_LOCATION);
                 if  (addr !=  null ) {
                    thePluginDir = (String) addr.getContent();
                }
                addr = ref.get(CFG_KEY_PLUGINS_DATA_STORAGE);
                 if  (addr !=  null ) {
                    thePluginDataDir = (String) addr.getContent();
                }
            }

             return  Tm_ServerObjectProvider.getInstance( new  File(theCfgFile),  new  File(
                    thePluginDir),  new  File(thePluginDataDir));
        }
    }

     public   final   static  String CFG_KEY_REGISTRY_CONFIG = "Server::::Config";

     public   final   static  String CFG_KEY_PLUGINS_LOCATION = "Server::::PluginsLocation";

     public   final   static  String CFG_KEY_PLUGINS_DATA_STORAGE = "Server::::PluginsDataStorage";
}

В server.xml прописываем JNDI-ресурс с параметрами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Resource auth="Container" description="Server factory" name="ServerFactory"
     type="integration.servers.ISomeInterface" />
     <ResourceParams name="ServerFactory">
      <parameter>
        <name>factory</name>
        <value>servers.impl.jndi.Tm_ServerFactory</value>
      </parameter>
      <parameter>      
        <name>Server::PluginRegistry::Config</name>
        <value>xconf/plugin.conf</value>
      </parameter>
      <parameter>
        <name>Server::PluginRegistry::PluginsLocation</name>
        <value>xplugins/plugins</value>
      </parameter>
      <parameter>
        <name>Server::PluginRegistry::PluginsDataStorage</name>
        <value>xplugins/data.storage</value>        
      </parameter>
    </ResourceParams>    


При загрузке сервака будет вызван метод getObjectInstance - в нем создать нужные экземпляры класса или поднять нужные потоки уже не трабл :)
...
Рейтинг: 0 / 0
Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
    #32829406
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hgst
1. Сервлетом, - с опцией load-on-startup в состоянии включено.
2. JMX - на версии от 5.5 вроде как это возможно сделать автоматически.
3. Еще можно напридумывать... - вариантов просто масса :), но проще всего первый наверное
По первому варианту пока не очень понятно назначение default servlet Default Servlet Reference . Вот тут ...letting tomcat start a class , что-то похожее... надо только разобраться, что есть "...class which runs as a daemon thread..." Завтра буду пробовать...
А JMX (второй вариант) тут вообще не подходит, т.к. этот class должен быть автономным и не должен никому отвечать...

Electronic Insect
...
Рейтинг: 0 / 0
Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
    #32829411
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GammiBearесть решение лучше

создаем класс , реализующий интерфейс javax.naming.spi.ObjectFactory
что-то в духе
...

При загрузке сервака будет вызван метод getObjectInstance - в нем создать нужные экземпляры класса или поднять нужные потоки уже не трабл :)

Решение интересное и возможно придется им воспользоваться, если не получится как предложено выше...

Electronic Insect
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Запуск приложения (.class) без WEB интерфейса при старте Tomcat ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]