我们有一个WebLogic应用程序,提供PDF文件(以及许多其他东西)。
我们遇到了问题,有时某些文件在使用Internet Explorer加载时似乎会失败。
- 网络逻辑版本 10.3.3.0
- IE 8.0测试到目前为止是积极的
- 火狐浏览器也有问题
- 可能是有些文件在IE上有问题,但在Firefox上没有问题(不是100%确定)
- 似乎发生在不同计算机的某些文件(至少几次)上
- 大多数文件工作正常
- PDF 文件是预先生成的,可在文件系统中使用。
在这些错误中,我们得到以下堆栈跟踪:
####<Aug 16, 2012 10:30:26 AM EEST> <Error> <HTTP> <host-name> <Front2S> <[ACTIVE] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1345102226691> <WL-101019> <[ServletContext@454961994[app:appname module:modulename path:/pathname spec-version:2.5]] Servlet failed with IOException
java.io.IOException: failed to read '2607' bytes from InputStream; clen: 162774 remaining: 2607 count: 1359
at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:417)
at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:178)
at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:520)
at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:508)
at weblogic.servlet.FileServlet.sendFile(FileServlet.java:410)
at weblogic.servlet.FileServlet.doGetHeadPost(FileServlet.java:234)
at weblogic.servlet.FileServlet.service(FileServlet.java:173)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
...
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:151)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:238)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:168)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
通过一些谷歌搜索,我发现如果在传输过程中修改文件,可能会发生这样的事情。
- 至少我们看不到这是怎么发生的(生成文件的脚本在晚上运行,错误在白天出现)
- 对于特定文件,这种情况也会多次发生
很久以前,我们在 WebLogic 文件元数据缓存方面遇到了类似的问题,但禁用元数据缓存可以解决这个问题。
<wls:container-descriptor>
<wls:resource-reload-check-secs>0</wls:resource-reload-check-secs>
</wls:container-descriptor>
一些想法?
Br, 东子
关于错误原因,您是对的。在读取文件时修改文件时,会发生此问题。
您的资源重新加载检查秒配置正确。将其保持在 0(零),以便 WLS 将重新加载最新文件。
检查是否正在使用页面检查秒设置以及该设置的值是否为 0。此设置将覆盖资源重新加载检查秒,因此如果您的值不是 0(零),请将其设置为 0。
总之,我的建议是在weblogic中添加值为0的页面检查秒设置.xml并增加weblogic。块大小(如果请求大小较大)。该属性的值在减去任何以太网或 TCP 标头大小后,应为网络 MTU 的倍数。
我希望以下weblogic.xml配置对您有所帮助:
<jsp-descriptor>
<page-check-seconds>0</page-check-seconds>
</jsp-descriptor>
<container-descriptor>
<resource-reload-check-secs>0</resource-reload-check-secs>
</container-descriptor>
此外,请注意,此问题有补丁修复。