<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3947967768847154050</id><updated>2012-02-16T00:00:31.892-08:00</updated><category term='dependency injection'/><category term='Jasper Gotchas'/><category term='spring'/><category term='setter injection'/><category term='example'/><category term='features'/><category term='JUnit Easymock'/><category term='modules'/><category term='BIRT Gotchas'/><category term='BIRT vs Jasper'/><category term='JDBC ResultSet BIRT report'/><category term='constructor injection'/><category term='pass Collection to BIRT report'/><category term='Performance metrics'/><title type='text'>Techie.Ocean</title><subtitle type='html'>a Small Techie in Search of Rescue in a Large Ocean!!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-7362687419073901475</id><published>2009-08-01T21:32:00.000-07:00</published><updated>2009-08-25T20:00:37.843-07:00</updated><title type='text'>AOP - Simple Example</title><content type='html'>&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;Aspect Oriented Programming (AOP)&lt;/span&gt; &lt;span style="font-family:trebuchet ms;"&gt;promotes separation of cross-cutting concer&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;ns like logging, transaction management, security, etc from the components in a software system&lt;/span&gt;. The components may be performing these system services apart from the core logic they are entrusted with. These concerns tend to cut across multiple components in a system, hence called cross-cutting concerns of a system. These concerns introduce levels of complexity to your code as -&lt;ul&gt;&lt;li&gt;systemwide duplicated code for implementing these system concerns, necessitating multiple code changes if any of the concerns change&lt;/li&gt;&lt;li&gt;components are burdened with more code than that which deals with their core functionality&lt;/li&gt;&lt;/ul&gt;AOP modularizes these services and applies them declaratively to the required components in the system. Hence, components become more specific and cohesive. It covers the core application with layers of functionality without the application even knowing it exists.&lt;br /&gt;&lt;br /&gt;Let us get a feel of AOP through a simple example.&lt;br /&gt;A class People who sings praiseworthy songs about a class King. Let us see how it works without AOP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_BhaHKunLPds/SpSb0j2JV0I/AAAAAAAAFzo/Jm1eXW0OwHQ/s800/people.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 611px; height: 172px;" src="http://lh4.ggpht.com/_BhaHKunLPds/SpSb0j2JV0I/AAAAAAAAFzo/Jm1eXW0OwHQ/s800/people.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_BhaHKunLPds/SpSiBsQ9X8I/AAAAAAAAF0I/I3FiCmxhPQY/s800/oldKing.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 531px; height: 242px;" src="http://lh4.ggpht.com/_BhaHKunLPds/SpSiBsQ9X8I/AAAAAAAAF0I/I3FiCmxhPQY/s800/oldKing.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here, each time the &lt;span style="font-style: italic;"&gt;King &lt;/span&gt;goes to a &lt;span style="font-style: italic;"&gt;War&lt;/span&gt;, it must stop and tell his &lt;span style="font-style: italic;"&gt;People &lt;/span&gt;to &lt;span style="font-style: italic;"&gt;Praise &lt;/span&gt;him before he can start fighting the &lt;span style="font-style: italic;"&gt;War&lt;/span&gt;. Similary, after the &lt;span style="font-style: italic;"&gt;War&lt;/span&gt;, the &lt;span style="font-style: italic;"&gt;King &lt;/span&gt;must remember to tell the &lt;span style="font-style: italic;"&gt;People&lt;/span&gt; again to &lt;span style="font-style: italic;"&gt;Praise &lt;/span&gt;him about his achievements.&lt;br /&gt;&lt;br /&gt;Let us now introduce the concept of &lt;span style="font-weight: bold;"&gt;Aspect &lt;/span&gt;here and also, a configuration file &lt;span style="font-style: italic;"&gt;praise.xml&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_BhaHKunLPds/SpSiBjmAiLI/AAAAAAAAF0M/UTcwQ2SqxGo/s800/kingdomXML.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 596px; height: 287px;" src="http://lh3.ggpht.com/_BhaHKunLPds/SpSiBjmAiLI/AAAAAAAAF0M/UTcwQ2SqxGo/s800/kingdomXML.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The functionality of the &lt;span style="font-style: italic;"&gt;Aspect &lt;/span&gt;is defined in the bean referred to by the &lt;span style="font-style: italic;"&gt;ref &lt;/span&gt;attribute. The aspect is made up of &lt;span style="font-style: italic;"&gt;pointcuts &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;advice&lt;/span&gt;. Here, we declare a &lt;span style="font-style: italic;"&gt;pointcut &lt;/span&gt;which is triggered by the execution of a &lt;span style="font-style: italic;"&gt;startWar()&lt;/span&gt; method. Advices are provided in 2 forms here - &lt;span style="font-style: italic;"&gt;before &lt;/span&gt;to call &lt;span style="font-style: italic;"&gt;singBefore()&lt;/span&gt; method of &lt;span style="font-style: italic;"&gt;People &lt;/span&gt;before the pointcut and &lt;span style="font-style: italic;"&gt;after &lt;/span&gt;to call &lt;span style="font-style: italic;"&gt;singAfter()&lt;/span&gt; method of &lt;span style="font-style: italic;"&gt;People&lt;/span&gt; after the pointcut.&lt;br /&gt;&lt;br /&gt;This simplifies the code in class King as follows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_BhaHKunLPds/SpSiBiihDdI/AAAAAAAAF0E/vkJAYLC6FKQ/s800/newKing.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 529px; height: 257px;" src="http://lh4.ggpht.com/_BhaHKunLPds/SpSiBiihDdI/AAAAAAAAF0E/vkJAYLC6FKQ/s800/newKing.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;reference: spring in action&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-7362687419073901475?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/7362687419073901475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/08/aop-simple-example.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/7362687419073901475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/7362687419073901475'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/08/aop-simple-example.html' title='AOP - Simple Example'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_BhaHKunLPds/SpSb0j2JV0I/AAAAAAAAFzo/Jm1eXW0OwHQ/s72-c/people.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-3328770777020133490</id><published>2009-07-26T22:07:00.000-07:00</published><updated>2009-08-24T15:06:49.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='setter injection'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='constructor injection'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Simple usage of Spring</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Let us look into the concept of &lt;span style="font-weight: bold;"&gt;Dependency Injection&lt;/span&gt; through a small example:- &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we are trying to print out a string "Hello World" using Spring's techniques. The interface &lt;span style="font-style: italic;"&gt;HelloService &lt;/span&gt;defines the contract for the service class:-&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        package com.hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        public interface HelloService {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                  void sayHello();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        }&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(255, 153, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HelloServiceImpl&lt;/span&gt; implements the above interface as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;package com.hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        public class HelloServiceImpl implements HelloService {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   private String hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   public HelloServiceImpl() {}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   public HelloServiceImpl(String hello) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                               this.hello = hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   public void sayHello() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                               System.out.println(hello);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   public void setHello(String hello) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                              this.hello = hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The property &lt;span style="font-style: italic;"&gt;"hello"&lt;/span&gt; in this class can be set either through the constructor or the setter method. Now, let us write the Spring Configuration file, named here as &lt;span style="font-style: italic;"&gt;hello.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_BhaHKunLPds/SpMMuLIxKDI/AAAAAAAAFw0/y6ekKVUt0CQ/s400/helloXML.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 83px;" src="http://lh5.ggpht.com/_BhaHKunLPds/SpMMuLIxKDI/AAAAAAAAFw0/y6ekKVUt0CQ/s400/helloXML.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here, the bean named &lt;span style="font-style: italic;"&gt;"helloService"&lt;/span&gt; of class &lt;span style="font-style: italic;"&gt;"HelloServiceImpl"&lt;/span&gt; has a property &lt;span style="font-style: italic;"&gt;"hello"&lt;/span&gt;, which is injected with a value of &lt;span style="font-style: italic;"&gt;"Hello World"&lt;/span&gt; using the &lt;span style="font-style: italic;"&gt;setter&lt;/span&gt; injection. In effect, this does the following:-&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        HelloServiceImpl helloService = new HelloServiceImpl();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;        helloService.setHello("Hello World");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If we were opting for &lt;span style="font-style: italic;"&gt;constructor&lt;/span&gt; injection, then the &lt;property&gt; tag in the xml file would have to be replaced with -&lt;br /&gt;&lt;/property&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_BhaHKunLPds/SpMOC1k3bvI/AAAAAAAAFxY/s31rmzDAp0M/s800/helloXML1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 310px; height: 40px;" src="http://lh6.ggpht.com/_BhaHKunLPds/SpMOC1k3bvI/AAAAAAAAFxY/s31rmzDAp0M/s800/helloXML1.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;property&gt;&lt;br /&gt;&lt;br /&gt;In effect, this does the following:-&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;       HelloServiceImpl helloService = new HelloServiceImpl("Hello World");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, let us write a main class for this entire application, HelloMain.java -&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;       package com.hello;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;       //add imports and handle exceptions as and when necessary&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;       public class HelloMain {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                  public static void main (String[] args) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                             BeanFactory factory = new XmlBeanFactory(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                                                                              new FileSystemResource("hello.xml"));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                             HelloService helloService = (HelloService) factory.getBean("helloService"); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                             helloService.sayHello();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;                  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 153, 0);"&gt;       }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here, the BeanFactory is the Spring container. The configuration file &lt;span style="font-style: italic;"&gt;"hello.xml"&lt;/span&gt; is loaded, &lt;span style="font-style: italic;"&gt;"getBean()"&lt;/span&gt; retrieves a reference to the bean with id &lt;span style="font-style: italic;"&gt;"helloService"&lt;/span&gt; and this reference is used to print &lt;span style="font-style: italic;"&gt;"Hello World"&lt;/span&gt; to the screen.&lt;br /&gt;&lt;br /&gt;This example depicts &lt;span style="font-weight: bold;"&gt;Dependency Injection&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;Inversion of Control&lt;/span&gt; in Spring clearly. Typically, in almost all applications, each object would be responsible for obtaining its own references to the objects it collaborates with, which leads to highly-coupled and hard-to-test code. But here, objects are given their dependencies at creation time by the xml file (in the above example) or dependencies are injected into objects, hence enabling loose-coupling. Here, the interface helps the class to remain loose-coupled at all times.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;reference :- Spring in Action&lt;/span&gt;&lt;/property&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-3328770777020133490?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/3328770777020133490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/07/simple-usage-of-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/3328770777020133490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/3328770777020133490'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/07/simple-usage-of-spring.html' title='Simple usage of Spring'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BhaHKunLPds/SpMMuLIxKDI/AAAAAAAAFw0/y6ekKVUt0CQ/s72-c/helloXML.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-745061926390240522</id><published>2009-07-24T22:27:00.000-07:00</published><updated>2009-08-24T14:06:52.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='modules'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring - What is it?</title><content type='html'>&lt;div  style="text-align: justify;font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold;"&gt;Java &lt;/span&gt;was in the process of maturing during the year of 1996. Many rich and dynamic web applications were being developed. But, people started to realize the shortcomings of &lt;span style="font-weight: bold;"&gt;Java Applets&lt;/span&gt;. This paved the way for the invention of &lt;span style="font-weight: bold;"&gt;Java Beans&lt;/span&gt; - a software component model for Java. They were primarily used for building user interface widgets and seemed too simple to be able to do any "real" work. Later in the year if 1998, &lt;span style="font-weight: bold;"&gt;Enterprise Java Beans (EJB)&lt;/span&gt; extended the normal beans to the server side, even though losing its simplicity. Its complexity reduced its popularity and easiness. This is where &lt;span style="font-weight: bold;"&gt;Aspect Oriented Programming (AOP)&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Dependency Injection (DI)&lt;/span&gt; found spot to flourish. These methodologies furnish the &lt;span style="font-weight: bold;"&gt;POJOs (Plain Old Java Object) &lt;/span&gt;with a mirror image of an EJB using a declarative programming model, but completly avoiding all the complexities. Better late than never !!!&lt;br /&gt;&lt;br /&gt;Leading the development based on lightweight POJOs is the &lt;span style="font-weight: bold;"&gt;Spring Framework&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Spring&lt;/span&gt; is an open source framework, created by Rod Johnson benefitting from its features such as simplicity, testability and loose coupling. Basically, it is a lightweight dependency injection and aspect-oriented container and framework. Breaking it down into simpler terms:-&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul  style="text-align: justify;font-family:trebuchet ms;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Lightweight&lt;/span&gt; -&gt; in size (distributable JAR less than 2.5MB) and overhead of processing&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Dependency Injection&lt;/span&gt; -&gt; loose coupling by means of objects not creating or looking up for dependent objects on their own, instead giving their dependencies during instantiation without being asked by them&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Aspect-oriented &lt;/span&gt;-&gt; separating business logic from system services (logging, security, transaction management) where objects deal with only things they are supposed to do&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Container&lt;/span&gt; -&gt; contains and controls the lifecycle and configuration of application objects&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Framework&lt;/span&gt; -&gt; configures and composes complex applications from simpler components with the help from an XML configuration file&lt;/li&gt;&lt;/ul&gt;&lt;div  style="text-align: justify;font-family:trebuchet ms;"&gt;Let us have a peep into the &lt;span style="font-weight: bold;"&gt;Spring Modules&lt;/span&gt;:-&lt;br /&gt;&lt;/div&gt;&lt;ul  style="text-align: justify;font-family:trebuchet ms;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Core &lt;/span&gt;-&gt; provides the fundamental functionality of Spring, onbased on the &lt;span style="font-style: italic;"&gt;BeanFactory&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ApplicationContext&lt;/span&gt; -&gt; builds on top of core and makes Spring a framework, adding support for internationalization messages, application life-cycle events, email, JNDI access, remoting, scheduling, validation, etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;AOP &lt;/span&gt;-&gt; decoupling application-wide concerns from objects to which they are applied&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JDBC abstraction (DAO)&lt;/span&gt; -&gt; abstracts away the boilerplate code of JDBC keeping the database code clean and simple, also building meaningful exceptions over the normal SQL Exceptions&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ORM &lt;/span&gt;-&gt; supports various ORM frameworks like Hibernate, JPA, JDO, iBatis, etc in addition to JDBC&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JMX &lt;/span&gt;-&gt; helps expose application's beans as Java Management Extensions beans supporting monitoring and reconfiguring a running application&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JCA&lt;/span&gt; (Java EE Connector API) -&gt; integrates Java applications with various information systems like databases and mainframes, all scattered in disparate servers and platforms&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;MVC Framework&lt;/span&gt; -&gt; separates user interface from application logic, also supporting existing MVCs in market like Struts, JSF, etc&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Portlet MVC&lt;/span&gt; -&gt; aggregating several bits of functionality on a single web page providing a view into several applications at once&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Web &lt;/span&gt;-&gt; support classes for MVC applications&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Remoting&lt;/span&gt; -&gt; access applications over the network, expose objects' functionality as remote objects, all considering the objects as simple POJOs&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JMS &lt;/span&gt;-&gt; guarantees message delivery throught JMS message queues and topics and helps create message-driven POJOs capable of consuming asynchronous messages&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-745061926390240522?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/745061926390240522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/07/spring-what-is-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/745061926390240522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/745061926390240522'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/07/spring-what-is-it.html' title='Spring - What is it?'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-8356574811098185537</id><published>2009-07-09T19:05:00.000-07:00</published><updated>2009-07-09T19:10:48.310-07:00</updated><title type='text'>EasyMock IllegalStateException: missing behavior definition for last method call</title><content type='html'>When you encounter this error,  please check whether you tried to use the mock object before invoking EasyMock.replay() method. I did that encountered the IllegalStateException and spent quite some time until I figured out the reason.&lt;br /&gt;&lt;br /&gt;I had written the following expect() ;&lt;br /&gt;&lt;br /&gt;EasyMock.expect(testObj.getTestMethod()).andReturn("testValue");&lt;br /&gt;&lt;br /&gt;the culprit was the following statement which I had put before the expect().&lt;br /&gt;&lt;br /&gt;System.out.println("testObj="+testObj.getTestMethod());&lt;br /&gt;&lt;br /&gt;Hope it helps someone!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-8356574811098185537?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/8356574811098185537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/07/illegalstateexception-missing-behavior.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/8356574811098185537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/8356574811098185537'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/07/illegalstateexception-missing-behavior.html' title='EasyMock IllegalStateException: missing behavior definition for last method call'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-4754444614233282867</id><published>2009-07-09T18:32:00.000-07:00</published><updated>2009-07-09T19:03:33.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JUnit Easymock'/><title type='text'>JUnit with EasyMock</title><content type='html'>Ever wondered how could you test your classes without waiting for your colleague to complete his classes.. I think EasyMock is one of the answers..&lt;br /&gt;&lt;br /&gt;EasyMock helps to create mock objects by passing an interface as argument. It is very helpful when you have complex web application that involves lot of custom objects and you want to test a particular class which is dependent on ten other classes.&lt;br /&gt;&lt;br /&gt;It has 2 simple steps to follow.&lt;br /&gt;&lt;br /&gt;1. Create mock objects&lt;br /&gt;2. Set the expected values in mock object so that the methods of the object return the same values&lt;br /&gt;&lt;br /&gt;It is very easy to use. (Steps below:-)&lt;br /&gt;&lt;br /&gt;1. Add easymock libraries&lt;br /&gt;2. Create JUnit test case&lt;br /&gt;3. Create mock objects using EasyMock.createStrictMock(MyInterface.class)&lt;br /&gt;4. Set expected values using EasyMock.expect(myObj.myMethod()).andReturn("ReturnvaluefromMyMethod").&lt;br /&gt;This statement means that when myMethod() is invoked, return the value "ReturnvaluefromMyMethod". In essence, whichever method you are planning to invoke later, set the values expected to be returned from the method.&lt;br /&gt;5. call EasyMock.replay(myObj);&lt;br /&gt;&lt;br /&gt;Our mock objects are ready to use.&lt;br /&gt;&lt;br /&gt;Tips:-&lt;br /&gt;1. Do not call any methods of the mock object until you call replay(). Otherwise it will throw an IllegalStateException  at that point.&lt;br /&gt;&lt;br /&gt;2. If your interface contains getter/setter methods, instruct the getter() [not the setter()] with the expected return values. In general, we are used to invoke the setter method with the value to be set and use the getter methods to retrieve the value.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope it helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-4754444614233282867?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/4754444614233282867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/07/junit-with-easymock.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/4754444614233282867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/4754444614233282867'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/07/junit-with-easymock.html' title='JUnit with EasyMock'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-8026942981113296137</id><published>2009-06-24T17:51:00.000-07:00</published><updated>2009-06-24T18:50:52.889-07:00</updated><title type='text'>BIRT report - database resource localization</title><content type='html'>I just thought of explaining how to display the localized resources from database. Basically, we create a mapping between the data in a column and the resource key in the resource bundle.&lt;br /&gt;&lt;br /&gt;1. Add resource bundle to your report.&lt;br /&gt; In the Layout tab, click anywhere on the blank space. Go to Resources tab. Select your resource bundle file.&lt;br /&gt;&lt;br /&gt;2. Select the table where you contains the columns from your dataset. Go to the "Map" tab. Create a new mapping by clicking on the "Add" button.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_BhaHKunLPds/SkLWl3e9H5I/AAAAAAAAFtE/ilRDyRqO0UY/s1600-h/newmaprule.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 387px; height: 400px;" src="http://1.bp.blogspot.com/_BhaHKunLPds/SkLWl3e9H5I/AAAAAAAAFtE/ilRDyRqO0UY/s400/newmaprule.png" alt="" id="BLOGGER_PHOTO_ID_5351075253306859410" border="0" /&gt;&lt;/a&gt;3. Click on the "..." button to choose the property key from the resource bundle. The screenshot is given below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BhaHKunLPds/SkLW2U1KQdI/AAAAAAAAFtM/02UuBpQ__jE/s1600-h/dbresourcebundle_choosekey.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 316px;" src="http://4.bp.blogspot.com/_BhaHKunLPds/SkLW2U1KQdI/AAAAAAAAFtM/02UuBpQ__jE/s400/dbresourcebundle_choosekey.png" alt="" id="BLOGGER_PHOTO_ID_5351075536062530002" border="0" /&gt;&lt;/a&gt;When the column "city" in the dataset contains the value "Nantes", retrieve the value from the resource bundle whoose property key is dblocalization.prop1. This will instruct the report engine to display "LocalizedValue1" when it encounters "Nantes" in the dataset.&lt;br /&gt;&lt;br /&gt;This should be done for all the values that you expect to be localized and shown in the report.&lt;br /&gt;&lt;br /&gt;4. All set. Preview the report.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It would have been nicer if there is a only one mapping needed  to  values in the column and the resource bundle file name. Lets wait BIRT's upcoming features..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-8026942981113296137?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/8026942981113296137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/06/i-just-thought-of-explaining-how-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/8026942981113296137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/8026942981113296137'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/06/i-just-thought-of-explaining-how-to.html' title='BIRT report - database resource localization'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_BhaHKunLPds/SkLWl3e9H5I/AAAAAAAAFtE/ilRDyRqO0UY/s72-c/newmaprule.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-6976943633711898663</id><published>2009-06-23T19:10:00.000-07:00</published><updated>2009-06-23T19:17:34.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JDBC ResultSet BIRT report'/><category scheme='http://www.blogger.com/atom/ns#' term='pass Collection to BIRT report'/><title type='text'>How to pass a ResultSet to BIRT report</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;&lt;/style&gt;&lt;br /&gt; &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;I tried to pass a JDBC ResultSet (java.sql.ResultSet) and could not find a straight forward way like passing the ResultSet as an argument to the report during generationd. However this is what I finally arrived at. This solution could be used to pass a collection of objects from a java class to the BIRT report.&lt;/p&gt; &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Steps:-&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;In  the java application where we are planning to generate the report  using BIRT engine, execute the sql query and fetch the resultset.  Add the resultset as a parameter to the report.&lt;/p&gt;  &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;ResultSet   &lt;b&gt;rs&lt;/b&gt; = getResultSet() // a function that executes the query   and returns resultset&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;HashMap   params = new HashMap();&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;params.put(myResultSet”,   &lt;b&gt;rs&lt;/b&gt;);&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;/p&gt;&lt;/ol&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;In  the report, create a scripted data source. Create a scripted data  set with the column names that you wish to use in the report. For  e.g lets create a data set with one column “EMP_NAME”.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;This  step is to glue the columns in the resultset that came as parameter  and the columns in the scripted data set. This can be achieved in  two ways.   &lt;/p&gt;  &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;a)   Using javascript function&lt;/p&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;     In the scripted data set, implement the open(), fetch() methods. I'll explain in this another post.&lt;br /&gt;&lt;/p&gt;    &lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;b)   Using a java event handler that extends ScriptedDataSetEventAdapter   class   (org.eclipse.birt.report.engine.api.script.eventadapter.ScriptedDataSetEventAdapter)    and implement the fetch(), open() and beforeOpen() methods. Lets   handle one by one.&lt;/p&gt;&lt;li&gt;Create a class called TestHandler  (test.TestHandler)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Declare   a member variable for the ResultSet&lt;/p&gt;   &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;ResultSet    resultSet;&lt;/p&gt;&lt;/ol&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;    &lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Retrieve   the parameter myResultSet set from the java class in Step 1 and   store it in the member variable.&lt;/p&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;beforeOpen(IDataSetInstance   dataSet, IReportContext reportContext) {&lt;/p&gt;   &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;super.beforeOpen(dataSet,    reportContext);&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;//retrieve    the parameter myResultSet set from the java class in Step 1&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;    resultSet =    (ResultSet)reportContext.getParameterValue(“myResultSet”);&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;}&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;/p&gt;&lt;/ol&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Position   to resultset to the first row in the open()&lt;/p&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;public   void open(IDataSetInstance dataSet) {&lt;/p&gt;   &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;super.open(dataSet);&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;if(resultSet    != null)&lt;/p&gt;&lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;resultSet.next();&lt;/p&gt;&lt;/ol&gt;&lt;/ol&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;}&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Map   the column of the resultset and the column of the scripted data   set.&lt;/p&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;public   boolean fetch(IDataSetInstance datSet, IUPdatableDataSetRow row) {&lt;/p&gt;   &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;if(resultSet.isAfterLast())&lt;/p&gt;&lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;return     false;// to indicate that there are no more rows left to process&lt;/p&gt;&lt;/ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;row.setColumnValue(“EMP_NAME”,    resultSet.getString(1));&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;resultSet.next();&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;return    true; // to indicate that more rows to follow&lt;/p&gt;&lt;/ol&gt;   &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;}&lt;/p&gt;   &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;/p&gt;&lt;/ol&gt;  &lt;/li&gt;&lt;/ol&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;Do  the cleanup activities. Close the resultset, statement and release  the connection.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;Go to the report designer. Go to Outline window. Select the scripted data set created in Step 2.  Go to the Property Editor and select "Event Handler" tab. In the Event Handler Class, add the fully qualified class name created in step 3 (test.TestHandler).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;All  set. Run the java program to initiate the engine and invoke the  report and see the results.&lt;/p&gt;  &lt;ol&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;/p&gt;&lt;/ol&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p style="margin-bottom: 0in; font-weight: normal;" align="left"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-6976943633711898663?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/6976943633711898663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/06/how-to-pass-resultset-to-birt-report.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/6976943633711898663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/6976943633711898663'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/06/how-to-pass-resultset-to-birt-report.html' title='How to pass a ResultSet to BIRT report'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3947967768847154050.post-265103663704870519</id><published>2009-06-23T18:05:00.000-07:00</published><updated>2009-06-23T18:12:47.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BIRT vs Jasper'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='Jasper Gotchas'/><category scheme='http://www.blogger.com/atom/ns#' term='BIRT Gotchas'/><title type='text'>My experiments with truth.. oops.. no.. BIRT and Jasper</title><content type='html'>&lt;div style="text-align: justify; font-family: georgia;"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face  {font-family:Wingdings;  panose-1:5 0 0 0 0 0 0 0 0 0;  mso-font-charset:2;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face  {font-family:"Cambria Math";  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:1;  mso-generic-font-family:roman;  mso-font-format:other;  mso-font-pitch:variable;  mso-font-signature:0 0 0 0 0 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:0;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:"";  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} .MsoPapDefault  {mso-style-type:export-only;  margin-bottom:10.0pt;  line-height:115%;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.0in 1.0in 1.0in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.Section1  {page:Section1;}  /* List Definitions */  @list l0  {mso-list-id:681663234;  mso-list-type:hybrid;  mso-list-template-ids:1812617796 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1  {mso-level-tab-stop:none;  mso-level-number-position:left;  text-indent:-.25in;} @list l1  {mso-list-id:1421635538;  mso-list-type:hybrid;  mso-list-template-ids:-1309533068 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1  {mso-level-number-format:bullet;  mso-level-text:;  mso-level-tab-stop:none;  mso-level-number-position:left;  text-indent:-.25in;  font-family:Symbol;} ol  {margin-bottom:0in;} ul  {margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;BIRT vs Jasper&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;                &lt;/span&gt;Over the past couple of weeks I was trying to explore the features supported in BIRT and Jasper. To a beginner, both the tools seem to be difficult. I mean, to get a working sample on them, it takes some time. &lt;span style=""&gt; &lt;/span&gt;I went through numerous blogs, tutorials and my firefox bookmarks started becoming unmanageable. So I thought of publishing my experiences so that it will help someone.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;The basic principle behind both reporting tools is the same. &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Design a report using a report designer (Save it in a xml file)&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Use the report engine to parse the xml file and fill the data in the report&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Render the report in a format of your choice (pdf, html, csv, etc..)&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;Performance metrics&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;BIRT seems to be 10-25% slower than Jasper for as long as the caching mechanism is used. Once the caching (virtualizer) is used, BIRT gives better performance (around 50% more) when compared to Jasper.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;BIRT Gotchas&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Always sorts the records once a group is created. BIRT 2.3 talks about a field for turning off the sort, there is no difference on the turn-around time.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Using BIRT in a web application requires you to add 30MB of libraries to your deployable (ear or war).&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;The pdf rendering mechanism generated huge (really hhhhhuuuuggggeeee) pdf documents.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Integration with java does not seem to be straightforward. For instance, passing a collection of objects to a BIRT report requires you to browse through numerous blogs and tutorials on birt-exchange and then apply your brain.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpLast" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Report rendering in xml format does not yield a good quality xml.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;Jasper Gotchas&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;iReport. The report designer does not seem to be intuitive.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Localization of database resources does not seem to be possible&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Csv export gives extra blank columns (extra commas) in the output file&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Excel output does not include the graphic images (logos etc..)&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Does not provide a good facility for component based model, object libraries.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Lacks concept of theme in the report elements except charts.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Does not have a default style per element (one style for table, another one for textfield etc..). It has a default style for the report.&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p class="MsoListParagraphCxSpLast" style="margin-left: 0.25in; text-indent: -0.25in; text-align: justify; font-family: georgia;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;·&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;Once virtualizer is used to overcome outofmemory error, the performance degrades drastically&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify; font-family: georgia;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3947967768847154050-265103663704870519?l=techieocean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techieocean.blogspot.com/feeds/265103663704870519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techieocean.blogspot.com/2009/06/my-experiments-with-truth-oops-no-birt.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/265103663704870519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3947967768847154050/posts/default/265103663704870519'/><link rel='alternate' type='text/html' href='http://techieocean.blogspot.com/2009/06/my-experiments-with-truth-oops-no-birt.html' title='My experiments with truth.. oops.. no.. BIRT and Jasper'/><author><name>dearItsMe</name><uri>http://www.blogger.com/profile/04104197001684664355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://1.bp.blogspot.com/_BhaHKunLPds/SJtkTnHtRUI/AAAAAAAADaI/wuTM5gX3VnA/s1600-R/traditional%2Bindian%2Blook...JPG'/></author><thr:total>1</thr:total></entry></feed>
