<?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>Fri, 12 Mar 2010 01:14:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.2</generator>
	<language>en</language>
			<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>
		<item>
		<title>ehcache-1.6</title>
		<link>http://jaybose.com/archives/ehcache-16/</link>
		<comments>http://jaybose.com/archives/ehcache-16/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 18:23:19 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/ehcache-16/</guid>
		<description><![CDATA[OK, no one should have to tell an engineer to use caching. If you&#8217;re dealing with non-trivial amounts of data, and have a reasonable requirement for availability, you&#8217;ll need caching. The real issue is what, and how. The what depends on your situation. The how? Well, I&#8217;ve always thought it was obvious: ehcache. I&#8217;ve been [...]]]></description>
			<content:encoded><![CDATA[<p>OK, no one should have to tell an engineer to use caching. If you&#8217;re dealing with non-trivial amounts of data, and have a reasonable requirement for availability, you&#8217;ll need caching. The real issue is <em>what</em>, and <em>how</em>. The what depends on your situation. The how? Well, I&#8217;ve always thought it was obvious: <a href="http://ehcache.sourceforge.net/">ehcache</a>. I&#8217;ve been using it as my 2nd-level cache provider for years.   As cache providers go, it&#8217;s done well by me.</p>
<p>Well, now Greg Luck&#8217;s taking it to the next level. By moving to a minimum JDK of 1.5, he&#8217;ll be able to remove all dependencies. Also, ehcache-1.5 was a performant module. Now,  if his figures are right, ehcache-1.6 will truly obliterate its peers. It&#8217;s still in beta, 1.6 that is, but <a href="http://gregluck.com/blog/archives/2009/02/i_have_been_wai.html">check it out</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/ehcache-16/feed/</wfw:commentRss>
		</item>
		<item>
		<title>fonts and stuff&#8230;</title>
		<link>http://jaybose.com/archives/fonts-and-stuff/</link>
		<comments>http://jaybose.com/archives/fonts-and-stuff/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 01:35:25 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/fonts-and-stuff/</guid>
		<description><![CDATA[Eric Burke&#8217;s Blog has a post talking about finding the best font for his comics. OK, One comment brought a superior tool to light: typetester.org. Honestly, I&#8217;ve needed this thing for years.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://stuffthathappens.com/blog/">Eric Burke&#8217;s Blog</a> has a post talking about finding the <a href="http://stuffthathappens.com/blog/2008/10/01/font-advice/">best font for his comics</a>. OK, One <a href="http://stuffthathappens.com/blog/2008/10/01/font-advice/#comment-23117">comment</a> brought a superior tool to light: <a href="http://typetester.org/">typetester.org</a>. Honestly, I&#8217;ve needed this thing for years.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/fonts-and-stuff/feed/</wfw:commentRss>
		</item>
		<item>
		<title>t-mobile g1</title>
		<link>http://jaybose.com/archives/t-mobile-g1/</link>
		<comments>http://jaybose.com/archives/t-mobile-g1/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 01:07:09 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/t-mobile-g1/</guid>
		<description><![CDATA[Finally, if you were looking for a actual piece of hardware for your Android apps, here it goes: the T-Mobile G1. It&#8217;s not too shabby.
]]></description>
			<content:encoded><![CDATA[<p>Finally, if you were looking for a actual piece of hardware for your Android apps, here it goes: the T-Mobile <a href="http://www.t-mobileg1.com/g1-announcement.aspx">G1</a>. It&#8217;s not too shabby.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/t-mobile-g1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>httpsessionlistener resolved my session persistence issue</title>
		<link>http://jaybose.com/archives/httpsessionlistener-resolved-my-session-persistence-issue/</link>
		<comments>http://jaybose.com/archives/httpsessionlistener-resolved-my-session-persistence-issue/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 14:16:51 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/httpsessionlistener-resolved-my-session-persistence-issue/</guid>
		<description><![CDATA[I&#8217;ve moved from Resin-3.0 to Tomcat-5.5 for a while now. So far, it&#8217;s actually been easier to deploy and run my web applications. However, I started to see some NotSerializableExceptions during shutdowns, and subsequent startups. After some research, it became clear that I was inadvertently storing Spring-proxied items into http sessions. If they still existed [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve moved from Resin-3.0 to Tomcat-5.5 for a while now. So far, it&#8217;s actually been easier to deploy and run my web applications. However, I started to see some NotSerializableExceptions during shutdowns, and subsequent startups. After some research, it became clear that I was <em>inadvertently</em> storing Spring-proxied items into http sessions. If they still existed during serialization of the current session, Tomcat would complain, being that Tomcat actually expects truly serializable items in its sessions - how dare they <img src='http://jaybose.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I knew the item being placed in the http session held a reference to a spring-wrapped DAO (the item&#8217;s a data view helper). So, after some cups of coffee it finally came to me: have my custom listener defined in the web.xml, which currently only implements <a href="http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletContextListener.html" target="_blank">ServletContextListener</a>, also implement <a href="http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpSessionListener.html#sessionDestroyed(javax.servlet.http.HttpSessionEvent)" target="_blank">HttpSessionListener</a>. With that, I was able clear out the culprit on <strong>sessionDestroyed(&#8230;)</strong>.  I wish all my technical problems were this straight forward.</p>
<p>Update: Anjan, in response to your question, I&#8217;m embedding the web.xml declaration and the actual Listener code. Hope this helps.</p>
<h4>web.xml listener declaration</h4>
<div style="overflow: scroll; width: 96%; background-color: lightgrey">
<pre>
<code>
   &lt;!--    Our custom system initializing listener     --&gt;
   &lt;listener&gt;
      &lt;listener-class&gt;com.some.company.SomeInitListener&lt;/listener-class&gt;
   &lt;/listener&gt;
</code>
</pre>
</div>
<h4>Listener Implementations</h4>
<div style="overflow: scroll; width: 96%; background-color: lightgrey">
<pre>
<code>
public class SomeInitListener extends BosenInitListener {

	private static final Logger LOG = Logger.getLogger(SomeInitListener.class);

	@Override
	protected void customInitForServlet(ServletContextEvent event) {
		super.customInitForServlet(event);

		ServletContext servletContext = event.getServletContext();
		SomeResourceInitializer resourceInitializer = (SomeResourceInitializer) getBean(servletContext, "resourceInitializer");

		// Make default menus
		String menuConfig = servletContext.getInitParameter(AppConstants.MENU_CONFIG);
		if (null != menuConfig) {
                    ...
		} else {
			LOG.warn("Could not find a menu configuration.");
		}

		resourceInitializer.init();
	}
}

public abstract class BosenInitListener implements ServletContextListener, HttpSessionListener {

	private static final Logger LOG = Logger.getLogger(BosenInitListener.class);

	public final void contextInitialized(final ServletContextEvent event) {
		String servletContextName = event.getServletContext().getServletContextName();
		if (LOG.isInfoEnabled()) {
			LOG.info("Initializing [ " + servletContextName + " ]");
		}

		customInitForServlet(event);

		if (LOG.isInfoEnabled()) {
			LOG.info("Initialized [ " + servletContextName + " ]nn");
		}
	}

	public final void contextDestroyed(final ServletContextEvent event) {
		String servletContextName = event.getServletContext().getServletContextName();
		if (LOG.isInfoEnabled()) {
			LOG.info("Destroying [ " + servletContextName + "]");
		}

		customDestroyForServlet(event);

		if (LOG.isInfoEnabled()) {
			LOG.info("Destroyed [ " + servletContextName + "]nn");
		}
	}

	protected void customInitForServlet(final ServletContextEvent event) {
		ServletContext servletContext = event.getServletContext();
		String appContextName = WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE;
		Object webCtxAttribute = servletContext.getAttribute(appContextName);
		if (null != webCtxAttribute) {
			if (webCtxAttribute instanceof Exception) {
				LOG.error(webCtxAttribute);
			}

		} else {
			throw new IllegalStateException("Could not read applicationContext.xml.");
		}
	}

	protected void customDestroyForServlet(final ServletContextEvent event) {
		//no-op
	}

	public final void sessionCreated(final HttpSessionEvent event) {
		String sessionId = event.getSession().getId();
		if (LOG.isDebugEnabled()) {
			LOG.debug("Initializing a new Session [" + sessionId + "]");
		}

		customInitForSession(event);

		if (LOG.isDebugEnabled()) {
			LOG.debug("Initialized a new Session [" + sessionId + "]");
		}
	}

	public final void sessionDestroyed(final HttpSessionEvent event) {
		String sessionId = event.getSession().getId();
		if (LOG.isDebugEnabled()) {
			LOG.debug("Destroying an existing Session [" + sessionId + "]");
		}

		customDestroyForSession(event);

		if (LOG.isDebugEnabled()) {
			LOG.debug("Destroyed an existing Session [" + sessionId + "]nn");
		}
	}

	protected void customInitForSession(final HttpSessionEvent event) {
		//no-op
	}

	protected void customDestroyForSession(final HttpSessionEvent event) {
		HttpSession session = event.getSession();
		session.removeValue(BosenConstants.SESSION_PAGINATED_SEARCH_RESULTS);
		session.removeAttribute(BosenConstants.SESSION_PAGINATED_SEARCH_RESULTS);
	}

	protected static ApplicationContext getApplicationContext(ServletContext servletContext) {
		String appContextName = WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE;
		return (ApplicationContext) servletContext.getAttribute(appContextName);
	}

	protected static Object getBean(ServletContext servletContext, String name) {
		return getApplicationContext(servletContext).getBean(name);
	}
</code>
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/httpsessionlistener-resolved-my-session-persistence-issue/feed/</wfw:commentRss>
		</item>
		<item>
		<title>openspaces developer challenge winners&#8230;</title>
		<link>http://jaybose.com/archives/openspaces-developer-challenge-winners/</link>
		<comments>http://jaybose.com/archives/openspaces-developer-challenge-winners/#comments</comments>
		<pubDate>Wed, 28 May 2008 16:51:19 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/openspaces-developer-challenge-winners/</guid>
		<description><![CDATA[Kudos to Jason Carreira! His DomainProxy entry to the OpenSpaces Developer Challenge earned him a finalist position.
One to watch: Leonardo Goncalves&#8217; Goods Donation System great idea that also made it to the finals. This could be a great help to many non-profits in the near future. Congrats to everyone who had the creativity and drive [...]]]></description>
			<content:encoded><![CDATA[<p>Kudos to Jason Carreira! His <a href="http://www.openspaces.org/display/DPY/DomainProxy">DomainProxy</a> entry to the <a href="http://www.openspaces.org/display/OS/OpenSpaces+Developer+Challenge">OpenSpaces Developer Challenge</a> earned him a finalist position.</p>
<p>One to watch: Leonardo Goncalves&#8217; <a href="http://www.openspaces.org/display/GDO/GoDo+-+Goods+Donation+System">Goods Donation System</a> great idea that also made it to the finals. This could be a great help to many non-profits in the near future. Congrats to everyone who had the creativity and drive to submit anything to the challenge. I&#8217;ll be watching to see who gets 1st&#8230;</p>
<p>See <a href="http://blog.gigaspaces.com/2008/05/28/openspaces-developer-challenge-winners/">here</a> for more info.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/openspaces-developer-challenge-winners/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JFrets&#8230;</title>
		<link>http://jaybose.com/archives/jfrets/</link>
		<comments>http://jaybose.com/archives/jfrets/#comments</comments>
		<pubDate>Wed, 07 May 2008 14:14:28 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/jfrets/</guid>
		<description><![CDATA[I&#8217;ve always thought about something like this, but never made a move. Here&#8217;s to Matt Warman going from clouds to code!


]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always thought about something like this, but never made a move. Here&#8217;s to <a href="http://java.dzone.com/news/jfrets-learning-play-guitar-ja" target="_blank">Matt Warman going from clouds to code!</a></p>
<p><a href="http://java.dzone.com/news/jfrets-learning-play-guitar-ja" title="JFrets…"></a></p>
<p style="text-align: center"><a href="http://java.dzone.com/news/jfrets-learning-play-guitar-ja" target="_blank" title="JFrets…"><img src="http://jaybose.com/wp-content/uploads/2008/05/jfrets-logo2.jpg" alt="JFrets…" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/jfrets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>next…</title>
		<link>http://jaybose.com/archives/next%e2%80%a6/</link>
		<comments>http://jaybose.com/archives/next%e2%80%a6/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 14:23:25 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/next%e2%80%a6/</guid>
		<description><![CDATA[Tonight I start my first GigaSpaces project. It’s been on my mind since last November, and it’s been building steam. Why do I need a JavaSpaces/OpenSpaces framework? This project is supposed to be for a larger user base (500+ to start), and based on my academic distributed computing experience, and the excellent posts on highscalability.com, [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I start my first <a href="http://www.gigaspaces.com/xapcommunity">GigaSpaces project</a>. It’s been on my mind since last November, and it’s been building steam. <a href="http://www.gigaspaces.com/LargeScaleWebApplications">Why do I need a JavaSpaces/OpenSpaces framework?</a> This project is supposed to be for a larger user base (500+ to start), and based on my academic distributed computing experience, and the excellent posts on <a href="http://highscalability.com/">highscalability.com</a>, I know I need to upgrade some of my current 3rd party libraries. For performance reasons, of course.</p>
<p>So, I’m going with Spring-2.5.3 for my AOP and DI needs; easy choice. Hibernate-3.2.6 for ORM (I’m staving off JPA, for as long as I can!). MySql-5.0 for database. The UI… Well, I haven’t decided. I know I have to start moving away from WebWork-2. This isn’t up for debate. But I’m torn between moving to <a href="http://struts.apache.org/2.x/">Struts-2</a> (familiarity) or JSF (component-based). I read this FAQ entry for the <a href="http://wiki.java.net/bin/view/Projects/JavaServerFacesSpecFaq#differences">differences between Struts-2 and JSF</a>.</p>
<p>Ehh&#8230; here’s to new things: I’m going with <strong>JSF</strong>. I’ll take a serious look at <a href="http://www.jboss.com/products/seam">Seam</a> and <a href="http://myfaces.apache.org/">MyFaces</a>.</p>
<p style="text-align: center">*****</p>
<p>Update: After some discussion, and further research, I&#8217;ve decided to hold off on using JSF. Since it&#8217;s a fairly mature, event-based API, I definitely see myself using it in the near future. However, since <em>scalability</em> is the currently highest priority, I&#8217;m <strong>compelled</strong> to go with Struts-2. This also allows me to upgrade all my existing WebWork-2 projects&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/next%e2%80%a6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>caucho&#8217;s got a facelift</title>
		<link>http://jaybose.com/archives/cauchos-got-a-facelift/</link>
		<comments>http://jaybose.com/archives/cauchos-got-a-facelift/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 17:29:03 +0000</pubDate>
		<dc:creator>Jay</dc:creator>
		
		<category><![CDATA[Technical stuff]]></category>

		<guid isPermaLink="false">http://jaybose.com/archives/cauchos-got-a-facelift/</guid>
		<description><![CDATA[You may, or may not know that I&#8217;m still a Resin user. Hence, every now and then I hit the Caucho site for documentation, mailing list archives, etc. Well today I decided to do just that; it had been at least a month since my last visit. I was pleased to see and cleaner and [...]]]></description>
			<content:encoded><![CDATA[<p>You may, or may not know that I&#8217;m still a <a href="http://caucho.com/products/resin.xtp">Resin</a> user. Hence, every now and then I hit the <a href="http://caucho.com/">Caucho</a> site for documentation, mailing list archives, etc. Well today I decided to do just that; it had been at least a month since my last visit. I was pleased to see and cleaner and brighter interface, and <a href="http://blog.caucho.com/">even a blog</a>. I&#8217;m taking this to mean there&#8217;s some new life in the Caucho&#8217;s/Resin&#8217;s development group (or at least their marketing). I for one am happy to see it!</p>
]]></content:encoded>
			<wfw:commentRss>http://jaybose.com/archives/cauchos-got-a-facelift/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
