嵌入式Jetty IllegalStateException:已提交

时间:2012-07-19 11:51:26

标签: java jersey embedded-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这里说执行者不如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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我知道这可能为时已晚,但我刚刚使用JPOS中嵌入的Jetty 8.x自行解决了这个问题。
写了一个测试处理程序并在HandlerCollection下快速配置它:
HandlerCollection
...的ContextHandler
... RequestLogHandler
...的 FunkyHandler

换句话说,它是最后被执行的。这对此进行了抨击:
java.lang。 IllegalStateException :org.eclipse.jetty.server.Response.getWriter中的STREAM(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尝试它,它给了我提交状态错误,与OP相同。
因此,在这里读取这些处理程序按照它们配置的顺序调用后,修复很简单{这可能也适用于您在代码中设置处理程序时}:
HandlerCollection
...的 FunkyHandler
...的ContextHandler
... RequestLogHandler

由于我没有费心阅读Jetty文档,我很确定这是在某处提到的,但现在就是这样。希望它对某人有所帮助。