<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Anand Rajasekar &#187; Java</title>
	<atom:link href="http://www.anandsekar.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anandsekar.com</link>
	<description>ரெங்கசாமி ஆனந்த் சேகர் ராஜசேகர்</description>
	<lastBuildDate>Thu, 03 Jun 2010 05:30:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Modifying Classpath at Runtime</title>
		<link>http://www.anandsekar.com/2008/08/27/modifying-classpath-at-runtime/</link>
		<comments>http://www.anandsekar.com/2008/08/27/modifying-classpath-at-runtime/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 20:19:35 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.anandsekar.com/?p=52</guid>
		<description><![CDATA[A hackish way of modifying the classpath at runtime can be done in a way described at the java forums Modifying Classpath at Runtime
A cleaner approach is to configure your own classloader and set it as the threads context classloader




URL&#91;&#93; urls=new URL&#91;2&#93;;


URLClassLoader classLoader=new URLClassLoader&#40;urls&#41;;


Thread.currentThread&#40;&#41;.setContextClassLoader&#40;classLoader&#41;; 




This is extremely useful if your unit test cases have dependencies [...]]]></description>
			<content:encoded><![CDATA[<p>A hackish way of modifying the classpath at runtime can be done in a way described at the java forums <a href="http://forums.sun.com/thread.jspa?threadID=300557&#038;forumID=32">Modifying Classpath at Runtime</a><br />
A cleaner approach is to configure your own classloader and set it as the threads context classloader</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AURL+java.sun.com&#038;bntl=1"><span class="kw3">URL</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> urls=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AURL+java.sun.com&#038;bntl=1"><span class="kw3">URL</span></a><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AURLClassLoader+java.sun.com&#038;bntl=1"><span class="kw3">URLClassLoader</span></a> classLoader=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AURLClassLoader+java.sun.com&#038;bntl=1"><span class="kw3">URLClassLoader</span></a><span class="br0">&#40;</span>urls<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a>.<span class="me1">currentThread</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setContextClassLoader</span><span class="br0">&#40;</span>classLoader<span class="br0">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
<p>This is extremely useful if your unit test cases have dependencies that you would like to load at runtime</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2008/08/27/modifying-classpath-at-runtime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InheritableThreadLocal and Tomcat</title>
		<link>http://www.anandsekar.com/2008/05/08/inheritablethreadlocal-and-tomcat/</link>
		<comments>http://www.anandsekar.com/2008/05/08/inheritablethreadlocal-and-tomcat/#comments</comments>
		<pubDate>Thu, 08 May 2008 05:18:40 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.anandsekar.com/2008/05/08/inheritablethreadlocal-and-tomcat/</guid>
		<description><![CDATA[InheritableThreadLocal does not work with tomcat as tomcat thread pool does not clear the thread local contacts after a request has been executed. This results in no good way to share information information between the parent and the child threads that are created using thread local variables. 
One way to solve this problem is to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/InheritableThreadLocal.html">InheritableThreadLocal</a> does not work with tomcat as tomcat thread pool does not clear the thread local contacts after a request has been executed. This results in no good way to share information information between the parent and the child threads that are created using thread local variables. </p>
<p>One way to solve this problem is to maintain a reference to the parent thread by writing your own thread that is constructed by a thread factory.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> MyThread <span class="kw2">extends</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> parent;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> MyThread<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> parent<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">parent</span> = parent;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> getParent<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> parent;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="co2">import java.util.concurrent.ThreadFactory;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> MyThreadFactory <span class="kw2">implements</span> ThreadFactory <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> newThread<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3ARunnable+java.sun.com&#038;bntl=1"><span class="kw3">Runnable</span></a> arg0<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">new</span> MyThread<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a>.<span class="me1">currentThread</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="co2">import java.util.HashMap;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Map;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ClassNeedingInheritableThreadLocal <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&#038;bntl=1"><span class="kw3">Map</span></a> inheritableThreadLocal=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AHashMap+java.sun.com&#038;bntl=1"><span class="kw3">HashMap</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> getInheritableThreadContext<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> inheritableThreadLocal.<span class="me1">get</span><span class="br0">&#40;</span>getThread<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setInheritableThreadContext<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> context<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inheritableThreadLocal.<span class="me1">put</span><span class="br0">&#40;</span>getThread<span class="br0">&#40;</span><span class="br0">&#41;</span>, context<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> getThread<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> currentThread=<a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a>.<span class="me1">currentThread</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>currentThread instanceof MyThread<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentThread=getParent<span class="br0">&#40;</span><span class="br0">&#40;</span>MyThread<span class="br0">&#41;</span> currentThread<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> currentThread;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> getParent<span class="br0">&#40;</span>MyThread myThread<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AThread+java.sun.com&#038;bntl=1"><span class="kw3">Thread</span></a> parent=myThread.<span class="me1">getParent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>parent instanceof MyThread<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> getParent<span class="br0">&#40;</span><span class="br0">&#40;</span>MyThread<span class="br0">&#41;</span> parent<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> parent;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Create a executor service by using our thread factory</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">ExecutorService service=Executors.<span class="me1">newFixedThreadPool</span><span class="br0">&#40;</span><span class="nu0">10</span>, <span class="kw2">new</span> MyThreadFactory<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
<p>Remember that you would need to clean up all the objects that were put in the thread local. This can be done with a filter or by using AOP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2008/05/08/inheritablethreadlocal-and-tomcat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Locks for more granular concurrent access</title>
		<link>http://www.anandsekar.com/2007/09/21/using-locks-for-more-granular-concurrent-access/</link>
		<comments>http://www.anandsekar.com/2007/09/21/using-locks-for-more-granular-concurrent-access/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 21:03:02 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.anandsekar.com/2007/09/21/using-locks-for-more-granular-concurrent-access/</guid>
		<description><![CDATA[Locks introduced in Java 5 allow a more granular control on a shared resource. When a method is synchronized only the thread that obtains the lock is allowed to enter into that method or any other synchronized method of the class. However some times we may need a more granular control, typically when we have [...]]]></description>
			<content:encoded><![CDATA[<p>Locks introduced in Java 5 allow a more granular control on a shared resource. When a method is synchronized only the thread that obtains the lock is allowed to enter into that method or any other synchronized method of the class. However some times we may need a more granular control, typically when we have two or more resources we want to share across threads.</p>
<p>e.g.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">package org.<span class="me1">lock</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> LockExample <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <span class="kw4">boolean</span> initialized;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">int</span> salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> increaseSalary<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!initialized<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">initialized=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">salary=<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">salary=salary+<span class="nu0">100</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> reset<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">initialized=<span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>In this example we need to synchronize access on the initialization and the reset operations. Also we want to make sure that threads have a serialized access when they increase salary.</p>
<p>This is where we can leverage locks. We define two locks, one for initialization and one for the salary operation.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">package org.<span class="me1">lock</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.concurrent.locks.Lock;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.concurrent.locks.ReentrantLock;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> LockExample <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Lock initializationLock=<span class="kw2">new</span> ReentrantLock<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Lock salaryLock=<span class="kw2">new</span> ReentrantLock<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">boolean</span> initialized;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> increaseSalary<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!initialized<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initializationLock.<span class="me1">lock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialized=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">finally</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initializationLock.<span class="me1">unlock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salaryLock.<span class="me1">lock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=salary+<span class="nu0">100</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">finally</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salaryLock.<span class="me1">unlock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> reset<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initializationLock.<span class="me1">lock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialized=<span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">finally</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initializationLock.<span class="me1">unlock</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>If you are using Java 1.4 you can utilize temporary synchronization objects to achieve the same result</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">package org.<span class="me1">lock</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> Lock14Example <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> initializationLock=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> salaryLock=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">boolean</span> initialized;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> increaseSalary<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!initialized<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">synchronized</span><span class="br0">&#40;</span>initializationLock<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialized=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=<span class="nu0">1000</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">synchronized</span><span class="br0">&#40;</span>salaryLock<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=salary+<span class="nu0">100</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> reset<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">synchronized</span><span class="br0">&#40;</span>initializationLock<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialized=<span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; salary=<span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2007/09/21/using-locks-for-more-granular-concurrent-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrust Certification Chain Validation Error using Java Clients</title>
		<link>http://www.anandsekar.com/2006/08/31/entrust-certification-chain-validation-error-using-java-clients/</link>
		<comments>http://www.anandsekar.com/2006/08/31/entrust-certification-chain-validation-error-using-java-clients/#comments</comments>
		<pubDate>Thu, 31 Aug 2006 17:28:40 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.pullaveli.com/?p=40</guid>
		<description><![CDATA[We were stumped yesterday trying to debug why all java clients trying to connect to a secure site using entrust&#8217;s Secure Server Certificates were throwing a certificate chain validation error. It turned out that the intermediate certificate that we downloaded from entrust had a bad expiration date. To correct this problem download the intermediate certificate [...]]]></description>
			<content:encoded><![CDATA[<p>We were stumped yesterday trying to debug why all java clients trying to connect to a secure site using entrust&#8217;s Secure Server Certificates were throwing a certificate chain validation error. It turned out that the intermediate certificate that we downloaded from entrust had a bad expiration date. To correct this problem download the intermediate certificate again from entrust (they have posted the correct certificate now !) or remove the intermediate certificate from the server. (<a href="http://www.entrust.net/ssl-technical/chaincert_faq.cfm">http://www.entrust.net/ssl-technical/chaincert_faq.cfm</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2006/08/31/entrust-certification-chain-validation-error-using-java-clients/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Applied Symmetric Cryptography</title>
		<link>http://www.anandsekar.com/2006/05/13/applied-symmetric-cryptography/</link>
		<comments>http://www.anandsekar.com/2006/05/13/applied-symmetric-cryptography/#comments</comments>
		<pubDate>Sun, 14 May 2006 02:24:01 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.pullaveli.com/?p=34</guid>
		<description><![CDATA[Cryptography in essence tries to solve three main real world problems.

Confidentialty
Integrity
Authenticity

Lets consider there are two people Alice and Bob who want to communicate with each other, and Eve is trying to eaves drop on the communication. The communication is said to be confidential if eve is not able to understand what messages Alice and Bob [...]]]></description>
			<content:encoded><![CDATA[<p>Cryptography in essence tries to solve three main real world problems.</p>
<ol>
<li>Confidentialty</li>
<li>Integrity</li>
<li>Authenticity</li>
</ol>
<p>Lets consider there are two people Alice and Bob who want to communicate with each other, and Eve is trying to eaves drop on the communication. The communication is said to be confidential if eve is not able to understand what messages Alice and Bob are exchanging. Ok, Eve cannot understand what Alice and Bob are talking, however Eve could stand between Alice and Bob and tamper the message. Somehow Bob must be able to deduce that the messages that come from Alice have not been tampered. There is yet another problem, Eve could be sending messages on behalf of Alice, somehow Bob must be able to authenticate that the message came from Alice.</p>
<p>There are two kinds of Cryptography</p>
<ol>
<li>Symmetric/Secret Key Cryptography</li>
<li>Asymmetric/Public Key Cryptography</li>
</ol>
<p><strong>Confidentiality using Symmetric/Secret Key Cryptography</strong><br />
Secret key cryptography, uses the same key to encrypt and decrypt the message. If Alice wants to communicate a confidential message to Bob they must first have the same encryption key in their possession.<br />
<img id="image45" src="http://www.anandsekar.com/wp-content/uploads/2006/05/confidential.png" alt="confidential.png" /><br />
In the example below we use the key generator to generate a key for the DES encryption algorithm. The cipher class is then instantiated for encryption and decryption using the key which is distributed to Alice and Bob.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">package org.<span class="me1">symmetric</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.Cipher;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.KeyGenerator;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.SecretKey;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ConfidentialitySecretKey <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> ConfidentialitySecretKey<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KeyGenerator keyGenerator = KeyGenerator.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&#8220;DES&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretKey key = keyGenerator.<span class="me1">generateKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Alice alice = <span class="kw2">new</span> Alice<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bob bob = <span class="kw2">new</span> Bob<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alice.<span class="me1">setKey</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bob.<span class="me1">setKey</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> cipherText = alice.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bob.<span class="me1">receiveMessage</span><span class="br0">&#40;</span>cipherText<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">class</span> Alice <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> SecretKey key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setKey<span class="br0">&#40;</span>SecretKey key<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">key</span> = key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> message = <span class="st0">&#8220;Top Secret&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cipher cipher = Cipher.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&#8220;DES/ECB/PKCS5Padding&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cipher.<span class="me1">init</span><span class="br0">&#40;</span>Cipher.<span class="me1">ENCRYPT_MODE</span>, key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> cipher.<span class="me1">doFinal</span><span class="br0">&#40;</span>message.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="st0">&#8220;UTF-8&#8243;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">class</span> Bob <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> SecretKey key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setKey<span class="br0">&#40;</span>SecretKey key<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">key</span> = key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> receiveMessage<span class="br0">&#40;</span><span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> message<span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cipher cipher = Cipher.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&#8220;DES/ECB/PKCS5Padding&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cipher.<span class="me1">init</span><span class="br0">&#40;</span>Cipher.<span class="me1">DECRYPT_MODE</span>, key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> plainText = cipher.<span class="me1">doFinal</span><span class="br0">&#40;</span>message<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#40;</span>plainText, <span class="st0">&#8220;UTF-8&#8243;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> args<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ConfidentialitySecretKey c = <span class="kw2">new</span> ConfidentialitySecretKey<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p><strong>Integrity using Symmetric/Secret Key Cryptography</strong><br />
Now since Alice can send a confidential message to Bob, she is faced with another problem. She needs to some how ensure the integrity of the message. On the event that the message is tampered by eve, somehow Bob should be able to detect that the message has been tampered.<br />
A message digest is an function on the message that generates a unique but shorter representation of the message itself. Alice now generates a digest of the message that she needs to send to Bob. Now she encrypts the message digest with the secret key that only she and Bob shares. The result of the transforation is called the <strong>Message Authentication Code</strong> or <strong>MAC</strong>. She now sends the message and the MAC to Bob. Since Bob is the only other person in the world who is in possession of the secret key, nobody can tamper the message and regenerate the MAC. When Bob received the message he verifies that the message has not been tampered by generating the message digest from the message and matching it with the decripted MAC.<br />
<img id="image46" src="http://www.anandsekar.com/wp-content/uploads/2006/05/integrity.png" alt="integrity.png" /><br />
The example below shows how one could generate a MAC using java.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">package org.<span class="me1">symmetric</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Arrays;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.KeyGenerator;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.Mac;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import javax.crypto.SecretKey;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> IntegritySecretKey <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> IntegritySecretKey<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KeyGenerator keyGen = KeyGenerator.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&#8220;HmacMD5&#8243;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecretKey key = keyGen.<span class="me1">generateKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Alice alice = <span class="kw2">new</span> Alice<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bob bob = <span class="kw2">new</span> Bob<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alice.<span class="me1">setKey</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bob.<span class="me1">setKey</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> message = alice.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> mac = alice.<span class="me1">getMAC</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bob.<span class="me1">receiveMessage</span><span class="br0">&#40;</span>message, mac<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// eve tampers the next message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bob.<span class="me1">receiveMessage</span><span class="br0">&#40;</span>message, mac<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">class</span> Alice <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> SecretKey key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setKey<span class="br0">&#40;</span>SecretKey key<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">key</span> = key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="st0">&#8220;Top Secret&#8221;</span>.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="st0">&#8220;UTF-8&#8243;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> getMAC<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> message = getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mac mac = Mac.<span class="me1">getInstance</span><span class="br0">&#40;</span>key.<span class="me1">getAlgorithm</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mac.<span class="me1">init</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> mac.<span class="me1">doFinal</span><span class="br0">&#40;</span>message<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">class</span> Bob <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> SecretKey key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> setKey<span class="br0">&#40;</span>SecretKey key<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">this</span>.<span class="me1">key</span> = key;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> receiveMessage<span class="br0">&#40;</span><span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> message, <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> macReceived<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mac mac = Mac.<span class="me1">getInstance</span><span class="br0">&#40;</span>key.<span class="me1">getAlgorithm</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mac.<span class="me1">init</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> macToCompare = mac.<span class="me1">doFinal</span><span class="br0">&#40;</span>message<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AArrays+java.sun.com&#038;bntl=1"><span class="kw3">Arrays</span></a>.<span class="me1">equals</span><span class="br0">&#40;</span>macToCompare, macReceived<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> args<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IntegritySecretKey i = <span class="kw2">new</span> IntegritySecretKey<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p><strong>Authentication using Secret/Symmetric Key Cryptography</strong><br />
Using message authentication codes inherently solves the problems of authentication, as not only the integrity of the message is ensured, since Alice and Bob are the only two persons who are in possession of the secret key, if the MAC is verified it also authencitates that Alice really sent the message. Now Eve has a few tricks up her sleeve ! She could record the messages and replay them at a later time, or she should reorder the messages. This could be solved by embedding the timestamp in the messages. Eve could still cause trouble by deleting the messages totatally ! This problem cannot be solved by cryptography but with the handshake and protocol used for communication.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2006/05/13/applied-symmetric-cryptography/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JBoss 4.0 Classloader Problems with Commons-Logging</title>
		<link>http://www.anandsekar.com/2006/03/09/jboss-40-classloader-problems-with-commons-logging/</link>
		<comments>http://www.anandsekar.com/2006/03/09/jboss-40-classloader-problems-with-commons-logging/#comments</comments>
		<pubDate>Fri, 10 Mar 2006 00:11:01 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.pullaveli.com/?p=24</guid>
		<description><![CDATA[&#8220;Log4JLogger does not implement Log&#8221; .. this happens because commons logging is bound to the JBoss system classloader, however the application classloader is trying to associate it to itself. The best way to resolve this error is to remove all references to commons-logging and utilize the one that is packaged with JBoss. For more information [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Log4JLogger does not implement Log&#8221; .. this happens because commons logging is bound to the JBoss system classloader, however the application classloader is trying to associate it to itself. The best way to resolve this error is to remove all references to commons-logging and utilize the one that is packaged with JBoss. For more information refer <a href="http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions">Commons Logging FAQ</a>.</p>
<p>To configure JBoss with a simpler flat classloader make the following changes.</p>
<p>Changes to be made in {JBoss-Home}/server/{server-name}/deploy/ear-deployer.xml</p>
<pre>
set attribute with name="Isolated" to false
set attribute with name "CallByValue" to false</pre>
<p>Changes to be made in {JBoss-Home}/server/ {server-name}/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml</p>
<pre>
set attribute with name "UseJBossWebLoader" true</pre>
<p>Refer the <a href="http://www.jboss.org/wiki/Wiki.jsp?page=ClassLoadingConfiguration">JBoss Wiki</a> for more information.</p>
<p><hints id="hah_hints"></hints></p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2006/03/09/jboss-40-classloader-problems-with-commons-logging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exporting the Private Key from a JKS keystore</title>
		<link>http://www.anandsekar.com/2006/01/19/exporting-the-private-key-from-a-jks-keystore/</link>
		<comments>http://www.anandsekar.com/2006/01/19/exporting-the-private-key-from-a-jks-keystore/#comments</comments>
		<pubDate>Thu, 19 Jan 2006 23:22:04 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.pullaveli.com/?p=13</guid>
		<description><![CDATA[A common problem faced when moving certificates and keys from tomcat to Apache web server is that keytool does not allow you to export the private key in the format that apache&#8217;s modssl module requires. Mark Foster&#8217;s post and Andrew Morrow&#8217;s post contains valuable information on how to export a key from a JKS keystore.
Here [...]]]></description>
			<content:encoded><![CDATA[<p>A common problem faced when moving certificates and keys from tomcat to Apache web server is that keytool does not allow you to export the private key in the format that apache&#8217;s modssl module requires. <a href="http://mark.foster.cc/kb/openssl-keytool.html">Mark Foster&#8217;s post</a> and <a href="http://forum.java.sun.com/thread.jspa?forumID=2&#038;messageID=449486&#038;threadID=154587">Andrew Morrow&#8217;s post</a> contains valuable information on how to export a key from a JKS keystore.</p>
<p>Here is a summary of the steps needed to export a private key<br />
Download <a id="p18" href="http://www.anandsekar.com/wp-content/uploads/2006/01/ExportPrivateKey.zip">ExportPrivateKey.zip</a><br />
Invoke</p>
<div class="codesnip-container" >java -jar ExportPrivateKey.zip {keystore_path} JKS {keystore_password} {alias} {target_file}</div>
<p>This would export the key to PKCS #8 PEM format. Now run openssl to convert it to the format apache modssl expects the file in</p>
<div class="codesnip-container" >openssl pkcs8 -inform PEM -nocrypt -in exported-pkcs8.key -out exported.key</div>
<p>The java code for exporting the private key in PKCS #8 format</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="co2">import java.io.File;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.FileInputStream;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.FileWriter;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.Key;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.KeyPair;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.KeyStore;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.KeyStoreException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.NoSuchAlgorithmException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.PrivateKey;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.PublicKey;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.UnrecoverableKeyException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.security.cert.Certificate;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import sun.misc.BASE64Encoder;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ExportPrivateKey <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&#038;bntl=1"><span class="kw3">File</span></a> keystoreFile;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> keyStoreType;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> char<span class="br0">&#91;</span><span class="br0">&#93;</span> password;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> alias;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&#038;bntl=1"><span class="kw3">File</span></a> exportedFile;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">static</span> <a href="http://www.google.com/search?q=allinurl%3AKeyPair+java.sun.com&#038;bntl=1"><span class="kw3">KeyPair</span></a> getPrivateKey<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AKeyStore+java.sun.com&#038;bntl=1"><span class="kw3">KeyStore</span></a> keystore, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> alias, char<span class="br0">&#91;</span><span class="br0">&#93;</span> password<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AKey+java.sun.com&#038;bntl=1"><span class="kw3">Key</span></a> key=keystore.<span class="me1">getKey</span><span class="br0">&#40;</span>alias,password<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>key instanceof <a href="http://www.google.com/search?q=allinurl%3APrivateKey+java.sun.com&#038;bntl=1"><span class="kw3">PrivateKey</span></a><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ACertificate+java.sun.com&#038;bntl=1"><span class="kw3">Certificate</span></a> cert=keystore.<span class="me1">getCertificate</span><span class="br0">&#40;</span>alias<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3APublicKey+java.sun.com&#038;bntl=1"><span class="kw3">PublicKey</span></a> publicKey=cert.<span class="me1">getPublicKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AKeyPair+java.sun.com&#038;bntl=1"><span class="kw3">KeyPair</span></a><span class="br0">&#40;</span>publicKey,<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3APrivateKey+java.sun.com&#038;bntl=1"><span class="kw3">PrivateKey</span></a><span class="br0">&#41;</span>key<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AUnrecoverableKeyException+java.sun.com&#038;bntl=1"><span class="kw3">UnrecoverableKeyException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3ANoSuchAlgorithmException+java.sun.com&#038;bntl=1"><span class="kw3">NoSuchAlgorithmException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AKeyStoreException+java.sun.com&#038;bntl=1"><span class="kw3">KeyStoreException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> export<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AKeyStore+java.sun.com&#038;bntl=1"><span class="kw3">KeyStore</span></a> keystore=<a href="http://www.google.com/search?q=allinurl%3AKeyStore+java.sun.com&#038;bntl=1"><span class="kw3">KeyStore</span></a>.<span class="me1">getInstance</span><span class="br0">&#40;</span>keyStoreType<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BASE64Encoder encoder=<span class="kw2">new</span> BASE64Encoder<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keystore.<span class="me1">load</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&#038;bntl=1"><span class="kw3">FileInputStream</span></a><span class="br0">&#40;</span>keystoreFile<span class="br0">&#41;</span>,password<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AKeyPair+java.sun.com&#038;bntl=1"><span class="kw3">KeyPair</span></a> keyPair=getPrivateKey<span class="br0">&#40;</span>keystore,alias,password<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3APrivateKey+java.sun.com&#038;bntl=1"><span class="kw3">PrivateKey</span></a> privateKey=keyPair.<span class="me1">getPrivate</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> encoded=encoder.<span class="me1">encode</span><span class="br0">&#40;</span>privateKey.<span class="me1">getEncoded</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AFileWriter+java.sun.com&#038;bntl=1"><span class="kw3">FileWriter</span></a> fw=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileWriter+java.sun.com&#038;bntl=1"><span class="kw3">FileWriter</span></a><span class="br0">&#40;</span>exportedFile<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fw.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&#8220;&#8212;&#8211;BEGIN PRIVATE KEY&#8212;&#8211;<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fw.<span class="me1">write</span><span class="br0">&#40;</span>encoded<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fw.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&#8220;<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fw.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&#8220;&#8212;&#8211;END PRIVATE KEY&#8212;&#8211;&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fw.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> args<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExportPrivateKey export=<span class="kw2">new</span> ExportPrivateKey<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">keystoreFile</span>=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&#038;bntl=1"><span class="kw3">File</span></a><span class="br0">&#40;</span>args<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">keyStoreType</span>=args<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">password</span>=args<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>.<span class="me1">toCharArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">alias</span>=args<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">exportedFile</span>=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AFile+java.sun.com&#038;bntl=1"><span class="kw3">File</span></a><span class="br0">&#40;</span>args<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; export.<span class="me1">export</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2006/01/19/exporting-the-private-key-from-a-jks-keystore/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Writing an Interpretter Using JavaCC</title>
		<link>http://www.anandsekar.com/2006/01/15/writing-a-interpretter/</link>
		<comments>http://www.anandsekar.com/2006/01/15/writing-a-interpretter/#comments</comments>
		<pubDate>Sun, 15 Jan 2006 19:37:14 +0000</pubDate>
		<dc:creator>anandsekar</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.pullaveli.com/?p=8</guid>
		<description><![CDATA[Ever wondered how an interpreter works ? Well, while evaluating parser generators for executing expressions I wrote this small example.
Getting to the basics
What is an Interpreter ?
An interpreter is a computer program that executes the program given to it as an input. In contrast, a compiler generates machine code for the program given to it, [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0in">Ever wondered how an interpreter works ? Well, while evaluating parser generators for executing expressions I wrote this small example.</p>
<p style="margin-bottom: 0in"><strong>Getting to the basics</strong></p>
<p style="margin-bottom: 0in"><em>What is an Interpreter ?</em></p>
<p style="margin-bottom: 0in">An interpreter is a computer program that executes the program given to it as an input. In contrast, a compiler generates machine code for the program given to it, which is then executed by the operating system or  computer.</p>
<p>Lets say the language we are going to interpret supports simple assignment statements like</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">a=<span class="nu0">1</span>+<span class="nu0">5</span>;</div>
</li>
<li class="li1">
<div class="de1">b=a*<span class="nu0">3</span>;</div>
</li>
<li class="li1">
<div class="de1">c=a+b; </div>
</li>
</ol>
</div>
</div>
<p>The execution of this small piece of code would involve four steps</p>
<ol>
<li>Lexical Analysis</li>
<li>Syntax Analysis</li>
<li>Generation of Abstract Syntax Tree</li>
<li>Execute the code</li>
</ol>
<p>In the lexical analysis phase all the <em>tokens </em>in the code are identified. In out example the tokens are [a, =, 1, +, 5, ; ......]. Once the tokens are identified we need to match them to our defined grammar i.e. many lines of Identifier=Expression;</p>
<p><strong>Defining our language as a Context Free Grammar</strong><br />
The first thing we need to do is to define the grammar of our language as a context free grammar. A context free grammar is a way to define the formal structure in the form</p>
<p>V -&gt; w</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">language -&amp;gt; <span class="br0">&#40;</span>statement<span class="br0">&#41;</span>+ <span class="co1"># contains one or more statements statement -&amp;gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">variable=</span>expression; variable -&amp;gt; <span class="br0">&#91;</span><span class="st0">&#8220;a&#8221;</span>-<span class="st0">&#8220;z&#8221;</span><span class="br0">&#93;</span>+ <span class="co1"># a variable contains one or more letters from a-z</span></div>
</li>
<li class="li1">
<div class="de1">expression -&amp;gt; additiveExpr</div>
</li>
<li class="li1">
<div class="de1">additiveExpr -&amp;gt; multiplyExpr <span class="br0">&#40;</span><span class="br0">&#40;</span>+ | -<span class="br0">&#41;</span> multiplyExpr<span class="br0">&#41;</span>* <span class="co1"># can be 5 or (5 + 4) or (5 &#8211; 2)</span></div>
</li>
<li class="li1">
<div class="de1">multiplyExpr -&amp;gt; unaryExpr <span class="br0">&#40;</span><span class="br0">&#40;</span>* | %<span class="br0">&#41;</span> unaryExpr<span class="br0">&#41;</span>* <span class="co1"># can be 5 or (5 * 4) or (5 % 2)</span></div>
</li>
<li class="li1">
<div class="de1">unaryExpr -&amp;gt; -primaryExpr | primaryExpr <span class="co1"># can be 5 or -5</span></div>
</li>
<li class="li1">
<div class="de1">primaryExpr -&amp;gt; number | variable | <span class="br0">&#91;</span><span class="nu0">1</span>-<span class="nu0">9</span><span class="br0">&#93;</span>+ <span class="co1"># can be&nbsp; 1 or abc </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
</div>
<p><strong>Implementing with JavaCC</strong></p>
<p>JavaCC is a parser generator that takes a context free grammar and generates a parser for that language. Lets try to define our grammar in JavaCC. JavaCC would take a .jj file and generate java classes to parse the file and validate the grammar.</p>
<p><strong>Lexical Analysis </strong></p>
<p>We would need to instruct javacc to identify the tokens. The first thing to define in the javacc file is the tokens it needs to skip and the tokens that it needs to scan and parse out.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">SKIP :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8221; &#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\t</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\n</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\r</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Now we need to define all the tokens that the parser generated by javacc should parse out</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">TOKEN:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;number:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&nbsp; &nbsp; &nbsp; &nbsp;&lt;variable:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/variable:&gt;&lt;/number:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;divide:&gt; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;&lt;multiply:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/multiply:&gt;&lt;/divide:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;plus:&gt; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp;&lt;minus:&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p></minus:></plus:><strong>Syntax Analysis</strong><br />
In JavaCC the way to define a production of the form V-&gt;e is like</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">V<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">e<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>The final grammar defined using the javacc format would look like</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">PARSER_BEGIN<span class="br0">&#40;</span>ExpressionParser<span class="br0">&#41;</span><span class="kw2">public</span> <span class="kw2">class</span> ExpressionParser <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> args<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">ExpressionParser parser = <span class="kw2">new</span> ExpressionParser<span class="br0">&#40;</span><span class="kw2">new</span> java.<span class="me1">io</span>.<a href="http://www.google.com/search?q=allinurl%3AFileReader+java.sun.com&#038;bntl=1"><span class="kw3">FileReader</span></a><span class="br0">&#40;</span>args<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">PARSER_END<span class="br0">&#40;</span>ExpressionParser<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">SKIP :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8221; &#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\t</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\n</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\r</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">TOKEN:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;number:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&nbsp; &nbsp; &nbsp; &nbsp;&lt;variable:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/variable:&gt;&lt;/number:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;divide:&gt; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;&lt;multiply:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/multiply:&gt;&lt;/divide:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;plus:&gt; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp;&lt;minus:&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus:&gt;&lt;/plus:&gt;ASTstart start<span class="br0">&#40;</span><span class="br0">&#41;</span> :<span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span>statement<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>+</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="kw4">void</span> statement<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">identifier<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;=&#8221;</span>expression<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;;&#8221;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> identifier<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;variable&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/variable&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> expression<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">additiveExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> additiveExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;plus&gt; multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">| &lt;minus&gt; multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>*</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus&gt;&lt;/plus&gt;void multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;multiply&gt; unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">|&lt;/multiply&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;divide&gt; unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>*</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;minus&gt; numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>|</div>
</li>
<li class="li1">
<div class="de1">numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus&gt;&lt;/divide&gt;void numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;number&gt;</div>
</li>
<li class="li1">
<div class="de1">| &lt;variable&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>This would generate ExpressionParser.java which would contain the code requried to parse the defined grammar. On execution of the main method with a file as an argument the parser would pass if there is a valid grammar in the file, or it would throw an exception if the file does not confine to the defined grammar. Now we are done with the lexical and the syntactical analysis.<br />
<strong>Constructing the Abstract Syntax Tree</strong><br />
Now we need to construct the abstract syntax tree. Lets take a simple example</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">a=<span class="nu0">1</span>+<span class="nu0">5</span>;</div>
</li>
<li class="li1">
<div class="de1">b=a*<span class="nu0">3</span>;</div>
</li>
<li class="li1">
<div class="de1">c=a+b; </div>
</li>
</ol>
</div>
</div>
<p>The abstract syntax tree for this should look like<br />
<a href="http://www.anandsekar.com/wp-content/uploads/2006/01/Ast.jpg" class="imagelink" title="Abstract Syntax Tree"><img src="http://www.anandsekar.com/wp-content/uploads/2006/01/Ast.thumbnail.jpg" id="image14" alt="Abstract Syntax Tree" height="96" width="127" /></a><br />
JavaCC comes along with a preprocessor called jjtree that would create us a abstract syntax tree. Whereever in the grammar we need a tree node we embed #<nodename> in the grammar definition file.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> statement<span class="br0">&#40;</span><span class="br0">&#41;</span> #Statement:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">identifier<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;=&#8221;</span>expression<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;;&#8221;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>This would create a node ASTStatement.java for the production statement. All nodes by default would extend SimpleNode.java which implements Node that is generated with the node lifecycle methods.</nodename></variable></number>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/* Generated By:JJTree: Do not edit this line. Node.java */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* All AST nodes must implement this interface.&nbsp; It provides basic</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">machinery for constructing the parent and child relationships</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">between nodes. */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">interface</span> Node <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** This method is called after the node has been made the current</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">node.&nbsp; It indicates that child nodes can now be added to it. */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> jjtOpen<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** This method is called after all the child nodes have been</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">added. */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> jjtClose<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** This pair of methods are used to inform the node of its</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">parent. */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> jjtSetParent<span class="br0">&#40;</span>Node n<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> Node jjtGetParent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** This method tells the node to add its argument to the node&#8217;s</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">list of children.&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> jjtAddChild<span class="br0">&#40;</span>Node n, <span class="kw4">int</span> i<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** This method returns a child node.&nbsp; The children are numbered</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">from zero, left to right. */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> Node jjtGetChild<span class="br0">&#40;</span><span class="kw4">int</span> i<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** Return the number of children the node has. */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">int</span> jjtGetNumChildren<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/** Accept the visitor. **/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> jjtAccept<span class="br0">&#40;</span>ExpressionParserVisitor visitor, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Our final grammar decorated with all the defintions of the abstract syntax tree nodes would look like</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1">options <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">MULTI=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">VISITOR=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">NODE_DEFAULT_VOID=<span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">NODE_EXTENDS=<span class="st0">&#8220;BaseNode&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">PARSER_BEGIN<span class="br0">&#40;</span>ExpressionParser<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ExpressionParser <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> args<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&#038;bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">ExpressionParser parser = <span class="kw2">new</span> ExpressionParser<span class="br0">&#40;</span><span class="kw2">new</span> java.<span class="me1">io</span>.<a href="http://www.google.com/search?q=allinurl%3AFileReader+java.sun.com&#038;bntl=1"><span class="kw3">FileReader</span></a><span class="br0">&#40;</span>args<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//ExpressionParser parser = new ExpressionParser(System.in);</span></div>
</li>
<li class="li1">
<div class="de1">ASTstart expr=parser.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">ExpressionVisitor v=<span class="kw2">new</span> ExpressionVisitor<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>expr.<span class="me1">jjtAccept</span><span class="br0">&#40;</span>v,<span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">PARSER_END<span class="br0">&#40;</span>ExpressionParser<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">SKIP :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#8221; &#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\t</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\n</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1">|<span class="st0">&#8220;<span class="es0">\r</span>&#8220;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">TOKEN:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;number:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&nbsp; &nbsp; &nbsp; &nbsp;&lt;variable:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/variable:&gt;&lt;/number:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;divide:&gt; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;&lt;multiply:&gt;</div>
</li>
<li class="li1">
<div class="de1">|&lt;/multiply:&gt;&lt;/divide:&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;plus:&gt; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp;&lt;minus:&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus:&gt;&lt;/plus:&gt;ASTstart start<span class="br0">&#40;</span><span class="br0">&#41;</span> #start:<span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span>statement<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>+</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> <span class="kw2">return</span> jjtThis; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="kw4">void</span> statement<span class="br0">&#40;</span><span class="br0">&#41;</span> #Statement:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">identifier<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;=&#8221;</span>expression<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="st0">&#8220;;&#8221;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> identifier<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;variable&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">jjtThis.<span class="me1">data</span>.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&#8220;name&#8221;</span>,token.<span class="me1">image</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>#Variable</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/variable&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> expression<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">additiveExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> additiveExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;plus&gt; multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>#AddExpr<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">| &lt;minus&gt; multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>#SubractExpr<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>*</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus&gt;&lt;/plus&gt;void multiplicativeExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;multiply&gt; unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>#MultiplyExpr<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">|&lt;/multiply&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;divide&gt; unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>#DivideExpr<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>*</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> unaryExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;minus&gt; numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span>#NegateExpr<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>|</div>
</li>
<li class="li1">
<div class="de1">numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>&lt;/minus&gt;&lt;/divide&gt;void numberExpression<span class="br0">&#40;</span><span class="br0">&#41;</span> :</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;number&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">jjtThis.<span class="me1">data</span>.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&#8220;value&#8221;</span>,<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a>.<span class="me1">parseInt</span><span class="br0">&#40;</span>token.<span class="me1">image</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>#Number</div>
</li>
<li class="li1">
<div class="de1">| &lt;variable&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">jjtThis.<span class="me1">data</span>.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&#8220;name&#8221;</span>,token.<span class="me1">image</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span>#VariableValue</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>If you notice in the option, we have instructed jjtree to extend all sources from BaseNode.java. The base node is decorated with a hashmap that would be used to store the scanned tokens during parsing.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="co2">import java.util.HashMap;&lt;/variable&gt;&lt;/number&gt;public class BaseNode{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AHashMap+java.sun.com&#038;bntl=1"><span class="kw3">HashMap</span></a> data=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AHashMap+java.sun.com&#038;bntl=1"><span class="kw3">HashMap</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>If you observe line 99 of the grammar definition, it shows how the parsed number token is added to the Number node that is constructed by jjtree.<br />
This completes the generation of the abstract syntax tree.<br />
<strong>Interpretation and Execution</strong><br />
What now remaing is to walk the tree and execute the code. One of the options that we have specified in the grammar definition is to generate the visitor. JJtree would automatically add accept methods on all the nodes generated and also generate the visitor interface</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> statement<span class="br0">&#40;</span><span class="br0">&#41;</span> #Statement:</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* Generated By:JJTree: Do not edit this line. C:\workspace\JavaCC\target\ExpressionParserVisitor.java */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">interface</span> ExpressionParserVisitor</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>SimpleNode node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTstart node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTStatement node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTVariable node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTAddExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTSubractExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTMultiplyExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTDivideExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTNegateExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTNumber node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTVariableValue node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>All we need to do now is to implement the visitor interface and interpret our language. The Interpreter would need two datastores</p>
<ol>Symbol Table</ol>
<ol>Execution Stack</ol>
<p>The symbol table would hold all the variables and their values, and the execution stack would contain all the intermediate results while expression are evaluated.<br />
The Visitor code would look like.</p>
<div class="codesnip-container" >
<div class="codesnip">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">interface</span> ExpressionParserVisitor</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.HashMap;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.LinkedList;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ExpressionVisitor <span class="kw2">implements</span> ExpressionParserVisitor<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3ALinkedList+java.sun.com&#038;bntl=1"><span class="kw3">LinkedList</span></a> stack=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ALinkedList+java.sun.com&#038;bntl=1"><span class="kw3">LinkedList</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AHashMap+java.sun.com&#038;bntl=1"><span class="kw3">HashMap</span></a> symbolTable=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AHashMap+java.sun.com&#038;bntl=1"><span class="kw3">HashMap</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>SimpleNode node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTstart node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> symbolTable;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTAddExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg1=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg2=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span>arg2.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+arg1.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTSubractExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg1=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg2=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span>arg2.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-arg1.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTMultiplyExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg1=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg2=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span>arg2.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*arg1.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTDivideExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg1=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg2=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span>arg2.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span>/arg1.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTNegateExpr node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> arg1=pop<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#40;</span>arg1.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*-<span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTNumber node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span>node.<span class="me1">data</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8220;value&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTStatement node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> value=<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#41;</span>stack.<span class="me1">removeFirst</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> var=<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#41;</span>stack.<span class="me1">removeFirst</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">symbolTable.<span class="me1">put</span><span class="br0">&#40;</span>var,value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTVariable node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> var=<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#41;</span>node.<span class="me1">data</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8220;name&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span>var<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> visit<span class="br0">&#40;</span>ASTVariableValue node, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&#038;bntl=1"><span class="kw3">Object</span></a> data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">node.<span class="me1">childrenAccept</span><span class="br0">&#40;</span><span class="kw2">this</span>,data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> var=<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#41;</span>node.<span class="me1">data</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8220;name&#8221;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">stack.<span class="me1">addFirst</span><span class="br0">&#40;</span>symbolTable.<span class="me1">get</span><span class="br0">&#40;</span>var<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a> pop<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&#038;bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#41;</span>stack.<span class="me1">removeFirst</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> </div>
</li>
</ol>
</div>
</div>
<p>Well, thats it .. our very own interpretter !!<br />
<a href="http://www.anandsekar.com/wp-content/uploads/2006/01/JavaCC.zip">Source Code As Eclipse Project</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.anandsekar.com/2006/01/15/writing-a-interpretter/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
