Can';t使用Jersey和Tomcat 7订阅服务器发送的事件

Can';t使用Jersey和Tomcat 7订阅服务器发送的事件,jersey,tomcat7,servlet-3.0,jersey-2.0,server-sent-events,Jersey,Tomcat7,Servlet 3.0,Jersey 2.0,Server Sent Events,我正在使用jersey 2.41/Java 7/tomcat 7部署服务器发送的事件资源 我得到的错误是 2013年12月16日上午4:04:40 org.apache.catalina.core.StandardWrapperValve 在中为Servlet[ServletAdapter]调用SEVERE:Servlet.service() 路径为[/trackapp]的上下文引发异常 [java.lang.UnsupportedOperationException:异步处理不可用 Servl

我正在使用jersey 2.41/Java 7/tomcat 7部署服务器发送的事件资源

我得到的错误是

2013年12月16日上午4:04:40 org.apache.catalina.core.StandardWrapperValve 在中为Servlet[ServletAdapter]调用SEVERE:Servlet.service() 路径为[/trackapp]的上下文引发异常 [java.lang.UnsupportedOperationException:异步处理不可用 Servlet 2.x容器上支持。]有根本原因 java.lang.UnsupportedOperationException:异步处理不可用 Servlet2.x容器上支持。在 org.glassfish.jersey.servlet.WebComponent$3.suspend(WebComponent.java:123) 在 org.glassfish.jersey.servlet.internal.ResponseWriter.suspend(ResponseWriter.java:109) 在 org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:619) 在 org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:381) 在 org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:371) 在 org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262) 在org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)上 org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)在 org.glassfish.jersey.internal.Errors.process(Errors.java:315)位于 org.glassfish.jersey.internal.Errors.process(Errors.java:297)位于 org.glassfish.jersey.internal.Errors.process(Errors.java:267)位于 org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:318) 在 org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236) 在 org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:983) 在 org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:361) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335) 在 org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:744)

我的资源

@POST
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_JSON)
公共字符串广播消息(字符串消息){
OutboundEvent.Builder eventBuilder=新建OutboundEvent.Builder();
OutboundEvent=eventBuilder.name(“消息”)
.mediaType(mediaType.TEXT\u PLAIN\u TYPE)
.data(String.class、message)
.build();
广播员。广播(活动);
System.out.println(“广播监听[“+消息+”]);
return“Message was'”+Message+“'广播。”;
}
@得到
@产生(SseFeature.SERVER\u SENT\u事件)
@路径(“/listen”)
公共事件输出listenToBroadcast(){
System.out.println(“将侦听”);
final EventOutput EventOutput=新的EventOutput();
this.broadcaster.add(eventOutput);
返回事件输出;
}
web.xml


伺服适配器
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
net.jigarshah.mse.tracker
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
伺服适配器
/webapi/*
30
客户端JS


变量url=”http://localhost:8080/trackapp/webapi/broadcast/listen";
var source=新事件源(url);
source.onerror=函数(事件)
{
控制台日志(“错误”);
};
source.onmessage=函数(事件)
{
console.log(事件数据);
document.getElementById(“结果”).innerHTML+=event.data+“
”; }; 测试
一种可能性是检查此处列出的maven依赖项

您也可以通过泽西岛邮件列表中的这封邮件进行检查


希望这有帮助。

我也遇到了同样的问题,我的问题是我使用了错误的jersey servlet实现。添加替换

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet-core</artifactId>
</dependency>

马文的问题就在这里。在maven依赖中从-core更改。但我仍然无法使SSE工作。
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
</dependency>