<?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; Headsmack</title>
	<atom:link href="http://blog.rememberoneanother.com/category/jobbers-log/headsmack/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; Headsmack</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>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>Tomcat Warning: Did not Find a Matching Property.</title>
		<link>http://blog.rememberoneanother.com/2008/06/12/tomcat-warning-did-not-find-a-matching-property/</link>
		<comments>http://blog.rememberoneanother.com/2008/06/12/tomcat-warning-did-not-find-a-matching-property/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 12:46:46 +0000</pubDate>
		<dc:creator>jobber</dc:creator>
				<category><![CDATA[Headsmack]]></category>
		<category><![CDATA[Jobber's Log]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://rememberoneanother.wordpress.com/?p=8</guid>
		<description><![CDATA[When trying to restart the local Tomcat server we use to test-deploy our code, we saw the following warning, followed by a much-too-short startup:
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to org.eclipse.jst.j2ee.server:RememberOneAnother' did not find a matching property. 
When we tried to run the webapp on a local browser, Tomcat could not find any of the pages.
What [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=8&subd=rememberoneanother&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>When trying to restart the local Tomcat server we use to test-deploy our code, we saw the following warning, followed by a much-too-short startup:</p>
<blockquote><p><code>WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to org.eclipse.jst.j2ee.server:RememberOneAnother' did not find a matching property. </code></p></blockquote>
<p>When we tried to run the webapp on a local browser, Tomcat could not find any of the pages.</p>
<p>What solved the problem for us was to delete an extraneous WEB-ROOT directory that had appeared near the top of our project directory after an Eclipse crash.</p>
<p>That is today&#8217;s Note for Dense Summer Interns.</p>
<p>We spent all day trying to find the solution recorded above. There wasn&#8217;t much help online &#8212; not too many people seemed to have had this problem.</p>
<p>Notice that Tomcat did not throw an error on startup, just the warning, yet was completely out of touch with the views of the webapp it was running.</p>
<p>In desperation, we re-created out Tomcat instance, deleted and re-imported the ROA project in Eclipse, and, finally, deleted and reinstalled Eclipse itself. However, every time we added JSF capabilities in order to deploy our webapp to Tomcat, Eclipse suggested a path to the web.xml file for us &#8212; through a WEB-ROOT directory. This was not a path that we ever selected, so we were curious why (and how!) it was suggesting it. Eclipse even retained this path after a complete reinstallation.</p>
<p>Finally, comparing the ROA project with an older version (checked out of our Subversion repository) in a diff tool, we noticed that there was a WEB-ROOT directory near the top of our folder tree for the current project, but not the old one. We had no idea how it got there, except that this whole problem had begun shortly after an Eclipse crash. After we deleted the folder, the web.xml location was wiped, and Tomcat ran normally. We had spent all day working on what could have been a thirty-second fix, had we simply known where it was.</p>
<p>Worse still, we had vaguely recalled having a similar problem before, and solving it without too much chagrin, and as soon as we deleted the WEB-ROOT folder, we knew that was how we had quickly solved the problem before. That&#8217;s one reason for this post &#8212; we want to document how to fix the problem if it ever arises again, and we want to make the solution available online for anyone else who experiences the same problem.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/rememberoneanother.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/rememberoneanother.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rememberoneanother.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rememberoneanother.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rememberoneanother.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rememberoneanother.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rememberoneanother.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rememberoneanother.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rememberoneanother.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rememberoneanother.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rememberoneanother.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rememberoneanother.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.rememberoneanother.com&blog=3879594&post=8&subd=rememberoneanother&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.rememberoneanother.com/2008/06/12/tomcat-warning-did-not-find-a-matching-property/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>