【问题标题】:Embedded Jetty IllegalStateException: Committed嵌入式码头 IllegalStateException:已提交
【发布时间】:2012-07-18 14:29:19
【问题描述】:

我正在使用嵌入球衣的码头。我的独立码头运行良好,但一段时间后它开始闲置。我在 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 这里说执行器不如码头的线程池,但我不确定。

我使用: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

有什么想法吗?

【问题讨论】:

标签: java jersey embedded-jetty


【解决方案1】:

我知道可能为时已晚,但我自己也遇到了这个问题,使用 JPOS 下嵌入的 Jetty 8.x。
写了一个测试处理程序,并在 HandlerCollection 下快速配置:
处理程序集合
...上下文处理程序
...RequestLogHandler
...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 尝试过,它给了我提交状态错误,与 OP 相同。
因此,在此处阅读到这些处理程序按配置顺序调用后,修复很简单{这可能在您在代码中设置处理程序时也有效}:
处理程序集合
...FunkyHandler
...上下文处理程序
...RequestLogHandler

由于我没有费心阅读 Jetty 文档,我很确定在某处提到了这一点,但在这里。希望它可以帮助某人。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2015-03-18
    • 2014-02-25
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2011-04-13
    相关资源
    最近更新 更多