Развертывание Java-приложения в виде сервлета - PullRequest
3 голосов
/ 17 февраля 2010

У меня есть Java-приложение, которое до сих пор запускалось как отдельное Java-приложение (то есть исполняемый файл JAR). Теперь мне нужно развернуть его в Tomcat в качестве сервлета. Хотя на самом деле он не должен обрабатывать какие-либо HTTP-запросы, но его нужно запустить с помощью tomcat.

Какие шаги необходимы для преобразования проекта, чтобы его можно было развернуть в Tomcat? Я использую Maven в качестве инструмента для сборки и Java 1.5.

Ответы [ 2 ]

6 голосов
/ 17 февраля 2010

Я понимаю, что вы хотите запустить это приложение при запуске сервера. Лучшим способом было бы реализовать ServletContextListener и запустить приложение в методе contextInitialized(). Э.Г.

public class Config implements ServletContextListener {

    private YourApp yourApp;

    public void contextInitialized(ServletContextEvent event) {
        yourApp = new YourApp();
        yourApp.start();
    }

    public void contextDestroyed(ServletContextEvent event) {
        yourApp.shutdown();
    }

}

Зарегистрируйте это в web.xml следующим образом:

<listener>
    <listener-class>com.example.Config</listener-class>
</listener>

Вот и все. Не нужно оборачивать его во вкус HttpServlet, так как вы не собираетесь запускать HTTP-запросы.

Однако вы должны убедиться, что он работает в своем собственном потоке, иначе он заблокирует запуск. Если этого не произойдет, оберните его в Runnable и выполните его, используя ExecutorService.

2 голосов
/ 17 февраля 2010

Я предполагаю, что ваше приложение постоянно работает, и у вас уже есть сервер приложений / веб-сервер (например, Tomcat / Jetty), так что это облегчает развертывание в нем вашей жизни. Учитывая это, вам необходимо:

  1. расширяет класс AbstractHttpServlet и, в частности, метод init (). Это запустит ваше приложение.
  2. построить web.xml, который ссылается на это и устанавливает атрибут загрузки при запуске равным 1 (или, по крайней мере, ненулевым)
  3. построить из этого .war и развернуть его

Шаг 2 гарантирует, что метод init() вызывается при развертывании / перезагрузке сервера, и поэтому вам не нужно отвечать на запросы HTTP (обычный запуск запуска для сервлета).

Может быть проще и уместнее использовать что-то вроде javaservicewrapper и обернуть его, чтобы он был службой Windows или подобным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...