Aug 15, 2006
Deploying BIRT Report Engine API with Jakarta Struts
After reading the great article Deploying BIRT from Jason Weathersby I decide to create a little example on how to use BIRT RE API with Jakarta Struts framework.
To do so I’ve followed Jason steps:
- Create a WebReport/WEB-INF/lib directory underneath the Tomcat webapps directory.
- Copy all the jars in the birt-runtime-2_1_0/ReportEngine/lib directory from the Report Engine download into your WebReport/WEB-INF/lib directory.
- Next, create a directory named platform in your WEB-INF folder.
- Copy the birt-runtime-2_1_0/Report Engine/plugins and birt-runtime-2_1_0/ReportEngine/configuration directories to the platform directory you just created. In this example the context is WebReport, so the folder structure is /webapps/WebReport/platform/plugins and webapps/WebReport/platform/configuration.
- Additionally, create directories below WebReport for image location and report location.
and used the same directory structure:

The example allows you to generate reports in HTML, PDF, and XLS formats. For the last one I’ve used Tribix XLS Emitter.
To get more information about how to use XLS emitter with BIRT Report Engine API please read the README file that comes with in the binary distribution.
The following files are mean to replace the WebReportServlet class from Jason example.
Go to the Resources section to get the instructions on how to get this example source code.
The source code has been updated so you can easily embed the report’s HTML in your JSP pages and correctly render your images and charts in your HTML.
BirtInitializationPlugin.java
Struts Plugin to BIRT Report Engine initialization and shutdown.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /* * $Id$ * * Last changed on : $Date$ * Last changed by : $Author$ */ package com.samaxes.webreport.plugin; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import com.samaxes.webreport.birt.BirtEngine; /** * BIRT Report Engine initialization and shutdown Plugin. * * @author : samaxes * @version : $Revision$ */ public class BirtInitializationPlugin implements PlugIn { /** * Initialization of the servlet. * * @param servlet ActionServlet * @param conf ModuleConfig * @throws ServletException if an error occure */ public void init(ActionServlet servlet, ModuleConfig conf) throws ServletException { BirtEngine.initBirtConfig(); } /** * Destruction of the servlet. */ public void destroy() { BirtEngine.destroyBirtEngine(); } } |
WebReportAction.java
Actions related to the reports generation.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | /* * $Id$ * * Last changed on : $Date$ * Last changed by : $Author$ */ package com.samaxes.webreport.action; import java.io.ByteArrayOutputStream; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.MappingDispatchAction; import org.eclipse.birt.report.engine.api.EngineConstants; import org.eclipse.birt.report.engine.api.HTMLRenderContext; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportRunnable; import org.eclipse.birt.report.engine.api.IRunAndRenderTask; import com.samaxes.webreport.birt.BirtEngine; import com.samaxes.webreport.common.Constants; /** * Actions related to the reports generation. * * @author : samaxes * @version : $Revision$ */ public class WebReportAction extends MappingDispatchAction { private IReportEngine birtReportEngine = null; protected static Logger logger = Logger.getLogger("org.eclipse.birt"); /** * The html report action. * Gets the report's html output stream. * * @param actionMapping ActionMapping * @param actionForm ActionForm * @param request HttpServletRequest * @param response HttpServletResponse * @return ActionForward */ public ActionForward htmlReportAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { out = renderReportPage(request); } catch (ServletException e) { logger.log(Level.SEVERE, e.getMessage(), e); } request.setAttribute("reportHTML", out); return actionMapping.findForward(Constants.FORWARD_SUCCESS); } /** * Generates the html report. * * @param request HttpServletRequest * @return ByteArrayOutputStreamwith the report generated * @throws ServletException */ private ByteArrayOutputStream renderReportPage(HttpServletRequest request) throws ServletException { // get report name and launch the engine ByteArrayOutputStream out = new ByteArrayOutputStream(); String reportName = request.getParameter("ReportName"); ServletContext sc = request.getSession().getServletContext(); this.birtReportEngine = BirtEngine.getBirtEngine(sc); // setup image directory HTMLRenderContext renderContext = new HTMLRenderContext(); renderContext.setBaseImageURL(request.getContextPath() + "/images"); renderContext.setImageDirectory(sc.getRealPath("/images")); logger.log(Level.FINE, "image directory " + sc.getRealPath("/images")); HashMap<string, HTMLRenderContext> contextMap = new HashMap<string, HTMLRenderContext>(); contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext); IReportRunnable design; try { // Open report design design = birtReportEngine.openReportDesign(sc.getRealPath("/reports") + "/" + reportName); // create task to run and render report IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask(design); task.setAppContext(contextMap); // set output options HTMLRenderOption options = new HTMLRenderOption(); options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML); options.setEmbeddable(true); options.setOutputStream(out); task.setRenderOption(options); // run report task.run(); task.close(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); throw new ServletException(e); } return out; } /** * The pdf report action. * Generates the pdf report. * * @param actionMapping ActionMapping * @param actionForm ActionForm * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException */ public void pdfReportAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws ServletException { // get report name and launch the engine response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "inline; filename=WebReport.pdf"); // inline, attachment String reportName = request.getParameter("ReportName"); ServletContext sc = request.getSession().getServletContext(); this.birtReportEngine = BirtEngine.getBirtEngine(sc); // setup image directory HTMLRenderContext renderContext = new HTMLRenderContext(); renderContext.setBaseImageURL(request.getContextPath() + "/images"); renderContext.setImageDirectory(sc.getRealPath("/images")); logger.log(Level.FINE, "image directory " + sc.getRealPath("/images")); HashMap<string, HTMLRenderContext> contextMap = new HashMap<string, HTMLRenderContext>(); contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext); IReportRunnable design; try { // Open report design design = birtReportEngine.openReportDesign(sc.getRealPath("/reports") + "/" + reportName); // create task to run and render report IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask(design); task.setAppContext(contextMap); // set output options HTMLRenderOption options = new HTMLRenderOption(); options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF); options.setOutputStream(response.getOutputStream()); task.setRenderOption(options); // run report task.run(); task.close(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); throw new ServletException(e); } } /** * The excel report action. * Generates the excel report. * * @param actionMapping ActionMapping * @param actionForm ActionForm * @param request HttpServletRequest * @param response HttpServletResponse * @throws ServletException */ public void xlsReportAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws ServletException { // get report name and launch the engine response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "inline; filename=WebReport.xls"); // inline, attachment String reportName = request.getParameter("ReportName"); ServletContext sc = request.getSession().getServletContext(); this.birtReportEngine = BirtEngine.getBirtEngine(sc); // setup image directory HTMLRenderContext renderContext = new HTMLRenderContext(); renderContext.setBaseImageURL(request.getContextPath() + "/images"); renderContext.setImageDirectory(sc.getRealPath("/images")); logger.log(Level.FINE, "image directory " + sc.getRealPath("/images")); HashMap<string, HTMLRenderContext> contextMap = new HashMap<string, HTMLRenderContext>(); contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext); IReportRunnable design; try { // Open report design design = birtReportEngine.openReportDesign(sc.getRealPath("/reports") + "/" + reportName); // create task to run and render report IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask(design); task.setAppContext(contextMap); // set output options HTMLRenderOption options = new HTMLRenderOption(); options.setOutputFormat(Constants.XLS_FORMAT); options.setOutputStream(response.getOutputStream()); task.setRenderOption(options); // run report task.run(); task.close(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); throw new ServletException(e); } } } |
All you need to get this sample running is to copy the WAR file to your server deploy dir and configure the BIRT Report Engine logging in BirtConfig.properties file.
1 2 | logDirectory=e:/Work/logs/birt logLevel=CONFIG |
If you are building the application from the source code you must also configure the application server deployment directory, rename the file build.properties-example to build.properties and edit the following line.
1 | deploy.dir=E:/Work/jboss/server/default/deploy |
Designing the report is out of the scoope of this article, you can found a lot of tutorials on the Web and BIRT Website.
Resources
- Struts BIRT WebReport Project Download the WAR file or get the source code from the SVN repository.
- Report Engine API Contains further information on BIRT RE API.
Great example. It would be great if you could add this to the Eclipse Wiki.
Take a look at this site:
http://wiki.eclipse.org/index.php/Servlet_Example
If you have a Bugzilla account you can post it in the comments section of this example.
Thanks
Jason
Hi,
thank you for this valuable example, thank you Jason too.
Actually, I’m developing a web application that allow users to generate reports based on some parameters. So, I do need to access a database on the fly (run time). But in this example, and in Jason’s one I’m not able to find something like that, because your rpdesign file is already generated (maybe using the report designer in eclipse.
Also, I’m using Struts as an MVC framework, and don’t want to violate my design by using the BIRT viewer servlet, So what about the AJAX facilities in this case? I do want to take advantage of it
This article is just about the deployment of the BIRT Report Engine and have it running.
But you can found more info about how to use the Report Engine API to satisfy your needs (passing parameters in runtime and integrating with your web application without using BIRT Viewer) in this page:
http://www.eclipse.org/birt/phoenix/deploy/
Hope this help,
Samuel
Thanks A lot Sam for your reply. Actually,I eventually adopted a combination of Displaytag and the jfreechart based cewolf taglib (because of deadlines ;). Nonetheless Birt Report engine API seems to be more powerful so I’ll keep investigating this solution and glance through the page you gave me.
Thanks,
Yassine.
Nice article. However i observed an issue - the generated output i.e., the html will have “file://c:……” reference to the images instead of URL (even though we specify the baseImageUrl).
I have tested this with one of my report which contain charts. I found that charts , in the form of images, are aptly created in the specified images directory, but fail to display on the browser since the fully qualified path contains file: protocol instead of http:
Am i missing anything?
Thanks
Satya
Oh, i have added the following lines and now its working:
————————
htmlemitterconfig.setActionHandler(new HTMLActionHandler());
htmlemitterconfig.setImageHandler(new HTMLServerImageHandler());
config.getEmitterConfigs().put(”html”, htmlemitterconfig);
—————————-
-satya
Thanks a lot Satya for reporting this.
I’ll update the code as soon as I can.
Samuel
good example!! it really helps a lot for me.
The source code has been updated to fix the bug reported by Satya.
Samuel
The BIRT Runtime has been updated to Release Build 2.1.2
Hi,
Can anyone tell me, i have created a report which uses a library.
Now i try running this report on some other machine which has web viewer installed. Where do i copy the library contents so that the report picks them up properly.
I am using jboss as my server.
Please help!
you said ‘The source code has been updated so you can easily embed the report’s HTML in your JSP pages and correctly render your images and charts in your HTML.’
Can you give further explanations on how to do that ?
Looking at the WebReportAction you can easily put the report in the request
request.setAttribute("reportHTML", out);and print it in the jsp like${reportHTML}in viewReport.jsp file.Hi Samuel,
I came across these error while I’m deploying birt to struts 1.3.8 with tiles and sslext. Pls advice whether Birt came deployed to which struts version and what went wrong with it ? Thanks in advance.
18:10:37,718 INFO [STDOUT] In htmlReportAction …
18:10:37,718 INFO [STDOUT] In renderReportPage …
18:10:37,718 INFO [STDOUT] reportName
18:10:37,718 INFO [STDOUT] getContextPath
18:10:37,718 INFO [STDOUT] In com.ufu.util.BirtEngine …
18:10:37,734 INFO [STDOUT] logLevel
18:10:37,734 INFO [STDOUT] level
18:10:37,734 INFO [STDOUT] logDirectory
18:10:37,734 INFO [STDOUT] getBIRTHome
18:10:37,734 INFO [STDOUT] getLogDirectory
18:10:37,734 INFO [STDOUT] getMaxRowsPerQuery
18:10:37,734 INFO [STDOUT] getResourcePath
18:10:37,734 INFO [STDOUT] LOG_LEVEL
18:10:37,734 INFO [STDOUT] LOG_DESTINATION
18:10:37,734 INFO [STDOUT] OSGI_ARGUMENTS
18:10:37,734 INFO [STDOUT] OSGI_CONFIGURATION
18:10:38,734 ERROR [STDERR] java.lang.reflect.InvocationTargetException
18:10:38,734 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
18:10:38,734 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
18:10:38,734 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
18:10:38,734 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
18:10:38,734 ERROR [STDERR] at org.eclipse.birt.core.framework.osgi.OSGILauncher.startup(OSGILauncher.java:169)
18:10:38,734 ERROR [STDERR] at org.eclipse.birt.core.framework.Platform.startup(Platform.java:77)
18:10:38,734 ERROR [STDERR] at com.ufu.util.BirtEngine.getBirtEngine(BirtEngine.java:76)
18:10:38,734 ERROR [STDERR] at com.ufu.struts.reports.action.WebReportAction.renderReportPage(WebReportAction.java:53)
18:10:38,734 ERROR [STDERR] at com.ufu.struts.reports.action.WebReportAction.htmlReportAction(WebReportAction.java:34)
18:10:38,734 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
18:10:38,734 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
18:10:38,734 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
18:10:38,734 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
18:10:38,734 ERROR [STDERR] at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
18:10:38,734 ERROR [STDERR] at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
18:10:38,734 ERROR [STDERR] at org.apache.struts.actions.MappingDispatchAction.execute(MappingDispatchAction.java:166)
18:10:38,734 ERROR [STDERR] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
18:10:38,734 ERROR [STDERR] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
18:10:38,734 ERROR [STDERR] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
18:10:38,734 ERROR [STDERR] at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
18:10:38,734 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
18:10:38,734 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
18:10:38,734 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
18:10:38,734 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
18:10:38,734 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
18:10:38,734 ERROR [STDERR] at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
18:10:38,734 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
18:10:38,734 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
18:10:38,750 ERROR [STDERR] at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
18:10:38,750 ERROR [STDERR] at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
18:10:38,750 ERROR [STDERR] at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
18:10:38,750 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
18:10:38,750 ERROR [STDERR] Caused by: java.lang.LinkageError: org/jboss/net/protocol/file/Handler
18:10:38,750 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
18:10:38,750 ERROR [STDERR] at java.lang.Class.forName(Class.java:164)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.util.SecureAction.forName(SecureAction.java:309)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.internal.protocol.StreamHandlerFactory.getBuiltIn(StreamHandlerFactory.java:66)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.internal.protocol.StreamHandlerFactory.createURLStreamHandler(StreamHandlerFactory.java:86)
18:10:38,750 ERROR [STDERR] at java.net.URL.getURLStreamHandler(URL.java:1104)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:393)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:283)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:306)
18:10:38,750 ERROR [STDERR] at java.io.File.toURL(File.java:594)
18:10:38,750 ERROR [STDERR] at org.apache.catalina.loader.WebappClassLoader.getURL(WebappClassLoader.java:2298)
18:10:38,750 ERROR [STDERR] at org.apache.catalina.loader.WebappClassLoader.findResourceInternal(WebappClassLoader.java:1969)
18:10:38,750 ERROR [STDERR] at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1752)
18:10:38,750 ERROR [STDERR] at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:869)
18:10:38,750 ERROR [STDERR] at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1322)
18:10:38,750 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
18:10:38,750 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
18:10:38,750 ERROR [STDERR] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
18:10:38,750 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
18:10:38,750 ERROR [STDERR] at java.lang.Class.forName(Class.java:164)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.util.SecureAction.forName(SecureAction.java:309)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.internal.protocol.StreamHandlerFactory.getBuiltIn(StreamHandlerFactory.java:66)
18:10:38,750 ERROR [STDERR] at org.eclipse.osgi.framework.internal.protocol.StreamHandlerFactory.createURLStreamHandler(StreamHandlerFactory.java:86)
18:10:38,750 ERROR [STDERR] at java.net.URL.getURLStreamHandler(URL.java:1104)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:572)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:464)
18:10:38,750 ERROR [STDERR] at java.net.URL.(URL.java:413)
18:10:38,750 ERROR [STDERR] at org.eclipse.core.runtime.adaptor.EclipseStarter.getSysPathFromURL(EclipseStarter.java:979)
18:10:38,750 ERROR [STDERR] at org.eclipse.core.runtime.adaptor.EclipseStarter.getSysPath(EclipseStarter.java:960)
18:10:38,750 ERROR [STDERR] at org.eclipse.core.runtime.adaptor.EclipseStarter.getInitialBundles(EclipseStarter.java:668)
18:10:38,750 ERROR [STDERR] at org.eclipse.core.runtime.adaptor.EclipseStarter.loadBasicBundles(EclipseStarter.java:637)
18:10:38,750 ERROR [STDERR] at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:305)
18:10:38,750 ERROR [STDERR] … 41 more
18:10:38,750 INFO [STDOUT] 18:10:38,750 WARN [PropertyMessageResources] Resource org/apache/struts/actions/LocalStrings_en_US.properties Not Found.
18:10:38,765 INFO [STDOUT] 18:10:38,765 WARN [PropertyMessageResources] Resource org/apache/struts/actions/LocalStrings_en.properties Not Found.
18:10:38,765 ERROR [CoyoteAdapter] An exception or error occurred in the container during the request processing
This example was deployed with Struts 1.2.9, I’ve never used Struts 1.3.x or Struts 2.x. Stripes Framework rules
Hi, Thanks a lot for your example!
I met a problem that when I deployed your example to my system,
I found the var factory in the BirtEngine.java is null.
How can I fix it?
May you do me a favor?
Thanks very much!
Sorry, but I can’t reproduce the error.
I deployed the war into jboss and all seems to work normally.
[...] Samaxes on Technology has several blog posts on BIRT and some very nice examples on deploying BIRT with Stripes or Struts. [...]
Excellent Example. Thanks a lot!!!
Hello,
Greate example. I am trying to integrate it in my J2ee web application, and i would like to know if all the libraries and files in
WEB-INF\platform\plugins necesary in run time?
Thanks in advanced!
Thats really important to know if all the files are required under platform. Actually if we can cut down the number of jars the application becomes light. It is also now know if we need all the jars (18 jars) under WEB-INF\lib. Compile time dependency need only 3 jars in the lib.
Thanks for the help
Hi,
I didn’t try to remove the files.
I’ve just followed the documentation which tells to copy all the files.
I assume that since they come bundled with the Report Engine it’s probably because they are necessary.