Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
1
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
BIRT in EnterpriseArchitekturen
Tobias Kieninger
2
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
) Competence Center)) Object Rangers )
Java, XML und Open Source seit 1998
• Schulungen, Coaching, Weiterbildungsberatung, Train & Solve-Programme• Methoden, Standards und Tools für die Entwicklung von offenen, unternehmens- weiten Systemen
• Unterstützung laufender Java Projekte
• Perfect Match• Rent-a-team• Coaching on the project• Inhouse Outsourcing
• Schlüsselfertige Realisierung von Java Software
• Individualsoftware• Pilot- und Migrationsprojekte• Sanierung von Software• Software Wartung
) Software Factory )
2
3
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Tobias Kieninger
Beratung
Projekte
Training
Im a pogramar
Iam a programer
I'm a programor
I write code
4
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Gliederung
• Jump in!• Web(frameworks)• Application Server
3
5
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Reporting im Alltag - Gestern und Heute
6
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
6
BIRT - Business Intelligence Reporting Tools
• BIRT: Business Intelligence and Reporting Tools– Toplevel Eclipse Projekt– Initiale Sourcen von Actuate
• Homepage: http://www.eclipse.org/birt
• Version– 1.0 Juni 2005– 2.1.2 Februar 2007– 2.2.2 März 2008– 2.3.2 Februar 2009
4
7
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BIRT Designer
8
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Eclipse Report Designer
BIRT API Übersicht
Data
Report Engine
Generation Presentation
Report Design Engine
XMLReportDesign
ReportDocument
HTMLPDFPrintXML…
Transform ChartingEclipseDTPODA
ChartDesigner
EclipseWTP
5
9
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
• Birt Runtime als eigener Download• Enthält
– ReportEngine– birt.war– WebViewerExample– ...
Report Engine
Birt Engine API
10
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BIRT als OSGi Container
• Läuft in Eclipse Umgebung– OSGi framework– Ohne UI Komponenten
• Configuration• Libraries• Plugins
6
11
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Technologien auf der Birt Reise (Auswahl)
Webapp
Rich Client
JEE
Spring
RelationaleDB
WebservicesXML
RCP
Swing
Standalone
SpringMVC
GWT JSF
EJB
12
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Webapp
Spring
JEE...
JEE Architekturen
Relational
HTML PDF Excel Word Powerpnt
Rich Client Standalone
Webservices XML
XML ...
...
...
Spring
Standalone
Spring
7
13
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BIRT Web Integration
Datasource
HTML PDF Excel Word Powerpnt XML ...
Webviewer
Webapp
BirtServlet +Taglibs
ContainerReport Engine
Webapp
ReportService
14
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Datasource
BIRT Rich Client Integration
HTML PDF Excel Word Powerpnt XML ...
Swing App
Report Engine
Report Engine
Swing App
ReportService
Container
RCP App
WebviewerPlugIn
8
15
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Gliederung
• Jump in!• Web(frameworks)• Application Server
• Webviewer• Frameworks
Webviewer
16
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
16
BIRT Web Viewer
• Generierung des Reports in verschiedenen Ausgabeformaten• Export zu CSV• Rendert auch Bilder und Charts• Inhaltsverzeichnis• Parameter
9
17
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
17
Deployment des Web Viewers
• Simples Deployment– birt.war in ServletEngine deployen– Reports und Resourcen hineinkopieren– Datenbanktreiber nicht vergessen
• Bemerkenswerte Verzeichnisse– Logging– Scriptlib– webcontent/birt– WEB-INF/lib– WEB-INF/platform
18
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
18
Konfiguration in der WEB.XML
• Auszug Konfigurationsvariablen– BIRT_VIEWER_WORKING_FOLDER– BIRT_VIEWER_IMAGE_DIR– BIRT_VIEWER_LOG_DIR– BIRT_VIEWER_LOG_LEVEL– ...
• Vorsicht, möglicher Stolperstein
...<context-param>
<param-name>BIRT_VIEWER_LOG_DIR</param-name>
<param-value>logs</param-value></context-param>
...
10
19
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Webviewer Servlets
http://server/myapp/frameset?opt1=val1&opt2=val2http://server/myapp/run?option1=value1&option2=value2http://server/myapp/preview?option1=value1&option2=value2
• Frameset– Vollwertiger Reportviewer– Menue, Inhaltsverzeichnis, Export, ...
• Run– Bericht ohne Menue
• Preview– Rendern von rptdocument Dateien– Kein AJAX
20
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
20
Auswahl möglicher Parameter
http://server/myapp/frameset?__format=html&__report=MyReport.rptdesign&myParam=value1
• __format – Ausgabeformat (html, pdf, ...)• __report – Pfad zu .rptdesign• __document – Pfad .rptdocument• Parametername=Wert• ...
11
21
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Gliederung
• Jump in!• Web(frameworks)• Application Server
• Webviewer• Frameworks
WebappBirt Servlet
+Taglib
22
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Integration als Servlet
• Report Engine starten/stoppen ist zeitintensiv• Integration als Singleton während Webanwendungsstart• Konfiguration via web.xml
– Servlets und Parameter
MyWebapp
BirtServlet +Taglibs
12
23
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BIRT Taglibs
• <birt:viewer/>– Reportviewer vgl. Webviewer– Menue, Inhaltsverzeichnis, Export, ...– Viel AJAX
• <birt:report/>– Bericht ohne Menue– Ausgabe in <div> oder <iframe>
<birt:report id="r1" reportDesign="report1.rptdesign" format="html" reportContainer="div">
<birt:param name="param1" value="someValue"/></birt:report>
24
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Ein paar Themen nicht vergessen - Security
http://myserver/run?__report=Gehaltsrg.rptdesign&user=tkiening
• Parameterinjection– Reportparameter– Ausführen beliebiger Reports
• Reportdesign öffentlich– Aktive Suche nach Schwachstellen möglich– DB Kennwort in rptdesign?
• Birt Security ist großes Thema– Report Security– Column Security– Row Security
13
25
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Gliederung
• Jump in!• Web(frameworks)• Application Server
Report Engine
ServiceContainer
26
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
OSGi Platform
Startup(config);Shutdown();createFactoryObject(...)
Starten von BIRT via OSGi Platform
PlugInPlugInPlugInPlugIns
EngineConfig
PlatformContext
14
27
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Config die uns betrifft...
• EngineConfig– Logging: BIRT verwendet java.util.logging– Classpath– Resource Home– ... (und mehr)
• IPlatformContext– Default: PlatformFileContext– PlatformServletContext für Webanwendungen
EngineConfig config = new EngineConfig( );config.setBIRTHome("c:/birt-runtime/ReportEngine");config.setLogConfig("c:/temp", Level.FINE);config.setResourcePath("c:/myproject/resources");
...
EngineConfig
PlatformContext
28
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
OSGi Platform
Starten der ReportEngine / DesignEngine
ReportEngineFactory
DesignEngineFactory DesignEngine
ReportEngine
PlugInPlugInPlugInPlugIns
15
29
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
HelloWorld BIRT ReportEngine
EngineConfig config = new EngineConfig();IReportEngineFactory factory;IReportEngine engine;
config.setBIRTHome("C:/birt-runtime-2_3_1/ReportEngine");
Platform.startup( config );
factory= (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
engine = factory.createReportEngine( config );
30
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Report Engine API
Report Engine
DataExtractionTask
DataPreviewTask
GetParameterDefinitionTask
RunTask
RenderTask
RunAndRenderTask
ReportDesign File
ReportDocument
PDF,HTML,
...
16
31
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Report Engine
Beispiel Report RunTask
IReportRunnable design;IRunTask runTask;
design = engine.openReportDesign("c:/work/report.rptdesign");
runTask = engine.createRunTask(design);runTask.run("c:/work/report.rptdocument");
runTask.close();
RunTaskReport
Design FileReport
Document
32
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Wo sind wir bei Spring?
http://www.flickr.com/photos/chefranden/528886535/
17
33
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Quellen im Netz
• BIRT Support seitens Spring nicht absehbar (laut JIRA)– http://jira.springframework.org/browse/SPR-1220
• Eclipse BIRT in Spring web applications (29.08.2006)– Weblog Silvester Van der Bijl
• http://blog.xebia.com/2006/08/29/reporting-the-eclipse-way/
• Using BIRT as View in Spring (24.11.2006)– Weblog Luca Masini
• http://jroller.com/masini/entry/using_birt_as_view_in
• Integrate BIRT with Spring in a Web application (13.03.2007)– Weblog Jose Noheda
• http://internna.blogspot.com/2007/03/integrating-birt-with-spring-in-web.html
34
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
public class MyServiceImpl {
private String someAttrib;
@Autowired private MyDao myDao;
public void setSomeAttrib (String someAttrib) { this.someAttrib = someAttrib; } }
...}
Spring Basics I - Klassen und Objekte
MyServiceImpl
MyDaoImpl
18
35
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Spring Basics II - Die Konfiguration
<bean id="myService" class="de.oio.fspring.MyService"> <property name="someAttrib" value="TextTextText" /> ...</bean>
<bean id="myDao" class="de.oio.fspring.MyDaoImpl"> <property ... /></bean>
MyServiceImpl
MyDaoImpl
36
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Spring Advanced - Das Interface FactoryBean
• Komplexes Erzeugen von Beans• Fabrik Muster• Interface
– Class getObjectType()– Object getObject()– boolean isSingleton()
<bean id="myDao" class="de.oio.fspring.MyDaoFactory"> <property ... /></bean>
MyServiceImpl
MyDaoImplMyDaoFactory erstellt
Erhält Referenz von Spring
19
37
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BirtEngineFactory und Konfiguration
BirtEngineFactory
EngineConfig
EngineConfigFactory
ReportEngine
Service1
Service2
Controller
HTMLRenderContext
PDFRenderContext
38
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Konfiguration Spring BirtEngineFactory
<bean id="reportEngine" class="de.oio.BirtEngineFactory" init-method="start" destroy-method="shutdown">
<property name="engineConfig" ref="birtConfig" /></bean>
<bean id="birtConfig" class="de.oio.EngineConfigFactory"> <property name="birtHome" value="${birt.home}" />
<property name="logdir" value="${birt.logdir}" />
...</bean>
20
39
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Konfiguration der RenderContext
<bean id="pdfRC" class="org.eclipse.birt.report.engine.api.HTMLRenderContext"> <property name="supportedImageFormats"
value="JPG;PNG;BMP;SVG" />
</bean>
<bean id="htmlRC" class="org.eclipse.birt.report.engine.api.HTMLRenderContext">
<property name="supportedImageFormats" value="JPG;PNG;BMP" />
<property name="imageDirectory" value="${eclipse.images.dir}" />
...</bean>
40
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
RunAndRender im Service
public class MyReportServiceImpl implements MyReportService {
private IReportEngine reportEngine;private Map renderContext;
public byte[] erstellePdf() { ... reportDesign = reportEngine.openReportDesign(inputStream); task = reportEngine.createRunAndRenderTask(reportDesign); ... renderOptions.setOutputFormat("pdf");
renderOptions.setOutputStream(out);
... task.setAppContext(renderContext);
task.setRenderOption(renderOptions);
task.run();
return out.toByteArray();}
21
41
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
BIRT Appserver Integration - Ist nicht einfach
42
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Themen rund um EJB Container
• Aus J2EE– Filehandles sind böse– Eigene Threads sind böse– Classloadergeschichten sind böse
• Kein standardisierter Weg für OSGi Container
• Appserver auf dem Markt unterscheiden sich stark
22
43
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Birt Anbindung im JavaEE Appserver
• Vorschlag: Eine Report Engine je Container• Möglichkeiten des Containers identifizieren• Start von Birt mit containereigenen Mechanismen
– JMX, JNDI, Listener, ...– JBoss Birt Integration als ServiceArchive
• Kapselung des Reporting via Service
EJB
Application Server
JMX Wrapper
EJBReport Engine
JMX
JMX
JMX
ReportS
ervice
44
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Fazit / Ausblick
• Webviewer: Schnell und einfach• Webanwendung: Volle Integration mit Servlet, JSP oder mehr• Spring: Nicht intrinsisch, aber leicht möglich• EJB: Je Container unterschiedlich
• Einige „neue“ Server basieren auf OSGi– JBoss 5– Glassfish V3
23
45
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Literaturhinweise
• BIRT: A Field Guide to Reporting• Broschiert: 704 Seiten• Addison Wesley• Erscheinungsdat: 26. Oktober 2006• Sprache: Englisch• ISBN: 0321442598
• Integrating and Extending BIRT• Broschiert: 608 Seiten• Addison Wesley• Erscheinungsdat: 22. November 2006• Sprache: Englisch• ISBN: 0321443853
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
Vielen Dank für IhreAufmerksamkeit !
24
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
? ?
???
Fragen ?
48
© 2009 Orientation in Objects GmbHBIRT in Enterprise Architekturen
Mehr von OIO zum Thema...
• Schulung: Eclipse BIRT– http://www.oio.de/seminar/open-source/eclipse-birt-reporting-schulung.htm
• Vortrag: Reporting mit Eclipse BIRT– http://www.oio.de/m/konf/wjax2006/ReportingMitEclipseBIRT-final.pdf