Verbesserung
Top-Thema
Detail
Wichtig
Detail
Befindet man sich im Edit Modus und kopiert ein Bild, dann tauchen im Log immer folgende Fehler auf:
Multiple concurrent reads for the same resource: /tl-doc-app/servlet/LayoutServlet/w10aceb4863364a74/c9659/download/Koala%20-_87131.jpg com.top_logic.basic.thread.StackTrace at com.top_logic.basic.Logger.warn(Logger.java:198) at com.top_logic.base.services.simpleajax.RequestLock.enterReader(RequestLock.java:460) at com.top_logic.layout.internal.SubsessionHandler.handleCompositeContent(SubsessionHandler.java:300) at com.top_logic.layout.internal.WindowHandler.handleContent(WindowHandler.java:89) at com.top_logic.layout.internal.WindowRegistry.dispatch(WindowRegistry.java:139) at com.top_logic.layout.ContentHandlersRegistry.dispatch(ContentHandlersRegistry.java:162) at com.top_logic.layout.ContentHandlersRegistry.dispatch(ContentHandlersRegistry.java:1) at com.top_logic.layout.internal.WindowRegistry.dispatch(WindowRegistry.java:91) at com.top_logic.layout.internal.WindowRegistry.handleContent(WindowRegistry.java:85) at com.top_logic.knowledge.gui.layout.TLLayoutServlet.doGet(TLLayoutServlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at com.top_logic.util.TopLogicServlet.doService(TopLogicServlet.java:336) at com.top_logic.util.TopLogicServlet.inContext(TopLogicServlet.java:193) at com.top_logic.util.TopLogicServlet$1.inContext(TopLogicServlet.java:268) at com.top_logic.util.TLContextManager.inInteractionInternal(TLContextManager.java:243) at com.top_logic.util.TLContextManager.inInteraction(TLContextManager.java:219) at com.top_logic.util.TopLogicServlet.enterContext(TopLogicServlet.java:263) at com.top_logic.util.TopLogicServlet.service(TopLogicServlet.java:156) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1401) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) at com.top_logic.knowledge.gui.layout.HttpSecureHeaderFilter.doFilter(HttpSecureHeaderFilter.java:64) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:500) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) at java.lang.Thread.run(Thread.java:748)
Manchmal erscheint sogar ein Error:
org.eclipse.jetty.io.EofException at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283) at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422) at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381) at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:810) at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223) at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:541) at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:844) at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:916) at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:259) at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:235) at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:623) at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:253) at java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:211) at java.util.zip.GZIPOutputStream.write(GZIPOutputStream.java:145) at com.top_logic.util.filter.CompressionResponseStream.writeToGZip(CompressionResponseStream.java:322) at com.top_logic.util.filter.CompressionResponseStream.write(CompressionResponseStream.java:272) at com.top_logic.basic.io.StreamUtilities.copyStreamContents(StreamUtilities.java:252) at com.top_logic.layout.form.control.DeliverContentHandler.deliverContent(DeliverContentHandler.java:63) at com.top_logic.layout.wysiwyg.ui.StructuredTextControl.downloadFile(StructuredTextControl.java:745) at com.top_logic.layout.wysiwyg.ui.StructuredTextControl.handleContent(StructuredTextControl.java:736) at com.top_logic.layout.AbstractDispatchingContentHandler.handleContent(AbstractDispatchingContentHandler.java:35) at com.top_logic.mig.html.layout.TopLevelComponentScope.handleContent(TopLevelComponentScope.java:109) at com.top_logic.layout.CompositeHandlerAdapter.handleContent(CompositeHandlerAdapter.java:45) at com.top_logic.layout.internal.WindowHandler.handleCompositeContent(WindowHandler.java:143) at com.top_logic.layout.internal.SubsessionHandler.handleCompositeContent(SubsessionHandler.java:303) at com.top_logic.layout.internal.WindowHandler.handleContent(WindowHandler.java:89) at com.top_logic.layout.internal.WindowRegistry.dispatch(WindowRegistry.java:139) at com.top_logic.layout.ContentHandlersRegistry.dispatch(ContentHandlersRegistry.java:162) at com.top_logic.layout.ContentHandlersRegistry.dispatch(ContentHandlersRegistry.java:1) at com.top_logic.layout.internal.WindowRegistry.dispatch(WindowRegistry.java:91) at com.top_logic.layout.internal.WindowRegistry.handleContent(WindowRegistry.java:85) at com.top_logic.knowledge.gui.layout.TLLayoutServlet.doGet(TLLayoutServlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at com.top_logic.util.TopLogicServlet.doService(TopLogicServlet.java:336) at com.top_logic.util.TopLogicServlet.inContext(TopLogicServlet.java:193) at com.top_logic.util.TopLogicServlet$1.inContext(TopLogicServlet.java:268) at com.top_logic.util.TLContextManager.inInteractionInternal(TLContextManager.java:243) at com.top_logic.util.TLContextManager.inInteraction(TLContextManager.java:219) at com.top_logic.util.TopLogicServlet.enterContext(TopLogicServlet.java:263) at com.top_logic.util.TopLogicServlet.service(TopLogicServlet.java:156) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1401) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) at com.top_logic.knowledge.gui.layout.HttpSecureHeaderFilter.doFilter(HttpSecureHeaderFilter.java:64) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:500) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen at sun.nio.ch.SocketDispatcher.writev0(Native Method) at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:55) at sun.nio.ch.IOUtil.write(IOUtil.java:148) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263) ... 79 more
Wenn ein Bild kopiert wird, wird darauf von ckeditor 3 mal zugegriffen. Aktuell wird ein Bild nicht gecached, sodass unnötige Serveranfragen stattfinden.
Verbesserung
Der Cache für Bilder wurde nun mittels Cache Control im Response Header aktiviert. Dadurch wird nicht bei jedem Zugriff auf das Bild eine Serveranfrage verschickt.
Test
Muss vor allem auf Chrome durchgeführt werden, da hier die meisten Probleme entstanden sind! Auf einer Seite, die ein Bild enthält, in den Edit Modus wechseln. Zusätzlich noch die Developertools öffnen und auf den Network Tab gehen, um die Requests im Blick zu behalten (ggf. den Haken bei "Disable Cache" noch entfernen). Dann das Bild kopieren (ohne es wieder einzufügen). In den Developertools überprüfen, ob Requests gesendet wurden oder das Bild aus dem Cache geladen wurde. Außerdem darf keine Fehlermeldung zum RequestLock auftauchen.