Reporting Services
This project purpose is to provide reporting services
for enterprises applications in a simple way.
All reports are deployed in JBoss as a file or an archive and then
become available for applications to execute.
In J2EE environment, security checks can be applied.
Reporting Services will be available for several underlying
report engines (ie. JasperReports, JFreeReport ...)
Services
security checking
executing
scheduling
distributing
storing executed reports
notifying when report is available
providing the scheduled reports list filtered by the caller's roles
report caching ?
+(special case of execution: scheduling is set in metadata, then
when apps execute report, execute instruction are ignored, last
execution date should be available )+
versioning reports, executed reports ?
automatic report generation ?
Enterprise Report Archive (xxx.era)
It's a J2EE-like module where metadata are added to a set of reports.
Then, they are deployed inside JBoss to be used from J2EE applications thru
a simple API.
Metadata
<reports> <default> <datasource></datasource> <parameters ></parameters> <execute> <schedule></schedule> <output-format></output-format> <distribute></distribute> </execute> </default> <security-constraints (a la web.xml)></security-constraints> <report> <name>/aaa/bbb/myReport</name> <datasource></datasource> <parameters ></parameters> <execute> <schedule></schedule> <output-format></output-format> <distribute></distribute> </execute> </report> <!-- | start dreaming ... --> <automatic-report> <name>/aaa/bbb/myReport</name> <ejb-jndi-name> <ejb-finder (name, parameters)> <ejb-printed-properties> <report-model> </automatic-report> <!-- ??? more dream : will become ejb annotations --> </reports>
Client APIs
The shortest : obtain the pdf now.
byte[] pdf = ReportTaskFactory.getInstance().executeToByteArray("/reports/myReports.era/HelloWorld");
Execute a report in one hour and send the pdf result by mail
ReportTask rt = ReportTaskFactory.getInstance(); ret.setReport( new Report("/reports/myReports.era/HelloWorld") ); rt.setSchedule( new ScheduleOnce( Calendar.newInstance().add(Calendar.HOUR,1) ) ); rt.setDistribute( new DistributeByMail("noel.rocher@jboss.org") ); rt.execute();
Package could be :
Report
ReportTask
distribute/
Distribute (interface)
DistributeByMethodReturn
DistributeByMail
DistributeByFtp
DistributeByFileCopy
DistributeByJMS
DistributeByPrinter
...
output/
OutputFormat
schedule/
Schedule (interface)
ScheduleOnce
ScheduleNow
SchedulePeriodic
ScheduleEventListener ?
Plus an administration part that will allow shceduling and right managment
admin/
...
Reports Console (JSF)
browse deployed reports (report explorer)
execute/schedule a report
managing scheduled reports
deploy new reports
JSF Components
Allowing to enter a report's parameters, scheduling, output format and distribution data.
A set of component should be developed to fit the simplest case (execute now with these parameters) and
the most complex one (all could be provided by the user).
Underlying Technology
JasperReports, JFreeReport
Deployers, Service, ServiceListener
JBoss Remoting
Comments