Создание объекта при запуске Tomcat - PullRequest
4 голосов
/ 19 ноября 2010

У меня развернут сервер Tomcat, который получает наблюдения, переданные от датчиков в формате JSON.У меня также есть датчик, описывающий онтологию, которую я хочу использовать.

Однако я хотел бы загрузить онтологию до того, как сервер получит какие-либо наблюдения от датчиков.Как я могу создать экземпляр объекта, как только Tomcat загружен?

Ответы [ 3 ]

7 голосов
/ 19 ноября 2010

Чтобы выполнить действия при запуске или остановке приложения, вы должны использовать ServletContextListener: http://download.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

В web.xml:

<web-app>
    ...
    <listener>
        <listener-class>com.example.Listener</listener-class>
    </listener>
    ...
</web-app>

В отличие от предложения Питера Кнего, это решение переносимо на любой контейнер сервлета и не ограничивается Tomcat.

1 голос
/ 19 ноября 2010

Я предполагаю, что, строго говоря, вы хотите создать экземпляр объекта, как только ваш сервлет будет загружен Tomcat. (На самом деле не имеет никакого смысла изменять сам Tomcat для функциональности, специфичной для приложения).

В этом случае ваш класс Servlet может переопределить / реализовать метод init(ServletConfig config). Это вызывается контейнером сервлетов (в данном случае Tomcat), когда сервлет инициализируется, и это именно то место, где нужно выполнять статическую логику запуска, такую, как вы здесь упоминаете.

Фактически, сервлет даже не сможет получать соединения, пока не будет возвращен его метод init, поэтому вы можете гарантировать, что онтология будет полностью загружена до того, как поступят наблюдения от датчика.

0 голосов
/ 19 ноября 2010

Вы можете использовать прослушивателей событий , которые вызываются при загрузке веб-приложения (contex). Там вы инициализируете свои объекты и сохраняете их в ServletContext, где они будут доступны всем сервлетам в вашем приложении.

Реализация ServletContextListener и в нем contextInitialized() положить:

contextInitialized(ServletContextEvent sce){

    // Create your objects
    Object myObject = ...

    sce.getServletContext().setAttribute("myObjectKey", myObject);
} 

Затем зарегистрировать слушателя в Tomcat context.xml:

<Context path="/examples" ...>
    ...
    <Listener className="com.mycompany.mypackage.MyListener" ... >
    ...
</Context>
...