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 > 

http://www-01.ibm.com/support/docview.wss?uid=swg21137730&aid=4

websphere6.0

Application servers > server_name > Expand Java and Process Management > Process Definition > Custom Properties

http://www-01.ibm.com/support/docview.wss?uid=swg21137730&aid=3
新建一个属性JITC_COMPILEOPT,值为“COMPILING:NALL{org/apache/poi2/*}{*}”意思是让jit跳过对org.apache.poi2下所有类所有方法的优化。

添加完后,重启server,就可以了。

此方法操作有点复杂,但是不会影响性能。

 

二.    禁用jit

进入WebSphere的管理控制台,打开“应用服务器”>“server1”>“进程定义”进入“Java虚拟机”,选中“禁用 JIT”,然后重新启动websphere。

此方法操作相对上一个方法简单些,但是会影响web服务器的性能。

 

三.升级jdk

升级jdk到1.4或者以上版本,此方法操作性不是很好,但是从根本上解决了这个问题。

本文标签: