3

我在这里学习教程 http://jfarcand.wordpress.com/2011/06/29/rest-websocket-applications-why-not-using-the-atmosphere-framework/

我已经使用 JBoss 7 启动并运行了一个 Jersey 项目,并且运行良好。我所拥有的一个区别是我将 Jersey 与 Spring 一起使用。所以我的 JQueryPubSub 看起来像这样

@Service  <-- For Spring component Scan
@Path("/pubsub/{topic}")
@Produces("text/html;charset=ISO-8859-1")
public class JQueryPubSub {

@PathParam("topic")
Broadcaster topic;

@GET
public SuspendResponse<String> subscribe() {
    return new SuspendResponse.SuspendResponseBuilder<String>()
            .broadcaster(topic)
            .outputComments(true)
            .addListener(new EventsLogger())
            .build();
}

@POST
@Broadcast
public Broadcastable publish(@FormParam("message") String message) {
    return new Broadcastable(message, "", topic);
}
}

所以我想添加这个例子,但我得到了

22:55:27,381 严重 [com.sun.jersey.spi.inject.Errors](MSC 服务线程 1-3)在资源和/或提供程序类中检测到以下错误和警告:严重:缺少字段依赖项: org.atmosphere.cpr.Broadcaster com.order.resources.JQueryPubSub.topic

有什么想法可以解决这个问题,为什么泽西岛似乎在积极地将价值注入广播公司?

4

2 回答 2

2

我遇到了同样的问题,并且能够通过将 jersey jar 从 1.4 更新到 1.6 来解决它。如果您使用 maven,则可以添加以下依赖项。

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.6</version>
    </dependency>
于 2012-06-12T15:26:31.640 回答
1

很长一段时间后回答..但是尝试的人仍然可以从中受益

您可以尝试以下 . 我刚试过,它对我有用

步骤 1
如果您使用的是 weblogic 12 c,请进行以下更改

function subscribe() {
        var request = {
            url :document.location.origin+'/<your-context-path>/ws/pubsub/' + getElementByIdValue('topic'),

Step-2
在 web.xml 中添加以下配置

   <servlet>
<description>AtmosphereServlet</description>
<servlet-name>AtmosphereServlet</servlet-name>
<servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>*******package name where your handler is**********</param-value>
</init-param>
<init-param>
  <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
  <param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
</init-param>
<init-param>
  <param-name>org.atmosphere.cpr.broadcastFilterClasses</param-name>
  <param-value>org.atmosphere.client.TrackMessageSizeFilter
        </param-value>
</init-param>
    <init-param>
  <param-name>WEBSOCKET_PROTOCOL_EXECUTION</param-name>
  <param-value>true</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
 <servlet-name>AtmosphereServlet</servlet-name>
 <url-pattern>/pubsub/*</url-pattern>
</servlet-mapping>

第三步

将以下代码粘贴到您在上述步骤中定义的包中的java文件中(也可以在大气的git站点中找到)

import java.io.IOException;
import org.atmosphere.client.TrackMessageSizeInterceptor;
import org.atmosphere.config.service.AtmosphereHandlerService;
import org.atmosphere.config.service.Singleton;
import org.atmosphere.cpr.AtmosphereResourceEvent;
import org.atmosphere.handler.AtmosphereHandlerAdapter;
import org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor;
import org.atmosphere.interceptor.BroadcastOnPostAtmosphereInterceptor;
import org.atmosphere.interceptor.SuspendTrackerInterceptor;
import org.atmosphere.util.SimpleBroadcaster;


@Singleton
@AtmosphereHandlerService(path = "/{chat}",
    interceptors = {
        AtmosphereResourceLifecycleInterceptor.class,
        TrackMessageSizeInterceptor.class,
        BroadcastOnPostAtmosphereInterceptor.class,
        SuspendTrackerInterceptor.class},
    broadcaster = SimpleBroadcaster.class)
public class AtmosphereHandler extends AtmosphereHandlerAdapter {

@Override
public void onStateChange(AtmosphereResourceEvent event) throws IOException {
    if (event.isSuspended()) {
        String message = event.getMessage() == null ? null : event.getMessage().toString();
        if (message != null && message.indexOf("message") != -1) {
            event.getResource().write(message.substring("message=".length()));
        } else {
            event.getResource().write("=error=");
        }
    }
}

}

现在部署它工作的耳朵..

jar 文件

atmosphere-annotations-2.1.1.jar
atmosphere-jersey-2.1.1.jar
atmosphere-runtime-2.1.1.jar
atmosphere-weblogic-2.1.1.jar
commons-collections-3.2.1.jar
commons-dbutils-1.5.jar
commons-io-2.4.jar
jersey-core-1.17.1.jar
jersey-json-1.17.1.jar
jersey-server-1.17.1.jar
jersey-servlet-1.17.1.jar
log4j-1.2.15.jar
于 2014-03-31T15:52:18.903 回答