2011-09-07 100 views
3

上发布订阅例如获取错误我正在关注的教程这里 http://jfarcand.wordpress.com/2011/06/29/rest-websocket-applications-why-not-using-the-atmosphere-framework/使用大气+新泽西

我已经有一个项目新泽西州启动和运行,并使用JBoss 7.一个区别,我有是我很好的工作使用泽西与春天。所以我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:27381严重[com.sun.jersey.spi.inject.Errors(MSC服务线程1-3)与资源 和/或供应商类已检测到以下错误和警告: 重度:现场缺少相关性:org.atmosphere.cpr.Broadcaster com.order.resources.JQueryPubSub.topic

任何想法我怎么能解决这个问题,以及为什么泽西似乎积极地向广播公司注入价值? ?

+0

我不知道,如果弹簧或球衣是这里的问题。 你有更多的日志输出显示吗? – Christian

回答

2

我有同样的问题,并能够通过更新泽西罐从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> 
1

接听后不久time..but人谁试图仍然可以采取一些优势,这项

,你可以用下面的尝试。 我只是想和它的工作对我来说

第1步
如果您使用的是WebLogic 12c分别作如下改动

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

步骤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> 

step- 3

粘贴到您在上述步骤中定义的包的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