<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.2" -->
<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/"
	>

<channel>
	<title>that's great... &#187; Technical stuff</title>
	<link>http://jaybose.com</link>
	<description>Yapping about stuff.</description>
	<pubDate>Sat, 07 Aug 2010 02:26:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.2</generator>
	<language>en</language>
			<item>
		<title>Spring Security in Google App Engine&#8230;</title>
		<link>http://jaybose.com/archives/spring-security-in-google-app-engine/</link>
		<comments>http://jaybose.com/archives/spring-security-in-google-app-engine/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 02:26:48 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Google App Engine]]></category>

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

		<guid isPermaLink="false">http://jaybose.com/archives/spring-security-in-google-app-engine/</guid>
		<description><![CDATA[When delving into the Google App Engine (GAE) world, aside from NOSQL (Not Only SQL), there are a number of other unfamiliar paradigms you&#8217;ll encounter. If you&#8217;re used to a number of technologies, such as Spring, Hibernate, Sitemesh, you may fear that you&#8217;ll be starting from scratch. The fact is, yes, in some cases you [...]]]></description>
			<content:encoded><![CDATA[<p>When delving into the <a href="http://code.google.com/appengine/" target="_blank">Google App Engine (GAE)</a> world, aside from NOSQL (<strong>Not Only SQL</strong>), there are a number of other unfamiliar paradigms you&#8217;ll encounter. If you&#8217;re used to a number of technologies, such as Spring, Hibernate, Sitemesh, you may fear that you&#8217;ll be starting from scratch. The fact is, yes, in some cases you will be. However, <em>all is not lost</em>.</p>
<p>Although <a href="http://code.google.com/p/google-gin/" target="_blank">Gin</a> and <a href="http://code.google.com/p/google-guice/" target="_blank">Guice</a> are seemingly the favored GAE DI frameworks, you <strong>can</strong> still use Spring for your DI/IOC needs. Furthermore, thanks to Spring Security team&#8217;s, Luke Taylor, you can continue to use Spring Security. In <a href="http://blog.springsource.com/2010/08/02/spring-security-in-google-app-engine/" target="_blank">this post</a>, he gives you clear steps on how.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/spring-security-in-google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google IO - Architecting GWT Apps talk</title>
		<link>http://jaybose.com/archives/google-io-architecting-gwt-apps-talk/</link>
		<comments>http://jaybose.com/archives/google-io-architecting-gwt-apps-talk/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 22:20:10 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/google-io-architecting-gwt-apps-talk/</guid>
		<description><![CDATA[





Ray Ryan has another talk on creating great GWT apps. This time his primary focus was on creating &#8220;production&#8221; ready applications. A number of things are required to do this. Things like Built-in logging support for GWT, and User Actions (instrumented Widgets), guarding against Cross-Site Attacks, etc. Some of this is less about the technology [...]]]></description>
			<content:encoded><![CDATA[<div align="center">
<object style="height: 344px; width: 425px">
<param name="movie" value="http://www.youtube.com/v/M5x6E6ze1x8"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/M5x6E6ze1x8" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></param></object>
</div>
<p>Ray Ryan has another talk on creating great GWT apps. This time his primary focus was on creating &#8220;production&#8221; ready applications. A number of things are required to do this. Things like Built-in logging support for GWT, and <strong>User Actions</strong> (instrumented Widgets), guarding against Cross-Site Attacks, etc. Some of this is less about the technology of GWT, and more about the <strong>consciousness </strong>of the developers.</p>
<p>Building on his talk from the <a href="http://jaybose.com/archives/google-io-best-practices-for-gwt-talk/">previous year</a>, he of course mentions the <strong>MVP</strong> (Model-View-Presenter) pattern. However, this time around, <a href="http://www.springsource.org/roo">Spring&#8217;s Roo</a> is used to build the apps, which changes a few things. It seems some people were complaining (<em>loudly?</em>) about the Presenter pattern requiring a good deal of boilerplate code. So, he describes how using <strong>Roo</strong> actually eliminates a reasonable amount of code - namely the DTOs and Presenters. When using <strong>Roo</strong>, the DTOs and Activity (similar to Android&#8217;s Activity) instances are generated for you. It seems that the Activity replaces the Presenter. As with last time, he explains how coding this way reduces the effort needed to build <em>complete</em> GWT tests. Again, definitely worth a watch!</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/google-io-architecting-gwt-apps-talk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google IO - Best Practices for GWT talk</title>
		<link>http://jaybose.com/archives/google-io-best-practices-for-gwt-talk/</link>
		<comments>http://jaybose.com/archives/google-io-best-practices-for-gwt-talk/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 17:37:44 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/google-io-best-practices-for-gwt-talk/</guid>
		<description><![CDATA[





Awesome talk, great slides! If you aren&#8217;t already impressed by GWT (aka Swing for the all browsers  ) , this talk should bring you over. This gave a number of new ideas. One of them is obviously the MVP pattern. Ryan attributes this to the great Martin Fowler. So, I went to Fowler&#8217;s site [...]]]></description>
			<content:encoded><![CDATA[<div align="center">
<object style="height: 344px; width: 425px">
<param name="movie" value="http://www.youtube.com/v/PDuhR18-EdM"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/PDuhR18-EdM" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></param></object>
</div>
<p>Awesome talk, great slides! If you aren&#8217;t already impressed by GWT (<em>aka Swing for the all browsers <img src='http://jaybose.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </em>) , this talk should bring you over. This gave a number of new ideas. One of them is obviously the MVP pattern. Ryan attributes this to the great Martin Fowler. So, I went to Fowler&#8217;s site looking for more, and found this <a href="http://martinfowler.com/eaaDev/ModelViewPresenter.html" target="_blank">retirement note</a>.</p>
<p>I&#8217;m also now looking forward to using the the EventBus architecture. It reminds me of the one of the driving forces behind some organizations using SOA. It just makes sense. In my unit tests, I&#8217;m still a Luddite - at least in my use of Mock objects&#8230; Uh, the lack thereof. However, I&#8217;m sold on the style he presented.</p>
<p>I&#8217;m a long time Spring user, so not sure where I stand on moving to <a href="http://code.google.com/p/google-gin/" target="_blank">Gin</a> and <a href="http://code.google.com/p/google-guice/" target="_blank">Guice for GWT</a>. But when I looked, I didn&#8217;t see a Google OS project for easy Spring/GWT integration. Unless I&#8217;m missing something I don&#8217;t think I&#8217;ll have much of a choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/google-io-best-practices-for-gwt-talk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Caching for the DaoAuthenticationProvider - don&#8217;t do it</title>
		<link>http://jaybose.com/archives/caching-for-the-daoauthenticationprovider-dont-do-it/</link>
		<comments>http://jaybose.com/archives/caching-for-the-daoauthenticationprovider-dont-do-it/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 20:31:45 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/caching-for-the-daoauthenticationprovider-dont-do-it/</guid>
		<description><![CDATA[It&#8217;s extremely hard to remember that everything is not a nail. Whenever I&#8217;m using Hibernate Core and/or Hibernate Search, I plan on caching frequently used entities, in order to remove unnecessary load on the data-store(s). Pretty standard performance move. I tend to use Ehcache – currently on 1.7.
My latest problem arose when I decided that [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s extremely hard to remember that everything is not a nail. Whenever I&#8217;m using <strong><a href="http://www.hibernate.org/hibernate.html" target="_blank">Hibernate Core</a></strong> and/or <strong><a href="http://www.hibernate.org/hibernate/subprojects/search.html" target="_blank">Hibernate Search</a></strong>, I plan on caching frequently used entities, in order to remove unnecessary load on the data-store(s). Pretty standard performance move. I tend to use <strong><a href="http://ehcache.org/" target="_blank">Ehcache</a></strong> – currently on 1.7.</p>
<p>My latest problem arose when I decided that Spring Security&#8217;s <strong>DaoAuthenticationProvider</strong> should get as much of its information from a cache. Well, if you never change a user&#8217;s security information after they are logged in (ya know, like a password) this is fine. However, it&#8217;s actually fairly common that a user forgets their password. In some cases, a user might just want to change their password. In either case, if the <strong>DaoAuthenticationProvider</strong> is looking to a cache for its user data, it will deem the old password to be correct, at least until the cached entity expires. It took me 2 full days to figure this out. I assumed the bad data was being cached, but I could not find the source&#8230; I focused on Hibernate for the longest. I thought, maybe a forced flush? No? OK, how about making sure the cache-mode is set to Ignore. No? Hmm, what the heck?!</p>
<p>In the end, I just started looking for all forms of caching in the system. I finally stumbled upon my various <strong>DaoAuthenticationProvider</strong> Spring definitions, and their <em>userCache</em> dependencies. I went to to the Spring Security documentation and found out that because of this very issue, only stateless apps should use the non-default <em>userCache</em>. Ehh, live and learn&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/caching-for-the-daoauthenticationprovider-dont-do-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>snipping tool in window 7&#8230;</title>
		<link>http://jaybose.com/archives/snipping-tool-in-window-7/</link>
		<comments>http://jaybose.com/archives/snipping-tool-in-window-7/#comments</comments>
		<pubDate>Sun, 30 May 2010 17:53:30 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/snipping-tool-in-window-7/</guid>
		<description><![CDATA[OK, so Windows 7 has this awesome screen capture tool that appears on the menu just after you do your first screen capture (Alt + PrtScn)&#8230; It&#8217;s called Snipping Tool. Considering the fact that it&#8217;s free, I was pretty surprised how well it compared to a commercial product I was going to buy called SnagIt.
Anyway, [...]]]></description>
			<content:encoded><![CDATA[<p>OK, so Windows 7 has this awesome screen capture tool that appears on the menu just after you do your first screen capture (<em>Alt + PrtScn</em>)&#8230; It&#8217;s called <strong><a href="http://windows.microsoft.com/en-us/windows-vista/Use-Snipping-Tool-to-capture-screen-shots" title="Snipping Tool on MS' site" target="_blank">Snipping Tool</a></strong>. Considering the fact that it&#8217;s free, I was pretty surprised how well it compared to a commercial product I was going to buy called <a href="http://www.techsmith.com/screen-capture.asp" title="SnagIt's site" target="_blank">SnagIt</a>.</p>
<p>Anyway, yet another subtle difference between what MS used to call an OS, and Windows 7&#8230;</p>
<p align="center"> <a href="http://jaybose.com/wp-content/uploads/2010/05/untitled.png" title="Screen Shot of Snipping Tool… kind meta."><br />
<img src="http://jaybose.com/wp-content/uploads/2010/05/untitled.png" alt="Screen Shot of Snipping Tool… kind meta." height="277" width="527" /><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/snipping-tool-in-window-7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>free geek twin cities&#8230;</title>
		<link>http://jaybose.com/archives/free-geek-twin-cities/</link>
		<comments>http://jaybose.com/archives/free-geek-twin-cities/#comments</comments>
		<pubDate>Tue, 04 May 2010 16:25:00 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/free-geek-twin-cities/</guid>
		<description><![CDATA[


http://freegeektwincities.org/ is a great idea. I&#8217;ve always had a hard time simply throwing away major computer components. It just seems wrong. Dell, at least for a short while, stopped offering recycling of old laptops. Now, with a group like FGTC, this problem is solved. Kudos&#8230;
]]></description>
			<content:encoded><![CDATA[<p><a href="http://freegeektwincities.org/" title="http://freegeektwincities.org/"></p>
<p style="text-align: center"><img src="http://jaybose.com/wp-content/uploads/2010/05/fgtc_logo.png" alt="http://freegeektwincities.org/" /></p>
<p></a></p>
<p><a href="http://freegeektwincities.org/">http://freegeektwincities.org/</a> is a great idea. I&#8217;ve always had a hard time simply throwing away major computer components. It just seems wrong. Dell, at least for a short while, stopped offering recycling of old laptops. Now, with a group like FGTC, this problem is solved. Kudos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/free-geek-twin-cities/feed/</wfw:commentRss>
		</item>
		<item>
		<title>more window 7 upgrades&#8230;</title>
		<link>http://jaybose.com/archives/more-window-7-upgrades/</link>
		<comments>http://jaybose.com/archives/more-window-7-upgrades/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 18:51:34 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/more-window-7-upgrades/</guid>
		<description><![CDATA[This how Wordpad looks now&#8230; and it has more functionality.

This how Paint looks now&#8230; and it has more functionality.

If you&#8217;re wondering why I care, I&#8217;ve used this two small programs for years, and I was about to make the move to UltraEdit. Not sure who Microsoft hired in the past few years, but wow&#8230; wow.
]]></description>
			<content:encoded><![CDATA[<p>This how <strong>Wordpad</strong> looks now&#8230; and it has more functionality.</p>
<p><a href="http://jaybose.com/wp-content/uploads/2010/04/wordpad-image.png" title="Wordpad now…"><img src="http://jaybose.com/wp-content/uploads/2010/04/wordpad-image.thumbnail.png" alt="Wordpad now…" height="341" width="633" /></a></p>
<p>This how <strong>Paint</strong> looks now&#8230; and it has more functionality.</p>
<p><a href="http://jaybose.com/wp-content/uploads/2010/04/paint-image.png" title="Paint now…"><img src="http://jaybose.com/wp-content/uploads/2010/04/paint-image.thumbnail.png" alt="Paintnow…" height="342" width="630" /></a></p>
<p>If you&#8217;re wondering why I care, I&#8217;ve used this two small programs for years, and I was about to make the move to UltraEdit. Not sure who Microsoft hired in the past few years, but wow&#8230; <strong>wow</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/more-window-7-upgrades/feed/</wfw:commentRss>
		</item>
		<item>
		<title>dell studio xps 16&#8230;</title>
		<link>http://jaybose.com/archives/dell-studio-xps-16/</link>
		<comments>http://jaybose.com/archives/dell-studio-xps-16/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 22:03:38 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/dell-studio-xps-16/</guid>
		<description><![CDATA[Got a new machine, my old one was starting to burn out - as usual.
Hands down, Windows 7 Professional is light years a head of Vista Professional. Wow. The UI&#8217;s better, without needing more RAM. The security implementation has been tweaked slightly  - I&#8217;m not fighting with soft link over regular shortcuts&#8230; Also, the [...]]]></description>
			<content:encoded><![CDATA[<p>Got a new machine, my old one was starting to burn out - as usual.</p>
<p>Hands down, Windows 7 Professional is light years a head of Vista Professional. Wow. The UI&#8217;s better, without needing more RAM. The security implementation has been tweaked slightly  - <a href="http://jaybose.com/archives/and-were-back/" target="_blank">I&#8217;m not fighting with soft link over regular shortcuts</a>&#8230; Also, the environment emulation helps a ton. They&#8217;ve taken the <strong>theme</strong> to a new level - background changing every few moments&#8230; nice.</p>
<p>I&#8217;m sure it doesn&#8217;t hurt that my new machine is also a step-up. The <a href="http://tinyurl.com/y6ua4uu" target="_blank">Dell Studio XPS 16</a> is pretty remarkable. Aside from the i7, with 6MB cache, being pretty powerful on its own. Dell, with this line, has gotten a complete makeover. Small things like the soft lighting under the keyboard and touch-surfaces. That&#8217;s right, I said touch-surfaces - no more eject button for your optical drive. An optical drive that reads Blue-Ray, and writes DVDs. Certain lights that used to be on the far rear, right, are now to the front of the machine, and on the left.</p>
<p>I don&#8217;t have time to go over each little thing, but I can say that someone clearly put money into some real <a href="http://en.wikipedia.org/wiki/Human-computer_interaction" target="_blank">HCI</a> research. I wont say this is a Mac, or anything crazy like that. I will say that if Dell stays on this path, I cant see why I wouldn&#8217;t keep coming back to them for my computing needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/dell-studio-xps-16/feed/</wfw:commentRss>
		</item>
		<item>
		<title>hibernate spring secuirty implementation&#8230;</title>
		<link>http://jaybose.com/archives/hibernate-spring-secuirty-implementation/</link>
		<comments>http://jaybose.com/archives/hibernate-spring-secuirty-implementation/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 03:45:08 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/hibernate-spring-secuirty-implementation/</guid>
		<description><![CDATA[Almost two years ago, I said I would upgrade my my Hibernate-Acegi (Spring Secuirty) implementation to Spring Security&#8217;s new(er) ACL service paradigm. Here&#8217;s their suggested schema. Below is a class diagram of that paradigm.

Back then, none of projects required groups or users to inheriting permissions. I simply gave permissions to the roles and individuals that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jaybose.com/archives/and-were-back/">Almost two years ago</a>, I said I would upgrade my my <a href="http://jaybose.com/archives/you-want-acegi-on-that-wall-you-need-acegi-on-that-wall/">Hibernate-Acegi (Spring Secuirty) implementation</a> to <a href="http://static.springframework.org/spring-security/site/docs/2.0.x/reference/domain-acls.html">Spring Security&#8217;s new(er) ACL service paradigm</a>. Here&#8217;s their <a href="http://static.springframework.org/spring-security/site/docs/2.0.x/reference/appendix-schema.html">suggested schema</a>. Below is a class diagram of that paradigm.</p>
<p style="text-align: center"><a href="http://jaybose.com/wp-content/uploads/2009/06/acegi-permissions.gif" title="Spring Secuirty ACL Paradigm"><img src="http://jaybose.com/wp-content/uploads/2009/06/acegi-permissions.gif" alt="Spring Secuirty ACL Paradigm" width="85%" /></a></p>
<p>Back then, none of projects required groups or users to inheriting permissions. I simply gave permissions to the roles and individuals that needed them. So, I used an <em>AffirmativeBased</em> AccessDecisionManager, and placed a <em>RoleVoter</em> before any other <em>AbstractAclVoter</em>. Simple, and it worked. One of my newer projects, however, does require the inheriting permissions.</p>
<h3>What else&#8230;</h3>
<p>Since I always use GUIDs, I still don&#8217;t need Spring Security to know the the domain class. But I&#8217;d like to utilize the new auditing feature. I&#8217;d also like to turn on and off auditing at the permission entry level. All in all, the upgrade wasn&#8217;t too bad at all. I had move some code from the SimpleAclEntry (deprecated) to the BasePermission. I actually extended the BasePermission, as the javadocs suggest.</p>
<p>Spring-Security&#8217;s distributed example code uses JDBC. Which is fairly straight-forward. It keeps a good amount of the information on the acl entry table. Thus no real need for a parent acl table. Well, since I&#8217;m using Hibernate, a few things automatically change:</p>
<ul>
<li>Built-in 2nd level caching (ehache for me)</li>
<li>Ability to define granular joins and fetches based on the context</li>
</ul>
<p>Based on those two (three?) items, I was able to normalize a good amount of information back to a new parent table <strong>permission</strong> (acl?). Now permission entries can focus on one purpose, facilitating a relationship between their parent permission and the target SID (Secure ID). See my pared-down ERD for this:</p>
<p align="center">  <a href="http://jaybose.com/wp-content/uploads/2009/07/permission-design.png" title="Hibernate Permission ERD"><br />
<img src="http://jaybose.com/wp-content/uploads/2009/07/permission-design.thumbnail.png" alt="Hibernate Permission ERD" height="200" width="500" /><br />
</a></p>
<p>I&#8217;m not big on defining AOP behavior via the newer namespaced expressions. So, in that context, I stayed with what I had before. Some other things have been deprecated, such as <em>BasicAclEntryAfterInvocationProvider</em>, in favor of <em>AclEntryAfterInvocationProvider</em>. Overall, it was pretty painless.</p>
<h3>One more thing&#8230;</h3>
<p>When it comes to ACLs, the was <strong>one</strong> thing that drives me crazy is having to define the default relationships in SQL scripts. I freaking hate it. Well, I was able to resolve that this time around: Added a task and some delegation to my existing <strong>ServletContextListener</strong>. At application start, it goes about finding existing objects that need securing, that aren&#8217;t already secured. Yeah, that&#8217;s great&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/hibernate-spring-secuirty-implementation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>early adopter&#8230;</title>
		<link>http://jaybose.com/archives/early-adopter/</link>
		<comments>http://jaybose.com/archives/early-adopter/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 21:18:23 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/early-adopter/</guid>
		<description><![CDATA[Since I&#8217;ve been introduced to WebWork, I was a serious proponent. It was built on some interesting technologies. Implemented some great concepts. Things that are now considered standard for any self-respecting web-mvc framework. After some evolution, WebWorkis now Struts2. Since I considered myself a proponent, I&#8217;ve followed most releases. Especially the security-related items.
Recently I decided [...]]]></description>
			<content:encoded><![CDATA[<p>Since I&#8217;ve been introduced to <em>WebWork</em>, I was a serious proponent. It was built on some interesting technologies. Implemented some great concepts. Things that are now considered standard for any <em>self-respecting</em> web-mvc framework. After some evolution, <em>WebWork</em>is now <em><a href="http://struts.apache.org/2.x/">Struts2</a></em>. Since I considered myself a proponent, I&#8217;ve followed most releases. Especially the security-related items.</p>
<p>Recently I decided to leave the 2.0.x series, and upgrade to the 2.1.x path. After a little work, you can piece together the major changes you need to adhere. For me, the biggest change was the built-in Dojo support. As of 2.1, it&#8217;s an optional, external module, which is fine. I went about making the <a href="http://struts.apache.org/2.1.6/docs/version-notes-216.html">changes</a>. Things like changing my theme from Ajax to XHtml. Importing the Dojo taglibs into the necessary pages.   Nothing too complicated. More time-consuming than anything.</p>
<p>OK, so I ran into a problem. I worked at it for a good weekend. After banging my head against this one, with no resolution, I sought help on the <a href="http://www.nabble.com/StrutsPrepareFilter%2C-StrutsExecuteFilter%2C-Sitemesh-and-TagUtils-to22694518.html">user-list</a>. No response. None of this really bothered me. What really bothered me was my naiveté.</p>
<p>The affected projects are all on <a href="http://subversion.tigris.org/">svn</a>. For some reason, I did the upgrade on HEAD. So, after no resolution, I had to revert. Since the upgrade included some other libs (Hibernate-3.3, some Commons modules, etc), I actually had to revert and then reapply some other upgrades.</p>
<p>Regardless of your personal feelings for a framework/library, don&#8217;t ever assume it&#8217;s going to be that easy! If you have a source control tool, use it. A branch for these upgrades would have made things a bit easier. I used to think branches were for teams larger than 2-3. Yeah, not so much. It&#8217;s not a problem to adopt a release/technology early, it&#8217;s all in how you do it. Ugh, lesson learned.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/early-adopter/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
