Если вы используете рекомендуемые процессы установки ${jetty.base}
и ${jetty.home}
для автономной Jetty , вам нужно перейти в каталог экземпляра ${jetty.base}
и включить модуль websocket
.
$ cd /path/to/mybase
$ java -jar /opt/jetty/jetty-home-9.4.14.v20181114/start.jar --add-to-start=websocket
$ grep "websocket" start.ini
--module=websocket
Теперь у вас включен веб-сокет для этого экземпляра ${jetty.base}
.
Если вы хотите, чтобы Jetty обнаружила конечные точки вашего сервера WebSocket с помощью байт-кода, сканирующего развернутые веб-приложения на наличие аннотаций, то вам также понадобится annotations
module.
$ cd /path/to/mybase
$ java -jar /opt/jetty/jetty-home-9.4.14.v20181114/start.jar --add-to-start=annotations
$ grep "annotations" start.ini
--module=annotations
После этого вы можете выполнить одно (или несколько) из следующих действий, чтобы развернуть конечные точки сервера websocket с вашим веб-приложением.
Почему это работает в автономной Jetty?Что делает автономная Jetty, чтобы сделать это возможным?
Происходит следующее:
- Модуль
websocket
добавляет lib/websocket/*.jar
к пути к классу сервера - Модуль
websocket
зависит от модулей client
и annotations
- Модуль
client
добавляет lib/jetty-client-<jetty.version>.jar
к пути к классу сервера - Модуль
annotations
добавляет lib/jetty-annotations-<jetty.version>.jar
и lib/annotations/*.jar
к пути к классу сервера - Модуль
annotations
зависит от модуля plus
- .Модуль
annotations
выбирает etc/jetty-annotations.xml
для выполнения при запуске - Модуль
annotations
добавляет модули JPMS по имени org.objectweb.asm
plus
модуль добавляет lib/jetty-plus-<jetty.version>.jar
к пути к классу сервера - Модуль
plus
выбирает etc/jetty-plus.xml
для выполнения при запуске - Модуль
plus
зависит отмодули server
, security
, jndi
, webapp
и transactions
(я пропущу остальные модули, выбранные таким образом)
Короче говоря, просто добавив websocket
модуль, вы получаете следующие записи classpath сервера
lib/websocket/*.jar
lib/jetty-client-<jetty.version>.jar
lib/jetty-annotations-<jetty.version>.jar
lib/annotations/*.jar
lib/jetty-plus-<jetty.version>.jar
и следующие XML-файлы
lib/jetty-annotations.xml
lib/jetty-plus.xml
Оба этих XML-файла просто изменяют список по умолчанию Configuration
на стороне сервераделая поведение Configuration
, которое они вводят, доступным для всех развернутых WebApps.
В качестве альтернативы можно установить Configuration
на WebAppContext
(до его запуска) для специфического поведения веб-приложения.
Пример:
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setBaseResource(Resource.newResource(rootResourceUrl));
context.setConfigurations(new Configuration[] {
new AnnotationConfiguration(),
new WebXmlConfiguration(),
new WebInfConfiguration(),
new PlusConfiguration(),
new MetaInfConfiguration(),
new FragmentConfiguration(),
new EnvConfiguration()});
handlerList.addHandler(context);
Примечание: для javax.websocket
вы должны использовать WebAppContext
, поскольку поведения, определенные для его инициализации, требуют полногоВеб-приложение для работы.Хотя вы можете использовать ServletContextHandler
с javax.websocket
конечными точками, этот стиль на 100% определяется вручную, инициализируется и объявляется без функций автоматического сканирования байт-кода / аннотаций, на которые опирается JSR-356.
Вы также можете увидеть все это из командной строки.
Показать активную ${jetty.base}
конфигурацию, каковы значения свойств XML, каков путь к классу сервера и какой XML будет выполняться (ив каком порядке !!)
$ cd /path/to/mybase
$ java -jar /opt/jetty/jetty-home-9.4.14.v20181114/start.jar --list-config
Показать список модулей и как они связаны (а также какие из них выбраны в вашей конфигурации ${jetty.base}
)
$ cd /path/to/mybase
$ java -jar /opt/jetty/jetty-home-9.4.14.v20181114/start.jar --list-modules