我正在使用嵌入 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。
有什么想法吗?
最佳答案
我知道这可能为时已晚,但我自己刚刚遇到了这个问题,使用嵌入在 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/