[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[birt-dev] dynamic classloading mechanism in BIRT engine
|
Hello BIRT Developers,
We have a project with the following reporting requirements:
a) reporting capability
b) high reporting availability: restart of reporting system is unacceptable
c) reporting dynamicity: some facility for hot report deployments/extensions without any restart of reporting system
d) facility for fetching data/metadata from our CMS system (Version Control and Wokflow Management system) as data source for reports
A new report will be packaged and (hot-)deployed as a plugin including all of the resources required for its generation:
a) report resource files such as report design file (.rptdesign)
b) BIRT Java event handlers
So we decided to use BIRT within an OSGi/Equinox application.
Unfortunately BIRT report engine cannot see Java event handler classes from newly deployed report plugins. So I need some kind of dynamic classloading mechanism in BIRT.
I am thinking about how I could realize that...I list some of possible alternative solution drafts below.
Question 1)
What is your opinion about them as BIRT developers/experts?
Question 2)
There was a possibility to configure classloader per report generation task (through app context), why doesn't it work any more in latest BIRT version? Maybe that's just what I would need...
Many thanks, Csaba
1) With no usage of BIRT _javascript_ing during report generation phase
a) custom CMS-specific BIRT web service data source?
b) custom CMS-specific BIRT data source and data set items?
c) report data could be fetched and preprocessed by Java classes executed just before report generation phase and could be passed to BIRT report engine
c1) through temporary data files (plain file, CVS file, XML file)
c2) through InputStream objects passed to BIRT datasource or dataset items? Is that possible, will it work? As if I had seen such source example...
2) With usage of BIRT _javascript_ing during report generation phase
a) classpath to BIRT Java event handlers is set at report engine startup time (not ok, it's not dynamic)
b) JAR file(s) of BIRT Java event handlers are set on Resources tab in report design files (a bit better)
c) custom flexible/dynamic classloading solution in BIRT?
c1) any classloader hook api in BIRT for doing this?
For example: hooking custom classloader into BIRT with some parent delegation to the given report's BundleClassloader (please note: Java event handlers may import other Java classes from other plugins)?
c2) some OSGi/Equinox classloading workaround in order BIRT report engine plugin could see Java event handlers from report plugins
-dynamic imports (in reference to the packages of BIRT Java event handlers)?
-fragments (reports could be fragments to the host plugin of BIRT report engine)?
-resolver hook / bundle hook / weaving hook services (what about these OSGi hook facility)?
-Equinox Framework Adaptor API (Class Loading Hook)?