finereport——Java报表工具软件» 在Websphere中使用FineReport报表软件

FineReport是一款国产的纯软件,其基本原理是通过ReportServer这样一个Servlet来处理所有的报表请求,并动态的生成基于Web2.0技术的HTML页面。我们在最近一期的项目中采用了FineReport作为引擎,在Tomcat的环境中测试顺利通过。

?

当我们把项目部署到WebSphere6.0.0.1上时,问题开始频繁出现。由于以前有过在WAS上部署项目的经验,这可能又是IBMJDK的问题。WAS6.0采用的是IBMJRE 1.4.2,由于IBMJRE的重新实现,增加了更多的功能和更加严格的运行时检查,使得在SUN JDK下编译的应用程序,多多少少会出现一些问题。

?

出现的{dy}个问题是:sun.io.malformedinputexception异常。Google上找到了一些解决方案:

·???????? ??

·????????

根据SytemErr.log给出的错误信息,问题出在com/web/core/js/common.js上。和FineReport的老薛在QQ上讨论了好久,也初步的认定是common.js的编码问题。事实上,从jar包里面提取出来的common.js文件,的确是DOS编码,而不是IBM JRE要求的UTF-8。把该问题通过UltraEdit改为UTF-8编码,然后更新jar包,问题解决。老薛也决定把所有的文件全部用UTF8重新编码。

?

问题二:ClassDefNotFound错误。

WAS的部署中,这是个最常见的问题,也是最让人莫名其妙的问题。明明class就定义在路径中,为什么说找不到?其实,造成这个问题有很多种原因。

1.??????? ClassLoader加载class的时候出现异常,以后再调用该class的时候就会出现ClassDefNotFound错误;

2.??????? ClassLoaderCLASS_PATH中找不到class的定义;

3.??????? 要加载的class处于当前ClassLoader的子层次上。按照WAS类加载器的层次式设计,低层的Class可以访问高层的Class,反之不行。

我们顺着这个线索摸下去,很快就发现了问题的所在。{dy}个错误是因为FineReportClass中调用某个XWindowAPI,由于某种原因调用失败,从而导致后来的ClassDefNotFound错误。第二个错误是由于我把FineReportSpring等公共类全部都放到公共路径/opt/lib下,并设置成WAS的共享库。由于FineReport在运行时需要调用Application的内部类,从而根据3的原因错误产生了。

于是我和老薛又讨论,得知FineReport中查找类的方法是Class.forName。如果把放在/WEB-INF/lib下,Class.forName调用的ClassLoader自然可以找到当前上下文中的类。可是当FineReport处在/opt/lib的较高层次的类路径上时,寻找下级的某个类,问题出现了。问题集中在一点上:如何在共享库中找到应用程序中类。

我一直用Spring框架,Spring通过配置文件动态的加载类,这种情况和我们现在遇到的问题xx相同。但Spring是如何解决的呢?看来得深入Spring的代码好好研究研究了。

文章转自:

评论审阅已启用。您的评论可能需要一段时间才会出现。

郑重声明:资讯 【finereport——Java报表工具软件» 在Websphere中使用FineReport报表软件】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——