1

既存の残りのリソース内で AtmosphereResource を取得するにはどうすればよいですか...
私はこれを試しました:

雰囲気.xml

<atmosphere-handlers>
    <atmosphere-handler context-root="/*"
        class-name="org.atmosphere.handler.ReflectorServletProcessor">
        <property name="servletClass"
            value="com.sun.jersey.spi.container.servlet.ServletContainer" />
    </atmosphere-handler>
</atmosphere-handlers>

web.xml

<servlet>
        <servlet-name>jaxrs</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.atmos.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jaxrs</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <init-param>
            <param-name>org.atmosphere.cpr.Broadcaster.supportOutOfOrderBroadcast</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
            <param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
        </init-param>
        <!-- Reduce memory usage by sharing ExecutorServices -->
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.shareableThreadPool</param-name>
            <param-value>true</param-value>
        </init-param>
        <!-- Automatically free Broadcaster objects when the last client on the 
            Broadcaster's channel disconnects -->
        <init-param>
            <param-name>org.atmosphere.cpr.broadcasterLifeCyclePolicy</param-name>
            <param-value>EMPTY_DESTROY</param-value>
        </init-param>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.maxProcessingThreads</param-name>
            <param-value>50</param-value>
        </init-param>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.maxAsyncWriteThreads</param-name>
            <param-value>50</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <!-- Any mapping -->
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

私の残りのリソース

@GET
@Path("/receive")
public Response receive() {
   AtmosphereResource atmosphereResource = (AtmosphereResource) req.getAttribute("org.atmosphere.cpr.AtmosphereResource"); //Here the atmosphereResource is null
   // suspend the response
   atmosphereResource.suspend(timeout, TimeUnit.MINUTES);
   return Response.ok().build();
}

上記のコードでは、残りのリソースを呼び出すときに、atmosphereResource変数を null として取得しています。
web.xmlまたはatmoment.xmlのいずれかで何か間違っている可能性があると思います。
アプリケーションの既存の残りのリソース内で Atmosphere-runtime を使用したいと考えています。
どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

1

このドキュメントによると:

Jersey リソースに Atmosphere コンポーネントを注入する必要がある場合があります。以下のコンポーネントは、@Context、@PathParam @QueryParam、@MatrixParam、@HeaderParam、@CookieParam、@FormParam などのアノテーションを使用して注入できます。

注入できます:AtmosphereResource、Broadcaster、BroadcasterFactory

@Context AtmosphereResource resource
@PathParam
public String inject(@PathParam("test") Broadcaster broadcaster) {
  ...
}
于 2013-06-27T15:06:46.317 に答える