встроить не веб-приложение в пристани - PullRequest
3 голосов
/ 09 февраля 2011

Как я могу настроить jetty6 для запуска не веб-приложения (не сервлета)? Мое Java-приложение - это потребитель rabbitmq, прослушивающий сообщения ampq через tcp. Я мог бы вызвать причал init () для вызова моей главной точки входа. Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

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

1. Просто введите правильный код в файл jetty.xml. Файл XML является довольно полным языком исполнения, поэтому вы можете просто вызывать методы для объектов. Подходящий статический метод вместе с тегом <call> должен сделать трюк
Недостатком является то, что вы ничего не получаете от Jetty - вы просто привязываете свой метод запуска к тому же процессу запуска, который использует Jetty.

2. Создайте компонент, который реализует интерфейс Jetty LifeCycle (лучше всего расширить AbstractLifeCycle), а затем вызвать Server.addLifeCycle()
Это позволит вам открыть свой порт при запуске Jetty, аккуратно завершить работу, когда Jetty, остановится и т. Д.
Но все, что вы получаете, это тот жизненный цикл. Вы ничего не получите от развертывания.

3. То же, что и в варианте 1, но укажите его в jetty-web.xml (или jetty-env.xml), что позволяет связать его с развертыванием файла WAR.
Это не слишком выгодно для варианта 1, но если вы пытаетесь развернуть приложение на существующей установке Jetty, это может помочь.

4. То же, что и вариант 1, но с использованием jetty-web.xml. Я не уверен, насколько хорошо это будет работать, так как я не думаю, что вы можете прикрепить LifeCycle к WebAppContext, но это может сработать, хорошо - вам нужно провести дополнительное расследование по этому вопросу.

5. Согласно решению Брайана , просто напишите сервлет с методом init() и initialise-on-startup, затем не сопоставляйте его ни с какими URL-адресами. Поместите вызов вашего метода ввода внутри этого init.

2 голосов
/ 09 февраля 2011

Почему бы не предоставить тривиальный сервлет, который предоставляет метод init(), и вызвать ваше приложение изнутри?то есть, обернуть его в оболочку сервлета, которая ничего не делает.

У него нет , чтобы ответить GETs / POSTs и т. д. Хотя вы, вероятно, найдете это полезными сообщать о состоянии приложения через простую HTML-страницу.

...