<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Curious</title>
	<atom:link href="http://blogs.plexibus.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.plexibus.com</link>
	<description>Thoughts, questions and opinions - some from the trenches, a few from the Ivory Tower</description>
	<pubDate>Sun, 30 Nov 2008 21:12:27 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Fun with AOP - reducing redundant code - the &#8216;for&#8217; loop</title>
		<link>http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/</link>
		<comments>http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 21:10:00 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[aop]]></category>

		<category><![CDATA[aspect oriented programming]]></category>

		<category><![CDATA[aspectj]]></category>

		<category><![CDATA[code reuse]]></category>

		<category><![CDATA[plexibus]]></category>

		<category><![CDATA[reduce redundant code]]></category>

		<category><![CDATA[roshan]]></category>

		<category><![CDATA[sequeira]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/?p=21</guid>
		<description><![CDATA[A few days ago I was coding a simple load-testing program using &#8216;for&#8217; loops. Something of the form:
package com.plexibus.samples;

public class HelloWorldClient {

  public static void main(String[] args) {
    HelloWorld hw = new HelloWorld();

		long startTime = System.currentTimeMillis();
    for(int i=0; i&#60;10000; i++) {
      hw.greet();
  [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I was coding a simple load-testing program using &#8216;for&#8217; loops. Something of the form:</p>
<pre class="java-codeface">package com.plexibus.samples;

public class HelloWorldClient {

  public static void main(String[] args) {
    HelloWorld hw = new HelloWorld();

		long startTime = System.currentTimeMillis();
    for(int i=0; i&lt;10000; i++) {
      hw.greet();
    }
		long endTime = System.currentTimeMillis();
		System.out.println(&#8221;Time taken to run greet &#8221;
				+ (double) (endTime - startTime) / 1000 + &#8221; seconds&#8221;);

    startTime = System.currentTimeMillis();
    for(int i=0; i&lt;100; i++) {
      hw.greetByName(&#8221;Big Dog&#8221;);
    }
		endTime = System.currentTimeMillis();
		System.out.println(&#8221;Time taken to run greetByName &#8221;
				+ (double) (endTime - startTime) / 1000 + &#8221; seconds&#8221;);

  }

}

class HelloWorld {

  public void greet() {
    System.out.println(&#8221;Hi&#8221;);
  }

  public void greetByName(final String name) {
    System.out.println(&#8221;Hello &#8221; + name);
  }

}</pre>
<p>Taking a step back I realized I could reduce some of these redundant &#8216;for&#8217; loops by using AOP.<br />
While working on this I decided to throw in some java annotations as well.</p>
<p>Requirement:<br />
Create an aspect that will run certain (marked) methods multiple times.</p>
<p>For this exercise, I am using <a href="http://repo1.maven.org/maven2/org/aspectj/aspectjweaver/1.6.0/">aspectjweaver-1.6.0.jar</a></p>
<p><strong>RunMultiple annotation</strong></p>
<p>Let&#8217;s start by defining an annotation, RunMultiple. The purpose of this annotation is to mark methods as candidates to be executed multiple times by an aspect (coming soon).<br />
The first meta-annotation, @Retention(RetentionPolicy.RUNTIME), indicates that annotations with this type are to be retained by the VM so they can be read reflectively at run-time.<br />
The second meta-annotation, @Target(ElementType.METHOD), indicates that this annotation type can be used to annotate only method declarations.<br />
The &#8216;counter&#8217; element allows us to specify the number of times we want a method, marked with this annotation, executed.</p>
<pre class="java-codeface">package com.plexibus.util.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Marks a method to run multiple times.
 *
 *

Typically used with the <code>RunMultipleAspect</code> aspect.
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RunMultiple {

	/**
	 * Number of times the method should be invoked
	 */
	int counter() default 1;

}</pre>
<p>Next, let&#8217;s look at the aspect.</p>
<p><strong>RunMultipleAspect</strong></p>
<pre class="java-codeface">package com.plexibus.aop.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.MethodSignature;

import com.plexibus.util.annotation.RunMultiple;

/**
 * The repeat advice reinvokes every method which is tagged with
 * @RunMultiple annotation (at most counter times), so all you need is to use
 * this mechanism to tag the methods that should be reinvoked more than once.
 *
 */
@Aspect
public class RunMultipleAspect {

	private final Log logger = LogFactory.getLog(getClass());

	/**
	 * This advice will run when join points are picked out by the pointcut (methods marked by
	 * RunMultiple annotation)
	 *
	 */
	@Around("call(@com.plexibus.util.annotation.RunMultiple * *.*(..))")
	public Object repeat(ProceedingJoinPoint jp) throws Throwable {
		Method method = ((MethodSignature) jp.getSignature()).getMethod();

		RunMultiple rmAnnotation = method.getAnnotation(RunMultiple.class);

		for (int i = 0; i &lt; rmAnnotation.counter()-1; i++) {

			if (logger.isTraceEnabled()) {
				logger.trace("i: " + i);
			}
			try {
				method.invoke(jp.getTarget(), jp.getArgs());
			} catch (Throwable t) {
				if (logger.isTraceEnabled()) {
				  logger.trace("RunMultipleAspect - t.getMessage(): "
							+ t.getMessage());
			  }
				throw t;
		  }
		}

		return jp.proceed();
	}

}</pre>
<p>In the RunMultipleAspect, shown above, I&#8217;ve defined an advice (in a method, repeat) and declared that it be run &#8220;around&#8221; (before and after) any method tagged with the RunMultiple annotation at the time the method is called by a calling program (pointcut).</p>
<p>In the repeat method, we grab the method that was intercepted since this is the method that we need to call multiple times.</p>
<pre class="java-codeface">		Method method = ((MethodSignature) jp.getSignature()).getMethod();</pre>
<p>Next, we get the annotation of type <em>RunMultiple</em> defined on the above method</p>
<pre class="java-codeface">		RunMultiple rmAnnotation = method.getAnnotation(RunMultiple.class);</pre>
<p>And then we call the target method &#8216;n&#8217; times (where, &#8216;n&#8217; equals RunMultiple.counter)</p>
<pre class="java-codeface">		for (int i = 0; i &lt; rmAnnotation.counter()-1; i++) {
		  ...
			method.invoke(jp.getTarget(), jp.getArgs());
			...
		}</pre>
<p>Now that we have the aspect ready, let&#8217;s refactor the HelloWorldClient.</p>
<pre class="java-codeface">package com.plexibus.samples;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.plexibus.util.annotation.RunMultiple;

public class HelloWorldClient {

  public static void main(String[] args) {
    HelloWorldClient hwc = new HelloWorldClient();
    HelloWorld hw = new HelloWorld();

		long startTime = System.currentTimeMillis();
    hwc.greet(hw);
		long endTime = System.currentTimeMillis();
		System.out.println(&#8221;Time taken to run greet &#8221;
				+ (double) (endTime - startTime) / 1000 + &#8221; seconds&#8221;);

    startTime = System.currentTimeMillis();
    hwc.greetByName(hw, &#8220;Big Dog&#8221;);
		endTime = System.currentTimeMillis();
		System.out.println(&#8221;Time taken to run greetByName &#8221;
				+ (double) (endTime - startTime) / 1000 + &#8221; seconds&#8221;);

  }

  @RunMultiple(counter=10000)
  public void greet(HelloWorld helloWorld) {
    helloWorld.greet();
  }

  @RunMultiple(counter=100)
  public void greetByName(HelloWorld helloWorld, String name) {
    helloWorld.greetByName(name);
  }

}</pre>
<p>In the above code, I&#8217;m marking the <em>HelloWorldClient.greet</em> method with the <em>RunMultiple</em> annotation, to be run 10,000 times and the <em>greetByName</em> method to be run 100 times.</p>
<p><strong>aop.xml</strong><br />
We will weave the aspect, RunMultipleAspect, into the HelloWorldClient using Load-Time Weaving i.e. when HelloWorldClient is loaded by the JVM. Load-Time Weaving can be enabled by specifying the <em>-javaagent: /aspectjweaver-.jar</em> option to the jvm.</p>
<p>We will configure load-time weaving with a META-INF/aop.xml which should be placed on the classpath of the executing code. In the aop.xml, we will declare the RunMultiple aspect and declare that all types under the <em>com.plexibus</em> package and it&#8217;s sub-packages be woven.</p>
<p>Next, assuming you have compiled the above code samples, run the HelloWorldClient as follows:</p>
<pre class="c#-codeface">java -javaagent:aspectjweaver-1.6.0.jar HelloWorldClient</pre>
<p><strong>Summary</strong><br />
Thus, using an aspect (and annotations) I&#8217;ve effectively reduced code duplication - in this case, the &#8216;for&#8217; loop. You could also move the &#8216;performance capture&#8217; (System.currentTimeMillis()) code into a separate aspect as well.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d21').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d21" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;Description=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;Url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;t=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Connotea"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Diigo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;digg"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;DZone"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;new_comment=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;new_comment=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;t=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;FURL"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Maple"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;description=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;bm_description=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;T=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;h=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurrent" alt="Add to&nbsp;PopCurrent" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rawsugar.com/tagger/?turl=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;tttl=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;RawSugar"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/rawsugar.png" title="Add to&nbsp;RawSugar" alt="Add to&nbsp;RawSugar" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;reddit"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Rojo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/rojo.png" title="Add to&nbsp;Rojo" alt="Add to&nbsp;Rojo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.simpy.com/simpy/LinkAdd.do?href=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Simpy"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/simpy.png" title="Add to&nbsp;Simpy" alt="Add to&nbsp;Simpy" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sk-rt.com/submit.php?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Sk*rt"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/skirt.png" title="Add to&nbsp;Sk*rt" alt="Add to&nbsp;Sk*rt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.shoutwire.com/?p=submit&amp;link=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Shoutwire"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/shoutwire.png" title="Add to&nbsp;Shoutwire" alt="Add to&nbsp;Shoutwire" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Squidoo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/squidoo.png" title="Add to&nbsp;Squidoo" alt="Add to&nbsp;Squidoo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/search?q=sphereit:http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://taggly.com/bookmarks.php/pass?action=add&amp;address=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Taggly"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/taggly.png" title="Add to&nbsp;Taggly" alt="Add to&nbsp;Taggly" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tailrank.com/share/?title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop&amp;link_href=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Tailrank"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/tailrank.png" title="Add to&nbsp;Tailrank" alt="Add to&nbsp;Tailrank" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.thisnext.com/pick/new/submit/sociable/?url=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;name=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;ThisNext"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/thisnext.png" title="Add to&nbsp;ThisNext" alt="Add to&nbsp;ThisNext" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://webride.org/discuss/split.php?uri=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Webride"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/webride.png" title="Add to&nbsp;Webride" alt="Add to&nbsp;Webride" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wists.com/t.php?c=null&amp;r=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;title={text}" title="Add to&nbsp;Wists"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/wists.png" title="Add to&nbsp;Wists" alt="Add to&nbsp;Wists" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/&amp;t=Fun+with+AOP+-+reducing+redundant+code+-+the+%26%238216%3Bfor%26%238217%3B+loop" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d21').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d21').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2008/07/15/fun-with-aop-reducing-redundant-code-the-for-loop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fabric/grid enable Spring beans with Appistry EAF</title>
		<link>http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/</link>
		<comments>http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 05:13:57 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
		
		<category><![CDATA[Build]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[grid]]></category>

		<category><![CDATA[Appistry EAF]]></category>

		<category><![CDATA[AppistryEAF]]></category>

		<category><![CDATA[fabric]]></category>

		<category><![CDATA[grid computing]]></category>

		<category><![CDATA[maven2]]></category>

		<category><![CDATA[plexibus]]></category>

		<category><![CDATA[roshan]]></category>

		<category><![CDATA[sequeira]]></category>

		<category><![CDATA[spring]]></category>

		<category><![CDATA[xtp]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/</guid>
		<description><![CDATA[The following is a guide to fabric-enabling (or grid-enabling) your existing Spring beans using Appistry EAF.  We will use Maven for build configuration.
Pre-requisites to running the code sample provided:

JDK 1.5+
Appistry EAF 3.8 Release

Maven 2.0.7+.

An IDE to write/edit code. I use Eclipse 3.3.2 and the code in the zip file has eclipse-related files. But you [...]]]></description>
			<content:encoded><![CDATA[<p><big><span style="font-family: verdana;"><small>The following is a guide to fabric-enabling (or grid-enabling) your existing Spring beans using <a href="http://www.appistry.com">Appistry</a> <a href="http://www.appistry.com/products/eaf/index.html">EAF</a>.  We will use Maven for build configuration.</small></span></big></p>
<p><big><span style="font-family: verdana;"><small>Pre-requisites to running the code sample provided:</small></span></big></p>
<ul>
<li><big><span style="font-family: verdana;"><a href="http://java.sun.com/javase/downloads/index.jsp" target="_blank"><small>JDK 1.5+</small></a></span></big></li>
<li><big><span style="font-family: verdana;"><small><a href="http://www.appistry.com/developers/content/downloads/download" target="_blank">Appistry EAF 3.8 Release<br />
</a></small></span></big></li>
<li><big><span style="font-family: verdana;"><small><a href="http://maven.apache.org/download.html" target="_blank">Maven 2.0.7+.<br />
</a></small></span></big></li>
<li><big><span style="font-family: verdana;"><small>An IDE to write/edit code. I use <a href="http://www.eclipse.org/downloads" target="_blank">Eclipse</a> 3.3.2 and the code in the zip file has eclipse-related files. But you could easily download the code and use it with an IDE of your choice.</small></span></big></li>
<li><big><span style="font-family: verdana;"><small><a href="http://m2eclipse.codehaus.org" target="_blank">m2eclipse plugin</a> - maven integration for Eclipse. <em>*This is optional*, but if you are using Eclipse as your IDE, I recommend using it.</em><br />
</small></span></big></li>
</ul>
<p><span style="font-family: sans-serif;"><strong>Installing the above software<br />
</strong>See <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Software+Development+Kit+CentOS%2C+RHEL%2C+and+SuSE+installation" target="_blank">here</a> on how to install Appistry EAF 3.8 Release on Cent OS, RHEL, and SuSE.<br />
See <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Software+Development+Kit+Windows+Installation" target="_blank">here</a> on how to install Appistry EAF 3.8 Release on Cent OS, RHEL, and SuSE.<br />
</span></p>
<p>Installation instructions for Java, Maven and Eclipse are provided on their respective web sites.</p>
<p><strong>Creating the Maven project</strong><br />
This example is based on the tutorial samples (spring_hello_world - see tutorial_samples.zip or tutorial_samples.tgz) provided on <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Hello+World+with+Spring+Beans" target="_blank">this</a> page.<br />
Allright, let&#8217;s get started by designing some components:</p>
<blockquote><p><em><span style="font-family: 'Courier New';">HelloWorldSpringService</span> - interface that exposes a single &#8220;greet&#8221; method. Remember - program to interfaces!</em></p>
<p><em><span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> - provides the implementation for HelloWorldSpringService.</em></p>
<p><em><span style="font-family: 'Courier New';">HelloWorldSpringClient</span> - client that calls the HelloWorldSpringService.greet method<br />
</em></p></blockquote>
<p>Since <span style="font-family: 'Courier New';">HelloWorldSpringService</span> interface is implemented by <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> and is used by <span style="font-family: 'Courier New';">HelloWorldSpringClient</span>, let&#8217;s put <span style="font-family: 'Courier New';">HelloWorldSpringService</span><small><big> into a common module, say HelloWorldCommon.<br />
</big><span style="font-family: 'Courier New';"><br />
<big>HelloWorldSpringServiceBean</big></span><big> could go into a HelloWorldService module while <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> could go into a HelloWorldClient module.</big></small><small><big>The above structure provides a clean separation between the interface, implementation(s), and the client.</big></small><small><big>Now that we have the structure laid out, let&#8217;s start by creating these maven modules. I&#8217;m not going to use the m2eclipse plugin to create a multi-module project in eclipse, but instead will use <a href="http://blogs.plexibus.com/2007/12/02/maven-guide-part-one/"><span style="font-family: 'Courier New';">mvn</span> from the command line</a> to create the modules. You are free to use the m2eclipse plugin to create the project and modules. <em>Usage of m2eclipse is beyond the scope of this article.</em></big></small><small><big>First, let&#8217;s create a project, HelloWorldSpring, that will be the parent of HelloWorldCommon, HelloWorldService, and HelloWorldClient. Open a shell, change to your eclipse workspace directory, type in the following command and hit enter:</big></small></p>
<blockquote><p><big><span style="font-family: 'Courier New';"><small>mvn archetype:create<br />
-DgroupId=com.appistry.samples<br />
-DartifactId=HelloWorldSpring</small></span><br />
</big></p></blockquote>
<p>The above command will create a HelloWorldSpring maven project.<br />
* Non m2eclipse plugin users: <em>If you do not plan on using m2eclipse, from the command line change directory to HelloWorldSpring directory, type the following command and hit enter:</em></p>
<blockquote><p><big><span style="font-family: 'Courier New';"><small>mvn eclipse:eclipse</small></span><br />
</big></p></blockquote>
<p>Since we want this to be the parent project, go ahead and delete the &#8220;src&#8221; directory under HelloWorldSpring. Next, edit the HelloWorldSpring&#8217;s <span style="font-family: 'Courier New';">pom.xml</span> - change the <span style="font-family: 'Courier New';">packaging</span> element&#8217;s value from <span style="font-family: 'Courier New';">jar</span> to <span style="font-family: 'Courier New';">pom</span>.</p>
<p>Next we need to create the HelloWorldCommon, HelloWorldService, and HelloWorldClient modules. Go back to your command line, and change directory to &lt;workspace&gt;/HelloWorldSpring. Type the following commands and hit enter:</p>
<blockquote><p><big><span style="font-family: 'Courier New';"><small>mvn archetype:create -DgroupId=com.appistry.samples -DartifactId=HelloWorldCommon</small></span><br />
<span style="font-family: 'Courier New';"><small>mvn archetype:create -DgroupId=com.appistry.samples -DartifactId=HelloWorldService</small></span><br />
<span style="font-family: 'Courier New';"><small>mvn archetype:create -DgroupId=com.appistry.samples -DartifactId=HelloWorldClient</small></span><br />
</big></p></blockquote>
<p>The above 3 commands create the HelloWorldCommon, HelloWorldService, and HelloWorldClient modules under &lt;workspace&gt;/HelloWorldSpring directory.<br />
* Non m2eclipse plugin users: <em>If you do not plan on using m2eclipse, from the command line change directory to HelloWorldSpring directory, type the following command and hit enter:</em></p>
<blockquote><p><big><span style="font-family: 'Courier New';"><small>mvn eclipse:eclipse</small></span><br />
</big></p></blockquote>
<p>Next, fire up Eclipse and select the workspace that you created the above maven project under. Now, create a new Project by clicking &#8220;File -&gt; New -&gt; Project&#8230;&#8221;. Select &#8220;General -&gt; Project&#8221; and hit &#8220;Next&#8221;. Type &#8220;HelloWorldSpring&#8221; for Project Name and click &#8220;Finish&#8221;.<br />
You should see, a HelloWorldSpring project with HelloWorldCommon, HelloWorldService, and HelloWorldClient under it.<br />
If you plan on using m2eclipse plugin, now would be a good time to right-click on the project and select &#8220;Maven -&gt; Enable Dependency Management&#8221; and then right-click again on the project and select &#8220;Maven -&gt; Enable Nested Modules&#8221;<big>.<br />
</big>* Non m2eclipse plugin users: <em>Right-click &#8220;java&#8221; (under HelloWorldSpring -&gt; HelloWorldCommon -&gt; src -&gt; main), select &#8220;Build Path -&gt; Use as Source Folder&#8221;. Do the same for &#8220;java&#8221; under </em><em>HelloWorldSpring -&gt; HelloWorldService -&gt; src -&gt; main</em> and <small><big><em>HelloWorldSpring -&gt; HelloWorldClient -&gt; src -&gt; main.</em></big></small><small><big><em>Now you have the HelloWorldSpring multi-module project configured under Eclipse! See Figure 1<br />
</em></big></small></p>
<p align="center"><small><img style="float: none; max-width: 800px" src="http://blogs.plexibus.com/wp-content/uploads/2008/06/appistryexamplemvnproject.png" alt="" /></small></p>
<p align="center"><small>Figure 1</small></p>
<p><small><br />
<big>Next we need to update the poms.</big><br />
<big><strong><br />
HelloWorldSpring pom.xml</strong></big></small><big><br />
</big></p>
<blockquote><p><span style="font-family: verdana;"><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;project xmlns=&#8221;http://maven.apache.org/POM/4.0.0&#8243; xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221; xsi:schemaLocation=&#8221;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;&gt;<br />
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&lt;groupId&gt;com.appistry.samples&lt;/groupId&gt;<br />
&lt;artifactId&gt;HelloWorldSpring&lt;/artifactId&gt;<br />
&lt;packaging&gt;pom&lt;/packaging&gt;<br />
&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;<br />
&lt;name&gt;HelloWorldSpring&lt;/name&gt;&lt;properties&gt;<br />
&lt;!&#8211; Default JDK Level &#8211;&gt;<br />
&lt;jdkLevel&gt;1.5&lt;/jdkLevel&gt;<br />
&lt;/properties&gt;</em></span><span style="font-family: verdana;"><em>&lt;modules&gt;<br />
&lt;module&gt;HelloWorldService&lt;/module&gt;<br />
&lt;module&gt;HelloWorldClient&lt;/module&gt;<br />
&lt;module&gt;HelloWorldCommon&lt;/module&gt;<br />
&lt;/modules&gt;</em></span><span style="font-family: verdana;"><em>&lt;dependencyManagement&gt;<br />
&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&lt;artifactId&gt;HelloWorldCommon&lt;/artifactId&gt;<br />
&lt;version&gt;${project.version}&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/dependencyManagement&gt;</em></span><span style="font-family: verdana;"><em>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;junit&lt;/groupId&gt;<br />
&lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
&lt;version&gt;4.4&lt;/version&gt;<br />
&lt;scope&gt;test&lt;/scope&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</em></span><span style="font-family: verdana;"><em>&lt;build&gt;<br />
&lt;pluginManagement&gt;<br />
&lt;plugins&gt;<br />
&lt;plugin&gt;<br />
&lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;<br />
&lt;!&#8211;&lt;version&gt;2.0.2&lt;/version&gt;&#8211;&gt;<br />
&lt;executions&gt;<br />
&lt;execution&gt;<br />
&lt;id&gt;compile&lt;/id&gt;<br />
&lt;phase&gt;compile&lt;/phase&gt;<br />
&lt;goals&gt;<br />
&lt;goal&gt;compile&lt;/goal&gt;<br />
&lt;/goals&gt;<br />
&lt;/execution&gt;<br />
&lt;execution&gt;<br />
&lt;id&gt;unit-test-compile&lt;/id&gt;<br />
&lt;goals&gt;<br />
&lt;goal&gt;testCompile&lt;/goal&gt;<br />
&lt;/goals&gt;<br />
&lt;/execution&gt;<br />
&lt;/executions&gt;<br />
&lt;configuration&gt;<br />
&lt;source&gt;${jdkLevel}&lt;/source&gt;<br />
&lt;target&gt;${jdkLevel}&lt;/target&gt;<br />
&lt;/configuration&gt;<br />
&lt;/plugin&gt;</em></span><span style="font-family: verdana;"><em>&lt;plugin&gt;<br />
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;2.4.2&lt;/version&gt;<br />
&lt;configuration&gt;<br />
&lt;excludes&gt;<br />
&lt;exclude&gt;**/*$*&lt;/exclude&gt;<br />
&lt;/excludes&gt;<br />
&lt;/configuration&gt;<br />
&lt;/plugin&gt;</em></span><span style="font-family: verdana;"><em>&lt;plugin&gt;<br />
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;1.1&lt;/version&gt;<br />
&lt;/plugin&gt;</em></span></p>
<p><span style="font-family: verdana;"><em>&lt;plugin&gt;<br />
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;2.0&lt;/version&gt;<br />
&lt;/plugin&gt;<br />
&lt;/plugins&gt;<br />
&lt;/pluginManagement&gt;<br />
&lt;/build&gt;</em></span></p>
<p><span style="font-family: verdana;"><em>&lt;/project&gt;</em></span></p></blockquote>
<p><strong>HelloWorldService pom.xml</strong><br />
Add HelloWorldCommon dependency to HelloWorldService</p>
<blockquote><p><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;project&gt;<br />
&lt;parent&gt;<br />
&lt;artifactId&gt;HelloWorldSpring&lt;/artifactId&gt;<br />
&lt;groupId&gt;com.appistry.samples&lt;/groupId&gt;<br />
&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;<br />
&lt;/parent&gt; </em><em>&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&lt;artifactId&gt;HelloWorldService&lt;/artifactId&gt;<br />
&lt;name&gt;HelloWorldService&lt;/name&gt;</em><em>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&lt;artifactId&gt;HelloWorldCommon&lt;/artifactId&gt;<br />
&lt;version&gt;${project.version}&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/project&gt;</em></p></blockquote>
<p><strong>HelloWorldClient pom.xml<br />
</strong>Add HelloWorldCommon dependency to HelloWorldClient. You will also need to add Spring as a dependency. I&#8217;m using Spring 2.5.4.<big><br />
</big></p>
<blockquote><p><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;project&gt;<br />
&lt;parent&gt;<br />
&lt;artifactId&gt;HelloWorldSpring&lt;/artifactId&gt;<br />
&lt;groupId&gt;com.appistry.samples&lt;/groupId&gt;<br />
&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;<br />
&lt;/parent&gt;&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&lt;artifactId&gt;HelloWorldClient&lt;/artifactId&gt;<br />
&lt;name&gt;HelloWorldClient&lt;/name&gt;</em><em>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&lt;artifactId&gt;HelloWorldCommon&lt;/artifactId&gt;<br />
&lt;version&gt;${project.version}&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
&lt;artifactId&gt;spring&lt;/artifactId&gt;<br />
&lt;version&gt;2.5.4&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;commons-logging&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-logging&lt;/artifactId&gt;<br />
&lt;version&gt;1.1.1&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;<br />
&lt;/project&gt;</em></p></blockquote>
<p><big><br />
<span style="font-family: 'Courier New';"><small></small></span></big></p>
<p><big><span style="font-family: 'Courier New';"><small></small></span></big>Now we are ready to code the <span style="font-family: 'Courier New';">HelloWorldSpringService</span>, <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span>, and <span style="font-family: 'Courier New';">HelloWorldSpringClient</span>.</p>
<p><strong>HelloWorldSpringService</strong><br />
The <span style="font-family: 'Courier New';">HelloWorldSpringService</span> has one method <span style="font-family: 'Courier New';">greet</span> which takes a <span style="font-family: 'Courier New';">String</span> parameter<span style="font-family: 'Courier New';">.<br />
</span></p>
<pre class="java-codeface">package com.appistry.samples.spring.helloworld;

public interface HelloWorldSpringService {
    String greet(String name);
}</pre>
<p>This interface goes under the HelloWorldCommon module under HelloWorldCommon/src/main/java.</p>
<p><strong>HelloWorldSpringServiceBean</strong><br />
The <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> class implements <span style="font-family: 'Courier New';">HelloWorldSpringService</span> interface. It goes under the HelloWorldService/src/main/java.</p>
<pre class="java-codeface">package com.appistry.samples.spring.helloworld.impl;

import com.appistry.samples.spring.helloworld.HelloWorldSpringService;

public class HelloWorldSpringServiceBean implements HelloWorldSpringService {

	public String greet(String name) {
		return "Hello World, " + name;
	}
}</pre>
<p><strong>HelloWorldSpringClient</strong><br />
Next, add the client that calls <span style="font-family: 'Courier New';">HelloWorldSpringService.greet</span>. <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> class goes under HelloWorldClient/src/main/java.</p>
<pre class="java-codeface">package com.appistry.samples.spring.helloworld;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloWorldSpringClient {

    public static void main(String[] args) {
	ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(&#8221;helloWorldClient-appContext.xml&#8221;);

        HelloWorldSpringService localHWS = (HelloWorldSpringService) appContext.getBean(&#8221;localHelloWorldBean&#8221;);
System.out.println(localHWS.greet(&#8221;locally.&#8221;));

    }
}</pre>
<p><span style="font-family: 'Courier New';">helloWorldClient-appContext.xml</span> is detailed below and it goes under HelloWorldClient/src/main/resources (add the &#8220;resources&#8221; directory under HelloWorldClient/src/main as a &#8220;source&#8221; folder in Eclipse):</p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;beans&gt;<br />
&lt;bean id=&#8221;localHelloWorldBean&#8221; class=&#8221;com.appistry.samples.spring.helloworld.impl.HelloWorldSpringServiceBean&#8221;/&gt;<br />
&lt;/beans&gt;</em></span></p></blockquote>
<p><span style="font-family: 'Courier New';"><br />
</span>Let&#8217;s package, install and run HelloWorldSpring. From the command, type the following command from under &lt;workspace&gt;/HelloWorldSpring to package and install HelloWorldSpring artifacts to your local maven repository.</p>
<blockquote><p><big><span style="font-family: 'Courier New';"><small>mvn clean install</small></span><br />
</big></p></blockquote>
<p>From Eclipse, run <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> as a Java Application. You should see an output like this:<big><br />
</big></p>
<blockquote><p><big><span style="font-family: arial;">&#8230;<br />
&#8230;<br />
<small>Jun 20, 2008 4:35:26 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons</small><br />
<small>INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@18a7efd: defining beans [localHelloWorldBean,fabricHelloWorldBean,fabric]; root of factory hierarchy</small><br />
<strong><small>Hello World, locally.</small></strong><br />
</span></big></p></blockquote>
<p>The HelloWorldSpringClient application loads the <span style="font-family: 'Courier New';">helloWorldClient-appContext.xml</span> spring application context, gets a reference to the HelloWorldSpringServiceBean and calls the greet method on it. So far we have seen nothing with regards to the fabric/grid. <big></big><big></big>If you would like to take a break, now would be a good time to do so. Go on. I&#8217;ll be right here.</p>
<p><strong>Exposing the HelloWorldSpringServiceBean as a fabric bean</strong><br />
To expose our existing HelloWorldSpringServiceBean in the fabric, we need to package and deploy the HelloWorldSpringServiceBean into the fabric.<br />
Let&#8217;s begin by first defining the HelloWorldSpringServiceBean in a spring application context (<span style="font-family: 'Courier New';">spring_hello_world_bean.xml</span>).</p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;beans&gt;<br />
&lt;bean id=&#8221;HelloWorldBean&#8221; class=&#8221;com.appistry.samples.spring.helloworld.impl.HelloWorldSpringServiceBean&#8221;/&gt;<br />
&lt;/beans&gt;</em></span></p></blockquote>
<p><small><big>Place this file under HelloWorldService/src/main/resources</big></small><br />
<small><big><strong>Note:</strong> Do we <em>need</em> to expose this in the fabric as a spring bean? No. We could have exposed it as a regular POJO. But the purpose of this example is to show Spring integration with Appistry EAF.</big></small><br />
<small><big>Now that we have wired the HelloWorldSpringServiceBean in a spring container, we need to define this bean as a Fabric Java Component. This is accomplished using the <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Component+Definition+XML" target="_blank">EAF Component Definition XML</a>.</big></small></p>
<p><strong>springHWSvc-component-defn.xml</strong></p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<br />
&lt;java-components xmlns=&#8221;http://www.appistry.com/ns/component&#8221; xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221; xsi:schemaLocation=&#8221;http://www.appistry.com/ns/component eaf-component.xsd&#8221;&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;component name=&#8221;mvnSpringHWSvcComponent&#8221; default-timeout=&#8221;5&#8243;&gt;<br />
&lt;spring-bean name=&#8221;HelloWorldBean&#8221;/&gt;<br />
&lt;/component&gt;<br />
&lt;/java-components&gt;</em></span></p></blockquote>
<p><big><br />
</big>where,<br />
the name attribute of the spring-bean element should<strong> match</strong> the bean id defined in the <span style="font-family: 'Courier New';">spring_hello_world_bean.xml</span> spring application context. In this case, HelloWorldBean.<br />
The default-timeout specifies how long to wait for a call (to a method) to return before timing out. In this case, we have specified 5 seconds.</p>
<p>Place this file under HelloWorldService/src/main/scripts for now.</p>
<p><small><big>So how does the EAF tie the component definition file and the spring application context? This is done via the <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Fabric+Application+Definition+XML" target="_blank">EAF Fabric Application Definition XML</a>.</big></small><small><big>The fabric application definition file describes the various files that comprise a EAF fabric application. This file is used by the <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/fabric_pkg" target="_blank">Fabric Package</a> (which we will encounter momentarily) to bundle these files into &#8220;<em>.fabric</em>&#8221; package.</big></small></p>
<p><strong>springHWSvc-fabric-app-defn.xml</strong></p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;?xml version=&#8221;1.0&#8243;?&gt;<br />
&lt;!DOCTYPE app SYSTEM &#8220;FabricApp.dtd&#8221;&gt;&lt;app name=&#8221;mvnSpringHelloWorldSvc&#8221; version=&#8221;1.0.0&#8243;&gt;<br />
&lt;spring&gt;<br />
&lt;bean-factory-locator bean=&#8221;myBeanFactory&#8221; resource-location=&#8221;beanRefFactory.xml&#8221;/&gt;<br />
&lt;/spring&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;components&gt;<br />
&lt;file name=&#8221;springHWSvc-component-defn.xml&#8221;/&gt;<br />
&lt;/components&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;java-libs&gt;<br />
&lt;file name=&#8221;HelloWorldCommon.jar&#8221;/&gt;<br />
&lt;file name=&#8221;HelloWorldService.jar&#8221;/&gt;<br />
&lt;file name=&#8221;spring.jar&#8221;/&gt;<br />
&lt;file name=&#8221;commons-logging.jar&#8221;/&gt;<br />
&lt;/java-libs&gt;<br />
&lt;/app&gt;<big><br />
</big></em></span></p></blockquote>
<p>where,<br />
components, file - is component definition file that we defined earlier<br />
java-libs - dependant java libraries that will be included in the <span style="font-family: 'Courier New';">.fabric</span> application.</p>
<p>Place this file under HelloWorldService/src/main/scripts</p>
<p>The interesting element in this file is the . The bean-factory-locator element provides the Fabric with an implementation of Spring <span style="font-family: 'Courier New';">BeanFactory</span> to enable it to access spring bean containers / application contexts. The <span style="font-family: 'Courier New';">BeanFactory</span> (provided to the Fabric) is itself described in a spring application context. In this case, <span style="font-family: 'Courier New';">beanRefFactory.xml</span>.</p>
<p><strong>beanRefFactory.xml</strong><br />
<small><br />
</small></p>
<blockquote><p><span style="font-family: 'Courier New';"><big><small><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;&lt;beans&gt;<br />
&lt;bean id=&#8221;myBeanFactory&#8221; class=&#8221;org.springframework.context.support.ClassPathXmlApplicationContext&#8221;&gt;<br />
&lt;constructor-arg value=&#8221;spring_hello_world_bean.xml&#8221;/&gt;<br />
&lt;/bean&gt;<br />
&lt;/beans&gt;</em></small></big></span></p></blockquote>
<p>The bean id in <span style="font-family: 'Courier New';">beanRefFactory.xml</span> should match the &#8220;bean&#8221; attribute of bean-factory-locator in the fabric application definition xml. In this case, myBeanFactory.<br />
In the above application context, we have configured the ClassPathXmlApplicationContext (a super set of the BeanFactory) and pass it the name of the application context, <span style="font-family: 'Courier New';">spring_hello_world_bean.xml</span>, that contains our HelloWorldSpringServiceBean.</p>
<p>Place the <span style="font-family: 'Courier New';">beanRefFactory.xml</span> under HelloWorldService/src/main/resources</p>
<p>Now we are ready to package our HelloWorldSpringServiceBean, so we can deploy it on the fabric. As you can see we have not modified the java code at all. All we have done so far is configure the HelloWorldSpringServiceBean POJO in a spring application context, describe the bean as a fabric Java component, and tie these elements (along with the BeanFactory) together using a fabric definition file. <em>Non-intrusive, eh?</em></p>
<p><strong>Build and Package HelloWorldSpringServiceBean</strong><br />
Packaging the application into <span style="font-family: 'Courier New';">.fabric</span> file can be accomplished using the <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/fabric_pkg" target="_blank">fabric pkg</a> command. The fabric package command takes a fabric application definition file as input and bundles the application files into a single package (<span style="font-family: 'Courier New';">.fabric</span>). We can configure the fabric package in the HelloWorldService pom.xml. But before we do this, we need to first download the dependant jars listed in the java-libs section of the fabric application definition xml (<small><big><span style="font-family: 'Courier New';">springHWSvc-fabric-app-defn.xml</span>) to a particular directory. This can be defined in the HelloWorldService pom.xml as well. Add the following snippet (after the <span style="font-family: 'Courier New';">dependencies</span> element and before the closing <span style="font-family: 'Courier New';">project</span> tag) to the HelloWorldService <span style="font-family: 'Courier New';">pom.xml</span>:</big></small><small> </small></p>
<blockquote><p><span style="font-family: 'Courier New';"><big><small><em>&lt;build&gt;<br />
&lt;plugins&gt;<br />
&lt;plugin&gt;<br />
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;2.0&lt;/version&gt;<br />
&lt;executions&gt;<br />
&lt;execution&gt;<br />
&lt;id&gt;copy-required-dependencies&lt;/id&gt;<br />
&lt;phase&gt;install&lt;/phase&gt;<br />
&lt;goals&gt;<br />
&lt;goal&gt;copy&lt;/goal&gt;<br />
&lt;/goals&gt;<br />
&lt;configuration&gt;<br />
&lt;stripVersion&gt;true&lt;/stripVersion&gt;<br />
&lt;artifactItems&gt;<br />
&lt;artifactItem&gt;<br />
&lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&lt;artifactId&gt;HelloWorldCommon&lt;/artifactId&gt;<br />
&lt;version&gt;${project.version}&lt;/version&gt;<br />
&lt;/artifactItem&gt;<br />
&lt;artifactItem&gt;<br />
&lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&lt;artifactId&gt;${project.artifactId}&lt;/artifactId&gt;<br />
&lt;version&gt;${project.version}&lt;/version&gt;<br />
&lt;/artifactItem&gt;<br />
&lt;artifactItem&gt;<br />
&lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
&lt;artifactId&gt;spring&lt;/artifactId&gt;<br />
&lt;version&gt;2.5.4&lt;/version&gt;<br />
&lt;/artifactItem&gt;<br />
&lt;artifactItem&gt;<br />
&lt;groupId&gt;commons-logging&lt;/groupId&gt;<br />
&lt;artifactId&gt;commons-logging&lt;/artifactId&gt;<br />
&lt;version&gt;1.1.1&lt;/version&gt;<br />
&lt;/artifactItem&gt;<br />
&lt;/artifactItems&gt;<br />
&lt;outputDirectory&gt;${project.build.directory}/fabric-package&lt;/outputDirectory&gt;<br />
&lt;/configuration&gt;<br />
&lt;/execution&gt;<br />
&lt;/executions&gt;<br />
&lt;/plugin&gt;<br />
&lt;/plugins&gt;<br />
&lt;/build&gt;</em></small></big><br />
</span></p></blockquote>
<p>This directs Maven (at <span style="font-family: 'Courier New';">install</span> phase) to copy the HelloWorldCommon, HelloWorldService, spring and commons-logging jar files (with the versions stripped) from the local maven repository to the <span style="font-family: 'Courier New';">fabric-package</span> directory under HelloWorldService/target directory. Since I&#8217;ve listed the jar files without version numbers in the element (in <span style="font-family: 'Courier New';">springHWSvc-fabric-app-defn.xml</span> file), I tell Maven to strip the version numbers from the jar files while it&#8217;s performing the copy.</p>
<p>Now that we have addressed the jar dependencies, we are ready to configure the <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/fabric_pkg" target="_blank"><span style="font-family: 'Courier New';">fabric_pkg</span></a> command. Let&#8217;s configure the fabric package in ant build file target and call the ant build file from maven.<br />
<strong>Note:</strong> <em>You don&#8217;t have to necessarily configure the fabric_pkg in an ant build file. You could have configured it within the pom itself.</em></p>
<p>First let&#8217;s check out the ant build file.</p>
<p><strong>build.xml</strong> (goes under HelloWorldService/src/main/scripts) - just displaying the necessary snippets. The attached HelloWorldSpring-source.zip contains all the source code listed here.</p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;!&#8211; copy the fabric application defn xml and component defn xml to fabric-package directory &#8211;&gt;<br />
&lt;target name=&#8221;init&#8221;&gt;<br />
&lt;copy todir=&#8221;target/fabric-package&#8221;&gt;<br />
&lt;fileset dir=&#8221;src/main/scripts&#8221;&gt;<br />
&lt;include name=&#8221;**/*-defn.xml&#8221;/&gt;<br />
&lt;/fileset&gt;<br />
&lt;/copy&gt;<br />
&lt;/target&gt;</em></span><span style="font-family: 'Courier New';"><em>&lt;!&#8211; execute fabric-pkg command &#8211;&gt;<br />
&lt;target name=&#8221;fabric-package&#8221; depends=&#8221;init&#8221;&gt;<br />
&lt;exec executable=&#8221;fabric_pkg&#8221;&gt;<br />
&lt;arg line=&#8221;target/fabric-package/springHWSvc-fabric-app-defn.xml&#8221; /&gt;<br />
&lt;/exec&gt;<br />
&lt;/target&gt;</em></span></p></blockquote>
<p>Now we need to update the HelloWorldService pom.xml to call the above ant build file. Add the following snippet (after the previous plugin definition and before the closing <span style="font-family: 'Courier New';">plugins</span> tag) to the HelloWorldService <span style="font-family: 'Courier New';">pom.xml</span>.<span style="font-family: 'Courier New';"> </span></p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;plugin&gt;<br />
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />
&lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;<br />
&lt;version&gt;1.1&lt;/version&gt;<br />
&lt;executions&gt;<br />
&lt;execution&gt;<br />
&lt;id&gt;fabric-package&lt;/id&gt;<br />
&lt;phase&gt;install&lt;/phase&gt;<br />
&lt;goals&gt;<br />
&lt;goal&gt;run&lt;/goal&gt;<br />
&lt;/goals&gt;<br />
&lt;/execution&gt;<br />
&lt;/executions&gt;<br />
&lt;configuration&gt;<br />
&lt;tasks&gt;<br />
&lt;ant antfile=&#8221;src/main/scripts/build.xml&#8221; target=&#8221;fabric-package&#8221; /&gt;<br />
&lt;/tasks&gt;<br />
&lt;/configuration&gt;<br />
&lt;/plugin&gt;</em><br />
</span></p></blockquote>
<p><big><span style="font-family: 'Courier New';"><br />
</span></big>Here we direct Maven (again, at install phase) to call the &#8220;fabric-package&#8221; target of <span style="font-family: 'Courier New';">build.xml</span>. The fabric-package target first copies the <span style="font-family: 'Courier New';">springHWSvc-fabric-app-defn.xml</span> and <span style="font-family: 'Courier New';">springHWSvc-component-defn.xml</span> files to the HelloWorldService/target/fabric-package directory and then calls the <span style="font-family: 'Courier New';"><a href="http://www.appistry.com/developers/wiki/display/eaf38dev/fabric_pkg" target="_blank">fabric_pkg</a></span> executable to bundle the application files into &#8220;<span style="font-family: 'Courier New';">mvnSpringHelloWorldSvc.fabric</span>&#8221; file. You will notice that the name of the fabric file is the same as the <span style="font-family: 'Courier New';">name</span> attribute of the <span style="font-family: 'Courier New';">app</span> element in <span style="font-family: 'Courier New';">springHWSvc-fabric-app-defn.xml</span>.</p>
<p>We are done with the package configuration. Now, open a command shell, change directory to /HelloWorldSpring, type the following command and hit enter:</p>
<blockquote><p><span style="font-family: 'Courier New';">mvn clean install</span><big><br />
</big></p></blockquote>
<p>The above command will compile the sources, the application jars, install the application jars to the local maven repository on your local machine, and then create the <span style="font-family: 'Courier New';">mvnSpringHelloWorldSvc.fabric</span><small><big> under the HelloWorldSpring/HelloWorldService directory.<br />
</big><br />
<big>Now you are ready to deploy the </big></small><span style="font-family: 'Courier New';">mvnSpringHelloWorldSvc.fabric</span><small><big> to the EAF fabric.<br />
</big><br />
</small><big><strong><small>Deploy HelloWorldSpringServiceBean</small></strong><br />
</big>Let&#8217;s use the instructions detailed on the Appistry EAF wiki page - <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Building%2C+Packaging%2C+and+Deploying+a+Fabric+Application" target="_blank">Building, Packaging, and Deploying a Fabric application</a>. The <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/fabric_ctl" target="_blank">fabric_ctl</a> command can be used to deploy a fabric application.</p>
<p>To deploy the <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> bundled in the <span style="font-family: 'Courier New';">mvnSpringHelloWorldSvc.fabric</span>, type the following command (from under &lt;workspace&gt;/HelloWorldSpring/HelloWorldService) with the correct fabric adminstrative user, password, and fabric address. If you have stuck with the defaults, the command is:</p>
<blockquote><p><span style="font-family: 'Courier New';">fabric_ctl -d 239.255.0.1:30000 -u fabric-admin/fabric-admin deploy </span><big><span style="font-family: 'Courier New';"><small>mvnSpringHelloWorldSvc.fabric</small></span><br />
</big></p></blockquote>
<p>You can verify if the deployment is successful or not by following the instructions on <a href="http://www.appistry.com/developers/wiki/display/eaf38dev/Building%2C+Packaging%2C+and+Deploying+a+Fabric+Application" target="_blank">this</a> wiki page.</p>
<p>If the above command didn&#8217;t throw any errors, you have successfully deployed the <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span>, <em>without any code changes</em>, to the fabric.</p>
<p>Now that we have <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> deployed to the fabric, how do we call the greet method on it from HelloWorldSpringClient?</p>
<p><strong>Call HelloWorldSpringServiceBean remotely</strong><br />
Calling <span style="font-family: 'Courier New';">HelloWorldSpringServiceBean</span> from <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> is achieved by a simple configuration in <span style="font-family: 'Courier New';">helloWorldClient-appContext.xml</span>. And adding Appistry EAF provided fabric.jar as a dependency to the HelloWorldClient pom.xml</p>
<p>Since Appistry EAF fabric.jar is not available on a public maven repository as of yet, we need to install it to our local maven repository on our local machine. To do this, open a command shell, change directory to $FABRIC_HOME/classes, type the following command and hit enter:</p>
<blockquote><p><span style="font-family: 'Courier New';">mvn install:install-file -Dfile=fabric.jar -DgroupId=com.appistry -DartifactId=fabric -Dversion=3.8.0.15 -Dpackaging=jar</span><big><br />
</big></p></blockquote>
<p>The above command will install fabric.jar to your local maven repository.</p>
<p>Next we need to add fabric.jar as a dependency to HelloWorldClient&#8217;s <span style="font-family: 'Courier New';">pom.xml:</span></p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;dependency&gt;<br />
&lt;groupId&gt;com.appistry&lt;/groupId&gt;<br />
&lt;artifactId&gt;fabric&lt;/artifactId&gt;<br />
&lt;version&gt;3.8.0.15&lt;/version&gt;<br />
&lt;/dependency&gt;</em><br />
</span></p></blockquote>
<p>Now we are ready to configure <span style="font-family: 'Courier New';">helloWorldClient-appContext.xml.</span><big><br />
</big>Append the following bean definitions to <span style="font-family: 'Courier New';">helloWorldClient-appContext.xml</span> located under &lt;workspace&gt;/HelloWorldSpring/HelloWorldClient:<span style="font-family: 'Courier New';"> </span></p>
<blockquote><p><span style="font-family: 'Courier New';"><em>&lt;bean id=&#8221;fabricHelloWorldBean&#8221; class=&#8221;com.appistry.spring.FabricProxyFactoryBean&#8221;&gt;<br />
&lt;property name=&#8221;serviceInterface&#8221; value=&#8221;com.appistry.samples.spring.helloworld.HelloWorldSpringService&#8221;/&gt;<br />
&lt;property name=&#8221;fabric&#8221;&gt;<br />
&lt;ref local=&#8221;fabric&#8221;/&gt;<br />
&lt;/property&gt;<br />
&lt;property name=&#8221;applicationName&#8221; value=&#8221;mvnSpringHelloWorldSvc&#8221;/&gt;<br />
&lt;property name=&#8221;componentName&#8221; value=&#8221;mvnSpringHWSvcComponent&#8221;/&gt;<br />
&lt;/bean&gt;&lt;bean id=&#8221;fabric&#8221; class=&#8221;com.appistry.fabric.Fabric&#8221;&gt;<br />
&lt;constructor-arg value=&#8221;239.255.0.116&#8243;/&gt;<br />
&lt;constructor-arg value=&#8221;31000&#8243;/&gt;<br />
&lt;/bean&gt;<br />
</em></span></p></blockquote>
<p><big></big>The bean fabricHelloWorldBean defines a <span style="font-family: 'Courier New';">com.appistry.spring.FabricProxyFactoryBean</span> which proxies any calls made on HelloWorldSpringService to an instance of HelloWorldSpringService on the fabric. The concept behind <span style="font-family: 'Courier New';">FabricProxyFactoryBean</span> is very similar to Spring Remoting. Infact <span style="font-family: 'Courier New';">FabricProxyFactoryBean</span> uses Spring Remoting classes to proxy requests to the fabric.<br />
The <span style="font-family: 'Courier New';">FabricProxyFactoryBean</span> requires:</p>
<ul>
<li>the interface on which methods will be called,</li>
<li>a reference to <span style="font-family: 'Courier New';">com.appistry.fabric.Fabric</span>,</li>
<li>an applicationName which should match the <span style="font-family: 'Courier New';">name</span> attribute of the <span style="font-family: 'Courier New';">app</span> element in the fabric application definition xml (<span style="font-family: 'Courier New';">springHWSvc-fabric-app-defn.xml</span>),</li>
<li>a componentName which should match the <span style="font-family: 'Courier New';">name</span> attribute of the <span style="font-family: 'Courier New';">component</span> element in the component definition xml (springHWSvc-component-defn.xml).</li>
</ul>
<p>Let&#8217;s now add some code to <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> to call the <span style="font-family: 'Courier New';">fabricHelloWorldBean</span> that we just defined above<big>.<br />
</big><br />
Let&#8217;s append the following two lines to the HelloWorldSpringClient&#8217;s main method:</p>
<pre class="java-codeface">HelloWorldSpringService fabricHWS = (HelloWorldSpringService) appContext.getBean("fabricHelloWorldBean");
System.out.println(fabricHWS.greet("from the fabric."));</pre>
<p>Now we are ready to run HelloWorldSpringClient once again.</p>
<p>From Eclipse, run <span style="font-family: 'Courier New';">HelloWorldSpringClient</span> as a Java Application. You should see an output like this:<big><br />
</big></p>
<blockquote><p><span style="font-family: arial;"><big>&#8230;<br />
&#8230;<br />
</big>Jun 20, 2008 4:35:26 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons<big><br />
</big>INFO:<br />
Pre-instantiating singletons in<br />
org.springframework.beans.factory.support.DefaultListableBeanFactory@18a7efd:<br />
defining beans [localHelloWorldBean,fabricHelloWorldBean,fabric]; root<br />
of factory hierarchy<big><br />
</big>Hello World, locally.<strong><small><big><br />
Hello World, from the fabric.</big><br />
</small></strong></span></p></blockquote>
<p>The HelloWorldSpringClient application loads the <span style="font-family: 'Courier New';">helloWorldClient-appContext.xml</span> spring application context, gets a reference to the <span style="font-family: 'Courier New';">fabricHelloWorldBean</span> and calls the greet method on it. The FabricProxyFactoryBean proxies the greet request to the fabric. An instance of HelloWorldSpringServiceBean on the fabric executes the greet method and returns the results to the HelloWorldSpringClient which prints the result to the standard out.</p>
<p>As you can see, we haven&#8217;t changed any code on the client either. Just a little bit of configuration and that was it.</p>
<p><strong>Download</strong></p>
<p>Extract the contents of the zip into your eclipse workspace. This will create a HelloWorldSpring folder under your workspace.</p>
<p><small><a title="HelloWorldSpring-source.zip" href="http://blogs.plexibus.com/wp-content/uploads/2008/06/helloworldspring-source.zip">HelloWorldSpring-source.zip</a><br />
</small></p>
<p><strong>Appistry EAF Developer Portal</strong></p>
<p>To learn more visit the <a href="http://www.appistry.com/developers/">Appistry EAF Developer Portal</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d18').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d18" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;Description=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;Url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;t=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Connotea"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Diigo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;digg"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;DZone"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;new_comment=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;new_comment=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;t=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;FURL"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Maple"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;description=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;bm_description=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;T=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;h=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurrent" alt="Add to&nbsp;PopCurrent" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rawsugar.com/tagger/?turl=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;tttl=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;RawSugar"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/rawsugar.png" title="Add to&nbsp;RawSugar" alt="Add to&nbsp;RawSugar" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;reddit"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Rojo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/rojo.png" title="Add to&nbsp;Rojo" alt="Add to&nbsp;Rojo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.simpy.com/simpy/LinkAdd.do?href=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Simpy"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/simpy.png" title="Add to&nbsp;Simpy" alt="Add to&nbsp;Simpy" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sk-rt.com/submit.php?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Sk*rt"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/skirt.png" title="Add to&nbsp;Sk*rt" alt="Add to&nbsp;Sk*rt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.shoutwire.com/?p=submit&amp;link=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Shoutwire"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/shoutwire.png" title="Add to&nbsp;Shoutwire" alt="Add to&nbsp;Shoutwire" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Squidoo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/squidoo.png" title="Add to&nbsp;Squidoo" alt="Add to&nbsp;Squidoo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/search?q=sphereit:http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Spurl"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://taggly.com/bookmarks.php/pass?action=add&amp;address=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Taggly"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/taggly.png" title="Add to&nbsp;Taggly" alt="Add to&nbsp;Taggly" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tailrank.com/share/?title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF&amp;link_href=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Tailrank"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/tailrank.png" title="Add to&nbsp;Tailrank" alt="Add to&nbsp;Tailrank" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/" title="Add to&nbsp;Technorati"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.thisnext.com/pick/new/submit/sociable/?url=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;name=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;ThisNext"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/thisnext.png" title="Add to&nbsp;ThisNext" alt="Add to&nbsp;ThisNext" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://webride.org/discuss/split.php?uri=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Webride"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/webride.png" title="Add to&nbsp;Webride" alt="Add to&nbsp;Webride" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wists.com/t.php?c=null&amp;r=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;title={text}" title="Add to&nbsp;Wists"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/wists.png" title="Add to&nbsp;Wists" alt="Add to&nbsp;Wists" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/&amp;t=Fabric%2Fgrid+enable+Spring+beans+with+Appistry+EAF" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d18').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d18').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2008/06/21/code-example-using-spring-beans-with-appistry-eaf-38/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Time Management</title>
		<link>http://blogs.plexibus.com/2008/05/28/time-management/</link>
		<comments>http://blogs.plexibus.com/2008/05/28/time-management/#comments</comments>
		<pubDate>Thu, 29 May 2008 04:21:06 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[plexibus]]></category>

		<category><![CDATA[roshan]]></category>

		<category><![CDATA[sequeira]]></category>

		<category><![CDATA[time management randy pausch todo lists]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2008/05/28/time-management/</guid>
		<description><![CDATA[A great time management lecture by Randy Pausch.


Bookmark It























































Hide Sites



$$('div.d9').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); ]]></description>
			<content:encoded><![CDATA[<p>A great <a title="Time management - http://video.google.com/videoplay?docid=-5784740380335567758" href="http://video.google.com/videoplay?docid=-5784740380335567758" target="_blank">time management lecture</a> by <a title="Randy Paush's website - http://download.srv.cs.cmu.edu/~pausch/" href="http://download.srv.cs.cmu.edu/~pausch/" target="_blank">Randy Pausch</a>.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d9').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d9" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=Time+Management&amp;Description=Time+Management&amp;Url=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://blogs.plexibus.com/2008/05/28/time-management/&amp;t=Time+Management" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Connotea"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Diigo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;digg"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Time+Management&amp;url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;DZone"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;new_comment=Time+Management&amp;new_comment=Time+Management&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=Time+Management&amp;url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://blogs.plexibus.com/2008/05/28/time-management/&amp;t=Time+Management" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Time+Management&amp;u=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;FURL"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://blogs.plexibus.com/2008/05/28/time-management/" title="Add to&nbsp;Maple"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management&amp;description=Time+Management" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;bm_description=Time+Management" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://blogs.plexibus.com/2008/05/28/time-management/&amp;T=Time+Management" title="Add to&nbsp;Netscape"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://blogs.plexibus.com/2008/05/28/time-management/&amp;h=Time+Management" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://blogs.plexibus.com/2008/05/28/time-management/&amp;title=Time+Management" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://blogs.plexibus.com/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurr