In spring projects , we use different databases for different services .
There will be requirement to get data from different databases in to one report . It is practically not an easy task .
But in BIRT (an open source technology platform used to create data visualizations and reports that can be embedded into rich client and web applications) reporting tool can address this issue easily .
First you have to create new separate Data Source connections for all databases that you want to use .
Second step is create separate Data Sets (Query to get data from particular database) for each database that you want to use .
Third step is create new Join Data Set using already created data sets in second step . Through this join data sets , you can easily get data from different databases to your report without much effort(you can create many Join Data Sets as you wish) .
Sunday, December 31, 2017
Saturday, December 30, 2017
Tip to Avoid Procastination (5 Seconds Rule)
In Our life ,
If you don’t start doing the things you don’t feel like doing, you will wake up one year from today and be in exactly the same place.
So here’s the one-liner definition of the 5 second rule:
- Knowing what to do will never be enough.
- Knowing why you need to do it will never be enough.
If you don’t start doing the things you don’t feel like doing, you will wake up one year from today and be in exactly the same place.
So here’s the one-liner definition of the 5 second rule:
If you have an impulse to act on a goal, you must physically move within 5 seconds or your brain will kill the idea.
Saturday, December 16, 2017
Birt - Business Intelligence Reporting Tool
BIRT stands for “business intelligence and reporting tools”.It’s a completely open-source project. Can be use with java projects.
BIRT uses 3 engines: a design engine, a chart engine, and a reporting engine. Its user interface is easy to use, and it will handle everything in the data analytics sphere you’ll need. One of main advantage of Birt reporting tool as I see is , you can have multiple main data sources in same report . Through that you get data from multiple databases in single report without much development effort and you can join those two data sources also . It is very important and useful when you developing report with Spring architecture .
Configuring BIRT (Extracted from :- wiki.eclipse.org/Servlet_Example_(BIRT)2.1)
(Servlet Example)
This example demonstrates using the RE API within a servlet. Note if possible it is better to use the BIRT Web Viewer Example. An example for BIRT 2.2 and 2.5 is listed in the comments. Add comments at the bottom of the example.
BIRT Report Engine API Return to the BIRT Report Engine API examples
2. Copy all the jars in the birt-runtime-2_1_1/ReportEngine/lib directory from the Report Engine download into your WebReport/WEB-INF/lib directory.
Steps 3 and 4 are not needed if you are using the BIRT 3.7 POJO Runtime. The POJO Runtime does not have a platform directory.
3. Create a directory named platform in your WEB-INF folder.
4. Copy the birt-runtime-2_1_1/Report Engine/plugins and birt-runtime-2_1_1/ReportEngine/configuration directories to the platform directory you just created.
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_1/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.
You can also add to your classpath using the following appcontext setting; This can be used to setup jars that implement event handlers.
Modify the appcontext before starting up the Platform.
This behaviour has changed from earlier versions of BIRT. See example version for 2.2 at the bottom of page.
BIRT 2.5 example project Media:WebReport2.5.zip
BIRT 2.2 Example. Listed below is the WebReport.java class with changes for BIRT 2.2 WebReport.java
Useful Resources
BIRT uses 3 engines: a design engine, a chart engine, and a reporting engine. Its user interface is easy to use, and it will handle everything in the data analytics sphere you’ll need. One of main advantage of Birt reporting tool as I see is , you can have multiple main data sources in same report . Through that you get data from multiple databases in single report without much development effort and you can join those two data sources also . It is very important and useful when you developing report with Spring architecture .
Configuring BIRT (Extracted from :- wiki.eclipse.org/Servlet_Example_(BIRT)2.1)
(Servlet Example)
This example demonstrates using the RE API within a servlet. Note if possible it is better to use the BIRT Web Viewer Example. An example for BIRT 2.2 and 2.5 is listed in the comments. 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_1/ReportEngine/lib directory from the Report Engine download into your WebReport/WEB-INF/lib directory.
Steps 3 and 4 are not needed if you are using the BIRT 3.7 POJO Runtime. The POJO Runtime does not have a platform directory.
3. Create a directory named platform in your WEB-INF folder.
4. Copy the birt-runtime-2_1_1/Report Engine/plugins and birt-runtime-2_1_1/ReportEngine/configuration directories to the platform directory you just created.

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_1/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.
config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader());
You can also add to your classpath using the following appcontext setting; This can be used to setup jars that implement event handlers.
config.getAppContext().put(EngineConstants.WEBAPP_CLASSPATH_KEY, "c:/jars/mjo.jar");
Modify the appcontext before starting up the Platform.
Platform.startup( config );
This behaviour has changed from earlier versions of BIRT. See example version for 2.2 at the bottom of page.
Source
BirtConfig.propertieslogDirectory=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.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, Thread.currentThread().getContextClassLoader());
//if you are using 3.7 POJO Runtime no need to setEngineHome
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.
*/
public void destroy() {
super.destroy();
BirtEngine.destroyBirtEngine();
}
/**
* The doGet method of the servlet.
*
*/
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.
*
*/
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.
*
* @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.BIRT 2.5 example project Media:WebReport2.5.zip
BIRT 2.2 Example. Listed below is the WebReport.java class with changes for BIRT 2.2 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.
*/
public void destroy() {
super.destroy();
BirtEngine.destroyBirtEngine();
}
/**
* The doGet method of the servlet.
*
*/
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);
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 );
//set output options
HTMLRenderOption options = new HTMLRenderOption();
//set the image handler to a HTMLServerImageHandler if you plan on using the base image url.
options.setImageHandler(new HTMLServerImageHandler());
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
//options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
options.setOutputStream(resp.getOutputStream());
options.setBaseImageURL(req.getContextPath()+"/images");
options.setImageDirectory(sc.getRealPath("/images"));
task.setRenderOption(options);
//run report
task.run();
task.close();
}catch (Exception e){
e.printStackTrace();
throw new ServletException( e );
}
}
/**
* The doPost method of the servlet.
*
*/
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 Not Supported");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* Initialization of the servlet.
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
BirtEngine.initBirtConfig();
}
}
Useful Resources
- http://www.eclipse.org/birt/documentation/reference.php
- https://www.youtube.com/channel/UCcqqPlXBTUcA8Hw1QmT2WMw
- https://www.youtube.com/playlist?list=PLXBve0kMIQOMqk1gI71jKZUEKK0zjl207
- https://wiki.eclipse.org/Category:BIRT
- BIRT Developer Youtube Channel
What is Business Inteligence ?
Decision support
# Increased data collection and greater storage capacity
# dats strucuters - sturectured , unstructred and semi sturectured
#1 st step >>BI >> taking inventory of the data your company produces
#data marts
#finally data is transferred into the central warehouse or datamart
#hadoop
#hadoop is an an storing and processing large amt of data across multiple servers - uses cluster system
# ad- hoc queries
#map reduce
#analyzing big data
#data mining - analysis of large sets of data in order to find patterns and correlations , connections.
#analyzing big data
#INSIGHTS FROM ANALYTICS REPORTS INFLUENCE COMPANY DIRECTION , PRODUCT LINEUPS ,AND EVEN HIRING DECISIONS
#Text analytics
#Business analytics - analyzing and drawing connections between data
Through that #Predict future trends
#Gain compettive advantages
#Reveal unknown innefficencies .
#There are 3 main forms of business analytics
#Descriptive - programs analyze past data and identify trends and relationships.
#Predictive - companies to infer future patterns from past trends.
#Decision - looks at a company's internal data , then analyzes external conditions
(such as manufacturing trends, or predict supply shortages)
to recommend the best course of action for a company.
#Data Visualization - Graphic display of the results of data mining or analytics, often in real time
#Dashboards - the interfaces that represent specific analyses .
#Problems - getting access to clean,high quality data remains difficult for some companies.
#Current Trends
#In memory Processing - those systems utilize RAM memory - instead of hard drives to execute
queries.This increases application performance
#Usability and Visualization
Resources - https://www.youtube.com/watch?v=jkCCnwvO_fg
# Increased data collection and greater storage capacity
# dats strucuters - sturectured , unstructred and semi sturectured
#1 st step >>BI >> taking inventory of the data your company produces
#data marts
#finally data is transferred into the central warehouse or datamart
#hadoop
#hadoop is an an storing and processing large amt of data across multiple servers - uses cluster system
# ad- hoc queries
#map reduce
#analyzing big data
#data mining - analysis of large sets of data in order to find patterns and correlations , connections.
#analyzing big data
#INSIGHTS FROM ANALYTICS REPORTS INFLUENCE COMPANY DIRECTION , PRODUCT LINEUPS ,AND EVEN HIRING DECISIONS
#Text analytics
#Business analytics - analyzing and drawing connections between data
Through that #Predict future trends
#Gain compettive advantages
#Reveal unknown innefficencies .
#There are 3 main forms of business analytics
#Descriptive - programs analyze past data and identify trends and relationships.
#Predictive - companies to infer future patterns from past trends.
#Decision - looks at a company's internal data , then analyzes external conditions
(such as manufacturing trends, or predict supply shortages)
to recommend the best course of action for a company.
#Data Visualization - Graphic display of the results of data mining or analytics, often in real time
#Dashboards - the interfaces that represent specific analyses .
#Problems - getting access to clean,high quality data remains difficult for some companies.
#Current Trends
#In memory Processing - those systems utilize RAM memory - instead of hard drives to execute
queries.This increases application performance
#Usability and Visualization
Resources - https://www.youtube.com/watch?v=jkCCnwvO_fg
Friday, December 15, 2017
Subscribe to:
Posts (Atom)
The AI Driven Software Developer, Optimize Innovate Transform
The AI-Driven Software Developer: Optimize, Innovate, Transform": AI Transformation in Software Development : Understand how AI is re...

-
What is HTTP? HTTP is stands for Hypertext Transfer Protocol. HTTP offers set of rules and standards for web browsers & servers ...
-
In web.xml file add this , <context-param> <param-name>primefaces.THEME</param-name> <par...