Jasper Reports を使用した JBoss 6 でのクラスのロードに問題があります。Ears のルートにある lib フォルダーに、2 つの ear にそれぞれ jasperreports-4.5.0.jar のコピーが含まれているマルチイヤー アプリケーションがあります (md5 チェックサムで示されるように、jar のバージョンは同じです)。
約 3 週間前に、チームの誰かが大量のチェックインを行って日付/時刻の形式を変更するまで、物事はうまく機能していました。それ以来、耳の 1 つから Jasper Report を実行しようとすると、常に同じスタック トレースで失敗します。
java.lang.ExceptionInInitializerError
at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) [:5.1.0]
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82) [:5.1.0]
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653) [:5.1.0]
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969) [:5.1.0]
at com.landslide.reports.LandslideReport.printJasperReport(LandslideReport.java:411) [:]
at com.landslide.reports.LandslideReport.generateReport(LandslideReport.java:362) [:]
at com.landslide.reports.LandslideReport.exportToByteStream(LandslideReport.java:228) [:]
at com.landslide.reports.LandslideReport.exportToByteStream(LandslideReport.java:217) [:]
at com.landslide.common.delegate.MyListDelegate.createPDFDocumentForMyList(MyListDelegate.java:2491) [:]
at com.landslide.scheduledreport.ScheduledReportRun.getPdfFromMyList(ScheduledReportRun.java:367) [:]
at com.landslide.scheduledreport.ScheduledReportRun.run(ScheduledReportRun.java:197) [:]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [:1.6.0_39]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [:1.6.0_39]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_39]
Caused by: net.sf.jasperreports.engine.JRRuntimeException: Class net.sf.jasperreports.extensions.DefaultExtensionsRegistry does not implement/extend net.sf.jasperreports.extensions.ExtensionsRegistry
at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:56) [:5.1.0]
at net.sf.jasperreports.extensions.ExtensionsEnvironment.createDefaultRegistry(ExtensionsEnvironment.java:81) [:5.1.0]
at net.sf.jasperreports.extensions.ExtensionsEnvironment.<clinit>(ExtensionsEnvironment.java:69) [:5.1.0]
... 19 more
もう一方の耳から Jasper Reports 機能を使用しようとすると、正常に動作します。
問題のある耳が自然に展開されると、すべてがうまくいきます。どういうわけかクラスの読み込みが「混乱」し、Jasper Extensions Registry を初期化しようとすると、インターフェイス クラスが見つからないか、もう一方の耳の jasper ライブラリから来て、Jasper に失敗していると推測しています。 instantiateClass 呼び出し。
Jasper ライブラリを最新バージョン (5.1.0) に変更してみました。また、クラス ローダーを強制するために、耳に含まれる戦争の jboss.classsloading.xml ファイルと耳自体を使用してみました。孤立していますが、運がありません。
助言がありますか?
ありがとう、
-- デイブ・スウィンデル