|
Re: Loading reports from Classpath? [message #520053 is a reply to message #520004] |
Thu, 11 March 2010 00:02 |
|
Craig,
Are you using the Viewer? What app server is it being deployed to? The
Viewer war comes with two test reports already in the war. Do they work?
Jason
Craig M wrote:
> Is it possible to load report files from the Classpath? I would like to
> be able to package up my report files in my WAR for deployment. I am
> deploying to a shared hosting environment where I will not have easy
> access to the file system.
|
|
|
|
|
|
Re: Loading reports from Classpath? [message #520244 is a reply to message #520063] |
Thu, 11 March 2010 16:45 |
|
Look at the web.xml for the working folder. You can also set the folder
for the resource directory for libraries.
Jason
Craig M wrote:
> Jason Weathersby wrote on Wed, 10 March 2010 19:02
>> Craig,
>>
>> Are you using the Viewer? What app server is it being deployed to?
>> The Viewer war comes with two test reports already in the war. Do
>> they work?
>>
>> Jason
>
>
> We are deploying to WebLogic. I have not tried the viewer war yet, but I
> will do that and get back to you. However, I assume the answer is in how
> the engine.openReportDesign("relative/path/to/file.rptdesign") behaves
> when setup as per the Servlet Integration example. Where does it look
> for that file?
>
|
|
|
|
Re: Loading reports from Classpath? [message #520317 is a reply to message #520302] |
Thu, 11 March 2010 21:40 |
|
Craig,
Take a look at the Tomcat 6 note here:
http://www.eclipse.org/birt/phoenix/deploy/viewerSetup.php#u sing
Jason
Craig M wrote:
> Jason Weathersby wrote on Wed, 10 March 2010 19:02
>> Craig,
>>
>> Are you using the Viewer? What app server is it being deployed to?
>> The Viewer war comes with two test reports already in the war. Do
>> they work?
>>
>> Jason
>
>
> Well, I tried deploying birt.war from the runtime distribution into my
> WebLogic instance. For some reason, when I try to access a report, I get
> ClassNotFoundException for Commons Logging LogFactory. It looks like the
> web app is not loading classes from its own WEB-INF/lib, which I find
> very odd.
>
|
|
|
|
Re: Loading reports from Classpath? [message #520569 is a reply to message #520561] |
Fri, 12 March 2010 20:31 |
Craig M Messages: 19 Registered: July 2009 |
Junior Member |
|
|
OK, here is some additional mystery. When I deploy with Jetty, if I go straight to the /birt/frameset?.... url for the report, I get this same NoClassDefFoundError on ViewerServlet. If I try to go to the index page at this point, it shows me a directory listing instead, with only WEB-INF and logs showing. Its like the deployment failed once the NoClassDefFoundError ocurred.
OK, so I shutdown Jetty, restart, go to the index page "/birt". Click on the link to the frameset URL....works perfectly. Am I crazy?
[Updated on: Fri, 12 March 2010 20:33] Report message to a moderator
|
|
|
|
|
Re: Loading reports from Classpath? [message #520840 is a reply to message #520810] |
Mon, 15 March 2010 14:58 |
|
Craig,
In the web.xml there is a setting to enable logging and a location. Can
you set the log level to FINE and post the log? Also what version of WL
are you using?
Jason
Craig M wrote:
> This is really getting frustrating now. Restarting IE fixed the session
> problem, but the viewer now gets an error with the following stack trace:
>
> Stack Trace:
>
> org.eclipse.birt.report.engine.api.EngineException
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.add Exception(ExecutionContext.java:1163)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.add Exception(ExecutionContext.java:1115)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.ope nDataEngine(ExecutionContext.java:809)
>
> at
> org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTas k.java:211)
> at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask. java:82)
> at
> org.eclipse.birt.report.service.ReportEngineService.runRepor t(ReportEngineService.java:1263)
>
> at
> org.eclipse.birt.report.service.BirtViewerReportService.runR eport(BirtViewerReportService.java:158)
>
> at
> org.eclipse.birt.report.service.actionhandler.BirtRunReportA ctionHandler.__execute(BirtRunReportActionHandler.java:81)
>
> at
> org.eclipse.birt.report.service.actionhandler.BirtGetPageAct ionHandler.__checkDocumentExists(BirtGetPageActionHandler.ja va:58)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractGetPag eActionHandler.prepareParameters(AbstractGetPageActionHandle r.java:119)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractGetPag eActionHandler.__execute(AbstractGetPageActionHandler.java:1 04)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractBaseAc tionHandler.execute(AbstractBaseActionHandler.java:90)
>
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseDoc umentProcessor.__executeAction(AbstractBaseDocumentProcessor .java:47)
>
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseCom ponentProcessor.executeAction(AbstractBaseComponentProcessor .java:143)
>
> at
> org.eclipse.birt.report.soapengine.processor.BirtDocumentPro cessor.handleGetPage(BirtDocumentProcessor.java:87)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseCom ponentProcessor.process(AbstractBaseComponentProcessor.java: 112)
>
> at
> org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingI mpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCP rovider.java:397)
>
> at
> org.apache.axis.providers.java.RPCProvider.processMessage(RP CProvider.java:186)
>
> at
> org.apache.axis.providers.java.JavaProvider.invoke(JavaProvi der.java:323)
> at
> org.apache.axis.strategies.InvocationStrategy.visit(Invocati onStrategy.java:32)
>
> at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
> at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
> at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService .java:454)
> at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281 )
> at
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServle t.java:699)
> at
> org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherSer vlet.doPost(BirtSoapMessageDispatcherServlet.java:265)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
> at
> org.apache.axis.transport.http.AxisServletBase.service(AxisS ervletBase.java:327)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> at
> org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherSer vlet.service(BirtSoapMessageDispatcherServlet.java:122)
>
> at
> weblogic.servlet.internal.StubSecurityHelper$ServletServiceA ction.run(StubSecurityHelper.java:227)
>
> at
> weblogic.servlet.internal.StubSecurityHelper.invokeServlet(S tubSecurityHelper.java:125)
>
> at
> weblogic.servlet.internal.ServletStubImpl.execute(ServletStu bImpl.java:292)
> at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.jav a:26)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterCha inImpl.java:56)
> at
> org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerF ilter.java:68)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterCha inImpl.java:56)
> at
> weblogic.servlet.internal.WebAppServletContext$ServletInvoca tionAction.run(WebAppServletContext.java:3592)
>
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(Aut henticatedSubject.java:321)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityMana ger.java:121)
> at
> weblogic.servlet.internal.WebAppServletContext.securedExecut e(WebAppServletContext.java:2202)
>
> at
> weblogic.servlet.internal.WebAppServletContext.execute(WebAp pServletContext.java:2108)
>
> at
> weblogic.servlet.internal.ServletRequestImpl.run(ServletRequ estImpl.java:1432)
>
> at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
> at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
> Caused by: org.eclipse.birt.core.exception.BirtException
> at
> org.eclipse.birt.core.script.ScriptContext.getScriptEngine(S criptContext.java:225)
>
> at
> org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.(M odelDteApiAdapter.java:177)
>
> at
> org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.( AbstractDataEngine.java:103)
>
> at
> org.eclipse.birt.report.engine.data.dte.DteDataEngine.(DteDa taEngine.java:109)
>
> at
> org.eclipse.birt.report.engine.data.dte.DataGenerationEngine .(DataGenerationEngine.java:40)
>
> at
> org.eclipse.birt.report.engine.data.DataEngineFactory.create DataEngine(DataEngineFactory.java:86)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.ope nDataEngine(ExecutionContext.java:804)
>
> .. 51 more
>
>
> ------------------------------------------------------------ --------------------
>
>
> org.eclipse.birt.report.engine.api.EngineException
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.add Exception(ExecutionContext.java:1163)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.add Exception(ExecutionContext.java:1115)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.ope nDataEngine(ExecutionContext.java:809)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.get DataEngine(ExecutionContext.java:826)
>
> at
> org.eclipse.birt.report.engine.executor.ReportExecutor.execu te(ReportExecutor.java:123)
>
> at
> org.eclipse.birt.report.engine.internal.executor.wrap.Wrappe dReportExecutor.execute(WrappedReportExecutor.java:60)
>
> at
> org.eclipse.birt.report.engine.internal.executor.emitter.Rep ortEmitterExecutor.execute(ReportEmitterExecutor.java:77)
>
> at
> org.eclipse.birt.report.engine.internal.executor.wrap.Wrappe dReportExecutor.execute(WrappedReportExecutor.java:60)
>
> at
> org.eclipse.birt.report.engine.internal.executor.dup.Suppres sDuplciateReportExecutor.execute(SuppressDuplciateReportExec utor.java:42)
>
> at
> org.eclipse.birt.report.engine.presentation.ReportDocumentBu ilder.build(ReportDocumentBuilder.java:234)
>
> at
> org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTas k.java:243)
> at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask. java:82)
> at
> org.eclipse.birt.report.service.ReportEngineService.runRepor t(ReportEngineService.java:1263)
>
> at
> org.eclipse.birt.report.service.BirtViewerReportService.runR eport(BirtViewerReportService.java:158)
>
> at
> org.eclipse.birt.report.service.actionhandler.BirtRunReportA ctionHandler.__execute(BirtRunReportActionHandler.java:81)
>
> at
> org.eclipse.birt.report.service.actionhandler.BirtGetPageAct ionHandler.__checkDocumentExists(BirtGetPageActionHandler.ja va:58)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractGetPag eActionHandler.prepareParameters(AbstractGetPageActionHandle r.java:119)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractGetPag eActionHandler.__execute(AbstractGetPageActionHandler.java:1 04)
>
> at
> org.eclipse.birt.report.service.actionhandler.AbstractBaseAc tionHandler.execute(AbstractBaseActionHandler.java:90)
>
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseDoc umentProcessor.__executeAction(AbstractBaseDocumentProcessor .java:47)
>
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseCom ponentProcessor.executeAction(AbstractBaseComponentProcessor .java:143)
>
> at
> org.eclipse.birt.report.soapengine.processor.BirtDocumentPro cessor.handleGetPage(BirtDocumentProcessor.java:87)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.eclipse.birt.report.soapengine.processor.AbstractBaseCom ponentProcessor.process(AbstractBaseComponentProcessor.java: 112)
>
> at
> org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingI mpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCP rovider.java:397)
>
> at
> org.apache.axis.providers.java.RPCProvider.processMessage(RP CProvider.java:186)
>
> at
> org.apache.axis.providers.java.JavaProvider.invoke(JavaProvi der.java:323)
> at
> org.apache.axis.strategies.InvocationStrategy.visit(Invocati onStrategy.java:32)
>
> at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
> at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
> at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService .java:454)
> at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281 )
> at
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServle t.java:699)
> at
> org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherSer vlet.doPost(BirtSoapMessageDispatcherServlet.java:265)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
> at
> org.apache.axis.transport.http.AxisServletBase.service(AxisS ervletBase.java:327)
>
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> at
> org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherSer vlet.service(BirtSoapMessageDispatcherServlet.java:122)
>
> at
> weblogic.servlet.internal.StubSecurityHelper$ServletServiceA ction.run(StubSecurityHelper.java:227)
>
> at
> weblogic.servlet.internal.StubSecurityHelper.invokeServlet(S tubSecurityHelper.java:125)
>
> at
> weblogic.servlet.internal.ServletStubImpl.execute(ServletStu bImpl.java:292)
> at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.jav a:26)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterCha inImpl.java:56)
> at
> org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerF ilter.java:68)
> at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterCha inImpl.java:56)
> at
> weblogic.servlet.internal.WebAppServletContext$ServletInvoca tionAction.run(WebAppServletContext.java:3592)
>
> at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(Aut henticatedSubject.java:321)
>
> at
> weblogic.security.service.SecurityManager.runAs(SecurityMana ger.java:121)
> at
> weblogic.servlet.internal.WebAppServletContext.securedExecut e(WebAppServletContext.java:2202)
>
> at
> weblogic.servlet.internal.WebAppServletContext.execute(WebAp pServletContext.java:2108)
>
> at
> weblogic.servlet.internal.ServletRequestImpl.run(ServletRequ estImpl.java:1432)
>
> at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
> at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
> Caused by: org.eclipse.birt.core.exception.BirtException
> at
> org.eclipse.birt.core.script.ScriptContext.getScriptEngine(S criptContext.java:225)
>
> at
> org.eclipse.birt.report.engine.adapter.ModelDteApiAdapter.(M odelDteApiAdapter.java:177)
>
> at
> org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.( AbstractDataEngine.java:103)
>
> at
> org.eclipse.birt.report.engine.data.dte.DteDataEngine.(DteDa taEngine.java:109)
>
> at
> org.eclipse.birt.report.engine.data.dte.DataGenerationEngine .(DataGenerationEngine.java:40)
>
> at
> org.eclipse.birt.report.engine.data.DataEngineFactory.create DataEngine(DataEngineFactory.java:86)
>
> at
> org.eclipse.birt.report.engine.executor.ExecutionContext.ope nDataEngine(ExecutionContext.java:804)
>
> .. 58 more
|
|
|
Re: Loading reports from Classpath? [message #520941 is a reply to message #520840] |
Mon, 15 March 2010 21:23 |
Craig M Messages: 19 Registered: July 2009 |
Junior Member |
|
|
OK, I found the source of the problem, and when I am done I will check the 2.5.2 code and if this has not been fixed, I will submit a bug report.
The source of the problem is the following code in ScriptEngineFactoryManager.java (version 2.5.1):
synchronized public IScriptEngineFactory getScriptEngineFactory(
String language )
{
if ( factories.containsKey( language ) )
{
return factories.get( language );
}
IScriptEngineFactory factory = createFactory( language );
factories.put( language, factory );
return factory;
}
The factories.get(language) call returns null for language = "javascript". Debugging this, the factories Map contains key "javascript", but its value is null. I am assuming this is a classloading issue. As it turns out, the weblogic.xml descriptor packaged in the birt.war is having no effect, so jars in the WEB-INF/lib are not being preferred over container jars. Sure enough, the rhino classes are in weblogic.jar. I used Eclipse webtools to generate a new weblogic.xml and test.rptdesign works great (test1.rptdesign gives an error, though...baby steps).
Now, the NPE is clearly a code path that should be handled. I'm going to file a bug report, but I'll go ahead and explain it here. The above code returns null to the following block in ScriptContext.getScriptEngine(String):
IScriptEngineFactory factory = ScriptEngineFactoryManager.getInstance( )
.getScriptEngineFactory( scriptName );
if ( factory == null )
{
throw new BirtException( "No such script extension : " + scriptName );
}
...but this exception is swallowed up the call stack in ExecutionContext.openDataEngine():
public void openDataEngine( )
{
if ( dataEngine == null )
{
try
{
dataEngine = DataEngineFactory.getInstance( ).createDataEngine(
this, needOutputResultSet );
}
catch ( BirtException bex )
{
addException( bex ); // Exception swallowed here!!!
}
catch ( Exception ex )
{
addException( new EngineException( ex.getLocalizedMessage( ),
ex ) );
}
}
}
This is being called from ExecutionContex.getDataEngine(), which returns null in this case. Line 123 in ReportExecutor.execute() is where it blows up:
context.getDataEngine( ).prepare( report, appContext );
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04476 seconds