aix+was5+jdk1.3.1导入excel问题
前几天遇到一个问题,页面导入excel出错:
[2012-02-09 14:13:04] runqianReportLogger : [DEBUG] -Illegal block count; minimum count is 1, got 0 instead
java.io.IOException: Illegal block count; minimum count is 1, got 0 instead
at org.apache.poi2.poifs.storage.BlockAllocationTableReader.<init>(BlockAllocationTableReader.java(Compiled Code))
at org.apache.poi2.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java(Compiled Code))
at org.apache.poi2.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java(Inlined Compiled Code))
at org.apache.poi2.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java(Inlined Compiled Code))
at com.runqian.report4.ide.ExcelImporter._$1(Unknown Source(Compiled Code))
at com.runqian.report4.ide.ExcelImporter.<init>(Unknown Source(Inlined Compiled Code))
at com.runqian.report4.input.UploadExcelServlet.service(Unknown Source(Compiled Code))
at com.runqian.report4.view.ReportServlet.service(Unknown Source(Compiled Code))
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
软件环境是aix5.2+websphere5+ibm jdk1.3.1。
润乾报表经过十多年的发展,已经有成千上万两个成功案例了。程序肯定是没问题的,久经考验过的。看错误是poi2出错,让研发看了,经过多次测试,判定是jdk1.3.1中jit优化poi2包下某些方法时出现的错误。
解决方法:
一. jit跳过poi2包下某些方法的优化
操作步骤:在websphere控制台
websphere5.1
Servers > Application Servers > server_name > Process Definition > Environment Entries >
websphere6.0
Application servers > server_name > Expand Java and Process Management > Process Definition > Custom Properties
新建一个属性JITC_COMPILEOPT,值为“COMPILING:NALL{org/apache/poi2/*}{*}”意思是让jit跳过对org.apache.poi2下所有类所有方法的优化。
添加完后,重启server,就可以了。
此方法操作有点复杂,但是不会影响性能。
二. 禁用jit
进入WebSphere的管理控制台,打开”应用服务器”>“server1“>“进程定义”进入”Java虚拟机”,选中”禁用 JIT“,然后重新启动websphere。
此方法操作相对上一个方法简单些,但是会影响web服务器的性能。
三.升级jdk
升级jdk到1.4或者以上版本,此方法操作性不是很好,但是从根本上解决了这个问题。