java - 嵌入式 jetty IllegalStateException : Committed

标签 java jersey embedded-jetty

我正在使用嵌入 Jersey 的 jetty 。我的独立 jetty 运行良好,但一段时间后开始闲置。我在 2 毫秒内给出响应。但是它开始响应 8000 毫秒。和闲置。我对它进行了分析,但找不到任何东西。我收到那个错误:

java.lang.IllegalStateException: Committed
        at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1056)
        at org.eclipse.jetty.server.Response.sendError(Response.java:273)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:509)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
        at org.eclipse.jetty.server.Server.handle(Server.java:346)
        at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
        at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1048)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:601)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214)
        at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
        at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:241)
        at org.eclipse.jetty.server.ssl.SslSocketConnector$SslConnectorEndPoint.run(SslSocketConnector.java:664)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)

我厌倦了更改线程池设置并这样做了:

 server.setThreadPool(new ExecutorThreadPool(64,256,10));

PS 1: https://groups.google.com/forum/#!msg/cometd-users/5yhMwIlRVbg/fL7V3mwWKyoJ这里说 executer 不如 jetty 的线程池好,但我不确定。

我使用:7.4.5.v20110725 jetty-servlet 和 jetty-security。

PS 2:我发现:http://grepcode.com/file/repo1.maven.org/maven2/org.eclipse.jetty/jetty-server/8.0.0.M0/org/eclipse/jetty/server/Response.java#1103

有什么想法吗?

最佳答案

我知道这可能为时已晚,但我自己刚刚遇到了这个问题,使用嵌入在 JPOS 下的 Jetty 8.x。
写了一个测试handler,在HandlerCollection下快速配置:
处理程序集合
...上下文处理程序
...请求日志处理程序
...FunkyHandler

换句话说,它是最后一个被执行的。哪个吐了这个:
java.lang.IllegalStateException: 流在 org.eclipse.jetty.server.Response.getWriter(Response.java:699) 在 com.acs.test.jetty.FunkyHandler.handle(FunkyHandler.java:26) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.Server.handle(Server.java:365)

用 OutputStream 试了一下,它给了我 Committed 状态错误,和 OP 一样。
因此,在此处的某处阅读这些处理程序按照它们配置的顺序调用之后,修复很容易{当您在代码中设置处理程序时这可能也有效}:
处理程序集合
...FunkyHandler
...上下文处理程序
...请求日志处理程序

由于我懒得去阅读 Jetty 文档,所以我很确定在某处提到了这一点,但在这里就是了。希望对某人有所帮助。

关于java - 嵌入式 jetty IllegalStateException : Committed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560265/

相关文章:

java - hibernate - 连接太多

java - 嵌入式 Jetty : how to use a . war 包含在 Jetty 启动的 .jar 中?

java - 在配置时更改 spring bean 属性

java - rJava 没有在 R 中加载

java - JAXB 和复杂 map

java - 我想使用 json 将 Listview 数据发送到 Android 中的另一个 Activity

json - 如何从 JAX-RS 客户端提取 ObjectMapper?

java - Jersey:让客户端抛出相同的服务器异常

java - 写入 http 响应对象的 OutputStream 后设置内容长度

java - Jetty 中 HTTP-Response 状态码中的 Unicodes