Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
THRUST SERVICES & TOOLS
CLOUD EDITIONS
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Cannot find or process the ODA data source extension configuration.
PommePote
Hi everyone,<br />
I'm here because I have some difficulties to deploy BIRT into my J2EE-maven-application.<br />
I used to "google" all my problems, but for this, I don't really find answers, so I hope you'll be able to help me.<br />
<br />
I want to deploy BIRT 2.6.2 in my application to generate HTML/PDF report, using PostgreSQL as DataSource.<br />
I have no problem to generate these reports in Eclipse, but It seems that when I want to generate a HTML (or PDF) report within the application, this error occurs :<br />
<blockquote class='ipsBlockquote' ><p>Table (id = 10):<br />
+ An exception occurred during processing. Please see the following message for details:<br />
Cannot find or process the org.eclipse.birt.report.data.oda.jdbc driver's data source extension configuration.<br />
Cannot find the ODA dataSource extension (org.eclipse.birt.report.data.oda.jdbc).<br />
Check the workspace log file for any problems with loading the extension bundle and its dependencies.</p></blockquote>
<br />
Here you can view the logs :<br />
<blockquote class='ipsBlockquote' ><p>SEVERE: Cannot find or process the ODA data source extension configuration.<br />
java.lang.IllegalArgumentException: Cannot find the ODA dataSource extension (org.eclipse.birt.report.data.oda.jdbc).<br />
Check the workspace log file for any problems with loading the extension bundle and its dependencies.<br />
at org.eclipse.datatools.connectivity.oda.util.manifest.ManifestExplorer.getExtensionManifest(ManifestExplorer.java:200)<br />
at org.eclipse.birt.data.engine.odaconsumer.Driver.doGetDriverManifest(Driver.java:150)<br />
at org.eclipse.birt.data.engine.odaconsumer.Driver.findDataSourceExtensionConfig(Driver.java:126)<br />
at org.eclipse.birt.data.engine.odaconsumer.Driver.getDriverExtensionConfig(Driver.java:78)<br />
at org.eclipse.birt.data.engine.odaconsumer.Driver.getExtensionConfig(Driver.java:60)<br />
at org.eclipse.birt.data.engine.odaconsumer.Driver.createNewDriverHelper(Driver.java:97)<br />
at org.eclipse.birt.data.engine.odaconsumer.DriverManager.getDriverHelper(DriverManager.java:111)<br />
at org.eclipse.birt.data.engine.odaconsumer.DriverManager.getNewDriverHelper(DriverManager.java:100)<br />
at org.eclipse.birt.data.engine.odaconsumer.ConnectionManager.openConnection(ConnectionManager.java:150)<br />
at org.eclipse.birt.data.engine.executor.DataSource.newConnection(DataSource.java:224)<br />
at org.eclipse.birt.data.engine.executor.DataSource.open(DataSource.java:212)<br />
at org.eclipse.birt.data.engine.impl.DataSourceRuntime.openOdiDataSource(DataSourceRuntime.java:208)<br />
at org.eclipse.birt.data.engine.impl.QueryExecutor.openDataSource(QueryExecutor.java:406)<br />
at org.eclipse.birt.data.engine.impl.QueryExecutor.prepareExecution(QueryExecutor.java:316)<br />
at org.eclipse.birt.data.engine.impl.PreparedQuery.doPrepare(PreparedQuery.java:455)<br />
at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.produceQueryResults(PreparedDataSourceQuery.java:190)<br />
at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:178)<br />
at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.execute(PreparedOdaDSQuery.java:145)<br />
at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.execute(DataRequestSessionImpl.java:616)<br />
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:152)<br />
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:265)<br />
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1890)<br />
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)<br />
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)<br />
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)<br />
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)<br />
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99)<br />
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)<br />
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)<br />
at org.sigaps.sigaps_ui.web.utils.birt.WebReport.generateIndividualAnalyse(WebReport.java:229)<br />
at org.sigaps.sigaps_ui.web.utils.birt.WebReport.doGet(WebReport.java:49)<br />
at org.sigaps.sigaps_ui.web.utils.birt.WebReport.doPost(WebReport.java:173)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)<br />
...<br />
at javax.faces.component.UICommand.broadcast(UICommand.java:311)<br />
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)<br />
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)<br />
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)<br />
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)<br />
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)<br />
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)<br />
...<br />
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)<br />
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)<br />
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)<br />
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)<br />
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)<br />
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)<br />
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)</p></blockquote>
<br />
And here is my app structure :<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
+ WEB-INF/
+ platform/
+ configuration/
+ ...
+ plugins/
+ org.eclipse.birt.report.data.oda.jdbc_2.6.2.r262_v20110127/
+ drivers/
+ postgresql-8.4-702.jdbc4
+ lots of .jar and folders...
</pre>
<br />
Thanks you for your help, if you need more informations to help me, don't hesitate.<br />
<br />
PS: Sorry if my english seems bad to you, I'm a french student and not yet bilingual =p<br />
Thanks !<br />
<br />
PommePote.
Find more posts tagged with
Comments
JasonW
Does the sample databse work? Just create a report that uses the classic models db and put in a query like: Select * from orderdetails where ordernumber = 10101. Are you using the API? If so shutdown tomcat and clear the platform/configuration directory of everything but the config.ini file and restart tomcat.
Jason
PommePote
<blockquote class='ipsBlockquote' data-author="'JasonW'" data-cid="80951" data-time="1312304709" data-date="02 August 2011 - 10:05 AM"><p>
Does the sample databse work? Just create a report that uses the classic models db and put in a query like: Select * from orderdetails where ordernumber = 10101. Are you using the API? If so shutdown tomcat and clear the platform/configuration directory of everything but the config.ini file and restart tomcat.<br />
<br />
Jason<br /></p></blockquote>
<br />
Hi, <br />
Thank you for the answer !<br />
<br />
So I try to create a simple report using the classic models db, and I finally have the same errors :<br />
(I pastebin It, because the logs are too long) <br />
<a class='bbc_url' href='
http://pastebin.com/GNfuNtY2'>http://pastebin.com/GNfuNtY2</a><br
/>
<br />
And here is the XML reports :<br />
<pre class='_prettyXprint _lang-auto _linenums:0'><?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.22" id="1">
<property name="createdBy">Eclipse BIRT Designer Version 2.6.2.r262_v20110209 Build <2.6.2.v20110219-1842></property>
<property name="units">in</property>
<property name="iconFile">/templates/blank_report.gif</property>
<property name="bidiLayoutOrientation">ltr</property>
<property name="imageDPI">96</property>
<data-sources>
<oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="Data Source" id="7">
<list-property name="privateDriverProperties">
<ex-property>
<name>contentBidiFormatStr</name>
<value>ILYNN</value>
</ex-property>
<ex-property>
<name>metadataBidiFormatStr</name>
<value>ILYNN</value>
</ex-property>
</list-property>
<property name="odaDriverClass">org.eclipse.birt.report.data.oda.sampledb.Driver</property>
<property name="odaURL">jdbc:classicmodels:sampledb</property>
<property name="odaUser">ClassicModels</property>
</oda-data-source>
</data-sources>
<data-sets>
<oda-data-set extensionID="org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" name="GetData" id="8">
<list-property name="columnHints">
<structure>
<property name="columnName">ORDERNUMBER</property>
<text-property name="displayName">ORDERNUMBER</text-property>
<text-property name="heading">ORDERNUMBER</text-property>
</structure>
<structure>
<property name="columnName">PRODUCTCODE</property>
<text-property name="displayName">PRODUCTCODE</text-property>
<text-property name="heading">PRODUCTCODE</text-property>
</structure>
<structure>
<property name="columnName">QUANTITYORDERED</property>
<text-property name="displayName">QUANTITYORDERED</text-property>
<text-property name="heading">QUANTITYORDERED</text-property>
</structure>
<structure>
<property name="columnName">PRICEEACH</property>
<text-property name="displayName">PRICEEACH</text-property>
<text-property name="heading">PRICEEACH</text-property>
</structure>
<structure>
<property name="columnName">ORDERLINENUMBER</property>
<text-property name="displayName">ORDERLINENUMBER</text-property>
<text-property name="heading">ORDERLINENUMBER</text-property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">ORDERNUMBER</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">PRODUCTCODE</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">3</property>
<property name="name">QUANTITYORDERED</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">4</property>
<property name="name">PRICEEACH</property>
<property name="dataType">float</property>
</structure>
<structure>
<property name="position">5</property>
<property name="name">ORDERLINENUMBER</property>
<property name="dataType">integer</property>
</structure>
</list-property>
</structure>
<property name="dataSource">Data Source</property>
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">ORDERNUMBER</property>
<property name="nativeName">ORDERNUMBER</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">PRODUCTCODE</property>
<property name="nativeName">PRODUCTCODE</property>
<property name="dataType">string</property>
</structure>
<structure>
<property name="position">3</property>
<property name="name">QUANTITYORDERED</property>
<property name="nativeName">QUANTITYORDERED</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">4</property>
<property name="name">PRICEEACH</property>
<property name="nativeName">PRICEEACH</property>
<property name="dataType">float</property>
</structure>
<structure>
<property name="position">5</property>
<property name="name">ORDERLINENUMBER</property>
<property name="nativeName">ORDERLINENUMBER</property>
<property name="dataType">integer</property>
</structure>
</list-property>
<xml-property name="queryText"><![CDATA[Select * from classicmodels.orderdetails where ordernumber = 10101]]></xml-property>
</oda-data-set>
</data-sets>
<styles>
<style name="report" id="4">
<property name="fontFamily">sans-serif</property>
<property name="fontSize">10pt</property>
</style>
<style name="crosstab-cell" id="5">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
<style name="crosstab" id="6">
<property name="borderBottomColor">#CCCCCC</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">1pt</property>
<property name="borderLeftColor">#CCCCCC</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">1pt</property>
<property name="borderRightColor">#CCCCCC</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">1pt</property>
<property name="borderTopColor">#CCCCCC</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">1pt</property>
</style>
</styles>
<page-setup>
<simple-master-page name="Simple MasterPage" id="2">
<page-footer>
<text id="3">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
</text>
</page-footer>
</simple-master-page>
</page-setup>
<body>
<table id="60">
<property name="dataSet">GetData</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">ORDERNUMBER</property>
<text-property name="displayName">ORDERNUMBER</text-property>
<expression name="expression" type="javascript">dataSetRow["ORDERNUMBER"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">PRODUCTCODE</property>
<text-property name="displayName">PRODUCTCODE</text-property>
<expression name="expression" type="javascript">dataSetRow["PRODUCTCODE"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">QUANTITYORDERED</property>
<text-property name="displayName">QUANTITYORDERED</text-property>
<expression name="expression" type="javascript">dataSetRow["QUANTITYORDERED"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">PRICEEACH</property>
<text-property name="displayName">PRICEEACH</text-property>
<expression name="expression" type="javascript">dataSetRow["PRICEEACH"]</expression>
<property name="dataType">float</property>
</structure>
<structure>
<property name="name">ORDERLINENUMBER</property>
<text-property name="displayName">ORDERLINENUMBER</text-property>
<expression name="expression" type="javascript">dataSetRow["ORDERLINENUMBER"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">OrderNumber</property>
<expression name="expression" type="javascript">row["ORDERNUMBER"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">ProductCode</property>
<expression name="expression" type="javascript">row["PRODUCTCODE"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">Quantity</property>
<expression name="expression" type="javascript">row["QUANTITYORDERED"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">Price</property>
<expression name="expression" type="javascript">row["PRICEEACH"]</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<column id="81"/>
<column id="82"/>
<column id="83"/>
<column id="84"/>
<header>
<row id="61">
<cell id="62"/>
<cell id="63"/>
<cell id="64"/>
<cell id="65"/>
</row>
</header>
<detail>
<row id="66">
<cell id="67">
<data id="85">
<property name="resultSetColumn">OrderNumber</property>
</data>
</cell>
<cell id="68">
<data id="86">
<property name="resultSetColumn">ProductCode</property>
</data>
</cell>
<cell id="69">
<data id="87">
<property name="resultSetColumn">Quantity</property>
</data>
</cell>
<cell id="70">
<data id="88">
<property name="resultSetColumn">Price</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="76">
<cell id="77"/>
<cell id="78"/>
<cell id="79"/>
<cell id="80"/>
</row>
</footer>
</table>
</body>
</report>
</pre>
<br />
I also try to clean the platform/configuration directory except the config.ini file, but always the same result.<br />
<br />
I don't know if it matters but I'm using Jetty or Glassfish to deploy the application.<br />
<br />
Here is how I call the report :<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>pResponse.setContentType("text/html");
ServletContext sc = pReq.getSession().getServletContext();
EngineConfig config = new EngineConfig();
config.setLogConfig(configProps.getProperty("logDirectory"), Level.FINEST);
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader());
config.setEngineHome("");
IPlatformContext context = new PlatformServletContext( sc );
config.setPlatformContext( context );
Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
birtReportEngine = factory.createReportEngine( config );
IReportRunnable design;
String reportPath = sc.getRealPath("/Reports") + File.separator + "TestReport.rptdesign";
design = birtReportEngine.openReportDesign(reportPath);
IRunAndRenderTask task1 = birtReportEngine.createRunAndRenderTask(design);
task1.validateParameters();
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
options.setHtmlPagination(false);
options.setHtmlRtLFlag(false);
options.setEmbeddable(false);
options.setOutputStream(pResponse.getOutputStream());
options.setBaseImageURL(pReq.getContextPath() + "/Images");
options.setImageDirectory(sc.getRealPath("/Images"));
options.setImageHandler(new HTMLServerImageHandler());
task1.setRenderOption(options);
task1.setLocale(new Locale("fr"));
task1.run();</pre>
<br />
Thanks you for your help.<br />
<br />
PommePote
CBR
It's most likely that the JDBC ODA Plugin is not active in the BIRT runtime platform. A plugin not beeing active can caused by:
- The plugin itself is missing (that doesn't seem to be the case, because it shows up in your folder structure
- A plugin that is required to run the JDBC ODA plugin is missing (seems to be most likely the case)
Somewhere in your folder structure should be a file named .log. It's a textfile. If you startup the platform. The platform logs errors about missing plugins to that file.
You need to start your application and generate a report at least once to have the file created.
PommePote
<blockquote class='ipsBlockquote' data-author="'cbrell'" data-cid="81164" data-time="1312548113" data-date="05 August 2011 - 05:41 AM"><p>
It's most likely that the JDBC ODA Plugin is not active in the BIRT runtime platform. A plugin not beeing active can caused by:<br />
- The plugin itself is missing (that doesn't seem to be the case, because it shows up in your folder structure<br />
- A plugin that is required to run the JDBC ODA plugin is missing (seems to be most likely the case)<br />
<br />
Somewhere in your folder structure should be a file named .log. It's a textfile. If you startup the platform. The platform logs errors about missing plugins to that file.<br />
You need to start your application and generate a report at least once to have the file created.<br /></p></blockquote>
<br />
Hi cbrell,<br />
Where exactly the file .log is suppose to be created ?<br />
Because I can't find it anywhere.<br />
<br />
When I launch my application, somes files/directories (for OSGI I think) are created in /platform/configuration/, but there is no file .log (or others log files) in there.<br />
Maybe there is a config to set up ?<br />
<br />
Thanks you !<br />
<br />
PommePote.
CBR
Is there a workspace directory besides the plugin folder?
PommePote
<blockquote class='ipsBlockquote' data-author="'cbrell'" data-cid="81187" data-time="1312565437" data-date="05 August 2011 - 10:30 AM"><p>
Is there a workspace directory besides the plugin folder?<br /></p></blockquote>
<br />
Hi cbrell,<br />
Unfortunately, there is no 'workspace' directory, neither in the plugin folder nor in the platform folder.
JasonW
If you comment out this line:
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader
Does it work?
Jason
PommePote
<blockquote class='ipsBlockquote' data-author="'JasonW'" data-cid="81282" data-time="1312832675" data-date="08 August 2011 - 12:44 PM"><p>
If you comment out this line:<br />
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader<br />
<br />
Does it work?<br />
<br />
Jason<br /></p></blockquote>
<br />
Hello JasonW,<br />
I have the same error when I comment out this line.<br />
<br />
Maybe I'll try to setup a new-clean project this afternoon, and try to run the example report I've made the last time.<br />
<br />
PS : I don't know if this can help, I'm working on Windows (XP), maybe there is some specifics configurations<br />
<br />
EDIT :<br />
We just try to generate a report on a Linux platform and no errors, I'm really confused...
JasonW
Look at the WEB-INF/platform/configuration directory. After you startup BIRT do any files get written in the directory. If not check the permissions on the folder.
Jason
PommePote
Hi Jason, sorry for the late, but I was on hollidays.
So yes, after I startup the application, lots of .files are created in the designated folder, so I think there is no problem with permissions on files.
Thanks,
PommePote
JasonW
Does the default web viewer work in your environment?
Jason