<?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>REVERT TO CONSOLE &#187; Java</title>
	<atom:link href="http://www.reverttoconsole.com/blog/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reverttoconsole.com</link>
	<description>for f in *;do echo &#124; sed 'i\rtc' &#62;&#62; $f;done;</description>
	<lastBuildDate>Sat, 10 Jul 2010 12:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Subversion, JavaHL, and Eclipse on Linux</title>
		<link>http://www.reverttoconsole.com/blog/java/subversion-javahl-and-eclipse-on-linux/</link>
		<comments>http://www.reverttoconsole.com/blog/java/subversion-javahl-and-eclipse-on-linux/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 12:40:00 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=589</guid>
		<description><![CDATA[I normally use emacs and command line svn when working at home on Linux. Eclipse to me, in principle, is a necessary evil of programming with larger groups. But a recent volunteer project I&#8217;ve been working on for the Philippine Scholars of Minnesota is forcing me out of this habit. And with this change, I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I normally use emacs and command line svn when working at home on Linux. Eclipse to me, in principle, is a necessary evil of programming with larger groups. But a recent volunteer project I&#8217;ve been working on for the <a href="http://www.philippinescholars.org/">Philippine Scholars of Minnesota</a> is forcing me out of this habit.</p>
<p>And with this change, I&#8217;ve suddenly been introduced to the world of <a href="http://subclipse.tigris.org/wiki/JavaHL">JavaHL</a>. So what is JavaHL? Per the previous link, it&#8217;s the Java language binding for the Subversion API. On Windows the subclipse project is able to package JavaHL, but not on other operating systems. So that&#8217;s why I&#8217;ve never had to deal with it before.</p>
<p>Fortunately, after finding out what JavaHL actually is, it&#8217;s pretty easy to install on Ubuntu, as you might expect:</p>
<pre class="brush: php">
sudo apt-get install libsvn-java
</pre>
<p>This will install JavaHL to /usr/lib/jni as a standard install, and this is where eclipse will look for it by default. If you&#8217;ve installed it in a non-standard way, you might want to look at <a href="http://islandlinux.org/howto/installing-javahl-subclipseeclipse-ubuntu">this link</a> regarding overwriting the java.library.path with an eclipserc file.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fsubversion-javahl-and-eclipse-on-linux%2F&amp;title=Subversion%2C+JavaHL%2C+and+Eclipse+on+Linux" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/subversion-javahl-and-eclipse-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging MySQL ERROR1025 &#8211; Error on rename of</title>
		<link>http://www.reverttoconsole.com/blog/java/debugging-mysql-error1025-error-on-rename-of/</link>
		<comments>http://www.reverttoconsole.com/blog/java/debugging-mysql-error1025-error-on-rename-of/#comments</comments>
		<pubDate>Tue, 18 May 2010 13:59:14 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=576</guid>
		<description><![CDATA[If you ever executed the following command in mysql: alter table table drop column; and got the following error: 1025 &#8211; Error on rename of &#8216;.\\#sql-880_3c&#8217; to &#8216;.\\ &#8217; (errno: 150), Don&#8217;t panic. It&#8217;s probably because you&#8217;re trying to drop a column that&#8217;s a foreign key. Execute this command: SHOW ENGINE INNODB STATUS to debug more. [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever executed the following command in mysql:</p>
<p>alter table table drop column;</p>
<p>and got the following error:<br />
1025 &#8211; Error on rename of &#8216;.\\#sql-880_3c&#8217; to &#8216;.\\ &#8217; (errno: 150),</p>
<p>Don&#8217;t panic.</p>
<p>It&#8217;s probably because you&#8217;re trying to drop a column that&#8217;s a foreign key. Execute this command: SHOW ENGINE INNODB STATUS to debug more. A large text is dumped on the console and if you read carefully, you&#8217;re likely to have something similar to: &#8220;LATEST FOREIGN KEY ERROR&#8230;&#8221; The solution is to drop foreign key and any corresponding index before dropping the column.</p>
<p>Here are the steps that you must do</p>
<pre class="brush: sql">
ALTER TABLE &lt;table&gt; DROP FOREIGN KEY &lt;fk&gt;;
ALTER TABLE &lt;table&gt; DROP INDEX &lt;idx&gt;;
ALTER TABLE &lt;table&gt; DROP COLUMN &lt;column&gt;;
</pre>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fdebugging-mysql-error1025-error-on-rename-of%2F&amp;title=Debugging+MySQL+ERROR1025+%26%238211%3B+Error+on+rename+of" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/debugging-mysql-error1025-error-on-rename-of/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrating from Hibernate 3.3.2, JPA 1 to Hibernate 3.5 CR2 and JPA 2</title>
		<link>http://www.reverttoconsole.com/blog/hibernate/migrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2/</link>
		<comments>http://www.reverttoconsole.com/blog/hibernate/migrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 05:33:16 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=549</guid>
		<description><![CDATA[Starting with version 3.5 (currently CR2), Hibernate Annotations 3.x and Hibernate EntityManager projects have been merged into the Hibernate Core codebase as invidual modules. As a surprising addition, Hibernate Envers subproject is added as well (that&#8217;s a great thing as you get Auditing, out of box hereafter). So if you&#8217;re stuck with Hibernate 3.3.x and [...]]]></description>
			<content:encoded><![CDATA[<p>Starting with version 3.5 (currently CR2), Hibernate Annotations 3.x and Hibernate EntityManager projects have been merged into the Hibernate Core codebase as invidual modules. As a surprising addition, Hibernate Envers subproject is added as well (that&#8217;s a great thing as you get Auditing, out of box hereafter). So if you&#8217;re stuck with Hibernate 3.3.x and would like to try the almost final release, what do you need to do?</p>
<p>Unfortunately, the JBoss folks won&#8217;t tell you since they are very busy rebranding, redesigning their websites for the <a href="http://in.relation.to/Bloggers/HibernateorgMigration">past couple of years</a> (and it&#8217;s still so fragmented, I wonder why they just can&#8217;t hire a UI designer and a Content Manager. Talk about narcissist JEE programmers). Anyways, I wanted to try the new distribution since it&#8217;s getting close to the final release and it implements JPA 2. In case you&#8217;ve missed the boat, <a href="http://en.wikibooks.org/wiki/Java_Persistence/What_is_new_in_JPA_2.0%3F">this is a good place to find out what&#8217;s new in JPA 2</a>. </p>
<p>I tried the brute force method first: replace all 3.3.x jars with 3.5 CR2 jars. </p>
<p><strong>Before: 7 jars </strong><br />
ejb3-persistence.jar<br />
hibernate-annotations.jar<br />
hibernate-commons-annotations.jar<br />
hibernate-entitymanager.jar<br />
hibernate3-ast.jar<br />
hibernate3.jar<br />
envers-1.2.1.ga-hibernate-3.3.jar</p>
<p><strong>After: 2 jars</strong><br />
javax.persistence.jar<br />
hibernate3.jar &#8212; <a href="http://sourceforge.net/projects/hibernate/files/hibernate3/">download from hibernate.org</a></p>
<p>Now, that&#8217;s a good sign. And all other optional and required dependencies (jta, javaassist, swarmcache,c3po, all other cache jars) haven&#8217;t changed. </p>
<p>But wait, where can you download javax.persistence.jar? Isn&#8217;t that supposed to be ejb3.1-persistence.jar? I&#8217;m not sure either. What I&#8217;m sure is this: There is no direct download link for the JPA2 api jar anywhere. Try it. Mail me if you find it.</p>
<p>I downloaded an entire <a href="https://glassfish.dev.java.net/downloads/v3-final.html">GlassFish 3 distribution</a> (JEE 6 reference implementation along with JPA 2) instead. And copied the javax.persistence.jar from its modules folder, instead. So in summary, I replaced the 7 jars with these 2 jars and does it work?</p>
<p>So, far my existing applications haven&#8217;t broken. The tests seems fine. And looks like the migration did work. Impressive.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fhibernate%2Fmigrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2%2F&amp;title=Migrating+from+Hibernate+3.3.2%2C+JPA+1+to+Hibernate+3.5+CR2+and+JPA+2" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/hibernate/migrating-from-hibernate-3-3-2-jpa-1-to-hibernate-3-5-cr2-and-jpa-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading to Hsqldb 2rc8, part 1, Maven Integration</title>
		<link>http://www.reverttoconsole.com/blog/java/upgrading-to-hsqldb-2rc8-part-1-maven-integration/</link>
		<comments>http://www.reverttoconsole.com/blog/java/upgrading-to-hsqldb-2rc8-part-1-maven-integration/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 18:08:14 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=473</guid>
		<description><![CDATA[At my current client engagement, we make full use of hsqldb both in our unit tests and for local development. It&#8217;s a great tool, and the changes made since the last release 4 long years ago will make it an even better tool. My project has hundreds of tests making use of hsqldb, and getting [...]]]></description>
			<content:encoded><![CDATA[<p>At my current client engagement, we make full use of hsqldb both in our unit tests and for local development. It&#8217;s a great tool, and the changes made since the last release 4 long years ago will make it an even better tool.</p>
<p>My project has hundreds of tests making use of hsqldb, and getting the new version up and running is no small task. I&#8217;ve broken this post into two. The first will be the steps I took to get hsqldb integrated into our maven repository. The second will cover getting hsqldb up and running with our legion of tests.</p>
<p>The first important thing to know when upgrading hsqldb, is that the pre-compiled jar files were built with jdk6. This is probably going to be fine for many, but there are many others, such as myself, who would like to be on jdk6 but work at a client site still using jdk5. It sucks to be me, but oh well.</p>
<p>So the first step for me will be to compile the jars myself with jdk15.</p>
<p>To do this, it&#8217;s necessary to have 3 environment variables set, JAVA_HOME, ANT_HOME, and ANT_OPTS. Pretty standard. If you&#8217;re on windows, there is a setenv.cmd file in the distributed build directory that you can edit and execute in the cmd shell.</p>
<p>At present, the build.xml contains a small bug for users trying to build the jar with jdk15. The &#8220;store&#8221; target contains a list of depends attributes:</p>
<p>depends=&#8221;switchtojdk11,switchtojdk12,switchtojdk14,switchtojdk16&#8243;</p>
<p>To build with jdk15 this must be changed to:</p>
<p>depends=&#8221;switchtojdk11,switchtojdk12,switchtojdk14,switchtojdk15&#8243;</p>
<p>(I&#8217;ve added a bug for this on sf)</p>
<p>Next run the following ant tasks from the hsqldb/build directory:</p>
<p>ant hsqldb;<br />
ant sqltool</p>
<p>This will build the jars to the hsqldb/lib directory.</p>
<p>Next step is to add the jars to my local maven repo.</p>
<pre class="brush: shell">
mvn install:install-file -DgroupId=hsqldb -DartifactId=hsqldb -Dversion=2.0.0 -Dpackaging=jar -Dfile=&quot;/Documents and Settings/ujxh744/My Documents/Downloads/hsqldb-2.0.0-rc8/hsqldb/lib/hsqldb.jar&quot;
</pre>
<pre class="brush: shell">
mvn install:install-file -DgroupId=hsqldb -DartifactId=sqltool -Dversion=2.0.0 -Dpackaging=jar -Dfile=&quot;/Documents and Settings/ujxh744/My Documents/Downloads/hsqldb-2.0.0-rc8/hsqldb/lib/sqltool.jar&quot;
</pre>
<p>and update our main pom.xml with the new version of hsqldb and with a new entry for the sqltool:</p>
<pre class="brush: xml">
&lt;dependency&gt;
&lt;groupId&gt;hsqldb&lt;/group&gt;
&lt;artifactId&gt;hsqldb&lt;/artifactId&gt;
&lt;version&gt;2.0.0&lt;/version&gt;
&lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;hsqldb&lt;/groupId&gt;
&lt;artifactId&gt;sqltool&lt;/artifactId&gt;
&lt;version&gt;2.0.0&lt;/version&gt;
&lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
</pre>
<p>And that&#8217;s it. You should be off to the races. Next up I&#8217;ll write about some of the sql changes.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fupgrading-to-hsqldb-2rc8-part-1-maven-integration%2F&amp;title=Upgrading+to+Hsqldb+2rc8%2C+part+1%2C+Maven+Integration" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/upgrading-to-hsqldb-2rc8-part-1-maven-integration/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Accessing Drools 5 rules via a restful API using Drools Server and Groovy RestClient</title>
		<link>http://www.reverttoconsole.com/blog/java/accessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient/</link>
		<comments>http://www.reverttoconsole.com/blog/java/accessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 20:28:48 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Drools]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=457</guid>
		<description><![CDATA[If you haven&#8217;t heard about drools, you should have a look at it now. It provides multiple ways to write rules: DSL (drl files), groovy, java, excel spreadsheets or via a web interface (Guvnor). I recommend the book, Drools &#8211; JBoss Rules 5.0 by Michael Bali as its the only comprehensive documentation available on drools. [...]]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t heard about drools, you should have a look at it <a href="http://www.jboss.org/drools/">now</a>. It provides multiple ways to write rules: DSL (drl files), groovy, java, excel spreadsheets or via a web interface (<a href="http://www.jboss.org/drools/drools-guvnor.html">Guvnor</a>). I recommend the book, <a href="http://www.amazon.com/JBoss-Drools-Business-Rules-Browne/dp/1847196063/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1259786026&#038;sr=8-1">Drools &#8211; JBoss Rules 5.0 by Michael Bali</a> as its the only comprehensive documentation available on drools.</p>
<p>One of the lesser known features but extremely powerful is the Drools server that is provides a restful api to access and invoke a rules knowledge base. This is a war available in the Drools binary distribution. You would place the exploded version of this in your server (tomcat 6, in my case) and<br />
 &#8212; add the following jars in the war: drools-decisiontables.jar,  drools-templates.jar, jxl.jar, commons-lang.jar, joda-time.jar</p>
<p>I&#8217;m using the same example used in the book. For the source code download <a href="http://code.google.com/p/droolsbook/">here</a>. Copy the following into Drools Server classpath retaining the package structure</p>
<p> &#8212; model classes from decision_tables project (droolsbook/decisiontables/bank/model/*)<br />
 &#8212; model classes from bankingcore project (droolsbook/bank/model/*) retaining the package structure<br />
 &#8212; add interestcalculation.properties in the classpath (WEB-INF/classes). Add the following<br />
    &#8212; newInstance = true<br />
    &#8212; file =
<path to interestcalculation.xls)<br />
 -- copy interestcalculation.xls from decision_tables project  (drools-book/decision_tables/src/main/resources)</p>
<p>Accessing a restful url with a standard request object that looks like:</p>
<pre class="brush: xml">
&lt;knowledgebase-request&gt;
  &lt;globals&gt;
    &lt;named-fact&gt;
      &lt;id&gt;myglobal&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;42&lt;/carPrice&gt;
        &lt;carType&gt;Saab&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
  &lt;/globals&gt;
  &lt;inOutFacts&gt;
    &lt;named-fact&gt;
      &lt;id&gt;myfact&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;50&lt;/carPrice&gt;
        &lt;carType&gt;BMW&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
  &lt;/inOutFacts&gt;
  &lt;inFacts&gt;
    &lt;anon-fact&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;55&lt;/carPrice&gt;
        &lt;carType&gt;Audi&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/anon-fact&gt;
    &lt;anon-fact&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;65&lt;/carPrice&gt;
        &lt;carType&gt;Mercedes&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/anon-fact&gt;
  &lt;/inFacts&gt;
  &lt;queries&gt;
    &lt;query-type&gt;
      &lt;args&gt;
        &lt;string&gt;one&lt;/string&gt;
        &lt;string&gt;two&lt;/string&gt;
      &lt;/args&gt;
      &lt;factNames&gt;
        &lt;string&gt;ninsf&lt;/string&gt;
      &lt;/factNames&gt;
      &lt;queryName&gt;Get named inserted fact&lt;/queryName&gt;
    &lt;/query-type&gt;
  &lt;/queries&gt;
&lt;/knowledgebase-request&gt;
</pre>
<p>You would get a standard response back that looks like this:</p>
<pre class="brush: xml">
&lt;knowledgebase-response&gt;
  &lt;globals&gt;
    &lt;named-fact&gt;
      &lt;id&gt;myglobal&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;42&lt;/carPrice&gt;
        &lt;carType&gt;Saab&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
  &lt;/globals&gt;
  &lt;outFacts&gt;
    &lt;named-fact&gt;
      &lt;id&gt;ninsf&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.InsertedFact&quot;&gt;
        &lt;name&gt;one&lt;/name&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
    &lt;named-fact&gt;
      &lt;id&gt;ninsf&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.InsertedFact&quot;&gt;
        &lt;name&gt;two&lt;/name&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
  &lt;/outFacts&gt;
  &lt;inOutFacts&gt;
    &lt;named-fact&gt;
      &lt;id&gt;myfact&lt;/id&gt;
      &lt;fact class=&quot;org.drools.server.ExampleFact&quot;&gt;
        &lt;carPrice&gt;50&lt;/carPrice&gt;
        &lt;carType&gt;BMW&lt;/carType&gt;
      &lt;/fact&gt;
    &lt;/named-fact&gt;
  &lt;/inOutFacts&gt;
&lt;/knowledgebase-response&gt;
</pre>
<p>Chapter 11 of Michael Bali's book explains an example using a Ruby client. I'm going to explain with a Groovy client, instead.</p>
<pre class="brush: java">
import groovyx.net.http.*
import groovyx.net.http.ContentType
import groovy.xml.MarkupBuilder

droolsClient = new RESTClient( &#039;http://localhost:8080/drools-server-5.0.1/&#039; )

def accountStr = new StringWriter()
def account = new groovy.xml.MarkupBuilder(accountStr)
account.&#039;knowledgebase-request&#039;(){
	inOutFacts() {
		&#039;named-fact&#039;() {
			id(&quot;account&quot;)
			fact(class:&#039;droolsbook.decisiontables.bank.model.Account&#039;) {
				type(&quot;STUDENT&quot;)
				balance(&quot;1000&quot;)
				currency(&quot;EUR&quot;)
			}
		}
	}
}

println &#039;printing xml ... &#039;
println accountStr

resp = droolsClient.post( path : &#039;knowledgebase/interestcalculation&#039;,
						  body : accountStr.toString(),
						  contentType: ContentType.XML,
						  requestContentType: ContentType.XML)

println &quot;printing response ...&quot;
println resp.data
</pre>
<p>The above code connects to drools server running on tomcat and expects a interestcalculation.properties rulebase, compiles the knowledgebase and fires all rules returning a response. In this example a student with a balance of 1000 EUR is returned with a 1.00 interest rate from the rule.</p>
<p>I ran into several problems while writing this simple groovy class (thanks to Groovy's horrible exception handling). For instance if I use '/knowledgebase/interestcalculation' instead of 'knowledgebase/interestcalculation' I get a strage error:<br />
org.xml.sax.SAXParseException: The element type "HR" must be terminated by the matching end-tag "</HR>".</p>
<p>And if you don't provide contentType: ContentType.XML or requestContentType: ContentType.XML, you get a:<br />
java.lang.NullPointerExceptionat groovyx.net.http.HTTPBuilder$RequestConfigDelegate.setBody</p>
<p>Finally, once you get everything sorted out, the combination of a drools restful client and drools server seems to me an ideal solution to develop, deploy and release drools independently from any application. In fact the application need not know about rules or any of its configuration apart from the restful contract. Quite remarkable.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Faccessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient%2F&amp;title=Accessing+Drools+5+rules+via+a+restful+API+using+Drools+Server+and+Groovy+RestClient" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/accessing-drools-5-rules-via-a-restful-api-using-drools-server-and-groovy-restclient/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>an interesting class loading issue with quartz scheduler timing (NoClassDefFoundError)</title>
		<link>http://www.reverttoconsole.com/blog/java/an-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror/</link>
		<comments>http://www.reverttoconsole.com/blog/java/an-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:21:16 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=450</guid>
		<description><![CDATA[My quartz job schedulers had a startDelay of 0 ms and a repeatInterval of 10 mins and 5 mins each. On my local environment (win/mac) and sandbox (unix) the scheduler works just fine. But in our production environment (unix), we were getting spurious java.lang.NoClassDefFoundError: Could not initialize class Foo. Now Foo was one of the [...]]]></description>
			<content:encoded><![CDATA[<p>My quartz job schedulers had a <em>startDelay </em>of 0 ms and a <em>repeatInterval </em>of 10 mins and 5 mins each. On my local environment (win/mac) and sandbox (unix) the scheduler works just fine. But in our production environment (unix), we were getting <span>spurious java.lang.NoClassDefFoundError: Could not initialize class Foo. Now Foo was one of the many classes being called through the scheduler. In this case, I was calling a Foo.someStaticMethod.<br />
</span></p>
<p>After a whole day of debugging, this is what I found: What could be happening was that the job kicked off <em>immediately</em> at startup while the servlet class loader was still loading all classes and thus causing NoClassDefFoundError. Why is the scheduler unable to run after 10 mins, even though the classes should be loaded by then? I’m not sure but it could be that the failed Scheduler initialization causes repeated failed attempts with the same failed class, rather than looking up for a newly loaded class (jvm implementation?).</p>
<p>I added a <em>startDelay </em>of 6000 (1 minute) and it magically works now in all environments.</p>
<p>What’s surprising still is why are local envs and sandbox not having the same issues. It could be that the timing of classloader loading on local and sandbox env is a tad bit faster? I still have to figure that out &#8230;</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-alt:Arial; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-alt:"Times New Roman"; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman";} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} --> <!--[endif]--></p>
<p class="MsoNormal">My job schedulers had a <span style="background: silver none repeat scroll 0% 0%; font-size: 10pt; font-family: &quot;Courier New&quot;; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">startDelay</span> of 0 ms and a <span style="background: silver none repeat scroll 0% 0%; font-size: 10pt; font-family: &quot;Courier New&quot;; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">repeatInterval</span> of 10 mins (<span style="background: silver none repeat scroll 0% 0%; font-size: 10pt; font-family: &quot;Courier New&quot;; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">scheduleCertifiedAndRetryFaxes</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">)</span>and 5 mins (<span style="background: silver none repeat scroll 0% 0%; font-size: 10pt; font-family: &quot;Courier New&quot;; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">scheduleQueuedFaxes</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">).</span></p>
<p class="MsoNormal">What could be happening was that the job kicked off <em>immediately</em> at startup while the servlet class loader was still loading all classes and thus causing ClassNotFoundException.  Why is the scheduler</p>
<p class="MsoNormal">unable to run after 10 mins, even though the classes should be loaded by then? I’m not sure but it could be that the failed Scheduler initialization causes repeated failed attempts with the same failed class,</p>
<p class="MsoNormal">rather than looking up for a newly loaded class (jvm implementation?).</p>
<p class="MsoNormal">
<p class="MsoNormal">I added a <span style="background: silver none repeat scroll 0% 0%; font-size: 10pt; font-family: &quot;Courier New&quot;; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">startDelay</span> of 6000 (1 minute) and it works; fax jobs are fired correctly without any issues. (local, stage)</p>
<p class="MsoNormal">
<p class="MsoNormal">What’s surprising still is why are local envs and sandbox not having the same issues. It could be that the timing of classloader loading on local and sandbox env is a tad bit faster? I could be wrong.</p>
</div>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fan-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror%2F&amp;title=an+interesting+class+loading+issue+with+quartz+scheduler+timing+%28NoClassDefFoundError%29" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/an-interesting-class-loading-issue-with-quartz-scheduler-timing-noclassdeffounderror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Follow RTC on Twitter</title>
		<link>http://www.reverttoconsole.com/blog/java/follow-rtc-on-twitter/</link>
		<comments>http://www.reverttoconsole.com/blog/java/follow-rtc-on-twitter/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 04:08:08 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=396</guid>
		<description><![CDATA[We only tweet from the console! http://www.twitter.com/reverttoconsole]]></description>
			<content:encoded><![CDATA[<p>We only tweet from the console!</p>
<p><a href="http://www.twitter.com/reverttoconsole">http://www.twitter.com/reverttoconsole</a></p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Ffollow-rtc-on-twitter%2F&amp;title=Follow+RTC+on+Twitter" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/follow-rtc-on-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating JavaScript Tests with Continuous Integration</title>
		<link>http://www.reverttoconsole.com/blog/java/integrating-javascript-tests-with-continuous-integration/</link>
		<comments>http://www.reverttoconsole.com/blog/java/integrating-javascript-tests-with-continuous-integration/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 08:35:21 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=384</guid>
		<description><![CDATA[At my current client I&#8217;ve been building a rather complex rich client app using ExtJs. The team has written a lot of JavaScript code, and has been writing a lot of JavaScript unit tests as well. We&#8217;ve gone through several unit testing tools along the way trying to solve some logistical problems. We started with [...]]]></description>
			<content:encoded><![CDATA[<p>At my current client I&#8217;ve been building a rather complex rich client app using ExtJs. The team has written a lot of JavaScript code, and has been writing a lot of JavaScript unit tests as well.</p>
<p>We&#8217;ve gone through several unit testing tools along the way trying to solve some logistical problems. We started with <a href="http://www.jsunit.net/">JSUnit</a>, added <a href="http://seleniumhq.org">Selenium</a>, switched from <a href="http://www.jsunit.net/">JSUnit</a>t to <a href="http://groups.google.com/group/envjs?pli=1">envjs</a>, and are now using a hybrid approach I&#8217;ll describe in detail.</p>
<p>Some of the issues we wanted to address with our testing tools were:</p>
<ul>
<li>How easy is it to run the tests?</li>
<li>How easy is it to debug the tests?</li>
<li>How easy is it to integrate the tests into our existing continuous integration environment</li>
</ul>
<p>Most of the tools we used easily met the first two logistical issues, but the last one was not as simple.</p>
<p>The following describes an approach that meets all of the above list (after the jump).</p>
<p><span id="more-384"></span></p>
<p>Here is a very simple JavaScript object to test and illustrate the example:</p>
<pre lang="javascript" line="1">
var swineFluIndicator = {
  hasSwineFlu: function(sample) {
    return !!sample.oink ? true : false;
  }
};
</pre>
<p>If the sample has a property &#8220;oink&#8221;, the sample is infected with swine flu. Simple.</p>
<p>To test our code in development, we used the <a href="http://github.com/nkallen/screw-unit/tree/master">Screw.Unit</a> test framework.</p>
<p>We went with Screw.Unit for several reasons:</p>
<ul>
<li>Simple to implement- It&#8217;s just a JavaScript library</li>
<li>It generates a simple DOM output, which makes integration easy &#8211; I&#8217;ll demonstrate later.</li>
<li>It&#8217;s easy to customize, and the framework does not pollute the global namespace at all.</li>
<li>It&#8217;s simple to run and debug.</li>
</ul>
<p>Here is an example Screw.Unit test of the sample code:</p>
<pre lang="javascript" line="1">
Screw.Unit(function() {
  describe("test whether a given sample has swine flu", function() {
   it("clean sample", function() {
     var swineFluIndicator  = new SwineFluIndicator();
     var testSample = {
       value : '123'
     };
      expect(swineFluIndicator.hasSwineFlu(testSample)).to(be_false);
    });
  });
});
</pre>
<p>Screw.Unit tests are executed in the browser (so debugging with <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a> is easy, and produce a very simple DOM that&#8217;s simple to read:<br />
<img src="http://s3.amazonaws.com/assets.pivotallabs.com/87/original/runner.png" alt="Screw.Unit Runner" /></p>
<p>Writing JavaScript unit tests is pretty easy; now it&#8217;s time to integrate them. <a href="http://htmlunit.sourceforge.net/">HtmlUnit</a> have released 2 new versions in 2009 so far that offer unprecedented DOM support via Rhino. With HtmlUnit, our test consists of rendering the page and interpreting the simple DOM results.</p>
<p>Set up the clients and load the page:</p>
<pre lang="java" line="1">
WebClient firefoxClient = new WebClient(BrowserVersion.FIREFOX_2);
WebClient ieClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_6);

firefoxClient.setThrowExceptionOnScriptError(true);
ieClient.setThrowExceptionOnScriptError(true);
HtmlPage htmlPage = (HtmlPage) client.getPage(testFile.toURL());</pre>
<p>and provide a means of interpreting the page results:</p>
<pre lang="java" line="1">
protected void interpretTestResults(final HtmlPage htmlPage) {
        String header = "";
        String heading = "";
        String paragraph = "";
        // returns a list of tests
        List testDivs = (List) htmlPage
            .getByXPath("//*[contains(@class,'describe focused')]");

        for (HtmlListItem htmlListItem : testDivs) {
            List heading1List = (List) htmlListItem.getByXPath("./h1");
            header = heading1List.get(0).getTextContent();
            // returns a list of its divisions; if there are nested
            // describes, there will be multiple its
            List test = (List) htmlListItem
                .getByXPath(".//*[contains(@class,'its')]");
            for (HtmlUnorderedList htmlUnorderedList : test) {
                // if there are no child nodes, this is part of a nested
                // describe
                if (htmlUnorderedList.hasChildNodes()) {
                    List failedItemList = (List) htmlUnorderedList
                        .getByXPath(".//*[contains(@class,'it enqueued failed')]");
                    if (failedItemList.size() == 0) {
                        // successful
                    } else {
                        for (HtmlListItem failedItem : failedItemList) {
                            List describedList = (List) failedItem
                                .getByXPath("./h2");
                            Assert.assertTrue(describedList.size() == 1);
                            heading = describedList.get(0).getTextContent();
                            List errorMessageList = (List) failedItem
                                .getByXPath("./*[contains(@class, 'error')]");
                            for (HtmlParagraph htmlParagraph : errorMessageList) {
                                paragraph += htmlParagraph.getTextContent();
                            }
                        }
                        Assert.fail("Header: " + header + " heading: " + heading + " paragraph: "
                            + paragraph);
                    }
                }
            }
        }
    }</pre>
<p>This method takes an HtmlUnit HtmlPage and, using xpath expressions, iterates over the test result DIV tags generated by Screw.Unit. It ignores tests that passed, and focuses on the failed tests. For failed tests it gets the provided information about the test (the <em>it </em>and <em>describes </em>strings), so that we&#8217;ll know what test failed and why.</p>
<p>Lastly, rather than write a test for every Screw.Unit test page we write, we made use of JUnit4&#8242;s Parameterized test. This way we provide a list of Screw.Unit tests and have the Parameterized test execute a test for each.</p>
<p>Annotate the class:</p>
<pre lang="java" line="1">
@RunWith (Parameterized.class)
public class ScrewUnitTest {</pre>
<pre lang="java" line="1">
Provide a static Collection:
@SuppressWarnings ("unchecked")
    @Parameters
    public static Collection data() {
        Collection fileCollection = new ArrayList();
        Collection fileList = FileUtils.listFiles(new File(HTML_TEST_DIR), extensions, true);
        for (File file : fileList) {
            File[] fileArray = { file };
            fileCollection.add(fileArray);
        }
        return fileCollection;
    }
</pre>
<p>and a constructor:</p>
<pre lang="java" line="1">
public ScrewUnitTest(File file) {
        this.file = file;
    }</pre>
<p>Then for every file in the Collection, this.file will be available for reference in the tests. And our JavaScript tests can be easily run by a continuous integration system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/integrating-javascript-tests-with-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The best 59$, a java developer can ever invest</title>
		<link>http://www.reverttoconsole.com/blog/java/the-best-59-a-java-developer-can-ever-invest/</link>
		<comments>http://www.reverttoconsole.com/blog/java/the-best-59-a-java-developer-can-ever-invest/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 20:03:10 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=388</guid>
		<description><![CDATA[If you don&#8217;t buy this now, you&#8217;re either dumb. Or just plainly stupid. For the impatient: it&#8217;s a small jar that lets you compile/run/deploy java instantly, like php. I&#8217;ts the real HOT DEPLOY that jvm lacks out of the box. No more restarting the server, ever again, even after reconfiguring Spring beans. I used this [...]]]></description>
			<content:encoded><![CDATA[<p>If you don&#8217;t buy <a href="http://www.zeroturnaround.com/javarebel/">this </a>now, you&#8217;re either dumb. Or just plainly stupid.</p>
<p>For the impatient: it&#8217;s a small jar that lets you compile/run/deploy java instantly, like php. I&#8217;ts the real HOT DEPLOY that jvm lacks out of the box.</p>
<p>No more restarting the server, ever again, even after reconfiguring Spring beans.</p>
<p>I used this for a month, and convinced my manager to buy licenses for all. It&#8217;s that good.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Fthe-best-59-a-java-developer-can-ever-invest%2F&amp;title=The+best+59%24%2C+a+java+developer+can+ever+invest" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/the-best-59-a-java-developer-can-ever-invest/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Unit Testing JavaScript with HtmlUnit and Screw.Unit</title>
		<link>http://www.reverttoconsole.com/blog/java/unit-testing-javascript-with-htmlunit-and-screwunit/</link>
		<comments>http://www.reverttoconsole.com/blog/java/unit-testing-javascript-with-htmlunit-and-screwunit/#comments</comments>
		<pubDate>Fri, 29 May 2009 14:30:44 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/blog/java/unit-testing-javascript-with-htmlunit-and-screwunit/</guid>
		<description><![CDATA[Writing apps with today&#39;s rich client libraries such as Extjs , YUI , and JQuery really shows how much potential is still left in web development. But it takes a lot of code, and the amount of technical debt can get heavy, quickly. Good tests can help reduce this technical debt, and there are a lot of testing [...]]]></description>
			<content:encoded><![CDATA[<p>Writing apps with today&#39;s rich client libraries such as <a href="http://extjs.com/">Extjs</a> , <a href="http://developer.yahoo.com/yui/">YUI</a> , and <a href="http://jquery.com/">JQuery</a> really shows how much potential is still left in web development. But it takes a lot of code, and the amount of <a href="http://en.wikipedia.org/wiki/Technical_debt">technical debt</a> can get heavy, quickly. Good tests can help reduce this technical debt, and there are a lot of testing tools available for the client. Today though, I want to go beyond just using a tool, and talk more about integrating your JavaScript tests into an existing <a href="http://en.wikipedia.org/wiki/Continuous_Integration">Continuous Integration</a> environment. 
<div></div>
<div>I have a confession to make- I hate running tests manually. I&#39;ll write tests when I&#39;m doing new development or bug fixing, but I hate running them after I&#39;ve fixed the bug or implemented the code. That&#39;s why we have CI environments, right? So I don&#39;t have to run the stupid tests each time! There are enough ridiculous rules put in place in corporate work environments today already, I don&#39;t like adding tasks that can be automated into the mix.</div>
<div></div>
<div>Here&#39;s what I&#39;ve come up with for integrating my JavaScript Unit Tests:</div>
<div></div>
<div>
<ol>
<li>Write tests with <a href="http://github.com/nkallen/screw-unit/tree/master">Screw.Unit</a> . Why Screw.Unit? I like the simple DOM it creates. I like the code behind it- specifically the separation of builders and matchers. It&#39;s relatively easy to debug my code in Firebug. But mostly, it&#39;s because it&#39;s of the easy DOM it displays. There&#39;s nothing magical about Screw.Unit. It&#39;s just a simple tool. But that&#39;s the point.</li>
<li>Use <a href="http://htmlunit.sourceforge.net/">HtmlUnit</a> to execute Screw.Unit tests, and inspect the results. HtmlUnit has the best JavaScript framework support in the Java world today. It uses <a href="http://www.mozilla.org/rhino/">Rhino</a> to execute JavaScript and has written very comprehensive DOM support on top of that. It can handle most major JS framework code. So I execute my tests with HtmlUnit, and then inspect the simple DOM results. Easy!</li>
<li>I use a <a href="http://junit.org/apidocs/org/junit/runners/Parameterized.html">Parameterized JunitTest</a> to read through all of my ScrewUnit tests (*.html files), and execute a JUnit test for each. </li>
</ol>
<div>Done! Simple integration at it&#39;s best.</div>
</p></div>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via email</a>   </p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fjava%2Funit-testing-javascript-with-htmlunit-and-screwunit%2F&amp;title=Unit+Testing+JavaScript+with+HtmlUnit+and+Screw.Unit" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/java/unit-testing-javascript-with-htmlunit-and-screwunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
