Какова конфигурация java/scala, необходимая для интеграции Atmosphere (версия 1.0.13)?

Я уверен, что это что-то довольно простое, но я не могу вспомнить, как сталкивается библиотека, которая имеет больше расхождений между ее документами, API и версиями. (Хотя, честно говоря, я уверен, что они существуют!) Насколько я могу судить по ресурсам, которые я просматривал, я думаю, что это довольно близко к "текущему", но я получаю сообщение об ошибке (карты No AtmosphereHandler запрос /path/to/service/point), и вам нужно небольшое руководство относительно того, что я должен попробовать дальше.

Я могу повторно опубликовать подробный вариант, но вкратце...

1) web.xml имеет эту запись сервлета (из последней версии git chat):

<servlet> <description>AtmosphereServlet</description> <servlet-name>AtmosphereServlet</servlet-name> <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class> <async-supported>true</async-supported> <init-param> <param-name>org.atmosphere.cpr.Broadcaster.supportOutOfOrderBroadcast</param-name> <param-value>false</param-value> </init-param> <!--<init-param>--> <!--<param-name>org.atmosphere.cpr.broadcasterClass</param-name>--> <!--<param-value>org.atmosphere.util.SimpleBroadcaster</param-value>--> <!--</init-param>--> <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping> <servlet-name>AtmosphereServlet</servlet-name> <url-pattern>/path/to/service/point</url-pattern>
</servlet-mapping>

2) веб-приложение имеет это определение класса (в Scala):

@AtmosphereHandlerService(path = "/path/to/service/point")
class MyCustomAtmoHandler extends AtmosphereHandler with Logging with OtherStuff { override def onRequest {...} override def onStateChange {...} override def destroy {...}

Примечание: документ, который я использовал в качестве руководства, не содержал параметр аннотации "путь", который я должен был добавить, чтобы его компилировать.

EDIT: используется версия Jetty 9.0.4.v20130625

1 ответ

Отвечая на мои собственные вопросы (в случае, если какая-то другая блуждающая единственная фигура окажется в том же положении), я должен был решить две проблемы:

1) отмените аннотацию AtmosphereHandlerService или, по крайней мере, параметр "путь". (Возможно, можно использовать аннотацию, используя остальные параметры, не уверен.)

2) добавьте файл с именем atmosphere.xml в папку META-INF, которая содержит что-то вроде:

<atmosphere-handlers> <atmosphere-handler support-session="false" context-root="/websocket/path/to/processorA" class-name="com.some.className"> </atmosphere-handler> <atmosphere-handler support-session="true" context-root="/websocket/optional/path/to/processorB" class-name="com.some.other.className"> </atmosphere-handler>
</atmosphere-handlers>

Итак... web.xml (или любой другой файл/архитектура развертывания, используемый вашим контейнером сервлетов) создает "общий" контекстный путь для всех обработчиков ALL, тогда как определенные маршруты привязаны к каждому отдельному обработчику, используя разметку atmosphere.xml. (Что-то вроде "/websocket/*" должно разрешить маршрутизацию обоих этих гипотетических обработчиков.

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

licensed under cc by-sa 3.0 with attribution.