Jump to: navigation, search

Difference between revisions of "Servlet Example"

(Setup)
(Replacing page with 'Moved to Servlet Example (BIRT) 2.1')
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== Servlet Example ==
+
Moved to [[Servlet Example (BIRT) 2.1]]
 
+
This example demonstrates using the RE API within a servlet.
+
Note if possible it is better to use the BIRT Web Viewer Example.
+
Add comments at the bottom of the example.
+
 
+
[[BIRT Report Engine API]] Return to the BIRT Report Engine API examples
+
 
+
==== Setup ====
+
1. Create a ''WebReport/WEB-INF/lib'' directory underneath the Tomcat ''webapps'' directory.
+
 
+
2. 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.
+
 
+
3. Create a directory named ''platform'' in your ''WEB-INF'' folder.
+
 
+
4. 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.
+
 
+
5. Copy iText.jar to the platform/plugins/com.lowagie.itext/lib directory.  If the directory does not exist, create it.
+
 
+
[[Image:Document1_01.png]]
+
<br>
+
This example application consist of three files that are archived into webreport.jar. If you are using Eclipse to build the servlet make sure to add all the jars, from the ''birt-runtime-2_1_0/ReportEngine/lib'' directory to your build path. You will also need servlet.jar, from the Tomcat Eclipse plug-in in your build path. Either build or copy webreport.jar from the example and place it in your ''WEB-INF/lib'' directory.
+
 
+
* BirtConfig.properties - Configuration properties for the Engine.
+
* BirtEngine.java - Class used to initialize the Report Engine.
+
* WebReport.java - The servlet that handles report generation on a GET command.
+
 
+
== Source ==
+
 
+
'''BirtConfig.properties'''
+
logDirectory=c:/temp
+
logLevel=FINEST
+
 
+
'''BirtEngine.java'''
+
import java.io.InputStream;
+
import java.io.IOException;
+
import java.util.Properties;
+
import java.util.logging.Level;
+
+
import org.eclipse.birt.report.engine.api.EngineConfig;
+
import org.eclipse.birt.report.engine.api.IReportEngine;
+
import javax.servlet.*;
+
import org.eclipse.birt.core.framework.PlatformServletContext;
+
import org.eclipse.birt.core.framework.IPlatformContext;
+
import  org.eclipse.birt.core.framework.Platform;
+
import org.eclipse.birt.core.exception.BirtException;
+
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
+
+
public class BirtEngine {
+
+
private static IReportEngine birtEngine = null;
+
+
private static Properties configProps = new Properties();
+
+
private final static String configFile = "BirtConfig.properties";
+
+
public static synchronized void initBirtConfig() {
+
  loadEngineProps();
+
}
+
+
public static synchronized IReportEngine getBirtEngine(ServletContext sc) {
+
  if (birtEngine == null)
+
  {
+
  EngineConfig config = new EngineConfig();
+
  if( configProps != null){
+
    String logLevel = configProps.getProperty("logLevel");
+
    Level level = Level.OFF;
+
    if ("SEVERE".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.SEVERE;
+
    } else if ("WARNING".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.WARNING;
+
    } else if ("INFO".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.INFO;
+
    } else if ("CONFIG".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.CONFIG;
+
    } else if ("FINE".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.FINE;
+
    } else if ("FINER".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.FINER;
+
    } else if ("FINEST".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.FINEST;
+
    } else if ("OFF".equalsIgnoreCase(logLevel))
+
    {
+
    level = Level.OFF;
+
    }
+
+
    config.setLogConfig(configProps.getProperty("logDirectory"), level);
+
  }
+
+
  config.setEngineHome("");
+
  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 );
+
+
+
  }
+
  return birtEngine;
+
}
+
+
public static synchronized void destroyBirtEngine() {
+
  if (birtEngine == null) {
+
  return;
+
  } 
+
  birtEngine.shutdown();
+
  Platform.shutdown();
+
  birtEngine = null;
+
}
+
+
public Object clone() throws CloneNotSupportedException {
+
  throw new CloneNotSupportedException();
+
}
+
+
private static void loadEngineProps() {
+
  try {
+
  //Config File must be in classpath
+
  ClassLoader cl = Thread.currentThread ().getContextClassLoader();
+
  InputStream in = null;
+
  in = cl.getResourceAsStream (configFile);
+
  configProps.load(in);
+
  in.close();
+
+
+
  } catch (IOException e) {
+
  e.printStackTrace();
+
  }
+
+
}
+
+
}
+
 
+
'''WebReport.java'''
+
import java.io.IOException;
+
import java.io.PrintWriter;
+
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.HttpServlet;
+
import javax.servlet.http.HttpServletRequest;
+
import javax.servlet.http.HttpServletResponse;
+
+
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.IReportRunnable;
+
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
+
import org.eclipse.birt.report.engine.api.IReportEngine;
+
+
+
public class WebReport extends HttpServlet {
+
+
/**
+
  *
+
  */
+
private static final long serialVersionUID = 1L;
+
/**
+
  * Constructor of the object.
+
  */
+
private IReportEngine birtReportEngine = null;
+
protected static Logger logger = Logger.getLogger( "org.eclipse.birt" );
+
+
public WebReport() {
+
  super();
+
}
+
+
/**
+
  * Destruction of the servlet. <br>
+
  */
+
public void destroy() {
+
  super.destroy();
+
  BirtEngine.destroyBirtEngine();
+
}
+
+
+
/**
+
  * The doGet method of the servlet. <br>
+
  *
+
  */
+
public void doGet(HttpServletRequest req, HttpServletResponse resp)
+
  throws ServletException, IOException {
+
+
  //get report name and launch the engine
+
  resp.setContentType("text/html");
+
  //resp.setContentType( "application/pdf" );
+
  //resp.setHeader ("Content-Disposition","inline; filename=test.pdf"); 
+
  String reportName = req.getParameter("ReportName");
+
  ServletContext sc = req.getSession().getServletContext();
+
  this.birtReportEngine = BirtEngine.getBirtEngine(sc);
+
 
+
  //setup image directory
+
  HTMLRenderContext renderContext = new HTMLRenderContext();
+
  renderContext.setBaseImageURL(req.getContextPath()+"/images");
+
  renderContext.setImageDirectory(sc.getRealPath("/images"));
+
 
+
  logger.log( Level.FINE, "image directory " + sc.getRealPath("/images")); 
+
  System.out.println("stdout 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.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
+
  options.setOutputStream(resp.getOutputStream());
+
  task.setRenderOption(options);
+
 
+
  //run report
+
  task.run();
+
  task.close();
+
  }catch (Exception e){
+
 
+
  e.printStackTrace();
+
  throw new ServletException( e );
+
  }
+
}
+
+
/**
+
  * The doPost method of the servlet. <br>
+
  *
+
  */
+
public void doPost(HttpServletRequest request, HttpServletResponse response)
+
  throws ServletException, IOException {
+
+
  response.setContentType("text/html");
+
  PrintWriter out = response.getWriter();
+
  out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
+
  out.println("<HTML>");
+
  out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
+
  out.println("  <BODY>");
+
  out.println(" Post does nothing");
+
  out.println("  </BODY>");
+
  out.println("</HTML>");
+
  out.flush();
+
  out.close();
+
}
+
+
/**
+
  * Initialization of the servlet. <br>
+
  *
+
  * @throws ServletException if an error occure
+
  */
+
public void init() throws ServletException {
+
  BirtEngine.initBirtConfig();
+
 
+
}
+
+
}
+
 
+
== Comments ==
+
Please enter comments below by selecting the edit icon to the right.
+
You will need a Bugzilla account to add comments.
+
 
+
----
+

Latest revision as of 14:28, 4 October 2007

Moved to Servlet Example (BIRT) 2.1