BIRT - Integration in Web-Anwendung - Benötigte Dateien für Deployment

Tomek_FFM

Mitglied
Hallo zusammen,

ich habe hier eine Struts-Anwendung vorliegen, in der ich die BIRT Report-Engine zur Anzeige von Reports als PDF integriert habe. Das funktioniert soweit ganz gut.

Die Anwendung als EAR verpackt war ohne die BIRT-Integration ca. ~25MB groß.
Summiere ich alle Files, die ich zur Zeit im Projekt für BIRT-Zwecke habe, komme ich auf zusätzliche ~50MB, und das ist definitiv zu groß (für den Kunden). Im Einzelnen:

WEB-INF/platform/plugins 35,9MB
WEB-INF/platform/config 0,5MB
WEB-INF/lib/ 13,4 MB

Ich habe aus dem "plugins" Ordner alle nicht benötigten DB-Treiber und Sample-Dateien entfernt, aber das ist immer noch nicht genug.
Beispielsweise sind manche JARs sowohl in "lib" als auch in "plugins" (z.B. com.ibm.icu.xxx) vorhanden.

Bisher konnte ich nicht herausfinden, welche Dateien ich für eine minimale Integration brauche. Was ich machen will:
- Der Report selbst wird ausserhalb der WebApp designt, d.h. ich benötige keine DesignEngine-Komponenten
- Der Report selbst enthält keine Charts oder andere Grafiken. Lediglich Tabellen- und Gitterstrukturen (dadurch dürften ein paar Libs und Plugins entfallen)
- Das einzige Ausgabeformat ist PDF (dadurch dürften einige Emitter entfallen)

Ich benutze BIRT 2.6.1

Hat jemand Erfahrung und Tips für eine minimale Integration von BIRT?

Will nicht nacheinander einzelne Files herausnehmen, um zu schauen, ob alles noch funktioniert :p

Danke!
 
eine möglichkeit, dass deployment kleinzuhalten, ist, die benötigten Libraries von Birt in eines der Server-lib-Verzeichnisse zu packen. Damit werden sie nur angezogen, wenn Birt-Komponenten darauf zugreifen.

Ich empfehle Dir allerdings ein anderes Vorgehen, mit dem ich schon sowas gelöst habe :

0. Schreibe einen Test, der Dir das erzeugen von PDFs aus der Kommandozeile erlaubt
1. BIRT um alle libraries berauben (du brauchst wohl mindestens iText.jar und wahrscheinlich commons zeugs)
2. Test starten -> BOOOM!
3. JarFinder dazu nutzen, um die fehlenden Jars sukzessiv nachzuziehen*

geht ziemlich schnell und erlaubt dir das gezielte eindampfen

Grüße
gore


* geht auch in der Kommandozeile unter linux

for I in `find . -name "*.jar"`; do unzip -l $I | grep DEINECLASSOHNEPACKAGE && echo $I; done
 
Hallo,

ich nehme mal an du verwendest schon die minimale BIRT Runtime (bzw. das .war daraus), oder?
http://download.eclipse.org/birt/downloads/

Da könnte man im normalfall schon einiges wegstrippen, (ant jars, axis jars), leider werden dort
auch einige jars / bundles bzw. packages in den entsprechenden Manifest files referenziert (importiert, bzw als dependency markiert). Außerdem kann es ClassLoading Probleme geben (muss aber nicht), wenn man die jars ins Server/lib Verzeichnis kopiert. Beispielsweise könnte man das dicke ICU jar mit 6mb das doppelt vorkommt dorthin verschieben.

Bisher konnte ich nicht herausfinden, welche Dateien ich für eine minimale Integration brauche. Was ich machen will:
- Der Report selbst wird ausserhalb der WebApp designt, d.h. ich benötige keine DesignEngine-Komponenten
- Der Report selbst enthält keine Charts oder andere Grafiken. Lediglich Tabellen- und Gitterstrukturen (dadurch dürften ein paar Libs und Plugins entfallen)
- Das einzige Ausgabeformat ist PDF (dadurch dürften einige Emitter entfallen)
Um einzelne plugins aus dem BIRT-plugins Verzeichnis ausschließen zu können musst du dir auch anschauen in welchen Manifest Dateien diese referenziert werden (bzw. wo packages daraus importiert werden) bevor du die jars löschen kannst.

Du könntest dir auch einfach eine lokale Birt Installation auf den Server daneben legen und dann einfach aus der Web-App einen Konsolen-Befehl absetzen, welcher den Report generiert und diesen dann zum Client schicken.
Das ist natürlich nicht ganz JEE Spec Konform aber who cares....

Gruß Tom
 
Ja ich benutze die Report-Engine.

Ich werde mir die Abhängigkeiten anschauen und probieren einige JARs ins Server/lib Verzeichnis zu schieben. Das mit dem JarFinder werde ich auch mal ausprobieren.

Du könntest dir auch einfach eine lokale Birt Installation auf den Server daneben legen und dann einfach aus der Web-App einen Konsolen-Befehl absetzen, welcher den Report generiert und diesen dann zum Client schicken.
Das ist natürlich nicht ganz JEE Spec Konform aber who cares....
Schöne Idee, aber im Projekt wohl nicht durchsetzbar ;)


Danke euch beiden!
 

Neue Beiträge

Zurück