(本文档仅供参考)
问题:
新部署的环境,启动后访问smartbi服务报404错误,经分析日志发现报如下错误:
严重: Unable to process Jar entry [com/aspose/pdf/TextState$1.class] from Jar [jar:file:/usr/local/software/apache-tomcat-7.0.39/webapps/mobile/WEB-INF/lib/cells.pdf-11.3.0.jar!/] for annotations
java.util.zip.ZipException: invalid distance too far back
或者是如下错误:
严重: Unable to process Jar entry [com/aspose/pdf/TextState$z1.class] from Jar [jar:file:/usr/local/software/apache-tomcat-7.0.39/webapps/mobile/WEB-INF/lib/cells.pdf-11.3.0.jar!/] for annotations
java.util.zip.ZipException: invalid stored block lengths
解决方案:
1、首先需要将war包里边自带的tool 进入【系统监控】-》【线程】,点击会出现【未指定错误】Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.tools.attach.LinuxVirtualMachine
详细错误日志如下:
代码块 | ||||
---|---|---|---|---|
| ||||
at smartbi.framework.rmi.ClientService.execute(Smartbi:134)
at ...(...)
at smartbi.freequery.migrate.ExportLog.exportThreadDumpByAttach(ExportLog.java:692)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.tools.attach.LinuxVirtualMachine
at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:46)
at smartbi.freequery.migrate.ExportLog.exportThreadDumpByAttach(ExportLog.java:692)
at smartbi.freequery.migrate.ExportLog.exportThreadDumpInfo(ExportLog.java:477)
at smartbi.management.LocalManagementHandler.getCurrentThreadDumpInfo(LocalManagementHandler.java:338)
at smartbi.management.ManagementService.getCurrentThreadDumpInfo(ManagementService.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at smartbi.framework.rmi.ClientService.execute(Smartbi:118)
at smartbi.framework.rmi.RMIServlet.processExecute(RMIServlet.java:199)
at smartbi.framework.rmi.RMIServlet.doPost(RMIServlet.java:143)
at javax.servlet.http.HttpServlet.service$WTImpl$javax$servlet$http$HttpServlet(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at smartbi.extension.ExtensionFilter$2.doFilter(ExtensionFilter.java:138)
at smartbi.extension.ExtensionFilter$1.doFilter(ExtensionFilter.java:127)
at smartbi.extension.ExtensionFilter.doFilterInternal(ExtensionFilter.java:150)
at smartbi.extension.ExtensionFilter.doFilter(ExtensionFilter.java:53)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at smartbi.framework.rmi.TransactionFilter.doFilter(Smartbi:97)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at smartbi.freequery.filter.GZIPFilter.doFilter(GZIPFilter.java:111)
at smartbi.freequery.filter.Filter.doFilter(Filter.java:36)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at smartbi.freequery.filter.CheckIsLoggedFilter.doFilter(CheckIsLoggedFilter.java:99)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at smartbi.freequery.filter.TraceFilter.doFilter(TraceFilter.java:59)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178 |
解决方案:
原因:这是因为无法正常调用产品内置的tools.jar包,需要通过调用jdk上的tools.jar解决。
具体解决方案:
1、首先需要将war包里边自带的tools.jar移除,用压缩工具打开smartbi.war ,注意不是解压,然后找到 \smartbi\WEB-INF\lib\tooltools.jar ,进行删除。
2、通过weblogic控制台卸载smartbi应用,然后再重新将这个删除了tool 2、通过weblogic控制台卸载smartbi应用,然后再重新将这个删除了tools.jar的smartbi.war包部署到weblogic上。
3、如果删除了war包上的tool 3、如果删除了war包上的tools.jar包后重新部署后,验证下在weblogic加载的jdk下的tooljar包后重新部署后,验证下在weblogic加载的jdk下的tools.jar包能否被正常调用 (一般jdk的tool一般jdk的tools.jar包是在JDK的lib目录下,这里是放到了JDK的bin目录):
...
然后再点击【线程】看是否可以正常打印:
如果可以,就不需要进行下边步骤了。下次更新包的时候,记得删除掉war包里边的tool 如果可以,就不需要进行下边步骤了。下次更新包的时候,记得删除掉war包里边的tools.jar重新部署即可。
如果还是不行,那就按照以下步骤继续修改。
4、找到weblogic的启动文件 startWebLogic.sh ,记得备份。然后对这个文件如下部分进行修改,
修改部分如下,红色字体部署就是指定JDK引用的tools.jar路径:
echo "starting weblogic with Java version:"
...
注意为了保证tools.jar可以正常被调用,所以需要修改下tooljar可以正常被调用,所以需要修改下tools.jar的权限:
然后保存,并重启weblogic,然后再重新进入系统监控看【类查找】能否找到这个指定的路径:sun.tools.attach.LinuxAttachProvider
...
如果可以正常找到tools.jar,并且可以正常打印线程,说明成功指定jdk调用的tools.jar包。
离线文档:weblogic指定jdk加载的tools.docx
Viewtracker |
---|