集成Atmosphere(版本1.0.13)需要什么样的java / scala配置?

时间:2013-07-29 20:48:14

标签: java scala jetty atmosphere

我确信这是非常简单的事情,但我不记得遇到过它的文档,API和版本之间存在更多差异的库。 (虽然公平地说,我确信它们存在!)据我所看到的资源,我认为这非常接近“当前”,但我收到了一个错误(No AtmosphereHandler地图)请求/ path / to / service / point)并需要一些关于我接下来应该尝试的指导。

我可以重新发布详细版本,但简而言之......

1)web.xml有这个servlet条目(来自最新的?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)web-app具有此类定义(在Scala中):

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

注意:我作为指南使用的文档不包含注释参数“path” - 我必须添加它才能使其编译。

编辑: 这是使用Jetty版本9.0.4.v20130625

1 个答案:

答案 0 :(得分:1)

在回答我自己的问题时(如果其他一些游荡的鞋底发现自己处于同一位置),我必须做两件事才能解决问题:

1)删除AtmosphereHandlerService注释,或者至少删除“path”参数。 (可能可以使用其余参数来操作注释;不确定。)

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(或servlet容器使用的任何部署文件/体系结构)为所有处理程序创建“整体”上下文路径,而特定路由使用atmosphere.xml标记绑定到每个单独的Handler。 (像“/ websocket / *”这样的东西应该允许路由到这两个假设的处理程序。

从技术角度来看,可能有更好的方法来陈述这个解决方案,但希望外行人的总结能指出你正确的方向。