<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Remember One Another &#187; Jobber&#8217;s Log</title>
	<atom:link href="http://blog.rememberoneanother.com/category/jobbers-log/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rememberoneanother.com</link>
	<description>An online tool to help Christians pray more effectively</description>
	<lastBuildDate>Sun, 28 Feb 2010 04:59:05 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='blog.rememberoneanother.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a1cc33ea1da04c74073013d51e10e476?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Remember One Another &#187; Jobber&#8217;s Log</title>
		<link>http://blog.rememberoneanother.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.rememberoneanother.com/osd.xml" title="Remember One Another" />
	<atom:link rel='hub' href='http://blog.rememberoneanother.com/?pushpress=hub'/>
		<item>
		<title>Google AppEngine Rocks</title>
		<link>http://blog.rememberoneanother.com/2009/09/11/google-appengine-rocks/</link>
		<comments>http://blog.rememberoneanother.com/2009/09/11/google-appengine-rocks/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 02:32:18 +0000</pubDate>
		<dc:creator>David Chandler</dc:creator>
				<category><![CDATA[Headsmack]]></category>
		<category><![CDATA[Progress]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=72</guid>
		<description><![CDATA[So far so good with Google AppEngine. I was at first afraid that I would have to create separate model objects on both the client and server side as the GWT compiler was complaining about model classes not being serializable (DTOs, yuck). Since my model class did in fact implement Serializable, I thought it was the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=72&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>So far so good with Google AppEngine. I was at first afraid that I would have to create separate model objects on both the client and server side as the GWT compiler was complaining about model classes not being serializable (DTOs, yuck). Since my model class did in fact implement Serializable, I thought it was the JDO persistence annotations messing it up. But not to worry, I merely forgot the public empty constructor. Now GWT and JDO can use the same model class to represent an object, and life is good.</p>
<p>I successfully created my first prayer list using Google DataStore (AppEngine).</p>
<p>Now it&#8217;s time to dig deep into GWT to understand how best to wire related parts of the view together with each other, the controller, and the model&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=72&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2009/09/11/google-appengine-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">turbomanage</media:title>
		</media:content>
	</item>
		<item>
		<title>Spring Webflow Saves the Day</title>
		<link>http://blog.rememberoneanother.com/2008/07/11/spring-webflow-saves-the-day/</link>
		<comments>http://blog.rememberoneanother.com/2008/07/11/spring-webflow-saves-the-day/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 16:54:03 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Shale]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=27</guid>
		<description><![CDATA[Thursday, the morning after our Shale jerry-rig marathon, I discovered that, even after hard-coding the end-state viewId, the dialog context for the parent dialog, listManager, was nullified on returning to the listsManager.xhtml page.
It was a dark hour, but we soon found a new shining software implementation to help us. Spring-Webflow rose to the occasion! It [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=27&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Thursday, the morning after our Shale jerry-rig marathon, I discovered that, even after hard-coding the end-state viewId, the dialog context for the parent dialog, listManager, was nullified on returning to the listsManager.xhtml page.</p>
<p>It was a dark hour, but we soon found a new shining software implementation to help us. Spring-Webflow rose to the occasion! It was so simple, in fact, that, despite Mr. Chandler being out-of-touch on the Northside for most of today, I still made significant progress in understanding and implementing this new framework. Do not misunderstand, I still didn&#8217;t actually get it running, but at the close of the day I believed I was close.</p>
<p>Spring says &#8220;flow&#8221; instead of &#8220;dialog&#8221;, and has an even shorter list of simple states. The nifty thing about Webflow (aside from the fact that it works in our app) is its close connection with other Spring features, such as Spring-Faces!</p>
<p>On Friday we encountered some difficulty making sure we had the up-to-date Spring webflow jar file. Our current version, downloaded from the central maven repository, was 1.0.4. Spring Webflow is currently cutting edge at 2.0.2. We eventually located the correct maven repository for milestone releases, and added the dependency to our pom as follows:</p>
<p>&lt;repository&gt;<br />
&lt;id&gt;spring-milestone&lt;/id&gt;<br />
&lt;name&gt;Spring Milestone Repository&lt;/name&gt;<br />
&lt;url&gt;http://maven.springframework.org/milestone&lt;/url&gt;<br />
&lt;/repository&gt;</p>
<p>We then added the dependencies recommended by Spring:</p>
<p>&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework.webflow&lt;/groupId&gt;<br />
&lt;artifactId&gt;org.springframework.binding&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.2.RELEASE&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework.webflow&lt;/groupId&gt;<br />
&lt;artifactId&gt;org.springframework.js&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.2.RELEASE&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework.webflow&lt;/groupId&gt;<br />
&lt;artifactId&gt;org.springframework.webflow&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.2.RELEASE&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework.webflow&lt;/groupId&gt;<br />
&lt;artifactId&gt;org.springframework.faces&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.2.RELEASE&lt;/version&gt;<br />
&lt;/dependency&gt;</p>
<p>Strangely enough, the downloaded jar files, when viewed in Eclipse under the lib folder, were under the  path name org.springframework. as opposed to the other Spring jars which came in under the path name spring.</p>
<p>Once we got the framework running around midday, we began trying to implement our pages as a simple flow/subflow pattern. It took us to another 10:30 pm quitting time. At least this time it seemed to do what we wanted it to. With a lot more practice, we hope it will be just the ticket for modeling our flows.</p>
<p>Numbers of the Day: windows open: 15. Number of editors open in Eclipse: 54. Number of tabs open between three Firefox windows: 35. Total windows open counting Eclipse editors and Firefox tabs: 100.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=27&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/07/11/spring-webflow-saves-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Navigation with Shale</title>
		<link>http://blog.rememberoneanother.com/2008/07/09/navigation-with-shale/</link>
		<comments>http://blog.rememberoneanother.com/2008/07/09/navigation-with-shale/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 17:28:24 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Headsmack]]></category>
		<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Shale]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=25</guid>
		<description><![CDATA[As I edited the code to remove RichFaces from our Application, a simple problem arose and led to two days worth of work. This is not unusual, and we are actually quite happy about the changes we have made, since they ought to make the application run far better in the future.
The problem was as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=25&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As I edited the code to remove RichFaces from our Application, a simple problem arose and led to two days worth of work. This is not unusual, and we are actually quite happy about the changes we have made, since they ought to make the application run far better in the future.</p>
<p>The problem was as follows: without RichFaces, creating a new prayer request from the prayer list page required a simple command button pointing to a simple xhtml page, &#8220;prayerRequestEditor&#8221;, where you could edit a new prayer request, save, and return. However, we intend to have at least one other page in the application link to PrayerRequestEditor. How were we to ensure that, on completing the edit, the user would be returned to the page they recently left? The immediate solution was to copy the entire prayerRequestEditor and define different navigation rules for the two identical files. Surely, we thought, there must be a way to avoid having to maintain two identical files on the server.</p>
<p>Our first solution, which we spent the majority of two days pursuing, was to implement <a href="http://shale.apache.org/">Apache-Shale</a> dialog manager.</p>
<p>A <a href="http://shale.apache.org/shale-dialog/index.html">dialog manager</a> such as this one uses a small number of easy-to-understand states to define a &#8220;dialog&#8221; or &#8220;flow&#8221; for a webapplication. Navigation from page to page, actions between and inside views, and action reversal should all be gracefully carried out in a properly written and executed dialog. Shale&#8217;s logic was very much to my liking.</p>
<p>Not only did Shale promise to rid us of wasteful code copying by modeling multiple subdialogs pointing to the same dialog body, it also offered a way to implement dialog-scoped data. Data stored in web session tends to slow things down, so it is best to keep controller-bean&#8217;s properties in request-scope, causing them to be erased from session after each mouse click. Unfortunately, this also forces us to reload them with each mouse-click if they are needed, and that puts an even greater strain on the database. The happy medium is the dialog scope, which, if it existed, would magically mark objects for cleanup when the dialog, and their usefulness, ended, but keep them in session for the duration of the dialog. Shale offered this functionality through a dataClass object in which we could store variables like a currentList and currentPrayerRequest as dialog-scoped.</p>
<p>Unfortunately, it took us more than two full day&#8217;s work to get the framework running, and even then, it did not do what it promised.</p>
<p>Our first problems arose when, upon entering the prayerRequestEditor subdialog of the listManager parent, the supposedly dialog-scoped current-variables were empty. Null pointer exceptions flew; we grumbled quietly and fired up debugger.</p>
<p>Several hours later Mr. Chandler had waded through a morass of code and abstract dialogs, dialogContexts, and dialogContextHelpers and was convinced that there was a bug in Shale&#8217;s source. The subdialog did not know it had a parent dataClass.</p>
<p>Several more hours later Mr. Chandler had waded through a quicksand of Shale&#8217;s source, trying several changes, non of which were successful. With our new deep knowledge of Shale&#8217;s workings, however, he decide to hard-code the parent id onto an instance of the prayerRequestEdit dialog.</p>
<p>It was 10:20 pm when we finished jerry-rigging the prayerRequestEdit sub-dialog and, bleary-eyed, celebrated our success. In fact, we celebrated two successes, as, for the first time outside of junit, we created and committed a new prayer request.</p>
<p>We were too tired to grumble over the fact that we had spent two days trying to avoid duplicating code for navigation purposes, and had failed. Because we entered prayerRequestEdit outside of dialog-config, we could not find a way to cause the listManager dialog to treat it like a subdialog. We had to hardcode the end-event viewId, meaning that we would need to create a duplicate dialog with a separate viewId if we wanted to access prayerRequestEdit from two different pages!</p>
<p>Our experience with Shale has, to say the least, been disappointing. Today&#8217;s Note for Dense Summer Interns: if a code framework causes you to work many times longer on a problem than you would have, and still doesn&#8217;t solve the problem, consider getting a new framework. As you will see in the next Jobber&#8217;s Log, that&#8217;s what we did.</p>
<p>Common Acronym Confusion of the Day: JSF, as programmers use the term, stands for Java Server Faces, not Joint Strike Fighter.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=25&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/07/09/navigation-with-shale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>To A4J or Not to A4J?</title>
		<link>http://blog.rememberoneanother.com/2008/07/07/to-a4j-or-not-to-a4j/</link>
		<comments>http://blog.rememberoneanother.com/2008/07/07/to-a4j-or-not-to-a4j/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 19:02:28 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[a4j]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=24</guid>
		<description><![CDATA[For the past two weeks or so I have been frenetically learning Ajax for Java and RichFaces. The available components shine on the view, adding speed, simplicity, and functionality to our application.
Unfortunately, the fact that two weeks have passed since I began work on the core page of the application signals that there are problems. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=24&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>For the past two weeks or so I have been frenetically learning Ajax for Java and RichFaces. The available components shine on the view, adding speed, simplicity, and functionality to our application.</p>
<p>Unfortunately, the fact that two weeks have passed since I began work on the core page of the application signals that there are problems. Certainly, some of them are due to my lack of experience, and are to be expected. Others, however, have been caused or aggravated by implementing a4j and RichFaces.</p>
<p>While RichFaces is documented, there seem to be unmentioned complexities to the implementation of almost every component. When used in the environment for which they were designed, each component works excellently, but when we used them in conjunction with other components and other code implementations, time-consuming problems arose.</p>
<p>For instance, components such as rich:modalPanel rendered lightening fast on Internet Explorer but crawled in Firefox, while commandLinks in rich:dataTables worked on Firefox, but not IE!</p>
<p>As a detailed example of our troubles, and as today&#8217;s Note for Dense Summer Inters, we spent several hours working with <a href="https://addons.mozilla.org/en-US/firefox/addon/966">Tamper Data</a> and Eclipse console to determine what exactly was failing in a rich:dataList. The list contained links with a4j:actionparams that assigned the current variable object to the bean, for purposes of reRendering a view of the object&#8217;s details. It was only after wasting about a day that we discovered that the actionParam was not sending the object at all. Apparently, a4j:actionParam cannot assign as a value the variable of a rich:dataList, only properties of that variable. We switched to a rich:dataTable, and all was snazzy site design once again.</p>
<p>Today we decided that, until we got farther down the road of functionality, it was only shooting ourselves in the proverbial feet to struggle through a4j implementation and basic site design simultaneously. For now, we plan to drop RichFaces and use simple JSF until such a time as we have a functional site to which we wish to add a4j. At that point we must decide what component library to use. Among our options are first, of course, RichFaces, but also <a href="http://www.icefaces.org/main/product/product-overview.iface">IceFaces</a> and <a href="http://dojotoolkit.org/">Dojo</a> (which has an extra-impressive <a href="http://dojocampus.org/explorer/">showcase</a>!). RichFaces may be difficult to integrate with any portal other than JBoss portal, and Mr. Chandler believes we may in some future release want to implement <a href="http://www.liferay.com/web/guest/products/portal">LifeRay.</a> This would be a vote in favor of IceFaces, which supports LifeRay explicitly.</p>
<p>So we sadly bid a4j farewell, for the time being.</p>
<p>Studying (or should I say geeking out over) various a4j graphic component libraries today, I came across the phrase &#8220;Lorem ipsum dolor sit amet consectetuer&#8221; etc one several occasions. Mr. Chandler told me it is the standard filler text for graphic artists. Curious, I looked it up, and here it is as the Filler Text of the Day: First, <a href="http://support.microsoft.com/kb/114222">an article</a> article describing the history of the phrase&#8217;s usage, giving a full translation of the standard text and the Cicero text it stems from, and offering to generate some random ipsum just for you!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=24&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/07/07/to-a4j-or-not-to-a4j/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Simple RichFaces Validation</title>
		<link>http://blog.rememberoneanother.com/2008/06/23/simple-richfaces-validation/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/23/simple-richfaces-validation/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 21:48:08 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Validation]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=21</guid>
		<description><![CDATA[I began today with a long-term goal of getting the core page of the application written. This is the page that will allow users to create, edit, view, and manage prayer requests.
Before half an hour passed, I knew I needed to study RichFaces. We hope to use a lot of rich components in the application, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=21&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I began today with a long-term goal of getting the core page of the application written. This is the page that will allow users to create, edit, view, and manage prayer requests.</p>
<p>Before half an hour passed, I knew I needed to study <a href="http://en.wikipedia.org/wiki/Richfaces">RichFaces.</a> We hope to use a lot of rich components in the application, enabling the user to make changes large or small without refreshing the entire page, and to facilitate easy searches and selections. so I looked up the RedHat team&#8217;s <a href="http://livedemo.exadel.com/richfaces-demo/index.jsp">RichFaces Live Demo</a>, and spent the better part of the morning &#8220;geeking out&#8221; over all the exciting components they offer. It was so much fun that it is the Website of the Day!</p>
<p>Then it was time for a simple test; I decided I would add rich validation to the account creation page, telling the user on screen if his or her field entries were too short or too long, saving the trouble of waiting through an entire refresh to find out.</p>
<p>This test was successfully completed approximately six hours later. Lack of RichFaces knowledge led me on a merry chase for the correct functionality. With Mr. Chandler&#8217;s help, I made several useful discoveries.</p>
<p>First, in order to implement a4j and RichFaces, certain filters and context parameters are required in the web.xml, and they can be order-sensitive.</p>
<p>Second, in order to work properly, RichFaces must be allowed to access a file in the server path.<br />
Our filter was intercepting this call. We fixed it by making the filtered path one step more specific, excluding the one called by RichFaces.</p>
<p>Finally, I discovered that a functional RichFaces validation on a simple field can be accomplished using the following simple process.</p>
<p>In our xhtml page, we first added the following line inside our input box tags:</p>
<p>&lt;a4j:support event=&#8221;onkeyup&#8221; reRender=&#8221;passwordMsg&#8221; requestDelay=&#8221;1000&#8243; /&gt;</p>
<p>This instructs a4j to wait 1000 milliseconds after the first keystroke in the input box is released, and then to reRender the component with the id &#8216;passwordMsg&#8217;. The requestDelay is included to prevent the server from processing requests generated by every keystroke.</p>
<p>Second, we added the following code after the closing tag for the input box.</p>
<p>&lt;a4j:outputPanel id=&#8221;passwordMsg&#8221;&gt;</p>
<p>         &lt;h:message for=&#8221;password&#8221; showDetail=&#8221;true&#8221; style=&#8221;color:red;&#8221; /&gt;</p>
<p>&lt;/a4j:outputPanel&gt;</p>
<p>This is the panel reRendered by the support component. The h:message simply begins a normal validation process.</p>
<p>In conclusion, I am happy to say that today was tidy, encapsulated by the accomplishment of a single goal.</p>
<p>Today&#8217;s Note for Dense Summer Interns: The solution to your RichFaces problem is probably just one webpage away. Don&#8217;t keep experimenting with complicated solutions when you could be exploring more rich components!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=21&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/23/simple-richfaces-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Database Architecture</title>
		<link>http://blog.rememberoneanother.com/2008/06/20/database-architecture/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/20/database-architecture/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 22:14:22 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=19</guid>
		<description><![CDATA[Today we built up a class system to describe the basic objects we intend to use in the core of the ROA project.
Our conversation in Dunkin&#8217; Donuts yesterday pertained to what structure our database should take to efficiently and effectively back the core of the project; today&#8217;s work flowed out of this discussion, as we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=19&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Today we built up a class system to describe the basic objects we intend to use in the core of the ROA project.</p>
<p>Our conversation in Dunkin&#8217; Donuts yesterday pertained to what structure our database should take to efficiently and effectively back the core of the project; today&#8217;s work flowed out of this discussion, as we created a class for each table we envisioned yesterday.</p>
<p>I learned a lot today about the @OneToMany relationship today, inescapable in a project that uses lists.</p>
<p>We also plan on using a lot of middle-man tables that include items that each include a pair of ids &#8212; that of two other &#8220;real&#8221; objects. This allows two different objects that each can point to many instances of the other object type &#8212; for instance, a prayer list can be referenced by many groups, but each group can reference many prayer lists. Each of these items has a one-to-many relationship to the &#8216;list-permissions&#8217; table. Each item in the latter table has two many-to-one references back to group and list items.</p>
<p>Cool gadget combination of the day: remote desktop and voice recognition. I still jump a little each time Mr. Chandler says &#8220;wake up!&#8221; at his desk across the room. It&#8217;s only when he goes on to say things like &#8220;mouse grid&#8230;&#8221; and &#8220;press F8&#8243; that I realize he is using his voice recognition software, and was not, after all, under the impression I was snoozing. If it&#8217;s cool to be able to talk to your computer, just think how cool it is to talk to someone else&#8217;s computer! Mr. Chandler and I make use of <a href="http://en.wikipedia.org/wiki/Vnc">VNC</a> almost everyday, allowing him to see and control my box without having to walk across the room and trade chairs with me. today we tried out the voice recognition in conjunction with VNC, with success.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=19&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/20/database-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Parsing Arguments in the URL: The Missing Link</title>
		<link>http://blog.rememberoneanother.com/2008/06/19/parsing-arguments-in-the-url-the-missing-link/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/19/parsing-arguments-in-the-url-the-missing-link/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 21:45:07 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=16</guid>
		<description><![CDATA[Wednesday and Thursday of this week were spent completing and refining our emailed registration link.
Wednesday I worked from home, and after digging through a few errors thrown when I clicked on a registration link, I ran into one I couldn&#8217;t fix. It was a simple java.lang null-pointer exception thrown when the code was supposed to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=16&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Wednesday and Thursday of this week were spent completing and refining our emailed registration link.</p>
<p>Wednesday I worked from home, and after digging through a few errors thrown when I clicked on a registration link, I ran into one I couldn&#8217;t fix. It was a simple java.lang null-pointer exception thrown when the code was supposed to parse arguments passed in on the link. Email communication with Mr. Chandler led to liberal use of Eclipse&#8217;s debugger. I set a break point in the code where it was supposed to use a method of <code>FacesContext.getCurrentInstance().getExternalContext() </code> to find the url arguments. The hash maps that getRequestMap() produced were monstrous tree diagrams, full of circular calls and null entries.</p>
<p>It was Thursday before Mr. Chandler did the research to dig up a solution, which makes for an excellent Note for Dense Summer Interns: to parse an argument from a url, call <code>FacesContext.getCurrentInstance().getExternalContext().getRequestParametersMap().get("key")</code></p>
<p>We also wanted to pull out the host server and path from the url, so that we wouldn&#8217;t have to create several different hardcoded versions of the link to send from different test and production servers.</p>
<p>Having finished getting acquainted with the mail system, and setting up our registration service, we went to Dunkin&#8217; Donuts to celebrate and talk about database design for the core of the project. Details of that discussion, what came of it, are due tomorrow.</p>
<p>Number of the Day: 32: the number of files open in Eclipse at the same time Thursday afternoon.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=16&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/19/parsing-arguments-in-the-url-the-missing-link/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Navigation Filters and the AJUG</title>
		<link>http://blog.rememberoneanother.com/2008/06/17/navigation-filters-and-the-ajug/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/17/navigation-filters-and-the-ajug/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 21:43:06 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[AJUG]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Regular Expressions]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=15</guid>
		<description><![CDATA[Today we moved towards getting the user account registration process finished. It&#8217;s been several days coming, but after yesterday&#8217;s work on Hudson, we finally settled (for the time being) our configuration and build issues.
Mr. Chandler took a look at the code I wrote on my day at home last week, and suggested a number of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=15&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Today we moved towards getting the user account registration process finished. It&#8217;s been several days coming, but after yesterday&#8217;s work on Hudson, we finally settled (for the time being) our configuration and build issues.</p>
<p>Mr. Chandler took a look at the code I wrote on my day at home last week, and suggested a number of refactorings. For those who don&#8217;t know, &#8216;refactoring&#8217; is a coding term meaning redesign of the code to make it easier to run. read, and reuse. He also suggested I remove several errors.</p>
<p>This done, we found that the link produced by our code and sent to the new user still did not behave properly. Instead of accessing an almost-empty view page and triggering a registration process, it did nothing at all before sending the user onto the login page.</p>
<p>We quickly realized this was due to a filter active in the project that prevents any unauthorized user from navigating to a restricted page. Since all pages are default restricted, and the filter redirects to the login page, it was intercepting the browser en-route to the registration page.</p>
<p>So Mr. Chandler fixed it. I am ignorant on matters of String splitting and <a href="http://www.regular-expressions.info/">regular expressions</a>, but somehow Mr. Chandler modified our filter class to exclude a list of paths from the filter process, allowing the link access to the registration page.</p>
<p>Yesterday and today&#8217;s problems demonstrated how we often have to work through issues that, while preventing us from moving any farther in our envisioned site design, force us to prepare now for what would otherwise become major hindrances in the future. We are tempted to be discouraged, but a bit of reflection reminds us that we still got a lot of important things done &#8212; they just may not be what we <em>planned</em> to get done. Hopefully we will deal with problems while they are still in seedling form, before they have a chance to crash servers.</p>
<p>After today&#8217;s work was done, Mr. Chandler and I drove up to the North Side of Atlanta, grabbed a bite to eat, and attended a meeting of the <a href="http://www.ajug.org/confluence/display/AJUG/Home"> Atlanta Java User&#8217;s Group</a>, affectionately referred to as &#8220;AJUG.&#8221; I have fond memories of this group. The first time I attended the monthly Tuesday evening session, they gave away free T-shirts, allowing me to proudly announce myself to the world as a new Java User.</p>
<p>Today&#8217;s Note for Dense Summer Interns: Do not try to test code that requires web access while driving through downtown Atlanta with a wireless box. All the wireless enabled coffee shops in the world won&#8217;t help you get online when they are whizzing by at 75 miles per hour.</p>
<p>Clothing Tip of the Day: Be a computer programmer and you can wear whatever you like. At the Java User&#8217;s Group, there were in attendance a wide range of accouterments, from t-shirts, shorts, and sandals to ties, pants, and dress shoes. The only requirement in a programmer&#8217;s the dress code is a cell phone, blackberry, i-phone, or laptop that the owner of which must frequently glance at, type on, or cause to make loud beeps. Thank goodness I brought my Linux-boasting laptop!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=15&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/17/navigation-filters-and-the-ajug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>Configuring a Project for Multiple Deployment Locations</title>
		<link>http://blog.rememberoneanother.com/2008/06/16/configuring-a-project-for-multiple-deployment-locations/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/16/configuring-a-project-for-multiple-deployment-locations/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 21:35:53 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Environment Variables]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=14</guid>
		<description><![CDATA[Today, over a delicious Mexican lunch, Mr. Chandler and I met with Mr. R, a graphic designer and a believer. Mr. R has been gracious enough to assist us by designing a logo for ROA. At this first meeting, he showed us variations on a number of concepts.
While I manned the laptop on which we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=14&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Today, over a delicious Mexican lunch, Mr. Chandler and I met with Mr. R, a graphic designer and a believer. Mr. R has been gracious enough to assist us by designing a logo for ROA. At this first meeting, he showed us variations on a number of concepts.</p>
<p>While I manned the laptop on which we viewed the images, Mr R and Mr. Chandler discussed the ups and downs of well-known symbols and various shapes and abstracts. After discussing both the look and the message we desired in the logo, they finally narrowing the field to a few of the designs, which Mr. R plans to refine for us.</p>
<p>We spent most of our office time today refactoring our properties files. Before today, the ROA project used separate test and server (&#8220;web&#8221;) versions of application.properties, each containing a simple list of properties to be accessed by applicationContext. These properties defined our databases for the project. Separate test properties were used so we would not interfere with our server DB, and could use, for instance, a DB set to re-create itself every test, instead of updating.</p>
<p>Because we edit the project on a local computer, but deploy it to a webserver, we had pulled the webapplication.properties out of versioning and Eclipse, and created two different versions, on similar filepaths, one on the webserver, one on my local machine.</p>
<p>Today, to get these configuration files back into source control, and to simplify our code, we made two major changes.</p>
<p>First, we reinstated a generic applicationContext file, which extends truncated webapp&#8230; and testapp&#8230; files. These latter files now contain very little other than pointers to their respective properties files, as well as the generic context file.</p>
<p>Second, we created a new project under subversion called &#8217;siteconfig&#8217;, and committed the test and webapplication.properties files for both the local machine and the webserver. We are now free to add more machines as we wish, and can edit only the appropriate files, but still maintain them in source control.</p>
<p>Difficult aspects of these two changes included getting the new Subversion project created properly, and making sure that the project knew on which box &#8212; local or web &#8212; it was running.</p>
<p>The Subversion software can be rather picky at times. There are some processes that can only be accomplished by a particular sequence of user actions and others that do not appear to be allowed at all (we are still learning!). This strictness is part of why the software is useful &#8212; it defines a certain way of handling files so that multiple users are prevented from accidentally overwriting or duplicating each others&#8217; work. A bit of trial-and-error soon solved our naming and file placement problems, and we were able to commit our files to version control.</p>
<p>The problem of letting the project know which location it was running in was a bit more difficult, and, while Mr. Chandler did all the work on this one, it is, for lack of better subject matter, today&#8217;s Note for Dense Summer Interns:</p>
<p>In applicationContext, we parameterized the path to the new siteconfig files, calling &#8216;${tm.site}&#8217; rather than hard coding the path and forcing ourselves to use two more applicationContext files. Now all we had to do was to configure the project to recognize the variable, and, more importantly, its value&#8230;</p>
<p>After much terminal and vi work, Mr. Chandler discovered that the correct place for a variable on our webserver was in the Java options for the &#8216;/etc/profile.d/java.sh&#8217; directory. In order for the ROA project to pick up the values, we could either log back into the webserver, or start up another terminal window to trigger it.</p>
<p>For our local machine, Mr. Chandler put the variables into /etc/profile.</p>
<p>For running tests on Eclipse on the local box, Mr. Chandler used the following process. In Eclipse, he selected &#8216;window&#8217;, &#8216;preferences&#8217;, &#8216;installed JREs&#8217;, and &#8216;edit&#8217;, and added the new &#8216;tm.site&#8217; variable to the default VM arguments.</p>
<p>Coding Axiom of the Day: <em>The best way to fix a coding problem is often to delete things.</em> Mr. Chandler and I have found this to be true in numerous situations, from last week&#8217;s <a href="http://rememberoneanother.wordpress.com/2008/06/12/tomcat-warning-did-not-find-a-matching-property/">headsmack</a> to a problem with today&#8217;s new Subversion project, the latter of which was solved by deleting everything out of the filepath for the new project, allowing Subversion to recreate it.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=14&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/16/configuring-a-project-for-multiple-deployment-locations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
		<item>
		<title>The Junit TestCase and Instance Variables</title>
		<link>http://blog.rememberoneanother.com/2008/06/13/the-junit-testcase-and-instance-variables/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/13/the-junit-testcase-and-instance-variables/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 12:59:36 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=9</guid>
		<description><![CDATA[Today I continued to work on revamping our tests, with two immediate goals in mind.
First, I needed a test that would automatically populate a database, saving me the trouble of a lot of data entry.
Second, we needed tests that worked with MySql, not just hypersonicSQL, which we have been using for our tests.
Once I accomplished [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=9&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Today I continued to work on revamping our tests, with two immediate goals in mind.</p>
<p>First, I needed a test that would automatically populate a database, saving me the trouble of a lot of data entry.</p>
<p>Second, we needed tests that worked with MySql, not just hypersonicSQL, which we have been using for our tests.</p>
<p>Once I accomplished these goals, I could proceed to change a property type in my local database, and begin experimenting with database diff tools to see what types of good scripts they could generate between the local and web databases.</p>
<p>This was all in the interest of facilitating database versioning and implementing significant table and property changes on live databases.</p>
<p>Mr. Chandler made an interesting find today. He had previously <a href="http://thomer.com/vi/vi.html">VI</a>-ed into the my.cnf file of /etc/mysql/ on my laptop. the MySql config file, to try to allow his computer access to the databases running on my local machine. The property &#8216;bind-address&#8217; in this file was currently bound to 127.0.0.1 (which is localhost). He edited it to his computer&#8217;s IP, but we figured out today that now my machine couldn&#8217;t log in! This was, of course, because localhost was no longer the bind address.</p>
<p>It seems that MySql allows either one or all address in the bind address. Our fix was to enter the address &#8216;0.0.0.0&#8242;, representative of all addresses.</p>
<p>Today&#8217;s Note for Dense Summer Interns:</p>
<blockquote><p>&#8220;&#8230;at runtime, each test case executes as an instance of your subclass of TestCase.&#8221;</p></blockquote>
<p>This sentence in the office copy of J.B. Rainsberger&#8217;s book, <a href="http://www.amazon.com/JUnit-Recipes-Practical-Methods-Programmer/dp/1932394230"><em>JUnit Recipes</em></a> is now highlighted bright orange. Mr. Chandler and I spent about three hours today trying to get one of our tests running properly because we did not recall this fact. Each test method in a JUnit Test (annotated @Test) will create new instances of class fields; therefore, changes to a variable inside of a <em>TestCase instance</em> will not affect other TestCase instances! We learned this the hard way.</p>
<p>(While learning this lesson the hard way we were forced to learn many other valuable lessons about Spring @Transactional, Spring rollback, and Hibernate persistence. One could argue that JUnit is still doing its job by forcing us to understand what we are doing.)</p>
<p>So, what if you want to change a variable in one test block and have it influence another block? We met with some success declaring our class fields static.</p>
<p>Today&#8217;s Linux keyboard shortcut: cntrl-alt-d. Minimizes all windows. Handy for those times when you&#8217;ve just sorted through ten windows and realize that the file you are looking for is now underneath all of them on the desktop. I will have to try this out on Windows, but I am afraid it may be a Linux exclusive.<br />
Update: Mr. Chandler let me know that this shortcut is indeed available to Windows users, in the form of the windows key+d.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=9&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/13/the-junit-testcase-and-instance-variables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jobber</media:title>
		</media:content>
	</item>
	</channel>
</rss>