BIRT - Report erzeugt Fehler

Ezra

Bekanntes Mitglied
Hallo Java-Forum,

ich arbeite mit der BIRT 2.6.2 Report Engine API in einer Portletapplikation. Die Integration hat geklappt, der Standardreport customers.rptdesign wird problemlos angezeigt.
Nun habe ich einen Report erstellt, der unsere Daten verwendet. Er wird im Eclipse-Preview korrekt angezeigt. Innerhalb des Portlets aber erscheint eine Fehlermeldung:

The following items have errors:

Table (id = 33):
+ An exception occurred during processing. Please see the following message for details:
Cannot find or process the org.jboss.tools.birt.oda driver's data source extension configuration.
Cannot find the ODA dataSource extension (org.jboss.tools.birt.oda).
Check the workspace log file for any problems with loading the extension bundle and its dependencies.

Hier sind die Logs aus dem Workspace:
workspace log - Pastebin.com

Was läuft hier falsch? Wie kann ich das beheben?
Google brachte mir keine Hilfe, der Fehler trat dort u.a. im Zusammenhang eines Bug in einer älteren BIRT Version auf, jener ist aber mittlerweile behoben.

Viele Grüße
Ezra
 

Ezra

Bekanntes Mitglied
Ich habe org.jboss.tools.birt.oda_1.2.0.v20110215-1225-H29-GA.jar in den Plugin-Ordner vom BIRT-Home kopiert. Da ist eigentlich alles. Ich habe auch festgestellt dass zu dem eigentlichen Fehler im Workspace-Log keinerlei Meldungen kommen.

Im Moment versuche ich es mit JasperReports, weil ich mir an diesem Fehler schon seit einer Woche die Zähne ausbeiße und mir schlichtweg die Ideen ausgegangen sind.

Vielleicht guck ich mir den Logger mal an. Danke.
 

Ezra

Bekanntes Mitglied
Vielen Dank für Deine Mühe.

Es tut mir leid, ich habe in dem ersten Post ein Log angegeben, das mehrere Sessions umfasst und das erst zu spät gemerkt, da konnte ich den ersten Post nicht mehr editieren. Ich habe zwischendurch an den Einstellungen gedreht und dabei kamen auch die Fehler mit dem TransactionManager. In diesem Fall ging der Report aber auch schon im Eclipse Preview nicht.
Wenn ich den oda-Fehler bekomme und es geht im Preview aber nicht im Portlet, bekomme ich keine Log-Ausgaben im Workspace.

Allerdings könnte es trotzdem mit den Einstellungen zu tun haben, denn ich konnte es nicht genau so machen wie in diesem Tutorial: Chapter*4.*Birt Integration

Dort steht
run the Seam Generate Entities action
This action will create a Hibernate Console configuration.

Wenn ich das jedoch machen möchte, kommt die Fehlermeldung
Hibernate console configuration name is empty

Darum habe ich stattdessen die Hibernate console configuration mittels New - Hibernate Console Configuration erzeugt. Als property file habe ich hibernate.properties angegeben und im configuration file die seam-hibernate.cfg.xml. Type ist Annotation jdk5+.
Damit trat erstmal der TransactionManager-Fehler auf. Also entfernte ich aus der seam-hibernate.cfg.xml das Property transaction.manager_lookup_class, da ich auf Suche nach Lösungen irgendwo gelesen habe, dass das raussollte.
Code:
<property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
Danach ist zumindest im Eclipse alles erfolgreich verlaufen. Ich weiß nicht, inwiefern es von Belang ist, dass ich das anders gemacht habe.

Hier ist die seam-hibernate.cfg.xml
Und hier hibernate.properties (passwort und username unkenntlich gemacht)

Der Vollständigkeit halber noch der Fehler aus der BIRT-Log-Datei:
Code:
27.05.2011 11:21:01 org.eclipse.birt.data.engine.odaconsumer doGetDriverManifest
SCHWERWIEGEND: Cannot find or process the ODA data source extension configuration.
java.lang.IllegalArgumentException: Cannot find the ODA dataSource extension (org.jboss.tools.birt.oda).
Check the workspace log file for any problems with loading the extension bundle and its dependencies.
at org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer.getExtensionManifest(ManifestExplorer.java:200)
at org.eclipse.birt.data.engine.odaconsumer.Driver.doGetDriverManifest(Driver.java:150)
 
Zuletzt bearbeitet:

cosmit

Mitglied
Ok, jetzt habe ich es verstanden. Du nutzt Hibernate. Ich vermute ganz stark das an deinem EAR was nicht stimmt.

Kannst du mir bitte mal die Verzeichnisstruktur und eine Filelist(auch von allen Unterverzeichnissen) posten.

Der von dir genannte Fehler kann unteranderem dann auftreten, wenn der Treiber für die Abfrage nicht gefunden wird. Aber eigentlich sollte es dann auch explizit drin stehen (so ala NoClassDefFoundError)

Liegt der Treiber mit im EAR oder im JBoss lib Verzeichnis?

MfG
CoSMIT
 

Ezra

Bekanntes Mitglied
Die Verzeichnisstruktur des Projekts: Verzeichnisstruktur - Pastebin.com (ist relativ lang)

Liegt der Treiber mit im EAR oder im JBoss lib Verzeichnis?
Die org.jboss.tools.birt.oda_1.2.0.v20110215-1225-H29-GA.jar liegt im plugin-Ordner von BIRT. Das Verzeichnis wird im Code festgelegt mittels:
Code:
config.setEngineHome(configProps.getProperty("engineHome"));
Wobei im properties-file der Pfad zu birt-runtime-2_6_6/ReportEngine angegeben ist. (Dies dürfte auch geklappt haben, da die Standardreports mit den bereits mitgelieferten Daten von BIRT funktionieren).
Oder meinst Du mit Treiber eine andere Datei?
 
Zuletzt bearbeitet:

Ezra

Bekanntes Mitglied
Ich habe nun ein kleines Java-Projekt erstellt, das nichts anderes macht, als das erzeugte HTML des Reports auf Konsole auszugeben. Dabei tritt auch der Fehler auf. Es hat also nichts mit dem Portal zu tun. Wahrscheinlich habe ich irgendwas falsch konfiguriert. Ich werde damit weitertesten.

2shared - download birthibtest.zip
 
Zuletzt bearbeitet:

cosmit

Mitglied
Hallo,

entschuldige das ich mich jetzt erst melde, die letzten Tage waren deutlich zu kurz.
Ich hab mir dein Projekt angesehen und soweit schaut es erstmal gut aus.

Ich würde sagen wir beschränken uns erstmal auf das Testprojekt, dürfte etwas überschaubarer sein.
Da die Testberichte mit der SampleDB laufen, gehe ich davon aus, dass die ReportEngine korrekt gestartet wurde. Auch die config sollte passen aufgrund dessen, dass die Beispiel Bereichte über den SampleDB Oda Treiber auf die Daten zugreift, welcher sich im plugins Verzeichnis der BIRT-Runtime befindet.

An dieser Stelle haben wir jetzt meiner Ansicht nach 3 mögliche Fehlerquellen (nach Wahrscheinlichkeit):
1. ODA Treiber funktioniert nicht (mein Favorit)
2. Classloader Problem
3. Problem mit der BIRT-Runtime

Die Probleme kann man wie folgt eingrenzen

Ändert sich die Fehlermeldung nicht, dann dürfte die Wahrscheinlichkeit groß sein, dass ein Classloader Problem ODER ein Konfigurationsproblem besteht.

1. Den ODA kann man relativ leicht testen
- Pack den in das Eclipse/plugins Verzeichnis
- Starte Eclipse mit den vmargs ("-clean")
- Erstelle ein neuen Workspace
- Erstelle ein Report Projekt
- Erstelle ein Report
- Erstelle eine Datasource mit dem ODA Treiber
- Wenn in der Preview Daten auftauchen funktioniert der Treiber
- Abschließend würde ich eventuell noch den konkreten Testbericht einmal in Eclipse ausführen

Kann es sein, dass der ODA Treiber externe Abhängigkeiten hat? (MANIFEST.MF Require-Bundle, ...).

2.
- Versuche mal den ODA Treiber aus dem Plugins raus zu nehmen
- Lasse den Test laufen
- Nimm das Log File auf packe es in tmp für Vergleiche

- Danach pack den Treiber wieder rein
- Lass den Test laufen
- und Vergleiche das aktuelle Log mit vorhergehenden


3. Das dürfte am schwierigsten herauszufinden sein
Fangen wir zuerst mit den Grundlagen an.
Wenn die ReportEngine aus einer Applikation genutzt werden soll, dann muss Home nach birt-runtime-X_X_X/ReportEngine zeigen. Soweit hast du es ja getan.

EngineConfig reportEngineConfig;
// Configure the Engine and start the Platform
reportEngineConfig = new EngineConfig();
// Set BIRT report engine home path.
reportEngineConfig.setEngineHome("C:/Daten/SamurajAS/birt-runtime-2_6_2/ReportEngine");
// Set log configuration.
reportEngineConfig.setLogConfig("C:/Daten/SamurajAS/birt-engine-log", engineLogLevel);
// Start der Report Platform
Platform.startup (reportEngineConfig);
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
reportEngine = factory.createReportEngine(reportEngineConfig);

Soweit dürfte das ja auch noch passen.
Hoffe ich konnte etwas helfen.

Das Logfile haben wir ja schon gesehen. Da die Example Berichte Laufen, dürften die Bestandteile aus dem ReportEngine/Plugins Verzeichnis gefunden werden. Als Alternative könnte man einen JDBC Treiber ausprobieren, der im plugins Verzeichnis der BIRT-Runtime in dem Plugin org.eclipse.birt.report.data.oda.jdbc_2.6.2.r262_v20110127\drivers abgelegt werden.

Falls das Problem weiterhin besteht schaue ich mir das Testprojekt mal genauer an, vielleicht finde ich da einen Fehler.

MfG
 

Ezra

Bekanntes Mitglied
Hallo cosmit,

ich bin heilfroh, dass Du mir hilfst. Danke dafür.

1. Den ODA kann man relativ leicht testen
- Pack den in das Eclipse/plugins Verzeichnis
- Starte Eclipse mit den vmargs ("-clean")
- Erstelle ein neuen Workspace
- Erstelle ein Report Projekt
- Erstelle ein Report
- Erstelle eine Datasource mit dem ODA Treiber
- Wenn in der Preview Daten auftauchen funktioniert der Treiber
- Abschließend würde ich eventuell noch den konkreten Testbericht einmal in Eclipse ausführen
Den Oda Treiber hatte ich ursprünglich aus Eclipse/plugins kopiert. Darum dürfte sich das erübrigen.

Kann es sein, dass der ODA Treiber externe Abhängigkeiten hat? (MANIFEST.MF Require-Bundle, ...).
An der Stelle im Manifest steht:
Require-Bundle: org.eclipse.core.runtime,org.eclipse.datatools.connect
ivity.oda;bundle-version="[3.1.0,4.0.0)",org.eclipse.datatools.connec
tivity.oda.profile;bundle-version="[3.0.4,4.0.0)",org.hibernate.eclipse
Ich habe ähnlich lautendes aus dem Eclipse-Plugins-Ordner in den Plugins-Ordner von BIRT kopiert, geändert hat sich danach nichts.

Zum Test habe ich dann mal alles komplett aus Eclipse-Plugins in BIRT-Plugins kopiert und siehe da, die Fehlermeldung ändert sich:
Code:
06.06.2011 14:44:29 org.eclipse.birt.report.engine.api.impl.RunAndRenderTask doRun
SCHWERWIEGEND: An error happened while running the report. Cause:
java.lang.NullPointerException
	at org.jboss.tools.birt.oda.impl.ConsoleConfigurationOdaFactory.getSessionFactory(ConsoleConfigurationOdaFactory.java:54)
	at org.jboss.tools.birt.oda.impl.ConsoleConfigurationOdaFactory.<init>(ConsoleConfigurationOdaFactory.java:34)
	at org.jboss.tools.birt.oda.impl.HibernateConnection.open(HibernateConnection.java:47)
	at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection.open(OdaConnection.java:250)
	at org.eclipse.birt.data.engine.odaconsumer.ConnectionManager.openConnection(ConnectionManager.java:165)
	at org.eclipse.birt.data.engine.executor.DataSource.newConnection(DataSource.java:224)
	at org.eclipse.birt.data.engine.executor.DataSource.open(DataSource.java:212)
	at org.eclipse.birt.data.engine.impl.DataSourceRuntime.openOdiDataSource(DataSourceRuntime.java:208)
	at org.eclipse.birt.data.engine.impl.QueryExecutor.openDataSource(QueryExecutor.java:406)
	at org.eclipse.birt.data.engine.impl.QueryExecutor.prepareExecution(QueryExecutor.java:316)
	at org.eclipse.birt.data.engine.impl.PreparedQuery.doPrepare(PreparedQuery.java:455)
	at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.produceQueryResults(PreparedDataSourceQuery.java:190)
	at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:178)
	at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.execute(PreparedOdaDSQuery.java:145)
	at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.execute(DataRequestSessionImpl.java:616)
	at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:152)
	at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:265)
	at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1890)
	at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)
	at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)
	at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)
	at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)
	at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.resumeLayout(HTMLInlineStackingLM.java:111)
	at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.layoutNodes(HTMLInlineStackingLM.java:160)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:132)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
	at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)
	at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)
	at com.dyfa.RunAndRenderTask.runReport(RunAndRenderTask.java:67)
	at com.dyfa.App.main(App.java:18)
org.eclipse.birt.report.engine.api.EngineException: Error happened while running the report.
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:196)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)
	at com.dyfa.RunAndRenderTask.runReport(RunAndRenderTask.java:67)
	at com.dyfa.App.main(App.java:18)
Caused by: java.lang.NullPointerException
	at org.jboss.tools.birt.oda.impl.ConsoleConfigurationOdaFactory.getSessionFactory(ConsoleConfigurationOdaFactory.java:54)
	at org.jboss.tools.birt.oda.impl.ConsoleConfigurationOdaFactory.<init>(ConsoleConfigurationOdaFactory.java:34)
	at org.jboss.tools.birt.oda.impl.HibernateConnection.open(HibernateConnection.java:47)
	at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaConnection.open(OdaConnection.java:250)
	at org.eclipse.birt.data.engine.odaconsumer.ConnectionManager.openConnection(ConnectionManager.java:165)
	at org.eclipse.birt.data.engine.executor.DataSource.newConnection(DataSource.java:224)
	at org.eclipse.birt.data.engine.executor.DataSource.open(DataSource.java:212)
	at org.eclipse.birt.data.engine.impl.DataSourceRuntime.openOdiDataSource(DataSourceRuntime.java:208)
	at org.eclipse.birt.data.engine.impl.QueryExecutor.openDataSource(QueryExecutor.java:406)
	at org.eclipse.birt.data.engine.impl.QueryExecutor.prepareExecution(QueryExecutor.java:316)
	at org.eclipse.birt.data.engine.impl.PreparedQuery.doPrepare(PreparedQuery.java:455)
	at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.produceQueryResults(PreparedDataSourceQuery.java:190)
	at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:178)
	at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.execute(PreparedOdaDSQuery.java:145)
	at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.execute(DataRequestSessionImpl.java:616)
	at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:152)
	at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:265)
	at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1890)
	at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)
	at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)
	at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)
	at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)
	at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.resumeLayout(HTMLInlineStackingLM.java:111)
	at org.eclipse.birt.report.engine.layout.html.HTMLInlineStackingLM.layoutNodes(HTMLInlineStackingLM.java:160)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
	at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
	at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:132)
	at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
	at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
	at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)
	at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)
	... 3 more

Die Exception wird in einer Klasse des Oda Treibers geworfen. Der muss also gefunden worden sein. Leider kann ich nicht sagen, an welcher der Dateien es liegt, die ich hinüberkopiert habe. Ich habe auch einfach nur mal alles rüberkopiert, das oda im Namen hat - das war es nicht. Ich probiere weiter.

Null ist hier offenbar die consoleConfiguration. Das ist die Codestelle im Treiber, wo die Exception auftritt (letzte hier gezeigte Zeile):
Code:
public SessionFactory getSessionFactory(Properties properties) throws OdaException {
		String configurationName = properties.getProperty(CONFIGURATION);
        ConsoleConfiguration[] configurations = KnownConfigurations.getInstance().getConfigurations();
        for (int i = 0; i < configurations.length; i++) {
			if (configurations[i].getName().equals(configurationName)) {
				consoleConfiguration=configurations[i];
				break;
			}
		}
        if (!isOpen()) {
        	try {
				sessionFactory = consoleConfiguration.getSessionFactory();

2. Probiere ich gleich.

3. Mache ich bereits, da ich BIRT in ein Portlet integrieren musste. Den BIRT-Code für das Portlet habe ich für die Konsolen-Anwendung übernommen.

Als Alternative könnte man einen JDBC Treiber ausprobieren, der im plugins Verzeichnis der BIRT-Runtime in dem Plugin org.eclipse.birt.report.data.oda.jdbc_2.6.2.r262_v20110127\drivers abgelegt werden.
Wie komme ich zu diesem Treiber?

Viele Grüße
Ezra
 
Zuletzt bearbeitet:

cosmit

Mitglied
Jederzeit gerne.

Zu jeder Datenbank gibt es im grunde einen JDBC Treiber. Du nutzt hsql und für die gibts auch einen.
Anbei ein Link zu einer Übersicht:
JDBC Treiberklassen

Das mit kopieren der Eclipse Klassen kann funktionieren. Mir ist in dem ODA Treiber aufgefallen das dort ein plugin mit dem Namen
org.hibernate.eclipse genutzt wird. Ich denke dies wird der Übeltäter sein. Lösche mal alle reinkopierten Plugins raus und pack das org.hibernate.eclipse rein.

Habt ihr den ODA Treiber selbst geschrieben oder ist das ein Beispiel Treiber?

Ansonsten fällt mir nur noch ein den ODA erstmal weg zu lassen, sofern nicht selbst geschrieben, und dafür einen JDBC Treiber zu nehmen, den Bericht entsprechend umzustellen und dann zu testen. Sollte das gehen wissen wir das der ODA Treiber das Problem ist.

MfG
 

Ezra

Bekanntes Mitglied
org.hibernate.eclipse genutzt wird. Ich denke dies wird der Übeltäter sein. Lösche mal alle reinkopierten Plugins raus und pack das org.hibernate.eclipse rein.
Das hatte ich bereits probiert. Ohne Erfolg.

Habt ihr den ODA Treiber selbst geschrieben oder ist das ein Beispiel Treiber?
Dazu muss ich meinen Kollegen (und Projektleiter) Ende der Woche fragen. Das Projekt hatte er bereits für mich eingerichtet als ich dazustieß, da ich zu diesem Zeitpunkt (Februar dieses Jahr) noch nie mit Webprogrammierung zu tun hatte und er mir den Einstieg etwas erleichtern wollte (mit den zahlreichen Frameworks hatte ich auch erst mal genug zu tun). Ich denke jedoch, dass der Treiber einfach aus JBoss Tools ist.

Ansonsten fällt mir nur noch ein den ODA erstmal weg zu lassen, sofern nicht selbst geschrieben, und dafür einen JDBC Treiber zu nehmen, den Bericht entsprechend umzustellen und dann zu testen. Sollte das gehen wissen wir das der ODA Treiber das Problem ist.
Ok, ich melde mich wieder, wenn ich das getan habe (und 2. von oben).
 
Zuletzt bearbeitet:

cosmit

Mitglied
Hallo,

nochmal für mein Verständnis:
Ihr versucht mittels der Hibernate ODA Datasource auf eine mittels Hibernate und JPA definierte bestehende Datenquelle aus einem BIRT Bericht zuzugreifen?

Funktioniert den JPA und die Team Entity?

MfG
 

Ezra

Bekanntes Mitglied
Ihr versucht mittels der Hibernate ODA Datasource auf eine mittels Hibernate und JPA definierte bestehende Datenquelle aus einem BIRT Bericht zuzugreifen?
Ja.

Funktioniert den JPA und die Team Entity?
Ja, das geht.

Ansonsten habe ich noch ein Test gefunden für die SEAM BIRT Integration. Weiß nicht ob ihr die benutzt, sieht zumindest so aus.
Wir benutzen Seam, aber die Integration ließ sich nicht im Standardverfahren für ein Portlet durchführen. Darum greife ich direkt auf die Reporting Engine API zu und habe ein eigenes JSF-Tag gestaltet, das so einen Report in eine XHTML-Seite einbettet. Hat auch alles geklappt, bis ich es mit den eigenen Daten und Hibernate versucht habe. JSF selbst wird über die JBoss Portletbridge integriert.
In meinem Testprogramm spielt Seam allerdings keine Rolle.

Danke für die Links. Ich guck mal rein.
 
Zuletzt bearbeitet:

cosmit

Mitglied
Ahja ok, ich denke jetzt verstehe ich langsam dein Problem.
Ich fragte nur deswegen, weil man für die Hibernate ODA Bridge mit der BIRT SEAM Integration einige Arbeiten machen muss, die ich bei dir nicht gesehen habe.

So wie ich den Fehler jetzt deute, gibt es ein Problem der Hibernate ODA Datasource auf die JPA Session zuzugreifen (java:comp/ds_name). Ich denke der JNDI Name dürfte im Bericht an der DS stimmen. Jetzt wäre noch die Frage des JNDI Contextes. Es gibt ja 2. Einen globalen und einen auf die Applikation bezogen.

Aktuell bin ich mir nicht sicher welchen die BIRT Runtime benutzt. Vielleicht kannst du in die Richtung mal denken.
 

cosmit

Mitglied
Kann es sein das eine Einstellung fehlt damit BIRT auf die Session Factory von Hibernate zugreifen kann?
<property name="hibernate.session_factory_name" value="java:/projectname"/>

Schau mal den unten stehenden Link an. Das ganz letzte Kapitel deployment.
JBoss BIRT Integration

MfG
 

Ezra

Bekanntes Mitglied
Hallo cosmit,

ich habe einen alternativen Weg gefunden. Über die Scripted Data Source kann ich per JavaScript auf Hibernate zugreifen. Im Testprojekt funktioniert das prima. Jetzt implementiere ich das mal testweise in das richtige Projekt. Nachteilig ist nur, dass die Erstellung der Reports so aufwändiger ist. Aber so habe ich einen Weg, falls sonst nichts mehr geht.

Eine andere Idee wäre den ODA Treiber selbst zu schreiben.

Natürlich wäre es am schönsten, wenn es mit dem JBoss Tools ODA Treiber noch klappt. Ich hänge nur gerade etwas mit der Abarbeitung Deiner Vorschläge hinterher.
Es ist eine große Erleichterung, dass nun mal was funktioniert. Eigentlich hatte ich schon mangels weiterer Ideen aufgegeben, aber dank Deiner Vorschläge konnte ich weitermachen. Darum ein dickes Danke an Dich.

Ezra
 

cosmit

Mitglied
Kein Problem.

Scripted Datasource ist zwar aufwendig und schwer zu pflegen aber ein weg der gehen sollte.

Wir sind bisher noch nicht über eine solche Anforderung bei unseren Kunden gestolpert, ansonsten hätte ich vermutlich eher helfen können.

Ich geb das mal unseren Technik an die Hand, die testen das mit unsere BIRT Implementierung aus. Vielleicht findet sich da was.

MfG
Und viel Erfolg
 

Ezra

Bekanntes Mitglied
Kann es sein das eine Einstellung fehlt damit BIRT auf die Session Factory von Hibernate zugreifen kann?
<property name="hibernate.session_factory_name" value="java:/projectname"/>
Das habe ich nun probiert (mit cip als Projektname) und zusätzlich die hier genannten Schritte: Eclipse Community Forums: BIRT Report previewing OK then crashing on deploy (das ist der Link, den Du mir geschickt hattest)
Leider kommt weiterhin die NullPointerException. Ich denke, ich frage diesbezüglich mal im JBoss Forum. Das dürfte ja deren Gebiet sein.

Mit dem Einbau der Scripted Datasource ins Originalprojekt bekomme ich derweil diese Fehlermeldung innerhalb des Reports:
The following items have errors:
Code:
ReportDesign (id = 1):
+ There are errors evaluating script "hb = new Packages.com.dyfa.cip.session.reporting.HibernateQueryUtil();
teams = hb.listTeams("from Team");
iterator = teams.iterator();":
{1}.
+ There are errors evaluating script "if(iterator.hasNext() == false ){
   return false;
}

var team = iterator.next( );
row["teamName"] = team.getTeamName();
return true;":
{1}.
+ Data Set script method "Fetch" returned null; expected a Boolean value.
Leider ist die Fehlermeldung nicht sehr genau.
Ich benutze das gleiche Script im Tesprojekt und dort funktioniert es. Ich vermutete bisher, dass dieser Teil:
Code:
hb = new Packages.com.dyfa.cip.session.reporting.HibernateQueryUtil();
die Klasse nicht findet, denn das ist die einzige Zeile im Script, die ich anpassen musste. Hast Du zufällig eine Idee, woran das liegen könnte? Das Package der Klasse heißt definitiv "com.dyfa.cip.session.reporting". Oder fehlt vielleicht eine Library? Mir ist aufgefallen, dass diese Reports nicht im Eclipse-Preview funktionieren (auch hier erscheint der Scriptfehler), dafür aber, wenn ich im Testprojekt HTML erzeuge.
 

cosmit

Mitglied
Das klingt irgendwie nach einem Classloader Problem aber dem wiederspricht die Fehlermeldung.
Eine NullPointerException sagt aus, dass auf ein Objekt Null ist aber man trotzdem versucht hat eine Function oder Variable zu Nutzen oder es sonst irgendwie weiterzuverarbeiten.

Wenn eine Lib fehlt dann würde ich eine ClassNotFoundException erwarten. Seltsam ist auch dass es in Eclipse nicht funktioniert, wobei man da aber differenzieren muss.

Die BIRT Funktionen in Eclipse werden in ihrem eigenen Context genutzt, was bedeutet das dass Projekt(oder mehrere) nicht genutzt werden im Classloader. Deswegen geht die Preview vermutlich nicht, da die Entities nicht gefunden werden.
An der Stelle würde ich mal schauen ob ich dem BIRT Plugins entsprechende ClassPath Informationen mit zukommen lassen kann. Alternativ kann man ein JAR mit den Entities bereitstellen. Ich weiß grad nicht ob ich hier falsch liege, müsste ich mal testen. Generell sollte man BIRT den eigenen ClassLoader mitgeben, siehe:
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, yourclass.class.getClassLoader());

Das es im Testprojekt funktioniert ist Ok. Ich gehe davon aus dass das Testprojekt auf die selbe Art und Weise auf die BIRT Runtime zugreift (externe BIRT Runtime). Die Implementierung dürfte auch identisch sein.

Aber jetzt wird's ein wenig kompliziert: Die ClassLoader im JBoss verhalten sich per Default glaub ich auf den Context bezogen. Bedeutet dass dein EAR nur auf seine eigenen Klassen sowie auch common lib zugreifen kann, da der Classloader nicht alle Klassen anderer Applikationen bereit stellt. Das kann man zwar per Config ändern aber es dürfte dein Problem nicht lösen.

Probiere doch mal dir ein WAR zu bauen und da deine Testapplikation rein zu packen. Wenn das nicht geht dann dürfte es in der tat ein Classloader Problem sein. Kannst du mir mal das Logfile des JBoss dranhängen dann sehe ich vielleicht etwas.
 

Ezra

Bekanntes Mitglied
Mh, mir ist nicht klar, worauf was bezogen war. Vielleicht habe ich mich nicht gut ausgedrückt.

A: Ich versuche zum einen immer noch die Reports mit der Hibernate Datasource (und dem JBoss Tools ODA-Treiber) zum Laufen zu bringen. Das funktioniert weder im Testprojekt noch im Originalprojekt. Es klappt nur im Eclipse Preview. Hier kommt die NullPointerException.

B: Zum zweiten probiere ich Hibernate über eine Scripted Datasource zu verwenden. Hier erhalte ich im Originalprojekt die Meldung, dass das Script falsch sei, obwohl es im Testprojekt geht. Eclipse Preview geht nicht, die Meldung ist dieselbe.

Generell sollte man BIRT den eigenen ClassLoader mitgeben, siehe:
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, yourclass.class.getClassLoader());
Das hatte ich bisher nicht getan. Nun ist es drin. Bringt aber vorerst in beiden Projekten nichts Neues. Den Rest probiere ich jetzt.
 
Zuletzt bearbeitet:

cosmit

Mitglied
Mh, mir ist nicht klar, worauf was bezogen war. Vielleicht habe ich mich nicht gut ausgedrückt.

A: Ich versuche zum einen immer noch die Reports mit der Hibernate Datasource (und dem JBoss Tools ODA-Treiber) zum Laufen zu bringen. Das funktioniert weder im Testprojekt noch im Originalprojekt. Es klappt nur im Eclipse Preview. Hier kommt die NullPointerException.

B: Zum zweiten probiere ich Hibernate über eine Scripted Datasource zu verwenden. Hier erhalte ich im Originalprojekt die Meldung, dass das Script falsch sei, obwohl es im Testprojekt geht. Eclipse Preview geht nicht, die Meldung ist dieselbe.


Das hatte ich bisher nicht getan. Nun ist es drin. Bringt aber vorerst in beiden Projekten nichts Neues. Den Rest probiere ich jetzt.

War auf B bezogen. Kannst du mir bitte für das Orginialprojekt mal die Logfiles bereit stellen. Vielleicht fällt mir was auf.
 

cosmit

Mitglied
org.eclipse.core.internal.resources.ResourceException: Resource is out of sync with the file system

Mmh, mach mal ein Refresh deines Projektes.
Andere Sache noch. Benutzt du WTP zum Testen des EARs auch Eclipse? Wenn ja, dann geh mal in deinem Workspace in den .metadata/**wtp**/tmp0 Ordner. Sorry, hab gerade vergessen wie der WTP Ordner genau heißt, ist aber ersichtlich wenn du drüber schaust. Da steht glaub was von wtp und core.

In dem Verzeichnis wird dein EAR abgelegt. Lösche das dann mal und versuche es nochmal.

Aber mache bitte vorher ne Sicherheitskopie deines Workspaces.

Was anderes kann ich aus dem Eclipse Logfile nicht lesen. Sorry.
 

Ezra

Bekanntes Mitglied
Oh, danke sehr. Es geht jetzt mit der Scripted Datasource. Ich kann nicht genau sagen, woran es lag, vielleicht war es der Refresh, vielleicht ein Tippfehler. Ich weiß es nicht. Aber es geht. :)
 

Ähnliche Java Themen

Neue Themen


Oben