AdapterException: The data source of this data set can not be null. [message #555465] |
Thu, 26 August 2010 16:56 |
|
hi there,
hope you can help me with a problem that is bugging me...
I just created a report that uses scripted datasources fetching data from some pojos. no big deal, works fine in eclipse report designer!
now I want to have it all in a servlet. Basically I followed the instructions in the wiki ( http://wiki.eclipse.org/Servlet_Example_%28BIRT%29_2.1 ) and try to make it run in tomcat using wtp. after some minor adaptations the platform and engine started and the report was found.
But: during task.run() I got lots of exceptions, all of them like
An exception occurred during processing. Please see the following message for details:
The data source of this data set can not be null.
org.eclipse.birt.report.data.adapter.api.AdapterException: An exception occurred during processing. Please see the following message for details:
The data source of this data set can not be null.
at org.eclipse.birt.report.data.adapter.impl.DataRequestSessionImpl.prepare(DataRequestSessionImpl.java:526)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.doPrepareQuery(AbstractDataEngine.java:208)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.prepare(AbstractDataEngine.java:172)
at org.eclipse.birt.report.engine.executor.ReportExecutor.execute(ReportExecutor.java:118)
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59)
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplciateReportExecutor.execute(SuppressDuplciateReportExecutor.java:51)
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportExecutor.execute(WrappedReportExecutor.java:59)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:149)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:72)
Obviously the engine cannot find the datasources? do I have to configure the engine to use scripts embedded in the report?
I'm using an IRunAndRenderTask.
this is the birtengine's properties as displayed by the debugger:
[org.eclipse.birt.report.engine.api.EngineConfig.scriptObjects={PARENT_CLASSLOADER=WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@e1899b
}, BIRT_HOME=C:\seu2\tomcat\6.x\wtpwebapps\EWO-Druck\WEB-INF\platform, logLevel=FINEST, PLATFORM_CONTEXT=org.eclipse.birt.core.framework.PlatformServletContext@12a642, org.eclipse.birt.report.engine.api.EngineConfig.emitterConfigs={html=org.eclipse.birt.report.engine.api.HTMLEmitterConfig@615f19}, org.eclipse.birt.report.engine.api.EngineConfig.statusHandler=org.eclipse.birt.report.engine.api.DefaultStatusHandler@1a8e0bd, logDest=c:/temp]
I also had BIRT_HOME=C:\seu2\tomcat\6.x\wtpwebapps\EWO-Druck without any changes...
the pojos for the datasources are within the classpath...
At the moment I'm too blind to see the problem
any help is highly welcome
thanx in advance!
nils
[Updated on: Thu, 26 August 2010 17:01] Report message to a moderator
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #555471 is a reply to message #555465] |
Thu, 26 August 2010 17:05 |
|
You need to set the scriptlib directory that the engine is searching for
the pojos. It also searches this directory if you implemented your
event handlers in java.
config.getAppContext().put("webapplication.projectclasspath ",
"c:/test/myclasspathentry1.jar;c:/tmp/myjar2.jar" );
Jason
On 8/26/2010 12:56 PM, nils.buntenbeck@bluecarat.de wrote:
> hi there,
>
> hope you can help me with a problem that is bugging me...
>
> I just created a report that uses scripted datasources fetching data
> from some pojos. no big deal, works fine in eclipse report designer!
>
> now I want to have it all in a servlet. Basically I followed the
> instructions in the wiki (
> http://wiki.eclipse.org/Servlet_Example_%28BIRT%29_2.1 ) and try to make
> it run in tomcat using wtp. after some minor adaptations the platform
> and engine started and the report was found.
>
> But: during task.run() I got lots of exceptions, all of them like
> An exception occurred during processing. Please see the following
> message for details:
> The data source of this data set can not be null.
> org.eclipse.birt.report.data.adapter.api.AdapterException: An exception
> occurred during processing. Please see the following message for details:
> The data source of this data set can not be null.
> at
> org.eclipse.birt.report.data.adapter.impl.DataRequestSession Impl.prepare(DataRequestSessionImpl.java:526)
>
> at
> org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.d oPrepareQuery(AbstractDataEngine.java:208)
>
> at
> org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.p repare(AbstractDataEngine.java:172)
>
> at
> org.eclipse.birt.report.engine.executor.ReportExecutor.execu te(ReportExecutor.java:118)
>
> at
> org.eclipse.birt.report.engine.internal.executor.wrap.Wrappe dReportExecutor.execute(WrappedReportExecutor.java:59)
>
> at
> org.eclipse.birt.report.engine.internal.executor.dup.Suppres sDuplciateReportExecutor.execute(SuppressDuplciateReportExec utor.java:51)
>
> at
> org.eclipse.birt.report.engine.internal.executor.wrap.Wrappe dReportExecutor.execute(WrappedReportExecutor.java:59)
>
> at
> org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doR un(RunAndRenderTask.java:149)
>
> at
> org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run (RunAndRenderTask.java:72)
>
>
> Obviously the engine cannot find the datasources? do I have to configure
> the engine to use scripts embedded in the report?
> I'm using an IRunAndRenderTask.
>
> this is the birtengine's properties as displayed by the debugger:
> [org.eclipse.birt.report.engine.api.EngineConfig.scriptObjec ts={PARENT_CLASSLOADER=WebappClassLoader
>
> delegate: false
> repositories:
> /WEB-INF/classes/
> ----------> Parent Classloader:
> org.apache.catalina.loader.StandardClassLoader@e1899b
> }, BIRT_HOME=C:\seu2\tomcat\6.x\wtpwebapps\EWO-Druck\WEB-INF\pl atform,
> logLevel=FINEST,
> PLATFORM_CONTEXT=org.eclipse.birt.core.framework.PlatformServletContext@12a642,
> org.eclipse.birt.report.engine.api.EngineConfig.emitterConfi gs={html=org.eclipse.birt.report.engine.api.HTMLEmitterConfig@615f19},
> org.eclipse.birt.report.engine.api.EngineConfig.statusHandle r=org.eclipse.birt.report.engine.api.DefaultStatusHandler@1a8e0bd,
> logDest=c:/temp]
> I also had BIRT_HOME=C:\seu2\tomcat\6.x\wtpwebapps\EWO-Druck without any
> changes...
>
> At the moment I'm too blind to see the problem :(
> any help is highly welcome :)
> thanx in advance!
>
> nils
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #555477 is a reply to message #555471] |
Thu, 26 August 2010 17:28 |
|
thnaks for your quick reply
unfortunately: not working
here's my config section:
ClassLoader cl = Thread.currentThread().getContextClassLoader();
config.getAppContext().put(
EngineConstants.APPCONTEXT_CLASSLOADER_KEY, cl);
config.getAppContext().put("webapplication.projectclasspath",
"C:/seu2/tomcat/6.x/wtpwebapps/EWO-Druck/WEB-INF/classes");
config.setEngineHome(sc.getRealPath("/WEB-INF/platform"));
IPlatformContext context = new PlatformServletContext(sc);
config.setPlatformContext(context);
try {
Platform.startup(config);
} catch (BirtException e) {
e.printStackTrace();
}
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
birtEngine = factory.createReportEngine(config);
I'm using Birt 2.3.2
cheers,
nils
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #555654 is a reply to message #555477] |
Fri, 27 August 2010 13:44 |
|
Are all the jars needed by the pojo in the classpath?
Also when setting the classloader key can you use
NameOfYourClass.class.getClassLoader( ) ?
If the pojos are are in the web-inf/lib or web-inf/classes you should
not need to set the webapplication.projectclasspath to that directory.
This may cause an issue. Try moving the classes into a jar and put them
in another directory.
Jason
On 8/26/2010 1:28 PM, Nils wrote:
> thnaks for your quick reply :)
>
> unfortunately: not working :(
>
> here's my config section:
>
> ClassLoader cl = Thread.currentThread().getContextClassLoader();
> config.getAppContext().put(
> EngineConstants.APPCONTEXT_CLASSLOADER_KEY, cl);
> config.getAppContext().put("webapplication.projectclasspath ",
> "C:/seu2/tomcat/6.x/wtpwebapps/EWO-Druck/WEB-INF/classes");
> config.setEngineHome(sc.getRealPath("/WEB-INF/platform"));
> IPlatformContext context = new PlatformServletContext(sc);
> config.setPlatformContext(context);
>
> try {
> Platform.startup(config);
> } catch (BirtException e) {
> e.printStackTrace();
> }
>
> IReportEngineFactory factory = (IReportEngineFactory) Platform
> .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_E NGINE_FACTORY);
> birtEngine = factory.createReportEngine(config);
>
>
> I'm using Birt 2.3.2
>
> cheers,
> nils
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #556058 is a reply to message #555654] |
Mon, 30 August 2010 17:11 |
|
hi jason,
thanks for your help. I'm sorry to say that I still did not get it running...
I tried to make it run in the example birt-viewer, which finally worked
I tried to make it run as a servlet and failed again...
all jars containing datasource-classes are in the right place, that is web-inf/classes and web-inf/lib.
the classloader knows all relevant classes.
I removed the setting of webapplication.classpath and set the engine-home to the web-inf/platform directory
platform starts, loads the report, creates a task and... fails!
again complaining that the datasource can not be null!
what am I doing wrong?
thank you for your help!
nils
Jason Weathersby wrote on Fri, 27 August 2010 09:44 | Are all the jars needed by the pojo in the classpath?
Also when setting the classloader key can you use
NameOfYourClass.class.getClassLoader( ) ?
If the pojos are are in the web-inf/lib or web-inf/classes you should
not need to set the webapplication.projectclasspath to that directory.
This may cause an issue. Try moving the classes into a jar and put them
in another directory.
Jason
|
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #556067 is a reply to message #556058] |
Mon, 30 August 2010 17:18 |
|
Can you try creating this class:
package my.event.handlers;
import org.eclipse.birt.report.engine.api.script.IUpdatableDataSetR ow;
import
org.eclipse.birt.report.engine.api.script.eventadapter.Scrip tedDataSetEventAdapter;
import org.eclipse.birt.report.engine.api.script.instance.IDataSetI nstance;
public class MyScriptedDataSet extends ScriptedDataSetEventAdapter {
private Integer cnt=0;
private Integer cntT=3;
@Override
public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) {
//dataSet.getInputParameterValue(arg0);
if( cnt < cntT){
try{
row.setColumnValue("col1", new Integer(cnt));
row.setColumnValue("col2", "hello");
cnt++;
return true;
}catch (Exception e){
}
}
return false;
}
}
Jar it and create a scriptlib directory under your app context and put
the jar in there. then add the webapp setting back specifying the full
path to the jar you created and then run the attached report?
Jason
<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.21"
id="1">
<property name="comments">Copyright (c) 2007 <<Your Company
Name here>></property>
<property name="createdBy">Eclipse BIRT Designer Version
2.5.2.v20100208 Build <2.5.2.v20100210-0630></property>
<html-property name="description">Creates a blank report with no
predefined content.</html-property>
<property name="units">in</property>
<text-property name="displayName">Blank Report</text-property>
<property name="iconFile">/templates/blank_report.gif</property>
<property name="layoutPreference">auto layout</property>
<data-sources>
<script-data-source name="Data Source" id="6">
<property name="newHandlerOnEachEvent">true</property>
</script-data-source>
</data-sources>
<data-sets>
<script-data-set name="Data Set" id="7">
<property
name="eventHandlerClass">my.event.handlers.MyScriptedDataSet </property>
<property name="newHandlerOnEachEvent">true</property>
<list-property name="resultSetHints">
<structure>
<property name="position">1</property>
<property name="name">col1</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">col2</property>
<property name="dataType">string</property>
</structure>
</list-property>
<list-property name="columnHints">
<structure>
<property name="columnName">col1</property>
</structure>
<structure>
<property name="columnName">col2</property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">col1</property>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="position">2</property>
<property name="name">col2</property>
<property name="dataType">string</property>
</structure>
</list-property>
</structure>
<property name="dataSource">Data Source</property>
</script-data-set>
</data-sets>
<styles>
<style name="crosstab" id="4">
<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-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>
</styles>
<page-setup>
<simple-master-page name="Simple MasterPage" id="2">
<property name="topMargin">1in</property>
<property name="leftMargin">1.25in</property>
<property name="bottomMargin">1in</property>
<property name="rightMargin">1.25in</property>
<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="33">
<property name="dataSet">Data Set</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">col1</property>
<text-property name="displayName">col1</text-property>
<expression name="expression"
type="javascript">dataSetRow["col1"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">col2</property>
<text-property name="displayName">col2</text-property>
<expression name="expression"
type="javascript">dataSetRow["col2"]</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<column id="47"/>
<column id="48"/>
<header>
<row id="34">
<cell id="35">
<label id="36">
<text-property name="text">col1</text-property>
</label>
</cell>
<cell id="37">
<label id="38">
<text-property name="text">col2</text-property>
</label>
</cell>
</row>
</header>
<detail>
<row id="39">
<cell id="40">
<data id="41">
<property
name="resultSetColumn">col1</property>
</data>
</cell>
<cell id="42">
<data id="43">
<property
name="resultSetColumn">col2</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="44">
<cell id="45"/>
<cell id="46"/>
</row>
</footer>
</table>
</body>
</report>
On 8/30/2010 1:11 PM, Nils wrote:
> hi jason,
>
> thanks for your help. I'm sorry to say that I still did not get it
> running...
>
> I tried to make it run in the example birt-viewer, which finally worked
> :) I tried to make it run as a servlet and failed again...
>
> all jars containing datasource-classes are in the right place, that is
> web-inf/classes and web-inf/lib.
> the classloader knows all relevant classes.
> I removed the setting of webapplication.classpath and set the
> engine-home to the web-inf/platform directory
> platform starts, loads the report, creates a task and... fails!
> again complaining that the datasource can not be null!
>
> what am I doing wrong?
>
> thank you for your help!
> nils
>
> Jason Weathersby wrote on Fri, 27 August 2010 09:44
>> Are all the jars needed by the pojo in the classpath?
>> Also when setting the classloader key can you use
>> NameOfYourClass.class.getClassLoader( ) ?
>> If the pojos are are in the web-inf/lib or web-inf/classes you should
>> not need to set the webapplication.projectclasspath to that directory.
>> This may cause an issue. Try moving the classes into a jar and put
>> them in another directory.
>>
>> Jason
>
>
>
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #556240 is a reply to message #556067] |
Tue, 31 August 2010 12:31 |
|
hi jason,
thank you!
that worked! but... why?
I just did not put the jar in scriptlib, but in the web-inf/lib, in fact I even put it the same jar that contains all the failing datasources...
the only big difference I see at the moment, is that you use java-based handlers and I use javascript within the report itself...
Is that the problem? Does the javascript-engine not know the correct classpath? how do I configure that?
why do I use javascript?
just because that was the first documented solution I found when I searched for pojos as a datasource
cheers,
nils
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #556277 is a reply to message #556240] |
Tue, 31 August 2010 14:53 |
|
I do not understand what you mean about using java event handler and
javascript within a report. Event handlers have to be written in one or
the other. Can you give me an example? The js engine should be able to
pick up the proper classloader.
Jason
On 8/31/2010 8:31 AM, Nils wrote:
> hi jason,
>
> thank you!
>
> that worked! but... why?
> I just did not put the jar in scriptlib, but in the web-inf/lib, in fact
> I even put it the same jar that contains all the failing datasources...
>
> the only big difference I see at the moment, is that you use java-based
> handlers and I use javascript within the report itself...
> Is that the problem? Does the javascript-engine not know the correct
> classpath? how do I configure that?
>
> why do I use javascript?
> just because that was the first documented solution I found when I
> searched for pojos as a datasource ;)
>
> cheers,
> nils
|
|
|
|
|
Re: AdapterException: The data source of this data set can not be null. [message #556293 is a reply to message #556292] |
Tue, 31 August 2010 15:34 |
|
One other thing to check. Can you try setting the locale in the RE API?
task.setLocale(new Locale("en", "US"));
before the report is executed?
Jason
On 8/31/2010 11:32 AM, Jason Weathersby wrote:
> Can you email me the report? jasonweathersby at windstream dot net
>
> On 8/31/2010 11:18 AM, Nils wrote:
>> I just meant, that I have my handlers written in javascript, the code is
>> in the rptdesign-file, that's all.
>> it still gives me the same error :(
>
|
|
|
Powered by
FUDForum. Page generated in 0.17349 seconds