Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理
           

          FineReport是一款國產的純Java報表軟件,其基本原理是通過ReportServer這樣一個Servlet來處理所有的報表請求,并動態的生成基于Web2.0技術的HTML頁面。我們在最近一期的項目中采用了FineReport作為報表引擎,在Tomcat的環境中測試順利通過。

           

          當我們把項目部署到WebSphere6.0.0.1上時,問題開始頻繁出現。由于以前有過在WAS上部署項目的經驗,這可能又是IBMJDK的問題。WAS6.0采用的是IBMJRE 1.4.2,由于IBMJRE的重新實現,增加了更多的功能和更加嚴格的運行時檢查,使得在SUN JDK下編譯的應用程序,多多少少會出現一些問題。

           

          出現的第一個問題是:sun.io.malformedinputexception異常。Google上找到了一些解決方案:

          ·         http://www.aygfsteel.com/mlw2000/archive/2007/03/01/101282.aspx

          ·         http://blog.csdn.net/CharlesYY/archive/2006/11/10/1377774.aspx

          根據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,反之不行。

          我們順著這個線索摸下去,很快就發現了問題的所在。第一個錯誤是因為FineReportClass中調用某個XWindowAPI,由于某種原因調用失敗,從而導致后來的ClassDefNotFound錯誤。第二個錯誤是由于我把FineReportSpring等公共類全部都放到公共路徑/opt/lib下,并設置成WAS的共享庫。由于FineReport在運行時需要調用Application的內部類,從而根據3的原因錯誤產生了。

          于是我和老薛又討論,得知FineReport中查找類的方法是Class.forName。如果把FineReport放在/WEB-INF/lib下,Class.forName調用的ClassLoader自然可以找到當前上下文中的類。可是當FineReport處在/opt/lib的較高層次的類路徑上時,尋找下級的某個類,問題出現了。問題集中在一點上:如何在共享庫中找到應用程序中類。

          我一直用Spring框架,Spring通過配置文件動態的加載類,這種情況和我們現在遇到的問題完全相同。但Spring是如何解決的呢?看來得深入Spring的代碼好好研究研究了。

          文章轉自:http://blog.sina.com.cn/s/blog_44f68c96010008pi.html



          主站蜘蛛池模板: 宝应县| 绵竹市| 乐昌市| 仙桃市| 永州市| 耿马| 武冈市| 奎屯市| 涿州市| 盘山县| 天长市| 彭泽县| 郓城县| 保康县| 万州区| 西昌市| 兴山县| 长岛县| 漳浦县| 藁城市| 黄平县| 韶关市| 丹阳市| 台北县| 来凤县| 大港区| 涟源市| 陵水| 郎溪县| 波密县| 克东县| 巫山县| 饶河县| 文登市| 托克逊县| 苏州市| 广昌县| 福鼎市| 孝昌县| 灵山县| 洛浦县|