<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-34847499</atom:id><lastBuildDate>Thu, 24 Oct 2024 10:34:54 +0000</lastBuildDate><title>Unni Vemanchery Mana</title><description>Welcome to my Blog....</description><link>http://unnivmana.blogspot.com/</link><managingEditor>noreply@blogger.com (Unni Vemanchery Mana)</managingEditor><generator>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><blogger:adultContent>true</blogger:adultContent><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Welcome to my Blog....</itunes:subtitle><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34847499.post-5118022225882041814</guid><pubDate>Fri, 18 Apr 2008 13:31:00 +0000</pubDate><atom:updated>2008-04-18T06:37:37.831-07:00</atom:updated><title>JQuery - Web 2.0 framework</title><description>Jquery opens up a new way of thinking in javascript programming. It is something really an abstraction in implementing old javascript ideas. Definitely, it is worth trying if you want to develop components for Web 2.0 based application.&lt;br /&gt;&lt;br /&gt;When you try to implement some new rich user functionalities with rudimentary, it is time consuming and error-prone. Imagine that if you want to write a effects such as fading out a html element using ordinary javascript, it will take time and you should be little expert to do that. I mean you require some experience.Initially; you need to understand how dhtml is going to work Not only it is difficult for novice programmers; it is time consuming when we debug it. So this framework comes to rescue any experienced as well as novice javascript programmers to think in JQuery way. Initially it is bit intimidating to understand what this stuff is, but gradually it is really useful to useful in adapting this framwork.OK.Enough with the story&lt;br /&gt;&lt;br /&gt;So anybody has thought that the Javascript is really stupid, and then it is right time to change that notion. Let us look into some of its concepts.&lt;br /&gt;&lt;br /&gt; Jquery supports objected-oriented programming. And also, it supports Chaining. Chaining means, we can place successive actions or method invocations (for example) in a single call. So you do not have to make nested method calls to arrive the final result. But how do you make such a call. Let us say you need to add fade or hide a &amp;l;div&amp;gt; element in an html document.  So you can do it by&lt;br /&gt;&lt;br /&gt;                                       &lt;strong&gt; $("div").fadeOut() ;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;                                           Or&lt;br /&gt;&lt;br /&gt;                                     &lt;strong&gt;$("#idvalueofdivtag").fadeOut(); &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;where as "div" is an HTML element type or   #idvalueofdivtag is name of &amp;lt;div&amp;gt; tag's ID name present in the document. With the above execution contents between that &amp;lt;div&amp;gt; tags will be faded out. Of course, you need to decide what event will be fired to make the above call in order to achieve the result. It is pretty simple, right.&lt;br /&gt;&lt;br /&gt;If you get a time, then please have a look at this web site, &lt;a href="http://jquery.com/"&gt;http://jquery.com/&lt;/a&gt;. If you see this web site at least once, it has got once nice demo of this framework on the opening page itself. Feel the experience. It is really superb.&lt;br /&gt;&lt;br /&gt;Already there are two books written on this amazing framework. Two chapters are free to download from ‘Jquery in action’, published by Manning Publications. It has provided nice tutorial also on the site which you are required to go through it. It is really worth reading.&lt;br /&gt;&lt;br /&gt;This framework never stops you using other frameworks. If you really need another javascript source to be used along with this, then Jquery has provided an alternative.&lt;br /&gt;&lt;strong&gt;jQuery.noConflict().&lt;/strong&gt; This method call will create an alias to Jquery object itself and can prefix to the normal method routines.That way the conflicts can be eliminated.&lt;br /&gt;&lt;br /&gt;Also, you can see numerous plug-INS have already been developed to enhance rich user experience.&lt;br /&gt; Personally I felt this one more better performing than other web2.0 frameworks developed in JavaScript. Google also started using this framework!.</description><link>http://unnivmana.blogspot.com/2008/04/jquery-web-20-framework.html</link><author>noreply@blogger.com (Unni Vemanchery Mana)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34847499.post-2126510786340790138</guid><pubDate>Sun, 09 Mar 2008 13:38:00 +0000</pubDate><atom:updated>2008-03-12T10:17:27.250-07:00</atom:updated><title>Sahi - Open Source Web Testing Tool</title><description>Any body who has been working in testing applications know what is WinRunner and LoadRunner.&lt;br /&gt;&lt;br /&gt;A commercial testing framework developed by Mercury Software.This tool provides testing script to an existing application and also a tester can master this scripts to test the applications.It happens this way.Tester starts testing each and every links or button in a web application and a in-built facility has been provided in the same to play back these scripts.Once the testing is over ,the tester play back the saved test script file.&lt;br /&gt;&lt;br /&gt;Similarly , there is an open source testing framework developed in java called 'SAHI'.This frame works similar way that was explained above.Since it is developed 100% in java, customization to this framework is really easy depending upon the requirement.You can download this framework from http://sourceforge.net/projects/sahi/. There is a document included in this pack how to install and run it.&lt;br /&gt;&lt;br /&gt;But this framework does not provide any in-built commands to enhance the testing, but merely a mediocre testing tool that can be used to test the web application.&lt;br /&gt;&lt;br /&gt;Once you downloaded this framework, copy to a folder in your hard disk.Copy to C:\sahi. If you further explore this folder you can see  a bin folder with a batch file to execute the sahi server.When you double click on this  batch file, sahi server will start.This server will be listening to port 9999.&lt;br /&gt;&lt;br /&gt;After this point you need to make few changes in your favourite browser which is self explanatory and enter any url.Alt + DBlClick will open script window where in you can start recording the events.It will record every click user making on website.Once you feel that the recording is enough then you can stop it and playback the scripts.&lt;br /&gt;&lt;br /&gt;However there are certain discrepancies have been pointed out.Like, if you open more than one links, then this framework will register only one link.As far as security is concerned, there is one thing caught into my observation that it is decrypting  password value automatically and was able to see the password entered!.&lt;br /&gt;&lt;br /&gt;This is a very small framework which can be considered as a model testing framework.But a good deal of work is required to make this framework to use in day-to-day testing applications.&lt;br /&gt;ThoughtWorks , US based company has extensively worked on this open source product.</description><link>http://unnivmana.blogspot.com/2008/03/sahi-open-source-web-testing-tool.html</link><author>noreply@blogger.com (Unni Vemanchery Mana)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34847499.post-7580656938229998127</guid><pubDate>Fri, 31 Aug 2007 07:08:00 +0000</pubDate><atom:updated>2007-09-02T05:01:02.499-07:00</atom:updated><title>Annotation and Dependency Injection in Struts1.2 application</title><description>&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;Annotation is an attribute oriented programming. Means, a meta-data will be passed to the piece of code. There are two types of Annotation. Compile time and Run Time. Compile time annotation as you know, is taken care at the time of compilation time and the latter is happening at run time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Now let us talk about ‘Dependency Injection’. This paradigm is to inject the dependencies into the code. Let us talk about one practical example. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Since the introduction of the EJB3.0, enterprise bean development became very easy. There are no hurdles like creating remote and local interfaces and the respective deployment descriptor files. These have been eliminated from the development life cycle.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;What exactly happened here inside the enterprise bean, we can specify what type of bean it is? Is it a stateless or statefull and what type of interfaces that you are going to use.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Let us look at the following example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;@Stateless&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Public class HelloBean implements Hello{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Public void hello(String str){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;System.out.println (“ Hello “+str);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;This is an attribute to the EJB3.0 container that this bean is a stateless session bean. Likewise, take a look at the following interface how an interface is marked as ‘Remote’.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;@Remote&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Public interface Hello{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt; public void hello(String str){};&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;So these informations can be available to the ejb3.0 container by the help of Dependency Injection. In earlier ejb specifications, it was the responsibility of the developer to develop home, remote interface components and giving entries in the &lt;i style=""&gt;ejb-jar&lt;/i&gt; xml file and this approach was taking a lot of development time.Since the attribute oriented programming can save a lot of development time.   &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Let us take a look at struts 1.2 application where in Dependency Injection can be implemented. But if you are already using Struts2 framework, then in many situations they are using this feature readily. Here we are worried about Struts 1.2 application where dependency injection can be achieved using custom annotation.&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;In order to achieve the above, we have written a custom annotation that will serve this purpose. The custom annotation in this scenario is like the following:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;package test;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import static java.lang.annotation.ElementType.FIELD;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import static java.lang.annotation.RetentionPolicy.RUNTIME;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.lang.annotation.Retention;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.lang.annotation.Target;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;@Target({ FIELD})&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;@Retention(RUNTIME)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;public @interface VarRef {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;This custom annotation binds the strVal variable in the TestAction class and specifies Retention policy is RUNTIME.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;We use a RequestProcessor to pre-process the request and a public variable in the action class will be pre-populated with some value before the action class is executed. What really happens is the CustomRequestProcessor will check whether the variable is binding to an annotation of type FIELD. If any annotation is present on the variable, then the CustomRequestProcessor will process the variable and will invoke the setter method of the action class. The variable will be set to its value inside checkAnnotation(Object obj) method when set method was invoked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;The variable is a public variable in the TestAction class.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;package process;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.io.IOException;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.lang.reflect.Field;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.lang.reflect.Method;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.ServletException;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.http.HttpServletRequest;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.http.HttpServletResponse;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.Action;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionForm;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionForward;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionMapping;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.RequestProcessor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import test.VarRef;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;public class CustomRequestProcessor extends RequestProcessor {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;protected ActionForward processActionPerform(HttpServletRequest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;request,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;HttpServletResponse response, Action action,ActionForm form,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;ActionMapping mapping) throws IOException, ServletException{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;ActionForward forward = null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;checkAnnotation(action);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;forward = super.processActionPerform( request, response,action, form, mapping);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;return forward;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;public Object checkAnnotation(Object obj){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;String args[] = new String[1];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;try{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;Field [] fArray = obj.getClass().getDeclaredFields();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;for(int i=0; i&lt;farray.length;i++){&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/farray.length;i++){&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;Field ff = fArray[i];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;String strFieldName = ff.getName();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;if(ff.isAnnotationPresent(VarRef.class)){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;if (obj instanceof Action) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;               &lt;/span&gt;Method m = obj.getClass().getDeclaredMethod("set"+strFieldName,String.class);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;               &lt;/span&gt;args[0]="hello";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;               &lt;/span&gt;m.invoke(obj,args[0]);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;}catch(Exception e){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;e.printStackTrace();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;return null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Take a closer look at the checkAnnotation method in the CustomRequestProcessor class. This method takes Object is an argument and determines what type of class was invoked. If the invoking class is of type ACTION type, then it will call the &lt;i style=""&gt;setstrVar&lt;/i&gt; method in the action class using reflection and the corresponding variable will be set to ‘hello’ value. The check annotation method is invoked from the processActionPerform method.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;So this gives us an idea that dependency injection can be achieved in struts application. This will lead to many ideas of implementing dependency injection like getting the datasource name;  the ejb references etc in the struts 1.2 based applications as and when required. Also this will minimize number of lines in the code. All can be achieved in 2-3 lines of code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;The action class &lt;span style=""&gt; &lt;/span&gt;in this scenario is,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;package test;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import java.io.IOException;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.naming.InitialContext;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.ServletException;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.http.HttpServletRequest;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import javax.servlet.http.HttpServletResponse;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.Action;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionForm;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionForward;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;import org.apache.struts.action.ActionMapping;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;public class TestAction extends Action{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;b style=""&gt;@VarRef public String strVar="";&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;public ActionForward execute(ActionMapping mapping,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;ActionForm form,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;HttpServletRequest request,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                             &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;HttpServletResponse response)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;                  &lt;/span&gt;throws IOException, ServletException &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;                  &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;                  &lt;/span&gt;System.out.println(" the strVar "+strVar);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;                 &lt;/span&gt;return mapping.findForward("success");&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;                  &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;public void setstrVar(String strVar) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;this.strVar=strVar;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;You can see output in the tomcat console when the action class was invoked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;The strVar variable will be set to &lt;b style=""&gt;&lt;span style="color:blue;"&gt;hello &lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;at the time of TestAction was invoked&lt;/span&gt;&lt;b style=""&gt;&lt;span style="color:blue;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="color:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;So annotation opens up plethora of innovative ideas when it comes to attribute oriented programming. It can be applied almost anywhere without much difficulty. You have to define what the application will be doing when it sees such &lt;st1:place st="on"&gt;Meta&lt;/st1:place&gt; data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;script type="text/javascript"&gt;!-- google_ad_client = "pub-8401500602561893"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-09-02: ayurvedam, java, HEALTH google_ad_channel = "4031584713+6624841225+3562457394"; google_color_border = "9D1961"; google_color_bg = "E6E6E6"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "0066CC"; google_ui_features = "rc:10"; //--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;script type="text/javascript"&gt;&lt;!-- google_ad_client = "pub-8401500602561893"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2007-09-02: ayurvedam, java, HEALTH google_ad_channel = "4031584713+6624841225+3562457394"; google_color_border = "9D1961"; google_color_bg = "E6E6E6"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "0066CC"; google_ui_features = "rc:10"; //--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;&lt;!--&lt;br /&gt;google_ad_client = "pub-8401500602561893";&lt;br /&gt;google_ad_width = 468;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;google_ad_format = "468x60_as";&lt;br /&gt;google_ad_type = "text_image";&lt;br /&gt;//2007-09-02: ayurvedam, java, HEALTH&lt;br /&gt;google_ad_channel = "4031584713+6624841225+3562457394";&lt;br /&gt;google_color_border = "9D1961";&lt;br /&gt;google_color_bg = "E6E6E6";&lt;br /&gt;google_color_link = "0000FF";&lt;br /&gt;google_color_text = "000000";&lt;br /&gt;google_color_url = "0066CC";&lt;br /&gt;google_ui_features = "rc:10";&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&lt;br /&gt;  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://unnivmana.blogspot.com/2007/08/annotation-and-dependency-injection-in.html</link><author>noreply@blogger.com (Unni Vemanchery Mana)</author><thr:total>3</thr:total></item></channel></rss>