2012-02-09 9 views
5

Używam pomostu 6.1.23 w środowisku Eclipse RAP (Rich Ajax Platform 1.3.2) i Java w wersji 1.5. Wysyłam obraz PNG do przeglądarki. Są to fragmenty kodu, które powodują problemy:org.mortbay.jetty.EofException jest generowany podczas pisania do odpowiedzi

po stronie serwera:

response.setContentType(application.getMimeType(".png")); 
response.setContentLength(outputSize); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 
response.setHeader("Pragma", "no-cache"); 
response.setDateHeader("Max-Age", 0); 
ServletOutputStream servletoutputstream = response.getOutputStream(); 

servletoutputstream.write(imageBytes); // this throws EofException 

servletoutputstream.flush(); 

po stronie klienta:

<img src="path to the servlet that is loading the image"> 

Rzecz to dziwne jest to, że problem ten nie zdarzają się cały czas. Zdarza się sporadycznie po tym, jak przenieśliśmy się do produkcji. W naszym środowisku testowym nie wystąpiły żadne problemy. Jedyną różnicą między produkcją a naszym środowiskiem testowym jest to, że w środowisku produkcyjnym użytkownicy są daleko od naszych serwerów, podczas gdy w środowisku testowym są bardzo blisko.

Po zgłoszeniu wyjątku obraz nie wyświetla się wcale po stronie przeglądarki klienta! Co się dzieje? Co mogę zrobić, aby to naprawić lub co najmniej obejść?

Jest to pełna ślad wyjątek (I podkreślił najważniejsze wyjątki):

08 Feb 2012 11:49:08,955 ERROR [[email protected]] plugin.sda - 
org.mortbay.jetty.EofException 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:789) 
    at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:568) 
    at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1006) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:650) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:590) 
    at com.scotiabank.ebss.common.viewer.util.ViewerUtil.sendBytes(ViewerUtil.java:533) 
    at com.scotiabank.ebss.common.viewer.servlets.ViewerServlet.doGet(ViewerServlet.java:242) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180) 
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.io.IOException: Broken pipe 
    at sun.nio.ch.FileDispatcher.writev0(Native Method) 
    at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:61) 
    at sun.nio.ch.IOUtil.write(IOUtil.java:192) 
    at sun.nio.ch.SocketChannelImpl.write0(SocketChannelImpl.java:393) 
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:416) 
    at java.nio.channels.SocketChannel.write(SocketChannel.java:375) 
    at org.mortbay.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:232) 
    at org.mortbay.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:211) 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:712) 
    ... 27 more 
+0

Wyjątkiem jest analfabetka. Rzeczywistym problemem jest "potłuczona rura", która nie ma nic wspólnego z EOF. – EJP

Odpowiedz

2

Problem wydaje się być związane z siecią i ma niewiele do nic wspólnego z molo.

Próbujesz zapisać ilość danych w gnieździe sieciowym, które zostało zamknięte na drugim końcu. Właśnie to oznacza wyjątek Broken pipe.

Musisz dowiedzieć się, dlaczego połączenie HTTP jest nieoczekiwanie zamykane. Możliwe, że przyczyna ma coś wspólnego z Jetty, ale podejrzewam, że nie.

1

Sprawdź limity rozmiaru żądania/odpowiedzi. Spróbuj pobrać mniejszy obraz < 4k.

Powiązane problemy