<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3343991232268303219</id><updated>2012-02-10T14:35:14.632-08:00</updated><category term='CDK'/><category term='JavaEE'/><category term='java ee 6'/><category term='ldap'/><category term='jsf2'/><category term='seam'/><category term='cdi'/><category term='glassfish'/><category term='maven'/><category term='JSF'/><category term='RF42'/><category term='mvn'/><category term='RF41'/><category term='migrate'/><category term='hudson'/><category term='hg'/><category term='mod_jk'/><category term='mercurial'/><category term='RichFaces'/><category term='validation'/><category term='svn'/><category term='subversion'/><title type='text'>Java EE - Experiences of a developer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-6764051520279193033</id><published>2012-02-08T08:23:00.000-08:00</published><updated>2012-02-08T08:23:33.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF42'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.2.0.CR1 Release Announcement</title><content type='html'>I’m excited to announce the availability of RichFaces &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318573"&gt;4.2.0.CR1&lt;/a&gt;, our release candidate for RichFaces 4.2.0. &amp;nbsp;Hot on the heels of the RichFaces &lt;a href="http://blog.bleathem.ca/2011/12/richfaces-410final-release-announcement.html"&gt;4.1 release&lt;/a&gt;, Richfaces 4.2 delivers some "missing" components migrated from RichFaces 3, and offers usability and API improvements for those looking to take advantage of our resource loading optimizations, and push API. &amp;nbsp;Not to forget a significant number of bug fixes, and overall usability improvements.&lt;br /&gt;
&lt;br /&gt;
To try out this release, you can download the distribution &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;directly&lt;/a&gt;, or for maven users, increment the RichFaces version in your pom.xml to 4.2.0.CR1. For more information on setting up a RichFaces 4 application, refer to our &lt;a href="http://community.jboss.org/wiki/GettingstartedwithRichFaces4x"&gt;getting started guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Let’s begin our look at the RichFaces 4.2.0.CR1 release with a look at the new components: rich:contextMenu and rich:hotKey.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;New Component - rich:contextMenu&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
The &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=contextMenu"&gt;rich:contextMenu&lt;/a&gt; component provides hierarchical context menu system similar to those found in many desktop applications, and was widely sought after by our community with a significant number of &lt;a href="https://issues.jboss.org/browse/RF-10197"&gt;votes&lt;/a&gt; in our issue tracker. &amp;nbsp;I’d like to thank our loyal and persistent community for identifying the gaps in our RichFaces 3 -&amp;gt; Richfaces 4 migration story, and assure you that we will continue to work diligently to ease the migration process.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-atGXgv8oa6U/TzKG297IIaI/AAAAAAAAAok/xxUIa-aiK8Y/s1600/contextMenu.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-atGXgv8oa6U/TzKG297IIaI/AAAAAAAAAok/xxUIa-aiK8Y/s1600/contextMenu.png" /&gt;&lt;/a&gt;The rich:contextMenu itself is built on top of the existing rich:dropDownMenu implementation, making it a natural fit into the RichFaces 4 component set. &amp;nbsp;The rich:contextMenu has 3 modes of operation client, ajax, and server, and integrates with the row/node selection capabilities of the rich:extendedDataTable and rich:tree components. &amp;nbsp;The RichFaces showcase includes &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=contextMenu"&gt;examples&lt;/a&gt; of each of these features.&lt;br /&gt;
&lt;br /&gt;
The RichFaces 3 feature of "macrosubstituion" (client side string replacement) for the contextMenu has been so far omitted from the feature, but is being racked via jira (&lt;a href="https://issues.jboss.org/browse/RF-11842"&gt;RF-11842&lt;/a&gt;). &amp;nbsp;Be sure to vote for this issue if you feel it’s important to include in a future Richfaces 4 release. &amp;nbsp;Likewise, be sure to file any jira issues should you have additional use-cases we’ve overlooked.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;New Component - rich:hotKey&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
The &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=hotKey"&gt;rich:hotKey&lt;/a&gt; component is another ported Richfaces 3 component we are making available with our 4.2.0.CR1 release. &amp;nbsp;The rich:hotKey component allows one to register a "hot key" on the page (or on a particular component) to execute some logic when the registered key-combination is pressed. &amp;nbsp;This is functionality is often sought after in "heads down" data entry style applications, but is also valuable in any use case where one wants to enable "mouse free" operations. &amp;nbsp;Many thanks to &lt;a href="https://community.jboss.org/people/ilya_shaikovsky"&gt;Ilya Shaikovsky&lt;/a&gt; for the pull request porting this feature to Richfaces 4.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Improvements - a4j:push&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
The a4j:push component has seen some attention, improving it’s usability with this release. &amp;nbsp;First and foremost is our decision to turn off JMS integration by default - as of RichFaces 4.2.0, JMS integration must be explicitly turned on (&lt;a href="https://issues.jboss.org/browse/RF-11892"&gt;RF-11892&lt;/a&gt;). &amp;nbsp;This breaking change was introduced to ease the on-boarding of new users with push technology, as the component now works in both Servlet and EE containers out-of-the-box. &amp;nbsp;Those who want to leverage the benefit of JMS integration will now have to explicitly enable it with the contextParam in your web.xml:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;context-param&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-name&amp;gt;org.richfaces.push.jms.enabled&amp;lt;/param-name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Another usability improvement has been the introduction of on-demand topic creation (&lt;a href="https://issues.jboss.org/browse/RF-11483"&gt;RF-11483&lt;/a&gt;). &amp;nbsp;The significance of this change is that you no longer need to implement a ServletContextListener, initializing your topics at application startup time. &amp;nbsp;Instead, topics will be created on first access. &amp;nbsp;Similarly, the push component itself will be initialized on first use.&lt;br /&gt;
&lt;br /&gt;
However, when using push outside of the FacesContext threads (JMS-end points, timers, etc.) you will need to continue initializing push on startup, so that the push feature has a reference to the right contexts when called from those external threads. &amp;nbsp;To do so, enable the &amp;nbsp;context-param org.richfaces.push.initializeOnStartup in your web.xml.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://community.jboss.org/people/lfryc"&gt;Lukas Fryc&lt;/a&gt;&amp;nbsp;has a great &lt;a href="http://rik-ansikter.blogspot.com/2012/02/configuring-richfaces-push-with-42.html"&gt;blog post&lt;/a&gt; giving an introduction to using the 4.2 a4j:push technology. &amp;nbsp;We'll have the Developer Guide updated with a complete description of using this feature in time for the 4.2.0.Final release.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Resource Loading&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
With our 4.1 release, we introduced our resource loading optimisation feature. &amp;nbsp;Unfortunately, we conflated the ideas of resource mapping, with resource minification/packaging. &amp;nbsp;There are valid use cases to enable resource mapping, while requiring neither minification, nor packaging, such as providing your own patched version of jsf.js, or even replacing the packaged version of jQuery with your own.&lt;br /&gt;
&lt;br /&gt;
To better reflect these use cases, we re-worked the context-params that enable the feature, renaming them to clarify their purpose, and introduced a resource mapping file (independent of the mapping file used with resource packaging - &lt;a href="https://issues.jboss.org/browse/RF-11909"&gt;RF-11909&lt;/a&gt;). &amp;nbsp;The 4.1 context-params map into the new 4.2 context-params as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;div dir="ltr"&gt;
&lt;table&gt;&lt;colgroup&gt;&lt;col width="*"&gt;&lt;/col&gt;&lt;col width="*"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;
&lt;b&gt;RichFaces 4.1 context-param&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;RichFaces 4.2 context-param&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;
org.richfaces.resourceMapping.enabled&lt;/div&gt;
&lt;/td&gt;&lt;td&gt;→&lt;/td&gt;&lt;td&gt;org.richfaces.resourceOptimization.enabled&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;
org.richfaces.resourceMapping.compressedStages&amp;nbsp;&lt;span style="text-align: right;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td&gt;→&lt;/td&gt;&lt;td&gt;org.richfaces.resourceOptimization.compressionStages&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;
org.richfaces.resourceMapping.packedStages&lt;span style="text-align: right;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td&gt;→&lt;/td&gt;&lt;td&gt;org.richfaces.resourceOptimization.packagingStages&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: The 4.1 context-params will work in 4.2, they will be removed in a subsequent release&lt;br /&gt;
&lt;br /&gt;
The significance of this, it that application developers can now create a simple mapping file, overriding the individual entries of the default mapping file without having to re-execute the whole packaging/minification process.&lt;br /&gt;
&lt;br /&gt;
Look forward to some forthcoming blog posts detailing how to make use of the Resource Loading optimisations in RichFaces. &amp;nbsp;We'll also have the docs updated in time for the 4.2.0.Final release.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Skinning Improvement - Rounded Corners&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-v02aBkC379s/TzKHO9yQmkI/AAAAAAAAAos/V3SvP-oE2UU/s1600/round2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="261" src="http://1.bp.blogspot.com/-v02aBkC379s/TzKHO9yQmkI/AAAAAAAAAos/V3SvP-oE2UU/s400/round2.png" width="400" /&gt;&lt;/a&gt;A pull request from a community member (&lt;a href="https://community.jboss.org/people/gonzalad"&gt;Adrian Gonzalez&lt;/a&gt;) enables round corner support in the RichFaces skins (&lt;a href="https://issues.jboss.org/browse/RF-11848"&gt;RF-11848&lt;/a&gt;). &amp;nbsp;&amp;nbsp;This feature takes advantage of the &lt;a href="http://www.w3schools.com/cssref/css3_pr_border-radius.asp"&gt;border-radius&lt;/a&gt; CSS 3 property, and so will only work with compatible browsers - with a safe fall back to square corners in browsers that don’t support this CSS property. &amp;nbsp;The screenshot below demonstrates what the RichFaces showcase looks like, with round corner support enabled.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enable round-corner support for your skin set the panelBorderRadius property of your skin to the desired border-radius value.&lt;br /&gt;
&lt;br /&gt;
Note: panelBorderRadius is not used in any of the out-of-the box 4.2 themes&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Miscellaneous fixes&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
A number of other notable improvements include:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;jQuery upgraded to v1.7.1 (&lt;a href="https://issues.jboss.org/browse/RF-11838"&gt;RF-11838&lt;/a&gt;)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Fixes the "event.layerX and event.layerY" deprecation warning in Google Chrome&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;RichFaces available via maven central (&lt;a href="https://issues.jboss.org/browse/RFPL-1800"&gt;RFPL-1800&lt;/a&gt;)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;No longer is it required to define the JBoss nexus repository in your settings.xml to consume richfaces maven artifacts&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Mobile tweaks&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;improvements to the &lt;a href="https://community.jboss.org/wiki/GettingStartedWithMobileRichFaces"&gt;mobile getting started guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;component specific usability improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Spring Webflow compatibility (&lt;a href="https://issues.jboss.org/browse/RF-11806"&gt;RF-11806&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;a4j:actionListener example in the showcase&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;omitted in our initial release of the showcase, an example of &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=actionListener"&gt;a4j:actionListener&lt;/a&gt; usage has been added to the 4.2 showcase&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Build improvements&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;The dependency management across all the projects’ poms has been cleaned up and centralized&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Moving forward&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
With RichFaces 4.2.0.CR1 in the hands of our community, we look forward to hearing your feedback on this release, particularly if we missed any regressions. &amp;nbsp;Should 4.2.0.CR1 be well accepted by our community members, we will release RichFaces 4.2.0.Final as a simple respin of CR1. &amp;nbsp;In the mean time we will work on getting our 4.2 docs finalized, including an effort to fill in the missing attribute descriptions of our tag library documentation (VDL doc).&lt;br /&gt;
&lt;br /&gt;
Looking beyond 4.2, we will consolidate many of the great ideas brought forward in our "&lt;a href="https://community.jboss.org/thread/175973"&gt;4.3 and beyond&lt;/a&gt;" planning discussion into a project roadmap, and start some prototyping to spearhead our new initiatives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-6764051520279193033?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/6764051520279193033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2012/02/richfaces-420cr1-release-announcement.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6764051520279193033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6764051520279193033'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2012/02/richfaces-420cr1-release-announcement.html' title='RichFaces 4.2.0.CR1 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-atGXgv8oa6U/TzKG297IIaI/AAAAAAAAAok/xxUIa-aiK8Y/s72-c/contextMenu.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-5309559212676531981</id><published>2011-12-13T10:22:00.000-08:00</published><updated>2011-12-14T08:49:51.846-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.Final Release Announcement</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-oNagvCR2puw/TueWaQ-Kg1I/AAAAAAAAAPM/SVD3rOFQ6wA/s1600/richfaces.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-oNagvCR2puw/TueWaQ-Kg1I/AAAAAAAAAPM/SVD3rOFQ6wA/s1600/richfaces.png" /&gt;&lt;/a&gt;&lt;/div&gt;
I’m thrilled to announce the release of RichFaces &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318600"&gt;4.1.0.Final&lt;/a&gt;. It’s been a long road from 4.0 to 4.1, with a significant train of &lt;a href="http://blog.bleathem.ca/search/label/RF41"&gt;milestone releases&lt;/a&gt; along the way. The journey was worth it though, with a significant 4.1 release building on top of the successful &lt;a href="http://in.relation.to/Bloggers/RichFaces400FinalReleased"&gt;4.0.0.Final&lt;/a&gt; release, providing: additional components migrated from the RichFaces 3 component set, altogether new components, and significant enhancements to the framework feature set.&lt;br /&gt;
&lt;br /&gt;
To try out this release you can download the distribution &lt;a href="http://www.jboss.org/richfaces/download/stable"&gt;directly&lt;/a&gt;, or for maven users increment the RichFaces version in your pom.xml to 4.1.0.Final. For more information on setting up a RichFaces 4 application, refer to our&lt;a href="http://community.jboss.org/wiki/GettingstartedwithRichFaces4x"&gt; getting started guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Let’s dive in, and look at some of the details of what’s new in RichFaces 4.1!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;New Components&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-e126Vf9PVgQ/TueWZUAZxsI/AAAAAAAAAO8/BBI5C-czUb0/s1600/editor.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="153" src="http://3.bp.blogspot.com/-e126Vf9PVgQ/TueWZUAZxsI/AAAAAAAAAO8/BBI5C-czUb0/s320/editor.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
We’ve delivered a number of new components in this release: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=editor"&gt;rich:editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=pickList"&gt;rich:pickList&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=orderingList"&gt;rich:orderingList&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=notify"&gt;rich:notify&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Not only have we migrated forward more RichFaces 3.x components, but we’re also providing an altogether new component - the notify component - put together by &lt;a href="http://community.jboss.org/people/blabno"&gt;Bernard Labno&lt;/a&gt;, a RichFaces community member.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Mobile Compatible Components&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-f5HeJyZvrVY/TueWZ4jcT2I/AAAAAAAAAPE/4QGgrwOKGKs/s1600/mobile.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-f5HeJyZvrVY/TueWZ4jcT2I/AAAAAAAAAPE/4QGgrwOKGKs/s320/mobile.png" width="216" /&gt;&lt;/a&gt;We’ve leveraged HTML 5 and CSS 3 to create a set of resources that make the existing RichFaces components mobile compatible. Check out the results yourself in our &lt;a href="http://showcase.richfaces.org/"&gt;mobile showcase&lt;/a&gt; with your webkit-based mobile phone, (or checkout the mobile showcase &lt;a href="http://showcase.richfaces.org/phoneHome.jsf"&gt;directly&lt;/a&gt; with your desktop browser). &lt;br /&gt;
&lt;br /&gt;
We’ve put together a &lt;a href="http://community.jboss.org/wiki/GettingStartedWithMobileRichFaces"&gt;comprehensive guide&lt;/a&gt; detailing how you can take advantage of this approach with your own applications, and deliver a modern mobile application today - leveraging your existing skillset and investments in both JSF and Richfaces.&lt;br /&gt;
&lt;br /&gt;
Not all the components make sense in a mobile environment, and not all mobile browsers are equally capable. Be sure to also take a look at our &lt;a href="http://community.jboss.org/wiki/RichFaces410xMobileSkinPlanningDesign"&gt;mobile design document&lt;/a&gt;, outlining the choices and compromises we had to make.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Showcase&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Along with this new mobile face, the Richfaces &lt;a href="http://showcase.richfaces.org/"&gt;showcase&lt;/a&gt; has undergone a number of additional significant changes. &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-WpRKGScr7rE/TueW0MCJg7I/AAAAAAAAAPU/jgq8MUBHK3M/s1600/showcase.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="162" src="http://2.bp.blogspot.com/-WpRKGScr7rE/TueW0MCJg7I/AAAAAAAAAPU/jgq8MUBHK3M/s320/showcase.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
We’ve deployed the showcase to &lt;a href="https://openshift.redhat.com/"&gt;OpenShift&lt;/a&gt;, Red Hat’s PasS offering. The OpenShift Java EE 6 support provides a great platform to take your application all the way from development with Express (free!) to production with Flex (highly scalable!). For the RichFaces project, this gives us the chance to showcase our components in a Java EE environment, where our framework really shines!&lt;br /&gt;
&lt;br /&gt;
We’ve also included samples for the new components listed above, as well as a &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=push"&gt;rich:push&lt;/a&gt; component sample, keeping it straightforward to incorporate advanced RichFaces components in your application. Lastly, a number of bug fixes and simple improvements throughout the showcase have overall improved the user experience of the showcase itself.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Individual component improvements&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
I’d like to single out a few component enhancements from this release: &lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=push"&gt;rich:push&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Push has been de-coupled from JMS, allowing RichFaces users to take advantage of push technology in non-JMS (ie. servlet) environments. &lt;/dd&gt;
&lt;dd&gt;A CDI API has been provided for firing push events - aligning the push component with the standardized Java EE programming model&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=fileUpload"&gt;rich:fileUpload&lt;/a&gt; &lt;br /&gt;
&lt;/dt&gt;
&lt;dd&gt;Some events that were missing from the 4.0 release have been added, including the onclear event &lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=dragDrop"&gt;drag and drop&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;A bug with dynamically rendering of drag sources and drop targets has been resolved, improving drag/drop functionality in components like the rich:tree &lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=extendedDataTable"&gt;rich:extendedDataTable&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;For those creating RichFaces skins, you’ll be happy to hear we replaced the cellpadding and cellspacing attributes of the extended datatable with CSS equivalents, allowing skins to override the values&lt;/dd&gt;
&lt;/dl&gt;
For a complete listing of issues resolved, refer to the release notes of each of the milestone releases: &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12315856"&gt;4.1.0.M1&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12316708"&gt;4.1.0.M2&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318072"&gt;4.1.0.M3&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12317054"&gt;4.1.0.M4&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12317055"&gt;4.1.0.CR1&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318315"&gt;4.1.0.CR2&lt;/a&gt;, &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318600"&gt;4.1.0.Final&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Resource packaging&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Another great feature with this release is the Resource packaging and minification. An absolute necessity when developing for mobile applications, this feature can provide performance improvements to your desktop applications as well by dramatically reducing the number of javascript and CSS files the browser client has to download. Read the &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Developer_Guide/en-US/html/chap-Developer_Guide-Advanced_features.html#sect-Developer_Guide-Advanced_features-Resource_loading_strategies"&gt;docs&lt;/a&gt; to see how you can activate this for your applications. &lt;br /&gt;
&lt;br /&gt;
For those looking for the RichFaces 3 LOAD_NONE capability, you can use this resource minification &lt;a href="http://community.jboss.org/wiki/WorkaroundForLOADNONEResourceLoadingStrategyInRichFaces41"&gt;configuration&lt;/a&gt; to achieve the same results.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Source hosted on github&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-Y8lzW212UH4/TueXjAO0ULI/AAAAAAAAAPc/A5HQuV9i20Q/s1600/Octocat.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-Y8lzW212UH4/TueXjAO0ULI/AAAAAAAAAPc/A5HQuV9i20Q/s200/Octocat.png" width="200" /&gt;&lt;/a&gt;A significant achievement early in the 4.1 development process was the migration of our source code version control system from svn to git, specifically hosted on &lt;a href="http://github.com/richfaces"&gt;github.com&lt;/a&gt;. We noticed significant advantages to using git, both within our team, and in our collaboration with community members. Git’s ability to enable a sophisticated workflow, and encourage community contribution in the form of pull requests has made “bit management” a pleasurable task.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Other noteworthy items&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
It’ worth pointing out that RichFaces 4.1 ships with an updated jQuery release (v. 1.6.4). Keeping the jQuery release version up-to-date facilitates RichFaces inter-operability with other jQuery plugins.&lt;br /&gt;
&lt;br /&gt;
RichFaces 4.1 works with a number of &lt;a href="http://community.jboss.org/wiki/PrioritizedRichFacesBrowsersCompatibilityMatrix"&gt;modern browsers&lt;/a&gt;, however it currently requires Internet explorer 9 to be run in compatibility mode, due to an upstream &lt;a href="http://java.net/jira/browse/JAVASERVERFACES-2063"&gt;mojarra issue&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Documentation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Lastly, I’d like to remind everyone of the availability of the RichFaces &lt;a href="http://www.jboss.org/richfaces/docs"&gt;documentation&lt;/a&gt;:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Developer_Guide/"&gt;Developer guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Component_Reference/"&gt;Component reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/vdldoc/"&gt;VDL tag library doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/javadoc/"&gt;javadoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/"&gt;Showcase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://community.jboss.org/wiki/richfaceswikihomepage"&gt;Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://community.jboss.org/wiki/PrioritizedRichFacesBrowsersCompatibilityMatrix"&gt;Browser compatibility matrix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
These docs are a great resource detailing how to make use of the RichFaces framework in your application. They are however an ongoing effort, with some specific areas that need improvement. Specifically we need to flesh out the descriptions of the VDL tag library doc (note: the attribute listing is complete), and we need to vet the migration guide. This is a great way to get involved, should you want to contribute to the project!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Looking Forward&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
In a recent &lt;a href="http://blog.bleathem.ca/2011/12/state-of-richfaces.html"&gt;blog post&lt;/a&gt;, I laid out a strategy for the future of the RichFaces project, and extended an invitation to all who would like to &lt;a href="http://community.jboss.org/thread/175973"&gt;have a say in future directions&lt;/a&gt; in our development forum. While RichFaces 4.1 undoubtedly provides some great fixes and features, we are excited about the future direction of the project, and what we can offer moving forward!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-5309559212676531981?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/5309559212676531981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/12/richfaces-410final-release-announcement.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5309559212676531981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5309559212676531981'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/12/richfaces-410final-release-announcement.html' title='RichFaces 4.1.0.Final Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-oNagvCR2puw/TueWaQ-Kg1I/AAAAAAAAAPM/SVD3rOFQ6wA/s72-c/richfaces.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-3723033787021283658</id><published>2011-12-09T08:45:00.001-08:00</published><updated>2011-12-09T09:27:24.571-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>State of the RichFaces</title><content type='html'>&lt;br /&gt;
With a RichFaces &lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12318600"&gt;4.1.0.Final&lt;/a&gt; release on the horizon, now is a good time to talk about the future of the project. Let me start by announcing that I will be taking over from &lt;a href="http://in.relation.to/Bloggers/ChangingOfTheGuardWithRichFaces41"&gt;Jay Balunas&lt;/a&gt; as lead of the &lt;a href="http://www.jboss.org/richfaces/"&gt;RichFaces project&lt;/a&gt;. Jay has been a long-time shepherd of RichFaces from within &lt;a href="http://www.jboss.org/"&gt;JBoss&lt;/a&gt;, and has had a direct hand in making the project such a great success. Jay has been a terrific mentor and while he is stepping down as the project lead, he will continue to stay involved, sharing his insight and experience with the Richfaces team. He will just no longer get the final word ;)&lt;br /&gt;
&lt;br /&gt;
Moving forward, I would like to see the project continue to focus on the key strengths that have made RichFaces such a great project to be involved with: innovation, open standards, community, and quality.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Innovation&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-vjtDzI_LeHM/TuJB-MjPiLI/AAAAAAAAAN8/ivQ4ggJY6zc/s1600/showcase.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="202" src="http://3.bp.blogspot.com/-vjtDzI_LeHM/TuJB-MjPiLI/AAAAAAAAAN8/ivQ4ggJY6zc/s400/showcase.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
RichFaces has long been the place to come for JSF innovation. Never content to simply provide a JSF component set, the RichFaces project (together with other JBoss projects) has always aimed to provide developers with a complete JSF framework for developing applications. Some of these innovations include:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Pioneering JSF ajax support&lt;/li&gt;
&lt;li&gt;&lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=clientValidation&amp;amp;skin=blueSky"&gt;Client side validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ajax &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=push&amp;amp;skin=blueSky"&gt;Push component&lt;/a&gt; - leveraging websockets where available&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://community.jboss.org/wiki/RichFacesCDKHowTos"&gt;CDK&lt;/a&gt; (Component Development Kit) - in RF 4 the CDK builds on top of the &lt;a href="http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/#composite-components"&gt;JSF 2 composite components&lt;/a&gt; feature&lt;/li&gt;
&lt;li&gt;Support for &lt;a href="http://community.jboss.org/wiki/GettingStartedWithMobileRichFaces"&gt;mobile&lt;/a&gt; browsers in our base component set&lt;/li&gt;
&lt;li&gt;Resource &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Developer_Guide/en-US/html/chap-Developer_Guide-Advanced_features.html#sect-Developer_Guide-Advanced_features-Resource_loading_strategies"&gt;packaging and minification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Advanced &lt;a href="http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=queue&amp;amp;skin=blueSky"&gt;queuing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sophisticated tooling support (together with &lt;a href="http://www.jboss.org/tools"&gt;JBoss tools&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Open Standards&lt;/b&gt;&lt;/div&gt;
Richfaces has played a significant role in improving the &lt;a href="http://javaserverfaces-spec-public.java.net/"&gt;JSF specification&lt;/a&gt; with contributions to JSF 2.0, particularly in the area of ajax integration. RichFaces also aims to improve the standards story by integrating JSF with other Java EE standards in some of the same innovations mentioned above:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Client side validation brings &lt;a href="http://jcp.org/en/jsr/detail?id=303"&gt;Bean Validation&lt;/a&gt; into the client environment&lt;/li&gt;
&lt;li&gt;The push component couples JMS messaging with our JSF component set&lt;/li&gt;
&lt;li&gt;The push component also leverages &lt;a href="http://jcp.org/en/jsr/summary?id=299"&gt;CDI&lt;/a&gt;, providing building on the standardized Java EE programming model&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Community&lt;/b&gt;&lt;br /&gt;
RichFaces is also very much a community oriented project. Both our development and planning efforts are done out in the open, with an open door to anyone who wants to help out. Some of the ways we actively work to facilitate community interaction include:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="http://www.jboss.org/index.html?module=bb&amp;amp;op=viewforum&amp;amp;f=261"&gt;user forum&lt;/a&gt; with an incredible amount of traffic&lt;/li&gt;
&lt;li&gt;Weekly &lt;a href="http://community.jboss.org/en/richfaces/dev/teammtgs"&gt;team meetings&lt;/a&gt; held openly in IRC&lt;/li&gt;
&lt;li&gt;A &lt;a href="http://www.jboss.org/index.html?module=bb&amp;amp;op=viewforum&amp;amp;f=262"&gt;developer forum&lt;/a&gt; - where new ideas for the framework are worked out&lt;/li&gt;
&lt;li&gt;Active use of social media (&lt;a href="http://twitter.com/#!/richfaces"&gt;twitter&lt;/a&gt;, &lt;a href="https://plus.google.com/u/0/115573055688754345457"&gt;Google+&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/richfaces"&gt;Github&lt;/a&gt; hosting - facilitating community contributions&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Quality&lt;/b&gt;&lt;br /&gt;
RichFaces is a very well tested project, with a dedicated QE team that continually writes new tests for the framework, and ensures that existing tests continue to pass in their automated runs. Look forward to some upcoming blog posts, where we will expand on our testing strategy, and speak to the industry leading role JBoss is taking with projects like &lt;a href="http://www.jboss.org/arquillian"&gt;Arquillian&lt;/a&gt;, &lt;a href="http://www.jboss.org/jsfunit"&gt;JSFUnit&lt;/a&gt;, and how we build on that with RichFaces. This all comes together in a robust, &lt;a href="http://www.jboss.com/"&gt;enterprise-ready platform&lt;/a&gt; on which you can develop and deploy your applications.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Moving Forward&lt;/b&gt;&lt;br /&gt;
Moving forward we plan to keep up this pace of innovation with our 4.Next efforts. The &lt;a href="http://showcase.richfaces.org/"&gt;existing component set&lt;/a&gt; is crucial to the project, and will continue to see new improvements and additions - but we need a new vehicle to deliver new components faster and more effectively. We would like to be able to better leverage the mountain of work done in other OSS projects in the javascript component space, and facilitate contributions from prospective contributors looking to implement their own “critical components”. To this end, we are proposing the addition of another component set in the RichFaces project.&lt;br /&gt;
&lt;br /&gt;
This new component sub-project will leverage existing javascript code where possible, either directly, or by composing them into new components. Where use cases require, we will continue to develop new components, contributing back to upstream javascript projects wherever possible. This idea is currently at a proposal stage, with a proof-of-principle demonstrated my recent &lt;a href="http://blog.bleathem.ca/search/label/CDK"&gt;CDK blog series&lt;/a&gt;. Join us in the developer forums, as we &lt;a href="http://community.jboss.org/thread/175973"&gt;work out the details&lt;/a&gt; of how to build this next-generation component set.&lt;br /&gt;
&lt;br /&gt;
Thanks to all of you for your interest and contributions to the project, feel free to ping me in the &lt;a href="http://community.jboss.org/en/richfaces/dev?view=discussions"&gt;forums&lt;/a&gt;, IRC (in #richfaces), &lt;a href="http://twitter.com/#!/brianleathem"&gt;twitter&lt;/a&gt; or anywhere for that matter should you want to discuss how you can contribute to the project, and help shape it into what you need it to be!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-3723033787021283658?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/3723033787021283658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/12/state-of-richfaces.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/3723033787021283658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/3723033787021283658'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/12/state-of-richfaces.html' title='State of the RichFaces'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-vjtDzI_LeHM/TuJB-MjPiLI/AAAAAAAAAN8/ivQ4ggJY6zc/s72-c/showcase.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-4081285621233489060</id><published>2011-12-06T09:57:00.001-08:00</published><updated>2011-12-06T10:25:54.155-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.CR2 Release Announcement</title><content type='html'>&lt;br /&gt;
We are announcing the release of RichFaces &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12318315"&gt;4.1.0.CR2&lt;/a&gt;, a second release candidate for RichFaces 4.1. We had a couple of &lt;a href="https://issues.jboss.org/secure/IssueNavigator.jspa?reset=true&amp;amp;jqlQuery=project+%3D+RF+AND+fixVersion+%3D+%224.1.0.CR2%22+AND+component+%3D+regression"&gt;regressions&lt;/a&gt; that were introduced in the &lt;a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12310341&amp;amp;version=12317055"&gt;4.1.0.CR1&lt;/a&gt; release that we’ve addressed in the with this CR2 release. The expectation is that CR2 will be re-tagged and released as 4.1.0.Final, provided no blocking issues are found. Our QE team has done a great job running their test suite against this release, but I encourage as many community members as possible to download the CR2 release, and make sure it’s “up to snuff”!&lt;br /&gt;
&lt;br /&gt;
To try out this release, you can download the distribution &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;directly&lt;/a&gt;, or for maven users increment the RichFaces version in your pom.xml to 4.1.0.CR2. For more information on setting up a RichFaces 4 application, refer to our &lt;a href="http://community.jboss.org/wiki/GettingstartedwithRichFaces4x"&gt;getting started guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Noteworthy changes&lt;/b&gt;&lt;br /&gt;
In addition to addressing the above regressions, our CR2 release has addressed a couple other noteworthy issues.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;showcase tweaks: improving the user experience on both desktop and mobile&lt;/li&gt;
&lt;li&gt;archetype improvements: including the addition of an option for creating a mobile project&lt;/li&gt;
&lt;li&gt;skins: warning messages had an unreadable color on a white background - (warningColor) [&lt;a href="https://issues.jboss.org/browse/RF-11673"&gt;RF-11673&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:inplaceInput: a fix for client side validation [&lt;a href="https://issues.jboss.org/browse/RF-11633"&gt;RF-11633&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:dataTable: a fix for a regression effecting component decoding [&lt;a href="https://issues.jboss.org/browse/RF-11675"&gt;RF-11675&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:calendar: a fix for a regression selecting dates in the popup [&lt;a href="https://issues.jboss.org/browse/RF-11677"&gt;RF-11677&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:pickList: a bug converting java arrays when used as backing beans [&lt;a href="https://issues.jboss.org/browse/RF-11680"&gt;RF-11680&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:fileUpload: A bug where the list of files in the event omitted the submitted files [&lt;a href="https://issues.jboss.org/browse/RF-11744"&gt;RF-11744&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;rich:extendedDataTable: removed cellpadding/cellspacing from EDT, replaced with appropriate CSS [&lt;a href="https://issues.jboss.org/browse/RF-11759"&gt;RF-11759&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Please test drive this second release candidate, and give us your feedback in either the forums or with our issue tracker. We’ll soon have a 4.1.0.Final release we all can be proud of, for the work we put into it as a community!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-4081285621233489060?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/4081285621233489060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/12/richfaces-410cr2-release-announcement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4081285621233489060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4081285621233489060'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/12/richfaces-410cr2-release-announcement.html' title='RichFaces 4.1.0.CR2 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-6290752644473753531</id><published>2011-11-29T15:26:00.001-08:00</published><updated>2011-11-30T06:58:06.380-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CDK'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 CDK | jQeury UI Tabs</title><content type='html'>Following on with another entry in my &lt;a href="http://blog.bleathem.ca/search/label/CDK"&gt;CDK series&lt;/a&gt;, this time we will look at at creating a pair of components to wrap the &lt;a href="http://jqueryui.com/demos/tabs/"&gt;jQuery UI tabs plugin&lt;/a&gt; with the RichFaces CDK. It'll take two components to accomplish this; one component to define the tab container, and another to define the tabs themselves. Let's dive right in with a look at the Abstract component definitions.&lt;br /&gt;
&lt;br /&gt;
As always, if you are interested in following along in your IDE, you can get the code below on &lt;a href="https://github.com/bleathem/CDK-examples"&gt;github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Component Classes&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;AbstractTabs.java&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;package ca.bleathem.richfaces.jquery.component;

import org.richfaces.cdk.annotations.*;

import javax.faces.component.UIComponent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@JsfComponent(
        type = "ca.bleathem.richfaces.jquery.Tabs",
        family = "ca.bleathem.Tabs",
        renderer = @JsfRenderer(type = "ca.bleathem.jquery.TabsRenderer"),
        tag = @Tag(name="tabs"))
abstract public class AbstractTabs extends javax.faces.component.UIPanel {
}

&lt;/pre&gt;
Here we have the component class for tor the &lt;i&gt;tabs&lt;/i&gt; tag - this will be the container for the &lt;i&gt;tab&lt;/i&gt; components that follow. This is strikingly similar to the earlier &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html"&gt;AbstractHello&lt;/a&gt; component we saw in our first CDK example. The component class is serving as a placeholder to define the component properties (type, family, tag) , and the renderer associations. Look back through the previous blogs in &lt;a href="http://blog.bleathem.ca/search/label/CDK"&gt;this series&lt;/a&gt; if you don't recognize these properties.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;AbstractTab.java&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;package ca.bleathem.richfaces.jquery.component;

import org.richfaces.cdk.annotations.*;

@JsfComponent(
        type = "ca.bleathem.richfaces.jquery.Tab",
        family = "ca.bleathem.Tab",
        renderer = @JsfRenderer(type = "ca.bleathem.jquery.TabRenderer"),
        tag = @Tag(name="tab"))
abstract public class AbstractTab extends javax.faces.component.UIPanel {
    @Attribute
    public abstract String getTitle();
}
&lt;/pre&gt;
The component class for the &lt;i&gt;tab&lt;/i&gt; tag is similar to the one for the &lt;i&gt;tabs&lt;/i&gt; tag, adding a definition for a &lt;i&gt;title&lt;/i&gt; attribute, and with slightly different component properties. Let's move on from these mundane component definitions and look at the Renderers, where things get more interesting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Renderers&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Looking first at the simpler &lt;i&gt;tab&lt;/i&gt; renderer:&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;tab.template.xhtml&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;cdk:root xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el"
        xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
        xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core"
        xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"&amp;gt;

    &amp;lt;cc:interface&amp;gt;
        &amp;lt;cdk:class&amp;gt;ca.bleathem.richfaces.jquery.renderkit.TabRenderer&amp;lt;/cdk:class&amp;gt;
        &amp;lt;cdk:superclass&amp;gt;org.richfaces.renderkit.html.DivPanelRenderer&amp;lt;/cdk:superclass&amp;gt;
        &amp;lt;cdk:renderer-type&amp;gt;ca.bleathem.jquery.TabRenderer&amp;lt;/cdk:renderer-type&amp;gt;
    &amp;lt;/cc:interface&amp;gt;

    &amp;lt;cc:implementation&amp;gt;
        &amp;lt;div id="#{clientId}" class="rf_jq_tab"&amp;gt;
            &amp;lt;cdk:body /&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/cc:implementation&amp;gt;

&amp;lt;/cdk:root&amp;gt;
&lt;/pre&gt;
This renderer is simple, again comparable to the &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html"&gt;hello.template.xml&lt;/a&gt;. The new piece we've introduced is the &lt;i&gt;&amp;lt;cdk:body /&amp;gt;&lt;/i&gt; tag. This tag indicates where we want to render the contents of the component. So any content (or child components) we nest in out &lt;i&gt;tab&lt;/i&gt; tag will be wrapped by the div tag. &lt;br /&gt;
&lt;br /&gt;
We'll see this &lt;i&gt;&amp;lt;cdk:body /&amp;gt;&lt;/i&gt; tag again when we look as the (slightly more complex) tabs renderer:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;tabs.template.xhtml&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;cdk:root xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el"
        xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
        xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core"
        xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"&amp;gt;

    &amp;lt;cc:interface&amp;gt;
        &amp;lt;cdk:class&amp;gt;ca.bleathem.richfaces.jquery.renderkit.TabsRenderer&amp;lt;/cdk:class&amp;gt;
        &amp;lt;cdk:superclass&amp;gt;org.richfaces.renderkit.html.DivPanelRenderer&amp;lt;/cdk:superclass&amp;gt;
        &amp;lt;cdk:renderer-type&amp;gt;ca.bleathem.jquery.TabsRenderer&amp;lt;/cdk:renderer-type&amp;gt;
        &amp;lt;cdk:resource-dependency name="" /&amp;gt;
        &amp;lt;cdk:resource-dependency library = "javax.faces" name = "jsf.js" /&amp;gt;
        &amp;lt;cdk:resource-dependency name = "jquery.js" /&amp;gt;
        &amp;lt;cdk:resource-dependency library = "com.jqueryui/css/ui-lightness" name = "jquery-ui-1.8.16.custom.css" /&amp;gt;
        &amp;lt;cdk:resource-dependency library = "com.jqueryui/development-bundle/ui" name = "jquery.ui.core.js" /&amp;gt;
        &amp;lt;cdk:resource-dependency library = "com.jqueryui/development-bundle/ui" name = "jquery.ui.tabs.js" /&amp;gt;
    &amp;lt;/cc:interface&amp;gt;

    &amp;lt;cc:implementation&amp;gt;
        &amp;lt;div id="#{clientId}" class="rf_jq_tabs"&amp;gt;
            &amp;lt;ul&amp;gt;
                &amp;lt;c:forEach items="#{component.children}" var="child"&amp;gt;
                    &amp;lt;li&amp;gt;&amp;lt;a href="##{child.clientId}"&amp;gt;#{child.attributes['title']}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                &amp;lt;/c:forEach&amp;gt;
            &amp;lt;/ul&amp;gt;
            &amp;lt;cdk:body /&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;script type="text/javascript"&amp;gt;
            jQuery(function() {
                $(document.getElementById('#{clientId}')).tabs();
            });
     &amp;lt;/script&amp;gt;
    &amp;lt;/cc:implementation&amp;gt;

&amp;lt;/cdk:root&amp;gt;
&lt;/pre&gt;
This renderer template introduces a number of new concepts. For one, you might have noticed I didn't create a RenderBase class, like we did for the &lt;a href="http://blog.bleathem.ca/2011/10/richfaces-4-cdk-jquery-ui-calendar.html"&gt;datepicker&lt;/a&gt; component. We could have, but I wanted to demonstrate that it's not strictly necessary. The CDK allows one to replace the &lt;i&gt;@ResourceDependency&lt;/i&gt; annotations we used in the &lt;i&gt;DatepickerRenderBase&lt;/i&gt;, with a CDK tag: &lt;i&gt;&amp;lt;cdk:resource-dependency /&amp;gt;.&lt;/i&gt; This is a one-for-one replacement for the annotation, with matching attributes (in fact, the CDK creates actual @ResourcesDependency annotations in the generated java code). This allows us to define all the required javascript and css resources required by the component in the renderer template itself.&lt;br /&gt;
&lt;br /&gt;
We've also made use of the jstl core EL expressions to execute some logic in our renderer. You can see we loop over each of the children of the &lt;i&gt;tabs&lt;/i&gt; component, which will be our &lt;i&gt;tab&lt;/i&gt; components. For each child &lt;i&gt;tab&lt;/i&gt;, we create an entry in an unordered list with the &lt;i&gt;title&lt;/i&gt; attribute of the tab. This isn't just some arbitrary html, we are fulfilling the contract of the &lt;a href="http://jqueryui.com/demos/tabs/"&gt;jQuery UI tabs&lt;/a&gt; plugin. The plugin is going to look for this specific markup to render the tab components, and attach the necessary behavior.&lt;br /&gt;
&lt;br /&gt;
Following the unodered list, we see the &lt;i&gt;&amp;lt;cdk:body /&amp;gt;&lt;/i&gt; tag. This renders the child components, delegating to the render associated with each child. In this case, the children are the &lt;i&gt;tab&lt;/i&gt; components and will be rendered using the &lt;i&gt;tab&lt;/i&gt; renderer from the above &lt;i&gt;tab.template.xhtml&lt;/i&gt; template.&lt;br /&gt;
&lt;br /&gt;
The last piece of this template is the javascript call, where we invoke the jQuery UI tabs plugin to enable the client-side behavior. We aren't passing any options to the plugin in this example, but we could easily do so using the &lt;i&gt;scriptOption&lt;/i&gt; CDK tag demonstrated with the &lt;a href="http://blog.bleathem.ca/2011/10/richfaces-4-cdk-jquery-ui-calendar.html"&gt;datepicker&lt;/a&gt; component.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Result&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
So what does it look like when we put it all together?&lt;br /&gt;
With this sample markup:&lt;br /&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;b:tabs&amp;gt;
    &amp;lt;b:tab title="Tab 1"&amp;gt;
        Hello &amp;lt;b&amp;gt;Tab&amp;lt;/b&amp;gt;!!
    &amp;lt;/b:tab&amp;gt;
    &amp;lt;b:tab title="Tab 2"&amp;gt;
        With nested components:
        &amp;lt;br /&amp;gt;
        &amp;lt;b:datepicker value="#{myBean.value}" dateFormat="yy-mm-dd" showOn="both" buttonImageOnly="true" /&amp;gt; &amp;lt;br /&amp;gt;
    &amp;lt;/b:tab&amp;gt;
&amp;lt;/b:tabs&amp;gt;
&lt;/pre&gt;
We can see we have multiple tabs, and for kicks I nested the &lt;a href="http://blog.bleathem.ca/2011/10/richfaces-4-cdk-jquery-ui-calendar.html"&gt;datepicker&lt;/a&gt; component from the previous CDK entry.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-rMdCAiIqndQ/TtXgr4yvsFI/AAAAAAAAAKE/EI8leVSEZHQ/s1600/calendar_tab.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://4.bp.blogspot.com/-rMdCAiIqndQ/TtXgr4yvsFI/AAAAAAAAAKE/EI8leVSEZHQ/s320/calendar_tab.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
So here it is, the jQuery UI tabs plugin wrapped with the RichFaces CDK, providing us with a bare-bones tab component. A lot more work is required to get this to a point where it could replace the RichFaces tab component, but we have succeeded in creating a functional component leveraging existing javascript code, and without a lot of work on our part.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-6290752644473753531?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/6290752644473753531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-4-cdk-jqeury-ui-tabs.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6290752644473753531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6290752644473753531'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-4-cdk-jqeury-ui-tabs.html' title='RichFaces 4 CDK | jQeury UI Tabs'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-rMdCAiIqndQ/TtXgr4yvsFI/AAAAAAAAAKE/EI8leVSEZHQ/s72-c/calendar_tab.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-4336513735896631292</id><published>2011-11-23T10:10:00.000-08:00</published><updated>2011-11-25T13:37:17.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.CR1 Release Announcement</title><content type='html'>I’m excited to announce the availability of RichFaces&lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12317055"&gt; 4.1.0.CR1&lt;/a&gt;, the first release candidate for RichFaces 4.1.0. Stability of the platform has been a strong focus for all the RichFaces 4.1.0 &lt;a href="http://blog.bleathem.ca/search/label/RF41"&gt;milestone releases&lt;/a&gt;, and has been even more so of a focus for our CR1 release.&lt;br /&gt;
&lt;br /&gt;
We really appreciate the community feedback we’ve received throughout the 4.1 development cycle, with each of the milestone releases. The bugs found and the suggestions provided from the community have really helped us nail down this release. As such, we are encouraging everyone to download this release candidate, and help us flush out any regressions or other potential blocker issues. Let us not forget, "given enough eyeballs, all bugs are shallow"!&lt;br /&gt;
&lt;br /&gt;
To try out this release, you can download the distribution &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;directly&lt;/a&gt;, or for maven users, increment the RichFaces version in your pom.xml to 4.1.0.20111111-CR1. For more information on setting up a RichFaces 4 application, refer to our &lt;a href="http://community.jboss.org/wiki/GettingstartedwithRichFaces4x"&gt;getting started guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
With that “call to arms” out of the way, let’s take a look at what’s changed in this release.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mobile Compatibility&lt;/b&gt;&lt;br /&gt;
We have been working on the RichFaces mobile guide, and will have it available shortly - watch for it the RichFaces &lt;a href="http://www.jboss.org/community/wiki/richfaceswikihomepage"&gt;wiki&lt;/a&gt;. Refer to this guide to take advantage of the mobile compatibility of the RichFaces components in our &lt;a href="http://showcase.richfaces.org/"&gt;mobile showcase&lt;/a&gt; as we presented at a recent &lt;a href="http://www.jboss.org/webinars"&gt;JBoss webinar&lt;/a&gt; (video of the webinar is &lt;a href="http://vimeo.com/31616425"&gt;available&lt;/a&gt;). The CSS and javascript we used in our mobile showcase has been cleaned-up and refactored, and ready for public consumption, with details of how to do so in the mobile guide.&lt;br /&gt;
&lt;br /&gt;
We've also improved the mobile compatibility of some individual components, such as the calendar component (specifically the time picker), and the rendering of the pickList buttons. Thanks to the community members who pointed these deficiencies out!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt;
The &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Component_Reference/en-US/html/"&gt;Component Reference&lt;/a&gt; and &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/Developer_Guide/en-US/html/"&gt;Developer Guide&lt;/a&gt; have been updated for this release candidate, in preparation for the upcoming final release. In addition, a bug in the automatic generation of the &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/vdldoc/"&gt;VDL-DOC&lt;/a&gt; (tag library docs) has been addressed, once again providing a complete listing of all RichFaces components’ attributes. The latest &lt;a href="http://docs.jboss.org/richfaces/latest_4_1_X/javadoc/"&gt;javadoc&lt;/a&gt; has also been published.&lt;br /&gt;
&lt;br /&gt;
Many of the attribute descriptions themselves in the VDL-DOC still need to be filled out (pull requests here would be very welcome!) - so be sure to refer to the Component Reference to supplement the VDL-DOC.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Framework upgrades&lt;/b&gt;&lt;br /&gt;
We upgraded our client-side bean validation extension to use &lt;a href="http://www.hibernate.org/subprojects/validator.html"&gt;Hibernate Validator&lt;/a&gt; 4.2, aligning with what is currently shipped in &lt;a href="http://www.jboss.org/as7"&gt;JBoss AS 7&lt;/a&gt;, and with what developers will be using with their applications. We also changed the project compiler compatibility to Java SE 6.0, reflecting in reality what has been true for the project for some time. We also started verification of the RichFaces platform against the upcoming JBoss AS 7.1 release, aiming for a smooth transition for RichFaces applications when AS 7.1 is released.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Individual improvements&lt;/b&gt;&lt;br /&gt;
Individual components have seen some improvements with this release. Ajax rendering of drag sources and drop targets has been improved, tab panel switching across the client/server has been cleaned up, and the tooltip was changed to better respect the value attribute for delivering the tooltip message. In addtion to these individual fixes, we addressed a number of IE8 compatibility issues.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Onward to Final&lt;/b&gt;&lt;br /&gt;
Unfortunately, we’ve have introduced some regressions with this release, namely with the calendar component and table sorting/filtering. These issues have already been &lt;a href="https://issues.jboss.org/secure/IssueNavigator.jspa?reset=true&amp;amp;jqlQuery=project+%3D+RF+AND+fixVersion+%3D+%224.1.0.Final%22+AND+component+%3D+regression"&gt;addressed&lt;/a&gt; in our development branch, and will be ready for the upcoming final release.&lt;br /&gt;
&lt;br /&gt;
Be sure to give this release a spin, and help us make 4.1.0.Final a top-notch release!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-4336513735896631292?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/4336513735896631292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-410cr1-release-announcement.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4336513735896631292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4336513735896631292'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-410cr1-release-announcement.html' title='RichFaces 4.1.0.CR1 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2312293699256073240</id><published>2011-11-09T09:35:00.000-08:00</published><updated>2011-11-21T14:10:59.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.M4 Release Announcement</title><content type='html'>The RichFaces 4.1 Milestone 4 release is now available for &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;download&lt;/a&gt;! With this &lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12317054"&gt;M4&lt;/a&gt; release we focused on stabilizing the features we introduced in the earlier 4.1 release-train milestones (&lt;a href="http://blog.bleathem.ca/2011/08/richfaces-410m1-release-announcement.html"&gt;M1&lt;/a&gt;, &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-410m2-release-announcement.html"&gt;M2&lt;/a&gt;, &lt;a href="http://blog.bleathem.ca/2011/10/richfaces-410m3-release-announcement.html"&gt;M3&lt;/a&gt;). The release following M4 will be our 4.1 release candidate, so we want to make sure we achieve maximum stability with M4. Some of the key areas we touched are listed below.&lt;br /&gt;
&lt;br /&gt;
If your keen and want to get started right away, you can download the distribution &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;directly&lt;/a&gt;, or for maven users, increment the RichFaces version in your pom.xml to 4.1.0.20111101-M4. For more information on setting up a RichFaces 4 application, refer to our &lt;a href="http://community.jboss.org/wiki/GettingstartedwithRichFaces4x"&gt;getting started guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-nnukXG1tazc/Trq193wnJyI/AAAAAAAAAJ4/MnxQ06gczwg/s1600/mobile+showcase.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-nnukXG1tazc/Trq193wnJyI/AAAAAAAAAJ4/MnxQ06gczwg/s320/mobile+showcase.png" width="226" /&gt;&lt;/a&gt;&lt;b&gt;Mobile showcase improvements&lt;/b&gt;&lt;br /&gt;
The CSS 3 overlay was improved to provide better mobile compatibility of the components. We also added an ajax status indicator to the mobile showcase. Since it is entirely an ajax driven application, the status indicator improves the user experience dramatically.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Resource mapping&lt;/b&gt;&lt;br /&gt;
The resource mapping feature introduced in M3 has been made more usable, adopting a consistent naming convention, with reasonable defaults. Additionally the ability to completely disable the feature was introduced, should you want to handle resources yourself in your applications.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Client Side validation&lt;/b&gt;&lt;br /&gt;
Improvements to the client-side validation (CSV) involved better aligning the client-side regexp with the Bean Validation specification. The CSV mechanism for discerning component values on the client (using javascript) was enhanced to improve the CSV interop with other JSF component providers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Individual component fixes&lt;/b&gt;&lt;br /&gt;
The file upload component has some new attributes, allowing for more fine-grained control over what the user is able to upload to the server. The pickList saw the switchByClick and switchByDblClick functionality from RichFaces 3 ported to RichFaces 4, further improving the RF 3 to RF 4 migration story.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Misc. Fixes&lt;/b&gt;&lt;br /&gt;
Some additional issues resolved include a jQuery update (to version 1.6.4), and improvements to both the simpleapp and GAE RichFaces archetypes. Many more fixes and improvements were checked, feel free to &lt;a href="https://issues.jboss.org/secure/IssueNavigator.jspa?reset=true&amp;amp;jqlQuery=project+%3D+RF+AND+fixVersion+%3D+%224.1.0.Milestone4%22+AND+resolution+%3D+Done"&gt;browse the issues fixed&lt;/a&gt; to see what else has been improved.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Forward: CR1 &amp;amp; Further Stabilisation&lt;/b&gt;&lt;br /&gt;
The CR1 development is currently ongoing, with a focus on providing documentation for all the new 4.1 features, and further stabilisation. So &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;give M4 a spin&lt;/a&gt;, and let us know what you think! Drop a note in the &lt;a href="http://community.jboss.org/en/richfaces?view=discussions"&gt;forums&lt;/a&gt;, or join us for our weekly &lt;a href="http://community.jboss.org/en/richfaces/dev/teammtgs?view=documents"&gt;community/team meetings&lt;/a&gt; in IRC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2312293699256073240?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2312293699256073240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-410m4-release-announcement.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2312293699256073240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2312293699256073240'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/11/richfaces-410m4-release-announcement.html' title='RichFaces 4.1.0.M4 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-nnukXG1tazc/Trq193wnJyI/AAAAAAAAAJ4/MnxQ06gczwg/s72-c/mobile+showcase.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-8366310879657022929</id><published>2011-10-27T10:36:00.000-07:00</published><updated>2011-11-21T14:11:25.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.M3 Release Announcement</title><content type='html'>&lt;br /&gt;
The RichFaces 4.1 Milestone 3 release is now available for &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;download&lt;/a&gt;. Further building on the new components and framework improvements introduced in the &lt;a href="http://blog.bleathem.ca/2011/08/richfaces-410m1-release-announcement.html"&gt;M1&lt;/a&gt; and &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-410m2-release-announcement.html"&gt;M2&lt;/a&gt; releases, &lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12318072"&gt;M3&lt;/a&gt; brings it all together with an improved showcase - featuring a demonstration of the mobile compatibility of the RichFaces 4 component set. Along-side improvements to resource handling, and enhancements to the push component, we’ve fixed a number of bugs and issues, as &lt;a href="http://community.jboss.org/thread/172631"&gt;voted by you&lt;/a&gt; - our user community!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Showcase - Going Mobile&lt;/b&gt;&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-1jtMCp1FZkU/TqmOb3xdLLI/AAAAAAAAAJo/zKqUgRIvfzQ/s1600/mobile+showcase.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-1jtMCp1FZkU/TqmOb3xdLLI/AAAAAAAAAJo/zKqUgRIvfzQ/s320/mobile+showcase.png" width="226" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The showcase as seen on mobile&lt;br /&gt;
devices (using device detection)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
The &lt;a href="http://bit.ly/rf-showcase"&gt;showcase&lt;/a&gt; has received some attention in this release. First and foremost we’ve demonstrated the mobile compatibility of the existing component set with the addition of some simple css and javascript resources (using a &lt;a href="http://www.html5rocks.com/en/mobile/optimization-and-performance.html"&gt;well vetted approach&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
The mobile showcase in RichFaces is a an initial mobile effort, focusing on making the existing RichFaces components work within mobile browsers. While not a full-blown set of mobile components, we’ve tweaked the framework as necessary and put forward the mobile showcase as an example of how you can make your existing RichFaces applications mobile-friendly with the current RichFaces component set. Stay tuned for an upcoming blog entry with details on how you can take advantage of this in your own applications. Or, if you’re feeling adventurous, have a look at the &lt;a href="https://github.com/richfaces/showcase"&gt;showcase code&lt;/a&gt; to see how we did it!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Showcase - On OpenShift&lt;/b&gt;&lt;br /&gt;
We've deployed the showcase application to &lt;a href="http://openshift.redhat.com/"&gt;OpenShift&lt;/a&gt; -- the PaaS offering by Red Hat. The OpenShift Java EE 6 support provides a great platform to take your application all the way from development with Express (free!) to production with Flex (highly scalable!).&amp;nbsp;Express is a shared multi-tenant environment made to be as simple as possible to get started quickly, while&amp;nbsp;Flex gives you dedicated VMs and DevOps control over architecture along with monitoring.&amp;nbsp;For the RichFaces project, this gives us the chance to showcase our components in a Java EE environment, where our framework really shines!&lt;br /&gt;
&lt;br /&gt;
(Note, until 4.1 is released, the showcase at &lt;a href="http://richfaces.org/showcase"&gt;http://richfaces.org/showcase&lt;/a&gt; will continue to demonstrate the RichFaces 4.0 framework and components).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Showcase - New Component Samples&lt;/b&gt;&lt;br /&gt;
Additionally we’ve added some polish to the showcase with bug fixes and user experience tweaks, and we've included samples of the latest RichFaces components. You will now find showcase samples for the&amp;nbsp;&lt;a href="http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=editor"&gt;rich editor&lt;/a&gt;, &lt;a href="http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=notify"&gt;notify&lt;/a&gt;, &lt;a href="http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=orderingList"&gt;orderingList&lt;/a&gt;, and &lt;a href="http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=pickList"&gt;pickList&lt;/a&gt; components, complete with samples showing you how to put them to good effect in your applications.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Resource handling&lt;/b&gt;&lt;br /&gt;
Along-side these showcase improvements, we’ve introduced framework improvements to improve the mobile experience. With the new RichFaces 4.1 Resource Handling features, we are packaging and minifying the out of box JavaScript and CSS. This is in an effort to reduce HTTP requests made by the framework and to give mobile apps (or any app) a boost in performance. For those familiar with RichFaces 3, this also brings back the old LOAD_ALL configuration, albeit with a new name. We’ll have a blog post out shortly, with details on how you can try these features out with the Milestone 3 release.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ajax Push&lt;/b&gt;&lt;br /&gt;
Last (and by no means least!) I’d like to mention that the AJAX push component has seen a lot of improvements with this release. We’ve introduced a&amp;nbsp;&lt;a href="http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=push&amp;amp;sample=pushCdi"&gt;CDI interface&lt;/a&gt; for firing push events. This is not intended to supercede the existing Push API, but is instead provided as a means to tie the powerful CDI event mechanism into the RichFaces push technology.&lt;br /&gt;
&lt;br /&gt;
Coupled with earlier push improvements (&lt;a href="http://rik-ansikter.blogspot.com/2011/08/lot-of-improvements-has-been-done-in-4.html"&gt;removing the JMS requirement from the push component&lt;/a&gt;), the push component is shaping up to be much more accessible to developers working in either Java EE or Servlet container environments.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Forward: M4 &amp;amp; Stabilization&lt;/b&gt;&lt;br /&gt;
Work is already well underway with our M4 release, where we are improving on the compatibility of our components with mobile browsers, and adding a last round of small feature improvements. Give &lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;M3 a spin&lt;/a&gt;, and let us know what you think! Drop us a note in the &lt;a href="http://community.jboss.org/en/richfaces?view=discussions"&gt;forums&lt;/a&gt;, or join us for our weekly &lt;a href="http://community.jboss.org/en/richfaces/dev/teammtgs?view=documents"&gt;community/team meetings&lt;/a&gt; in IRC.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-8366310879657022929?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/8366310879657022929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/10/richfaces-410m3-release-announcement.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/8366310879657022929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/8366310879657022929'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/10/richfaces-410m3-release-announcement.html' title='RichFaces 4.1.0.M3 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1jtMCp1FZkU/TqmOb3xdLLI/AAAAAAAAAJo/zKqUgRIvfzQ/s72-c/mobile+showcase.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2029883262947453632</id><published>2011-10-07T03:55:00.000-07:00</published><updated>2011-11-08T12:34:11.053-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CDK'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 CDK | jQuery UI Calendar</title><content type='html'>Further incrementing the complexity over the &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-4-cdk-input-component.html"&gt;input component&lt;/a&gt; we created previously, this time we will create a JSF calendar component. Being pragmatic OSS developers, we will leverage the existing javascript of the &lt;a href="http://jqueryui.com/demos/datepicker/"&gt;datepicker&lt;/a&gt; component from the &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt; project, and we'll see how well the RichFaces CDK lends itself to mapping JSF component attributes into javascript configuration options.&lt;br /&gt;
&lt;br /&gt;
As always, if you are interested in following along in your IDE, you can get the code below on &lt;a href="https://github.com/bleathem/CDK-examples"&gt;github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Component Class&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Starting again with the component class:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;AbstractDatepicker.java&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;package ca.bleathem.richfaces.jquery.component;

import org.richfaces.cdk.annotations.*;

@JsfComponent(
        type = "ca.bleathem.richfaces.jquery.Datepicker",
        family = "ca.bleathem.Datepicker",
        renderer = @JsfRenderer(type = "ca.bleathem.jquery.DatepickerRenderer"),
        tag = @Tag(name="datepicker"))
abstract public class AbstractDatepicker extends javax.faces.component.UIInput {

    @Attribute
    public abstract String getDateFormat();

    @Attribute
    public abstract String getShowOn();

    @Attribute
    public abstract String getButtonImageOnly();

}&lt;/pre&gt;
&lt;br /&gt;
Here we see we are again extending the &lt;a href="http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/component/UIInput.html"&gt;UIInput&lt;/a&gt; class, as we did with the Input component. &amp;nbsp;What's new is the introduction of some additional attributes. &amp;nbsp;The &lt;i&gt;@Attribute&lt;/i&gt; annotation instructs the CDK that these abstract getter methods map to&amp;nbsp;component attributes, and the CDK then takes care of wiring the attributes into the JSF state saving mechanism for us.&lt;br /&gt;
&lt;br /&gt;
The naming convention of the attribute is alligned with &lt;a href="http://jqueryui.com/demos/datepicker/#options"&gt;jQeury UI datepicker options&lt;/a&gt;. This allows us to transparently pass the JSF component attributes through to the jQuery plugin, as we see in the Renderer below.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Renderer&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
The renderer is again an xml file:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;datepicker.template.xml&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;cdk:root xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el" xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
    xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core" xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"
    xmlns:javaee="http://java.sun.com/xml/ns/javaee"&amp;gt;

    &amp;lt;cc:interface&amp;gt;
        &amp;lt;cdk:class&amp;gt;ca.bleathem.richfaces.jquery.renderkit.DatepickerRenderer&amp;lt;/cdk:class&amp;gt;
        &amp;lt;cdk:superclass&amp;gt;ca.bleathem.richfaces.jquery.renderkit.DatepickerRendererBase&amp;lt;/cdk:superclass&amp;gt;
        &amp;lt;cdk:renderer-type&amp;gt;ca.bleathem.jquery.DatepickerRenderer&amp;lt;/cdk:renderer-type&amp;gt;
    &amp;lt;/cc:interface&amp;gt;

    &amp;lt;cc:implementation&amp;gt;
        &amp;lt;input type="text" id="#{clientId}" name="#{clientId}" class="rf_jq_cal" value="#{getInputValue(facesContext, component)}" /&amp;gt;
        &amp;lt;script type="text/javascript"&amp;gt;
            &amp;lt;cdk:scriptObject name="pluginOptions"&amp;gt;
                &amp;lt;cdk:scriptOption name="buttonImage" value="#{getResourcePath(facesContext, 'ca.bleathem', 'calendar.gif')}" /&amp;gt;
                &amp;lt;cdk:scriptOption attributes="showOn dateFormat buttonImageOnly" /&amp;gt;
            &amp;lt;/cdk:scriptObject&amp;gt;
            jQuery(function() {
                $(document.getElementById('#{clientId}')).datepicker(#{toScriptArgs(pluginOptions)});
            });
	    &amp;lt;/script&amp;gt;
    &amp;lt;/cc:implementation&amp;gt;

&amp;lt;/cdk:root&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Diving first into the &lt;i&gt;cc:implementation&lt;/i&gt; of this renderer template, we see again an &lt;i&gt;input&lt;/i&gt; element. What's new is the &lt;i&gt;script&lt;/i&gt; tag following the input. This &lt;i&gt;script&lt;/i&gt; tag get's compiled into javascript when the component renders. Using CDK xml markup, we build up the javascript object &lt;i&gt;pluginOptions&lt;/i&gt; which we pass as a parameter to the call to the jQueryUI plugin.&lt;br /&gt;
&lt;br /&gt;
The &lt;i&gt;document.getElementById('#{clientId}')&lt;/i&gt; is a workaround for JSF's use of the ":" character in javascript IDs - this doesn't play well with jQuery. By first calling &lt;i&gt;document.getElementById&lt;/i&gt;, we end up with an argument that is acceptible to jQuery. Notice the &lt;i&gt;#{toScriptArgs(pluginOptions)}&lt;/i&gt; argument to the datepicker jQuery UI plugin. This initializes the datepicker plugin, with the JSF component attributes specified by the application developer.&lt;br /&gt;
&lt;br /&gt;
From the &lt;i&gt;cc:interface&lt;/i&gt; of this renderer template, we see that we are extending the class &lt;i&gt;DatepickerRendererBase&lt;/i&gt;. This class is included below:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;DatepickerRendererBase.java&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;package ca.bleathem.richfaces.jquery.renderkit;

import org.richfaces.renderkit.InputRendererBase;

import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;

@ResourceDependencies({
        @ResourceDependency(library = "javax.faces", name = "jsf.js"),
        @ResourceDependency(name = "jquery.js"),
        @ResourceDependency(library = "com.jqueryui/css/ui-lightness", name = "jquery-ui-1.8.16.custom.css"),
        @ResourceDependency(library = "com.jqueryui/development-bundle/ui", name = "jquery.ui.core.js"),
        @ResourceDependency(library = "com.jqueryui/development-bundle/ui", name = "jquery.ui.widget.js"),
        @ResourceDependency(library = "com.jqueryui/development-bundle/ui", name = "jquery.ui.datepicker.js"),
        @ResourceDependency(library = "ca.bleathem", name = "calendar.gif")
})
public class DatepickerRendererBase extends InputRendererBase {
}
&lt;/pre&gt;
&lt;br /&gt;
The &lt;i&gt;DatepickerRendererBase&lt;/i&gt; class is again extending the &lt;i&gt;InputRendererBase&lt;/i&gt;, and it is holding a number of &lt;i&gt;@ResourceDependency&lt;/i&gt; annotations. These annotations ensure the appropriate resources are included on the page when we reference this JSF component. For us, these resources are the jQuery UI plugins necessary to get the datepicker component working.&lt;br /&gt;
&lt;br /&gt;
Introducing an entire new class merely to hold the &lt;i&gt;@ResourceDependency&lt;/i&gt; annotations may seem like overkill, but in any reasonably complex component, we will end up putting some renderer helper logic into this class file. There are times when the expressivity of Java works better than the declarativity of xml. We'll see some of this later in our blog series.&lt;br /&gt;
&lt;br /&gt;
Finally, let's look at en example use of this component:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;i&gt;sample.xhtml&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:xml"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:b="http://bleathem.ca/test"
      &amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;ui:composition template="/templates/template-jqueryui.xhtml"&amp;gt;

    &amp;lt;ui:define name="title"&amp;gt;Datepicker Sample&amp;lt;/ui:define&amp;gt;

    &amp;lt;ui:define name="body"&amp;gt;
        &amp;lt;h:form&amp;gt;
            &amp;lt;b:datepicker value="#{myBean.value}" dateFormat="yy-mm-dd" showOn="both" buttonImageOnly="true" /&amp;gt; &amp;lt;br /&amp;gt;
            Input value: &amp;lt;h:outputText value="#{myBean.value}" /&amp;gt; &amp;lt;br /&amp;gt;
            &amp;lt;h:commandButton value="Submit" action="null"/&amp;gt;
        &amp;lt;/h:form&amp;gt;
    &amp;lt;/ui:define&amp;gt;
&amp;lt;/ui:composition&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
When rendered, this looks like:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;i&gt;Screen shot&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-X6Y4MjdGPe8/To4hm_jaSSI/AAAAAAAAAJg/CRNlNFa-YOw/s1600/datepicker.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="181" src="http://3.bp.blogspot.com/-X6Y4MjdGPe8/To4hm_jaSSI/AAAAAAAAAJg/CRNlNFa-YOw/s320/datepicker.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
While this has certainly grown in complexity over our initial &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html"&gt;HelloWorld component&lt;/a&gt;, we've managed to keep our JSF component development DRY. We've leveraged existing, high-quality javascript components. We've also made use of the RichFaces CDK to wire the JSF configured component to the javascript object. Some additional work is required to continue mapping the jQuery UI datepicker plugin options into JSF component attributes, but the mechanism for this has been laid out, and completing the component will be quite straight forward (pull requests welcome!).&lt;br /&gt;
&lt;br /&gt;
In my next CDK installment, we'll look at creating a layout based component, rather than an input component. Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2029883262947453632?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2029883262947453632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/10/richfaces-4-cdk-jquery-ui-calendar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2029883262947453632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2029883262947453632'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/10/richfaces-4-cdk-jquery-ui-calendar.html' title='RichFaces 4 CDK | jQuery UI Calendar'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-X6Y4MjdGPe8/To4hm_jaSSI/AAAAAAAAAJg/CRNlNFa-YOw/s72-c/datepicker.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-272008221180165311</id><published>2011-10-05T20:01:00.000-07:00</published><updated>2011-10-05T20:02:13.555-07:00</updated><title type='text'>Testing AS7 web apps over SSL</title><content type='html'>Here's a recipe I found useful for trouble-shooting a web-app over an SSL connection. The steps involved are to:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Set the server name/IP on each of the testing machines (both Windows and Linux)&lt;/li&gt;
&lt;li&gt;Create a self-signed certificate for the server using the java-based keytool&lt;/li&gt;
&lt;li&gt;Export the certificate for installation as a CA in the clients&lt;/li&gt;
&lt;li&gt;Configure JBoss AS7 to use the certificate sotre&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
All the above steps are sufficiently simple, but each required it's own share of googling to get everything just right. This post is as much a set of notes to myself in the future, as it is a blog.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;1. Setting the Server name&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
On your Linux testing machine, make sure the sure IP and name of your local server are in your /etc/hosts file:&lt;br /&gt;
&lt;pre class="code"&gt;127.0.1.1 bleathem-redhat bleathem-redhat.local
&lt;/pre&gt;
&lt;br /&gt;
Do the same thing for you windows clients - that's right! Windows has a /etc/hosts file! See this &lt;a href="http://en.wikipedia.org/wiki/Hosts_file"&gt;wikipedia article&lt;/a&gt; to locate the file in your version of windows.
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;2. Create a self-signed certificate&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Use the java keytool command to create the certificate store:&lt;br /&gt;
&lt;pre class="code"&gt;keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore server.jks&lt;/pre&gt;
when asked for your "first and last name", answer with the fully-qualified domain name. For me this is &lt;i&gt;bleathem-redhat.local&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;3. Export the certificate&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
Export the certificate from the keystore you just created, again using the keytool command:&lt;br /&gt;
&lt;pre class="code"&gt;keytool -exportcert -alias tomcat -keystore server.jks -file as7.cer
&lt;/pre&gt;
Copy this certificate to your Windows clients, and install it as a certificate authority. I found this to be necessary, as IE9 is particularly nasty about dealing with "unofficial" certificates. Steps to do this are left as an exercise for the reader! (I don't feel like taking a bunch of windows screenshots.)&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;4. Configure JBoss AS7&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
In the &lt;i&gt;standalone.xml&lt;/i&gt; configuration file of your AS7 instance, find the line:&lt;br /&gt;
&lt;pre class="code"&gt;&amp;lt;connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http"/&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
And add below it the lines:
&lt;br /&gt;
&lt;pre class="code"&gt;&amp;lt;connector name="https" protocol="HTTP/1.1" socket-binding="https" scheme="https" secure="true"&amp;gt;
    &amp;lt;ssl name="https" password="changeit" certificate-key-file="standalone/configuration/server.jks"/&amp;gt;
&amp;lt;/connector&amp;gt;&lt;/pre&gt;
This will configure your AS 7 instance to use your newly created certificate store on it's SSL enabled port. The default &lt;i&gt;https&lt;/i&gt; port for AS7 is 8443.&lt;br /&gt;
&lt;br /&gt;
And there we have it! &amp;nbsp;A fully functional SSL/https enabled environment for testing our web apps!&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-272008221180165311?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/272008221180165311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/10/testing-as7-web-apps-over-ssl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/272008221180165311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/272008221180165311'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/10/testing-as7-web-apps-over-ssl.html' title='Testing AS7 web apps over SSL'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-5165411929675282743</id><published>2011-09-21T12:14:00.000-07:00</published><updated>2011-11-08T12:34:11.072-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CDK'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 CDK | Input Component</title><content type='html'>With our &lt;a href="http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html"&gt;last component&lt;/a&gt;, we saw how we
could output some simple text with a custom JSF component created
with the RichFaces CDK.  Let's increment the complexity, and see how
we can create a component that accepts input. Again, the goal here is to highlight how the important features fit together, and to leverage as much of the plumbing work as possible from the RichFaces CDK.&lt;br /&gt;
&lt;br /&gt;
If you are interested in following along in your IDE, you can get the code below on &lt;a href="https://github.com/bleathem/CDK-examples" style="color: #5588aa; text-decoration: none;"&gt;github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Component Class&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In a similar approach to our Hello World component, we'll start with the component class for our Input component:
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;AbstractInput.java&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;package ca.bleathem.richfaces.input.component;

import org.richfaces.cdk.annotations.*;

@JsfComponent(
        type = "ca.bleathem.richfaces.input.Input",
        family = "ca.bleathem.input",
        renderer = @JsfRenderer(type = "ca.bleathem.input"),
        tag = @Tag(name="input"))
abstract public class AbstractInput extends javax.faces.component.UIInput {

}
&lt;/pre&gt;
&lt;br /&gt;
This looks pretty similar to the component class for the Hello World component, with an appropriate changing or type, family, renderer and tag. One significant change to take note of is the base class for the component. Notice how we are extending the &lt;a href="http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/javax/faces/component/UIInput.html"&gt;&lt;i&gt;UIInput&lt;/i&gt;&lt;/a&gt; class. This allows us to leverage the value holding and state saving that has already been built into this component. No matter what kind of UI you want to build for your component, you will almost always want to store a single value (we'll discuss select many components in another post). So extending UIInput is generally a good idea.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Renderer&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The corresponding renderer template for our input component is:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;input.template.xml&lt;/b&gt;&lt;/div&gt;
&lt;pre class="code brush:java"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;cdk:root xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el" xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
    xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core" xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"
    xmlns:javaee="http://java.sun.com/xml/ns/javaee"&amp;gt;

    &amp;lt;cc:interface&amp;gt;
        &amp;lt;cdk:class&amp;gt;ca.bleathem.richfaces.input.renderkit.InputRenderer&amp;lt;/cdk:class&amp;gt;
        &amp;lt;cdk:superclass&amp;gt;org.richfaces.renderkit.InputRendererBase&amp;lt;/cdk:superclass&amp;gt;
        &amp;lt;cdk:renderer-type&amp;gt;ca.bleathem.input&amp;lt;/cdk:renderer-type&amp;gt;
    &amp;lt;/cc:interface&amp;gt;

    &amp;lt;cc:implementation&amp;gt;
        &amp;lt;input type="text" name="#{clientId}" value="#{getInputValue(facesContext, component)}" /&amp;gt;
    &amp;lt;/cc:implementation&amp;gt;

&amp;lt;/cdk:root&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Again, this looks pretty similar to the template for the Hello World component. The key difference being the Renderer &lt;i&gt;superclass&lt;/i&gt;, and the html markup in the &lt;i&gt;cc:implementation&lt;/i&gt;. By extending the RichFaces &lt;a href="http://docs.jboss.org/richfaces/latest_4_0_X/javadoc/richfaces-components-ui/org/richfaces/renderkit/InputRendererBase.html" style="font-style: italic;"&gt;InputRendererBase&lt;/a&gt; class, we save ourselves from having to write the logic to decode and invoke the validators for our component. Again, this is something we will want to do for many of the components we write.&lt;br /&gt;
&lt;br /&gt;
The html markup is also rather simple. By giving the input element the name of our component ID, we are indicating which form component should be decoded when the component is processed. When authoring a component with a complex UI, you will often make this input element a &lt;i&gt;hidden&lt;/i&gt; input type, to store and submit your value while not interfering with your UI. We'll see more of this in later entries of this CDK series.&lt;br /&gt;
&lt;br /&gt;
I'll also add that the &lt;i&gt;&lt;b&gt;package-info.java&lt;/b&gt;&lt;/i&gt; file described in the Hello World entry is still required, if you don't already have one included in your jar.&lt;br /&gt;
&lt;br /&gt;
And that's our input component - again done as simply as possible. The next entry will wrap an existing jQuery UI component, showing how the CDK is an effective means to leverage the work others have already put in to authoring complex javascript components.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-5165411929675282743?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/5165411929675282743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-4-cdk-input-component.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5165411929675282743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5165411929675282743'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-4-cdk-input-component.html' title='RichFaces 4 CDK | Input Component'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-6006174309933568699</id><published>2011-09-21T09:03:00.000-07:00</published><updated>2011-11-21T14:11:41.555-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.M2 Release Announcement</title><content type='html'>The Richfaces 4.1 milestone releases are trucking along. With &lt;a href="http://blog.bleathem.ca/2011/08/richfaces-410m1-release-announcement.html"&gt;M1&lt;/a&gt;, we had a focus on changes surrounding project infrastructure, and the introduction of some new components. Now with &lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12316708"&gt;M2&lt;/a&gt; we see updates to the core, and a stabilization of both the new components and the framework as a whole.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jQuery Upgrade&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We built the RichFaces 4 components using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; for DOM manipulation. Given the degree to which the we rely on jQuery, upgrading it is a "big deal". In order to ensure none of our components break during this milestone release, both our QE and Dev teams have been busy tending to our test infrastructure.  The benefit of shipping with the latest jQuery is that it provides better compatibility to application developers wishing to leverage cutting edge &lt;a href="http://plugins.jquery.com/"&gt;jQuery plugins&lt;/a&gt;, or integrate with other component libraries.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IE9 support&lt;/b&gt;&lt;br /&gt;
As part of our extensive testing of our platform, we noticed a number of compatibility issues with Internet Explorer 9 running in &lt;a href="http://msdn.microsoft.com/en-us/library/cc288325.aspx"&gt;&lt;i&gt;strict&lt;/i&gt; or &lt;i&gt;normal&lt;/i&gt; mode&lt;/a&gt;.  We isolated this as &lt;a href="http://java.net/jira/browse/JAVASERVERFACES-2063"&gt;an upstream issue&lt;/a&gt;, and will work with the Mojarra team to patch the underlying problem.  In the mean-time, the issues can be worked-around if you run &lt;a href="http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx#SetMode"&gt;IE 9 in &lt;i&gt;compatibility&lt;/i&gt; mode&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Stabilization of the new components&lt;/b&gt;&lt;br /&gt;
The new components introduced in M1 have benefited from further development, and constructive user feedback (thanks!).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;rich:editor&lt;/b&gt;&lt;br /&gt;
The Editor has several new features, but the most valuable is the integration with the standard RichFaces styling scheme. Further details are available in &lt;a href="http://rik-ansikter.blogspot.com/2011/09/improvements-of-richfaces-editor-in.html"&gt;Lukas’ blog post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-F3MhOWZIJ5M/TnoLm6gkdtI/AAAAAAAAAI4/nj5Bdrnc2hE/s1600/editor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-F3MhOWZIJ5M/TnoLm6gkdtI/AAAAAAAAAI4/nj5Bdrnc2hE/s640/editor.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;rich:notify&lt;/b&gt;&lt;br /&gt;
Notify Messages have been better integrated into the RichFaces ecosystem, allowing them to consume Client-Side Validation messages. The Notify Stack was also refactored - this is where one configures the location and orientation of messages.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;rich:pickList&lt;/b&gt;&lt;br /&gt;
The Pick List has picked up ordering capabilities in the target list, making it now a viable replacement for the older listShuttle from RichFaces 3.  In addition, the Pick and Ordering Lists have exposed more events, allowing for applications to better hook into their behavior.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Face-to-Face&lt;/b&gt;&lt;br /&gt;
A fair chunk of time during the M2 sprint was spent by the team in a face-2-face meeting, where our world-wide development team came together to discuss the future of the project.  Stay tuned for updates along these lines, as we distill our ideas and engage the community for feedback to collectively define our project vision and future.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Forward: M3 and mobile&lt;/b&gt;&lt;br /&gt;
As always, we've taken care of a number of bug fixes with the M2 milestone release.  However, the upcoming M3 release is when we will buckle down and focus on taking care of stabilizing the platform as a whole, and fixing as many bugs as we can, particularly in the mobile space.  To help us better identify where we would best be spending out attention, please get on Jira, and &lt;a href="http://community.jboss.org/thread/172631"&gt;vote for the issues&lt;/a&gt; that are important to you.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-6006174309933568699?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/6006174309933568699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-410m2-release-announcement.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6006174309933568699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6006174309933568699'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-410m2-release-announcement.html' title='RichFaces 4.1.0.M2 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-F3MhOWZIJ5M/TnoLm6gkdtI/AAAAAAAAAI4/nj5Bdrnc2hE/s72-c/editor.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-3227135861283840174</id><published>2011-09-10T00:12:00.000-07:00</published><updated>2011-11-08T12:34:11.064-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CDK'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 CDK | Hello World</title><content type='html'>This is the first technical post of my CDK series. Starting real simple, we'll create a component that produces a &lt;i&gt;hello world&lt;/i&gt; output. "Why start with a hello world? Isn't that a little cliche?". Well indeed it is, but it is by far the best way to point out the fundamental pieces of the CDK, and how they together. We'll build a strong foundation in our understanding of the CDK, on which we can build more interesting components in future posts.&lt;br /&gt;
&lt;br /&gt;
If you are interested in following along in your IDE, you can get the code below on &lt;a href="https://github.com/bleathem/CDK-examples"&gt;github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Component Class&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
To start, we need a component class. The component class itself will be generated by theRichFaces CDK. However we do define a base class from which the generated class will extend. We'll see why this is the case when we get to more complex components. But for now, let's start with this base class:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;AbstractHello.java&lt;/b&gt;&lt;/div&gt;
&lt;pre "="" class="code brush:java"&gt;package ca.bleathem.richfaces.hello.component;

import org.richfaces.cdk.annotations.*;

@JsfComponent(
        type = "ca.bleathem.richfaces.hello.Hello", 
        family = "ca.bleathem.text", 
        renderer = @JsfRenderer(type = "ca.bleathem.hello"), 
        tag = @Tag(name="hello"))
abstract public class AbstractHello extends javax.faces.component.UIComponentBase {

}
&lt;/pre&gt;
&lt;br /&gt;
Here we have an abstract class annotated with @JsfComponent. This annotation marks the class as a CDK class, and will be consumed by the CDK pre-processor. The CDK uses the attributes of the annotation to construct the necessary classes, and the necessary xml configuration. Creating JSF components is verbose, but we don't have to worry about the verbosity - the CDK takes care of it for us!&lt;br /&gt;
&lt;br /&gt;
Let's look more closely at the @JsfComponent annotation, and the meaning of each of it's attributes. I'll start by pointing out that the annotation supports many more attributes, but we are only covering here the bare minimum required to get a simple &lt;i&gt;hello world&lt;/i&gt; component created.&lt;br /&gt;
&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;type&lt;/dt&gt;
&lt;dd&gt;the value of the type attribute is how JSF identifies out component.  It will be used in the generated faces-config file, and in the generated xml taglib file.&lt;/dd&gt;
&lt;dt&gt;family&lt;/dt&gt;
&lt;dd&gt;the value of the family attribute is used by JSF to recognize "like" components.  We'll get into details of this in future posts.  This attribute is in fact optional, and the value can be generated by naming conventions.  However, I prefer to specify it explicitly.&lt;/dd&gt;
&lt;dt&gt;renderer&lt;/dt&gt;
&lt;dd&gt;the value of the renderer attribute is used to match our component to an appropriate renderer.  We'll create the renderer next!&lt;/dd&gt;
&lt;dt&gt;tag&lt;/dt&gt;
&lt;dd&gt;the value of the tag attribute will be the actual facelet tag that we use in our facelet files.&lt;/dd&gt;
&lt;/dl&gt;
&lt;br /&gt;
The last aspect of out component class that I want to point out is the "extends UIComponentBase" part. Every JSF UI component must extend this class, or one of it's descendants. We'll be able to save ourselves alot of work when we get to more complex components, by judiciously choosing the right class to extend.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The Renderer&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Next, let's look at the JSF Renderer:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;hello.template.xml&lt;/b&gt;&lt;/div&gt;
&lt;pre "="" class="code brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

&amp;lt;cdk:root xmlns="http://jboss.org/schema/richfaces/cdk/xhtml-el" xmlns:cdk="http://jboss.org/schema/richfaces/cdk/core"
    xmlns:c="http://jboss.org/schema/richfaces/cdk/jstl/core" xmlns:cc="http://jboss.org/schema/richfaces/cdk/jsf/composite"
    xmlns:javaee="http://java.sun.com/xml/ns/javaee"&amp;gt;

    &amp;lt;cc:interface&amp;gt;
        &amp;lt;cdk:class&amp;gt;ca.bleathem.richfaces.hello.renderkit.HelloRenderer&amp;lt;/cdk:class&amp;gt;
        &amp;lt;cdk:superclass&amp;gt;javax.faces.render.Renderer&amp;lt;/cdk:superclass&amp;gt;
        &amp;lt;cdk:renderer-type&amp;gt;ca.bleathem.hello&amp;lt;/cdk:renderer-type&amp;gt;
    &amp;lt;/cc:interface&amp;gt;

    &amp;lt;cc:implementation&amp;gt;
        Hello World! (from a RichFaces CDK component)
    &amp;lt;/cc:implementation&amp;gt;

&amp;lt;/cdk:root&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
If you are familiar with JSF Component development, you may be surprised to see that our Renderer is not a java class.  On the other hand, you may find that it looks quite similar to a JSF 2 composite component. It has a "&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&amp;lt;cc:interface&amp;gt;" section, and "&lt;/span&gt;&amp;lt;cc:implementation&amp;gt;" section, both of which are analogous to the facelet file of a composite component. In fact, you can prototype your components as composite components, then migrate to CDK components when you find you need the extra flexibility the CDK provides.&lt;br /&gt;
&lt;br /&gt;
As we did for the component class, let's dissect the cdk tags found in our renderer template.&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;&amp;lt;cdk:class&amp;gt;&lt;/dt&gt;
&lt;dd&gt;this is the name of the JSF Renderer class that will generated.&lt;/dd&gt;
&lt;dt&gt;&amp;lt;cdk:superclass&amp;gt;&lt;/dt&gt;
&lt;dd&gt;the class that will be extended by our generated JSF Renderer class. Here we are explicitly stating the default for reference when we get into more complex components.&lt;/dd&gt;
&lt;dt&gt;&amp;lt;cdk:renderer-type&amp;gt;&lt;/dt&gt;
&lt;dd&gt;this is how JSF identifies our Renderer.  It will be used in the generated faces-config file, and in the generated xml taglib file.&lt;/dd&gt;
&lt;/dl&gt;
&lt;br /&gt;
And there we have it, a JSF Component, and it's associated Renderer! -- err almost. There is one final piece missing. We need to specify a name space for our component - the namespace that will be used on facelet pages that refer to our components. Fortunately, the CDK also makes this easy for us. All we need is a package-info.java in the java package of our component:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;package-info.java&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;pre "="" class="code brush:java"&gt;@TagLibrary(uri="http://bleathem.ca/test",shortName="testLib")
package ca.bleathem.richfaces.hello.component;
import org.richfaces.cdk.annotations.TagLibrary;
&lt;/pre&gt;
&lt;br /&gt;
Here you can see the @TagLibrary annotation that specifies the namespace of our component.&lt;br /&gt;
&lt;br /&gt;
Now we can build a jar, include it in our application, and use our hello world component! Go ahead and run the build. If you are curious, take a look in the target/generated-sources folder. There you'll see all the JSF classes and xml files that the CDK generated for us. Those are all classes and xml files we would have had to write ourselves if we weren't using the CDK.&lt;br /&gt;
&lt;br /&gt;
Well, a hello world JSF component - not really useful... but there is more coming! The next entry in this series will use the CDK to create an input component, and from there we'll get into some more sophisticated components!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;dt&gt;In closing, I want to add that the CDK is incredibly flexible, and there all multiple ways the above component could have been put together. I'm sticking to what I think is simplest, most clear, and most extensible.&lt;/dt&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-3227135861283840174?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/3227135861283840174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/3227135861283840174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/3227135861283840174'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/09/richfaces-4-cdk-hello-world.html' title='RichFaces 4 CDK | Hello World'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-6179963531472704494</id><published>2011-09-07T22:16:00.000-07:00</published><updated>2011-09-07T22:16:26.742-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>Seam Faces Community Hack Night</title><content type='html'>&lt;b&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Seam Faces Community Hack Night!&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This week's &lt;a href="http://seamframework.org/Seam3"&gt;Seam 3&lt;/a&gt; Community hack night is centered around &lt;a href="http://seamframework.org/Seam3/FacesModule"&gt;Seam Faces&lt;/a&gt;. &amp;nbsp;This is a great chance to mingle with some CDI/JSF developers on &lt;a href="http://seamframework.org/Seam3/Chat"&gt;IRC&lt;/a&gt;, and get your fingerprint into the Seam Faces DNA! &amp;nbsp;Whether you have your own itch you want to scratch, a long-standing bug you want to see resolved, or implement a new feature altogether, we've got plenty of low hanging fruit ripe for the picking!&lt;br /&gt;
&lt;br /&gt;
In preparation for the hack-a-thon, I've given the Seam Faces JIRA issues a once-over. &amp;nbsp;I've collected a number of issues that I feel are ready to be resolved into a JIRA version calles &lt;a href="https://issues.jboss.org/browse/SEAMFACES/fixforversion/12318074"&gt;3.1.0-Tracking&lt;/a&gt;. &amp;nbsp;I'd like to highlight a few of the issues here, and perhaps motivate you to come join us at the hack-a-thon to resolve some of them!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-122"&gt;SEAMFACES-122&lt;/a&gt;:&amp;nbsp;Type safe navigation!&lt;/b&gt;&lt;br /&gt;
Of all the low-hanging fruit, this one has to be the juiciest! &amp;nbsp;Implement a Navigator utility class to map the @ViewConfig enums to their String @ViewPattern's for use in JSF navigation. &amp;nbsp;Imagine using your IDE to find all usages of one of your views - type safety FTW!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-26"&gt;SEAMFACES-26&lt;/a&gt;:&amp;nbsp;Implement global protection against XSRF attacks&lt;/b&gt;&lt;br /&gt;
Help the community of Seam 3 developers make their apps more secure by implementing a scheme to protect against XSRF attacks! &amp;nbsp;Think hidden form field, view state and a random number generator.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-28"&gt;SEAMFACES-28&lt;/a&gt;:&amp;nbsp;ObjectConverter and EntityConverter&lt;/b&gt;&lt;br /&gt;
Let's resurrect the Entity Converter from Seam 2. &amp;nbsp;The EntityConverter is persistent context aware, and will use the primary key of your JPA/Hibernate entities to handle JSF Conversion.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-150"&gt;SEAMFACES-150&lt;/a&gt;:&amp;nbsp;Refactor BeanManagerUtils to make use of Solder's BeanManagerLocator&lt;/b&gt;&lt;br /&gt;
Are you aware with the Seam Solder API? &amp;nbsp;Want to learn more about how to wield this powerful tool? &amp;nbsp;Here's a refactoring that will surely get you more comfortable with how to use Solder.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-6"&gt;SEAMFACES-6&lt;/a&gt;: s:debug&lt;/b&gt;&lt;br /&gt;
This issue is very well documented in JIRA, and just needs someone to put the pieces together. &amp;nbsp;What a great tool to add to your arsenal once complete!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-185"&gt;SEAMFACES-185&lt;/a&gt;:&amp;nbsp;Add support for activating beans based on the JSF project stage&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://community.jboss.org/people/chkal"&gt;Christian Kaltepoth&lt;/a&gt; has done a great job with this issue, but we've got a tough nut to crack. &amp;nbsp;How to parse the web.xml before the Servlet Context is available? &amp;nbsp;If you got some ideas here, help us bring this one across&amp;nbsp;the finish line.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-184"&gt;SEAMFACES-184&lt;/a&gt;:&amp;nbsp;Extend an example to demonstrate events propagation features&lt;/b&gt;&lt;br /&gt;
Familiar with Seam Faces, but don't feel up to hacking on the core? &amp;nbsp;How about writing an example application, to demonstrate some of Seam Faces' cool features?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="https://issues.jboss.org/browse/SEAMFACES-152"&gt;SEAMFACES-152&lt;/a&gt;:&amp;nbsp;Create documentation for using Seam Catch in Faces&lt;/b&gt;&lt;br /&gt;
Another great way to contribute to the project, without writing a single line of code is to contribute docs! &amp;nbsp;Help other Seam 3 devs figure out what you already know!&lt;br /&gt;
&lt;br /&gt;
These are just a few of the issues ready to be solved during the hack night. &amp;nbsp;So drop by on IRC, and give us a hand squashing some issues. &amp;nbsp;At the very least, I'm sure you'll have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-6179963531472704494?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/6179963531472704494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/09/seam-faces-community-hack-night.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6179963531472704494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6179963531472704494'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/09/seam-faces-community-hack-night.html' title='Seam Faces Community Hack Night'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2610847087662018542</id><published>2011-08-31T18:45:00.000-07:00</published><updated>2011-09-01T09:39:30.788-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 CDK | Introduction</title><content type='html'>&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;h3&gt;




A new blog series&lt;/h3&gt;
Having recently dived head first into the RichFaces 4 Component development Kit (CDK), I thought it would be useful to share the knowledge and experience I've gained. &amp;nbsp;Over the next few weeks, I am going to put out a series of blog posts giving some examples of how to use the RichFaces CDK. &amp;nbsp;Hopefully by the end of this series, we will have written some interesting components and left you with the urge to write your own JSF components using the CDK!&lt;br /&gt;
&lt;br /&gt;
Before I get into specific examples, I’d first like to motivate the series by describing what exactly the CDK is and the problems that it solves. &amp;nbsp;If you already know all about JSF components, and you want to get straight into using the CDK, skip this blog post! - the rest of the entries in this series will deal purely with implementation details.&lt;br /&gt;
&lt;h4&gt;



What is the RichFaces CDK anyway?&lt;/h4&gt;
JSF was designed to make components easy to consume. &amp;nbsp;The syntax is very html-like, and EL makes it easy to bind components to backing beans. &amp;nbsp;However, writing JSF components has traditionally not been very accessible. &amp;nbsp;With the number of classes that one has to create and wire together, along with a requirement for detailed knowledge of the JSF API, components were typically left to third party component suites, like &lt;a href="http://www.jboss.org/richfaces/"&gt;RichFaces&lt;/a&gt;, &lt;a href="http://www.icefaces.org/"&gt;IceFaces&lt;/a&gt; and &lt;a href="http://myfaces.apache.org/tomahawk/"&gt;Apache&lt;/a&gt;.  Things were improved drastically with the release of JSF 2.0, and it’s support for composite components.
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/#composite-components"&gt;Composite components&lt;/a&gt; let the user build JSF components purely in xhtml - without requiring any lines of Java. &amp;nbsp;This is a fantastic improvement, as developers can build their own re-usable components that encapsulate a fair amount of complexity and keep their applications &lt;a href="http://en.wikipedia.org/wiki/DRY"&gt;DRY&lt;/a&gt;.  An overall bonus indeed!  While composite components achieve a lot, the mechanism falls short when it comes to creating full-fledged JSF components.&lt;br /&gt;
&lt;br /&gt;
The concise and non-java nature of composite components that makes them so appealing, is also their biggest limitation. &amp;nbsp;Oftentimes one needs additional expressivity not available in EL, or one needs to tap further in to the JSF lifecycle. &amp;nbsp;Thus in JSF 2, the component suite providers find themselves once again writing components in Java, to be able to take advantage of the rich &lt;a href="http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/index.html"&gt;APIs that JSF provides&lt;/a&gt;.
&lt;br /&gt;
This is where the RichFaces CDK comes in. &amp;nbsp;The RichFaces team provides the CDK as a means for developers to write JSF components with many of the simplifying advantages of the JSF 2 composite components, but also with the full power and flexibility provided by the JSF component APIs.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;JSF Components simplified with the CDK&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
To understand how to use the CDK, one first has to understand how JSF components are put together. &amp;nbsp;At the end of the day, JSF components are built out of Java classes, and the CDK is simply an effective means to generate those classes.&lt;br /&gt;
&lt;br /&gt;
To build a JSF component, one starts by extending the UIComponent class. &amp;nbsp;This class defines the attributes and API of your component and is responsible for hooking into the JSF state saving mechanism. &amp;nbsp;While you could put your rendering code into this component class itself, you’re better off putting that rendering code in a separate Renderer class. &amp;nbsp;You’ll also end up writing a TagHandler class to couple the Render and component. &amp;nbsp;And should your component fire FacesEvents, well you’ll need to implement additional interfaces and provide more classes. &amp;nbsp;Lastly you’ll need to register these classes in the faces-config.xml and provide a taglib.xml file. &amp;nbsp;Now there’s a mouthful!&lt;br /&gt;
&lt;br /&gt;
The CDK simplifies this all for us, by generating a lot of the above code. &amp;nbsp;All we need to create when we use the CDK is a component base class, and an xhtml file to define the rendering behaviour called the “Renderer template” . &amp;nbsp;This Renderer template is designed to build on the JSF 2 composite component mechanism, so if you can build JSF 2 composite components, you’re already half-way there!&lt;br /&gt;
&lt;br /&gt;
With the component base class, the Renderer template, and the annotations that couple them, the CDK is able to generate the rest of the required files for us. &amp;nbsp;There is nothing sub-standard about these generated classes - they are full-fledged JSF components in every way! &amp;nbsp;In fact, much of the RichFaces 4 component suite is built using the CDK!&lt;br /&gt;
&lt;br /&gt;
There is a lot of detail to cover in how to write the component base class, and the accompanying Renderer template. &amp;nbsp;I’ll begin covering these details in my next post, where we will write a “Hello world” JSF component using the CDK. &amp;nbsp;But if you can’t wait for my post, feel free to dive into the&amp;nbsp;&lt;a href="http://community.jboss.org/wiki/RichFacesCDKHowTos"&gt;RichFaces CDK docs&lt;/a&gt;.
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2610847087662018542?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2610847087662018542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/08/richfaces-4-cdk-introduction.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2610847087662018542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2610847087662018542'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/08/richfaces-4-cdk-introduction.html' title='RichFaces 4 CDK | Introduction'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-9080335524381739841</id><published>2011-08-16T10:09:00.000-07:00</published><updated>2011-11-21T14:17:04.636-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RF41'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4.1.0.M1 Release Announcement</title><content type='html'>&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.21093899151310325" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The &lt;a href="http://richfaces.org/"&gt;RichFaces&lt;/a&gt; team is proud to announce the first milestone release of RichFaces 4.1. This release includes some significant contributions from community members, adding to and building on top of the efforts of the RichFaces core developer team! You can find this development release on the project’s &lt;/span&gt;&lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;download page&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and check out our “&lt;/span&gt;&lt;a href="http://community.jboss.org/wiki/GettingStartedWithRichFaces4x"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;getting started&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;” resources.&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;First Milestone for 4.1&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The 4.1.0 Milestone1 release includes several highly anticipated features and improvements in RichFaces 4. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We have new components:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editor&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Pick List&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ordering List&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Notify&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In addition, we’ve made some big improvements to the Push component. &amp;nbsp;It is now more lightweight, decoupled from JMS, and support has been added for &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Comet_%28programming%29"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Comet&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; - the websockets-like light alternative for long-poliing. &amp;nbsp;A Push demo has also been added to the RichFaces Showcase, with support for JBoss AS 7 (although not yet visible in the &lt;/span&gt;&lt;a href="http://richfaces.org/showcase"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;public showcase&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, the code is &lt;/span&gt;&lt;a href="https://github.com/richfaces/showcase/tree/develop/src/main/webapp/richfaces/push"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;available&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;).&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In addition, a new sample application &lt;/span&gt;&lt;a href="https://github.com/richfaces/tweetstream"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Tweetstream&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; has been developed. &amp;nbsp;This application demonstrates the “mobile platform” directions and capabilities that can be expected from future releases of RichFaces.&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;New Components&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Three of the new components, “Editor”, “Pick List”, and “Ordering List” are components that were available in RichFaces 3, but were not present in the initial RichFaces 4 release. &amp;nbsp;With this first milestone release for RichFaces 4.1, we have remedied this and provided these missing components. &amp;nbsp;The 4th new component, “Notify”, is a community contributed component, the first component contributed from &lt;/span&gt;&lt;a href="http://community.jboss.org/people/blabno"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Bernard Labno&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; - a RichFaces community enthusiast. &amp;nbsp;Let’s take a closer look at each of these components:&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Editor component has been rewritten from scratch, and is now based on the &lt;/span&gt;&lt;a href="http://ckeditor.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;CKEditor&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; implementation. It traditionally supports two modes of toolbar button configuration (basic and full) and nicely integrates to rest of the RichFaces AJAX &amp;nbsp;framework. In the milestone 2 release, it will also get a new Look &amp;amp; Feel to be better aligned with the rest of the component suite. &amp;nbsp;For further details, see &lt;/span&gt;&lt;a href="http://rik-ansikter.blogspot.com/2011/08/editor-for-richfaces-41.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Lukas’ blog post&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; on the rich editor.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="416px;" src="https://lh5.googleusercontent.com/_yiLJd4I_7c4rChv68nXVqUv4PP5Sk-COWSIj5ZXCeigK-VP333mCMmKqZLC6Q1LDT64rTaklvje1klD82xrl9kI1qi9eH9YSSv21rcVK__qjj62w9w" width="606px;" /&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Pick List and Ordering List are two other components that were sorely missed by the community since RichFaces 3, and they have now been re-introduced. &amp;nbsp;The new Pick List in RichFaces 4 incorporates the functionality of both the List Shuttle and Pick List components from RichFaces 3. The API of this Pick List component has been specifically redesigned to follow the f:selectItems pattern and to allow a quick transition from the h:selectMany component.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="102px;" src="https://lh5.googleusercontent.com/erl-mkM1rA5f6m8xet-d3FtUdYIwPFnaBNEl0t_NF-bmfTe3IVe5f-5aM7tkUzA-XvbXkq3SWgQoU8766ttyw7vn5lSGmIVGQTVgnAemeBFKPVcGe6k" width="568px;" /&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lastly, the Notify component provides interactive feedback from your applications complementary to standard messages. &amp;nbsp;The look and behaviour of the Notify component was Inspired by Mac OS’s growl to provide your JSF applications with a more rich user experience&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The components provided in this first milestone are functionally complete, so you can take them for a spin, and provide us with your feedback about any functionality or key API’s we might have missed (or where we got it right!)&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Migration to Git&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;New features and functionality have not been our sole focus. In preparation for this release we’ve migrated our entire framework to &lt;/span&gt;&lt;a href="https://github.com/richfaces"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and broken it up into several modules. &amp;nbsp;The main goal we had in mind with this migration was to make contributing to the RichFaces framework easier, and help us extend the level of collaboration. &amp;nbsp;I think we can say we’ve definitely achieved this goal, given the number of community contributions we’ve already seen.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;With GitHub, it is now pretty easy to send patches to the project in form of pull requests. Thanks to &lt;/span&gt;&lt;a href="http://nvie.com/posts/a-successful-git-branching-model/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;git-flow&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; it is now trivial process to develop new features in feature branches and, because of &lt;/span&gt;&lt;a href="http://git-scm.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Git&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; itself, it is easy to merge them back into the most recent development branch.&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Next Milestone&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;a href="https://issues.jboss.org/browse/RF/fixforversion/12316708"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Milestone 2&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; will be a great sprint for ironing out the details of the new components’ features as well as polish their look&amp;amp;feel. &amp;nbsp;Most importantly however, we will focus on further stabilization of the framework by fixing bugs both reported by the community and those found by our QE team. A lot of work is also planned for mobile devices support, and as previously mentioned, we are working on initial versions of a Mobile Showcase.&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Face to Face Meeting&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;After Milestone2, the globally distributed RichFaces team will get together with some other JBoss teams in Toronto, Canada, &amp;nbsp;to discuss the future of the framework itself and it’s integration with other parts of Java EE. &amp;nbsp;The goal of this meeting is to offer you, the developer, the best development experience possible. Should you be around Toronto in September and would like to join us for an evening beer, you are more than welcome. ;-)&lt;/span&gt;&lt;br /&gt;
&lt;h3 dir="ltr"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Give it a spin!&lt;/span&gt;&lt;/h3&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Go ahead, and &lt;/span&gt;&lt;a href="http://www.jboss.org/richfaces/download/milestones"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;download&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; this first Milestone release of RichFaces 4.1 (or add the &lt;/span&gt;&lt;a href="http://community.jboss.org/wiki/HowToAddRichFaces4xToMavenBasedProject"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;dependency&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to your maven pom file), and give the new components a spin. &amp;nbsp;Let us know what you think, either where we’ve missed something, or where we got it right, and help shape the component for the upcoming 4.1.0.Final release.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-9080335524381739841?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/9080335524381739841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/08/richfaces-410m1-release-announcement.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/9080335524381739841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/9080335524381739841'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/08/richfaces-410m1-release-announcement.html' title='RichFaces 4.1.0.M1 Release Announcement'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-9036728710283264039</id><published>2011-08-16T09:53:00.001-07:00</published><updated>2011-08-16T09:53:12.341-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><title type='text'>Seam Faces 3.0.2.Final released</title><content type='html'>&lt;br /&gt;
(cross posted from :&lt;a href="http://community.jboss.org/people/bleathem/blog/2011/06/20/seam-faces-302final-released"&gt;http://community.jboss.org/people/bleathem/blog/2011/06/20/seam-faces-302final-released&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Great news,&amp;nbsp;&lt;a href="http://seamframework.org/Seam3/FacesModuleHome"&gt;Seam Faces&lt;/a&gt;&amp;nbsp;3.0.2.Final has been&amp;nbsp;&lt;a href="https://repository.jboss.org/nexus/content/groups/public/org/jboss/seam/faces/seam-faces/3.0.2.Final/"&gt;released&lt;/a&gt;! It is available for download via the&amp;nbsp;&lt;a _jive_internal="true" href="http://community.jboss.org/docs/DOC-15170"&gt;JBoss Nexus repository&lt;/a&gt;. Primarily a bug fix release, Seam Faces 3.0.2.Final resolves some compatibility issues with MyFaces, thanks to contributions from&amp;nbsp;&lt;a _jive_internal="true" href="http://community.jboss.org/people/chkal"&gt;Christian Kaltepoth&lt;/a&gt;. Additionally,&amp;nbsp;&lt;a _jive_internal="true" href="http://community.jboss.org/people/spinner"&gt;José Freitas&lt;/a&gt;&amp;nbsp;has contributed some fixes to issues with the UIInputContainer. A full list of the bugs fixed is available&amp;nbsp;&lt;a href="https://issues.jboss.org/browse/SEAMFACES/fixforversion/12316287"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I'm very excited about the community involvement in this release, and with more community members coming forward with features they'd like to see implemented/improved. If you have you're own itches you'd like to scratch, feel free to comment in the&amp;nbsp;&lt;a href="http://seamframework.org/Community/Forums"&gt;forums&lt;/a&gt;, file an issue in&amp;nbsp;&lt;a href="https://issues.jboss.org/browse/SEAMFACES"&gt;JIRA&lt;/a&gt;, or drop in on&amp;nbsp;&lt;a href="http://seamframework.org/Community/SeamCommunity#H-IRC"&gt;IRC&lt;/a&gt;. Then it's stratight to the source to fork the project on&amp;nbsp;&lt;a href="https://github.com/seam/faces"&gt;github&lt;/a&gt;! You're pull requests are very much appreciated!&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Brian Leathem&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-9036728710283264039?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/9036728710283264039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/08/seam-faces-302final-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/9036728710283264039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/9036728710283264039'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/08/seam-faces-302final-released.html' title='Seam Faces 3.0.2.Final released'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2567857104696171767</id><published>2011-06-17T08:32:00.000-07:00</published><updated>2011-06-17T08:37:22.103-07:00</updated><title type='text'>Seam Faces @JAXConf/JSF Summit</title><content type='html'>It's been a while since my last post, as I've gone through a significant career change.  I am now working for &lt;a href="http://redhat.com"&gt;Red Hat&lt;/a&gt;, as a core developer on the &lt;a href="http://richfaces.org"&gt;RichFaces project&lt;/a&gt;.  I am also representing Red hat on the &lt;a href="http://www.jcp.org/en/jsr/detail?id=344"&gt;JSR-344: JSF 2.2&lt;/a&gt; Expert Group, and will continue in my role as &lt;a href="http://seamframework.org/Seam3/FacesModule"&gt;Seam Faces&lt;/a&gt; module lead.&lt;br /&gt;
&lt;br /&gt;
As such, I'll be presenting at &lt;a href="http://jaxconf.com"&gt;JAXConf/JSF Summit&lt;/a&gt; on the &lt;a href="http://jaxconf.com/2011/speaker/#6086"&gt;topic of Seam Faces&lt;/a&gt;.  I really like this presentation, as I not only go into the features provided by Seam Faces, but I show how some of those features are implemented taking advantage of the platform extension points built into CDI and JSF.  I'll also introduce how we are using &lt;a href="http://www.jboss.org/arquillian"&gt;Arquillian&lt;/a&gt;, &lt;a href="http://www.jboss.org/shrinkwrap"&gt;Shrinkwrap&lt;/a&gt;, and &lt;a href="http://www.jboss.org/jsfunit"&gt;JSFUnit&lt;/a&gt; to test Seam Faces, and how you can use the same toolset to test your own applications with independent and isolated in-container tests.&lt;br /&gt;
&lt;br /&gt;
So if you are at JAXConf/JSF Summit, be sure to come see my talk, or grab me at any time to share your thoughts on where you would like to see Seam Faces going in the future - I'll be more than happy to discuss solutions, and point you to the &lt;a href="http://github.com/seam/faces"&gt;git repository&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2567857104696171767?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2567857104696171767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/06/seam-faces-jaxconfjsf-summit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2567857104696171767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2567857104696171767'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/06/seam-faces-jaxconfjsf-summit.html' title='Seam Faces @JAXConf/JSF Summit'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-5334542939244972628</id><published>2011-04-18T07:43:00.000-07:00</published><updated>2011-04-18T07:43:52.709-07:00</updated><title type='text'>Seam Module Spotlight: Seam Faces</title><content type='html'>This is a blog entry I wrote for &lt;a href="http://in.relation.to/Bloggers/SeamFaces301FinalReleaseAndFacesModuleSpotlight"&gt;in.relation.to&lt;/a&gt;.  I'm including it here to keep a personal record of the post.&lt;br /&gt;
&lt;br /&gt;
&lt;hr/&gt;&lt;br /&gt;
In this entry for the Seam Module Spotlight series, we will take a close look at the “view configuration” feature of Seam Faces.&lt;br /&gt;
&lt;br /&gt;
Seam Faces aims to provide JSF developers with a truly worthy framework for web development by ironing out some of JSF’s pain points, integrating tightly with CDI, and offering out of the box integration with the other Seam Modules and third party libraries.  Part of achieving this goal involves providing a means to centrally configure each of these seemingly disparate concerns, without having to create any JSF Phase listeners, nor maintain a bunch XML files.&lt;br /&gt;
&lt;br /&gt;
Adhering to the CDI core tenet of type safety, Seam Faces offers a type-safe mechanism to configure the behaviour of your JSF views.  So far these configurable behaviors include:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Restricting view access by integrating with Seam Security&lt;/li&gt;
&lt;li&gt;Configuring URL rewriting by integrating with PrettyFaces (or any other pluggable URL rewriting framework)&lt;/li&gt;
&lt;li&gt;Configuring Transactions via Seam Persistence&lt;/li&gt;
&lt;li&gt;And a personal favorite: setting “?faces-redirect=true” when navigating to a view.&lt;/li&gt;
&lt;/ol&gt;Note: the above integrations are optional, you must include the relevant jars in the application for their respective configurations to have any effect&lt;br /&gt;
&lt;br /&gt;
Lets take a closer look at the View configuration from the Seam Faces example “faces-viewconfig”:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code brush: java"&gt;@ViewConfig
public interface Pages {

  static enum Pages1 {

      @ViewPattern("/admin.xhtml")
      @Admin
      ADMIN,

      @ViewPattern("/item.xhtml")
      @UrlMapping(pattern="/item/#{id}/")
      @Owner
      ITEM,

      @ViewPattern("/*")
      @FacesRedirect
      @AccessDeniedView("/list.xhtml")
      @LoginView("/login.xhtml")
      ALL;

  }
}
&lt;/pre&gt;At first glance, the structure of the above configuration might appear odd.  The @ViewConfig annotation is on the interface, and the interface is nothing more than a container for a static enum.  This arrangement is unfortunately required by the current CDI specification for the view configuration annotations to be scanned, and will hopefully be corrected in future iterations of the CDI spec.&lt;br /&gt;
&lt;br /&gt;
The properties of the enum are annotated with a @ViewPattern annotation, specifying to which views the adjacent annotations apply.  ViewPatterns support wildcards, and matches are made to a particular view weighted by the specificity of the match; therefore, if two annotations paired with different @ViewPatterns conflict for a given view, the annotation paired with the more specific @ViewPattern takes precedence.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Seam Security via the @ViewConfig&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Now let’s look at the Seam Security annotations @Admin and @Owner.  These annotations are user-provided, meaning they were built solely for this example, and are qualified with the Seam Security qualifier: @SecurityBindingType.  When a view is requested that matches a pattern in the @ViewConfig annotated with such an annotation, Seam Faces invokes Seam Security to determine if access should be granted. Authorization is evaluated with the following class:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code brush:java"&gt;public class SecurityRules {
public @Secures @Owner boolean ownerChecker(Identity identity, @Current Item item) {
if (item == null || identity.getUser() == null) {
return false;
} else {
return item.getOwner().equals(identity.getUser().getId());
}
}

public @Secures @Admin boolean adminChecker(Identity identity) {
if (identity.getUser() == null) {
return false;
} else {
return "admin".equals(identity.getUser().getId());
}
}
}
&lt;/pre&gt;&lt;br /&gt;
In this way, views annotated with the @Owner annotation are secured by the @Secures method annotated with the same @Owner annotation.  Coupled with parameter injection, this is truly a declarative syntax for securing view access.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the @Admin annotation is defined with an additional qualifier:&lt;br /&gt;
&lt;pre class="code brush:java"&gt;@RestrictAtPhase(PhaseIdType.RESTORE_VIEW)
&lt;/pre&gt;This annotation causes the security restriction to be applied at the “Restore View” phase, rather than the default phases: “Invoke Application” and “Render Response”.  These default phases were chosen in order for application data to be present and allow access restrictions to be contextual.  The default phases also mean that the security restrictions are evaluated twice per lifecycle, as the view often changes at the end of the “Invoke Application” phase.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;URL rewriting via the @ViewConfig&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
The view config also let’s us configure URL rewriting for a view using the @UrlMapping annotation.  In the above @ViewConfig, the URL /item.jsf?item =1 would get mapped into /item/1/, courtesy of PrettyFaces and the annotation: @UrlMapping(“/item/#{id}”).  In this mapping, “#{id}” tells the rewriting-engine to treat the last portion of the URL as the value of the the query-parameter named “id”.  By integrating the configuration of rewriting URLs alongside the rest of the view configuration, Seam Faces attempts to make this powerful technology more accessible, and a core part of JSF application development.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Setting faces-redirect=true&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
A seemingly simple annotation, @FacesRedirect is a surprisingly useful one.  When this annotation is present with a @ViewPattern, any navigation to a matching view is intercepted, and the faces-redirect attribute is activated.  In the provided example the @FacesRedirect annotation is applied once to the pattern “/*”, which applies the configuration to all views.  One could optionally override this catch all setting on a more specific pattern, or on an individual view, with the annotation @FacesRedirect(false).  This annotation has a special place close to my heart - no more “?faces-redirect=true” peppered throughout any more applications!  &lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Seam Persistence via the @ViewConfig&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Last, but not least, there is the SeamManagedTransaction annotation that can be applied in the @ViewConfig.  This allows transactional behaviour to be defined on a per view basis.  Exploring the possibilities here will be the subject matter for a subsequent post.&lt;br /&gt;
&lt;br /&gt;
The future for the @ViewConfig component of Seam Faces is bright, with many more capabilities to be added.  In addition, the @ViewConfig presented here is merely a front-end to an internal store of the view configuration data.  This opens up the possibility of providing alternate means of populating the view config data store, writing extensions to perform custom operations on view config data for your individual application, and more.  One solution being explored is to introduce child tags to the f:metadata tag, which will allow view related concerns to be defined from within the view itself.  Additionally, configuration sources like xml and database persistence could be incorporated to provide developers with more options.&lt;br /&gt;
&lt;br /&gt;
Seam Faces provides a centralised, type safe way of configuring the behaviour of your JSF views.  Try the ViewConfig  out and be sure to send in your feedback.  This is still early days for the feature, and all feedback is very much appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-5334542939244972628?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/5334542939244972628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/04/seam-module-spotlight-seam-faces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5334542939244972628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/5334542939244972628'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/04/seam-module-spotlight-seam-faces.html' title='Seam Module Spotlight: Seam Faces'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2743343522731842273</id><published>2011-04-03T20:44:00.000-07:00</published><updated>2011-04-10T17:50:42.781-07:00</updated><title type='text'>RichFaces Plugin for Seam Forge</title><content type='html'>If you haven't yet heard about it, &lt;a href="http://seamframework.org/Documentation/SeamForge"&gt;Seam Forge&lt;/a&gt; is a fantastic new tool from JBoss for rapid application development of standards based applications.  Forge allows a developer to quickly set up the scaffolding for an application, and quickly get to the matter of solving domain problems.&lt;br /&gt;
&lt;br /&gt;
What makes Forge particularly interesting, from my perspective, is the way it was built with plugins in mind as a defining way in which the platform is meant to be extended.  To take this new tool for a spin, I created a Forge plugin for &lt;a href="http://www.jboss.org/richfaces"&gt;RichFaces&lt;/a&gt; - the killer component kit for JSF 2.&lt;br /&gt;
&lt;br /&gt;
For instructions on installing Forge, refer to the &lt;a href="http://seamframework.org/Documentation/SeamForge"&gt;Forge Documentation&lt;/a&gt;.  The following guide assumes you have Forge installed and functional.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style='color:green; border: solid green 2px; padding : 10px'&gt;** The instructions in this blog are for the 0.1.0 version of the RichFaces plugin for Seam Forge.  See the project's &lt;a href="https://github.com/bleathem/richfaces-forge-plugin/blob/master/README.txt"&gt;README.txt&lt;/a&gt; for update usage instructions. **&lt;br /&gt;
&lt;/h4&gt;&lt;br /&gt;
First, lets install the RichFaces plugin for forge (installing from git!):&lt;br /&gt;
&lt;pre class="code"&gt;$ forge git-plugin git://github.com/bleathem/richfaces-forge-plugin.git
&lt;/pre&gt;&lt;br /&gt;
Forge makes it easy to create a new project:&lt;br /&gt;
&lt;pre class="code"&gt;$ new-project --named richfacesApp --topLevelPackage ca.bleathem.richfaces.test --projectFolder richfacesApp
&lt;/pre&gt;&lt;br /&gt;
Next, make the project a Java EE wep app, by installing the "servlet facet":&lt;br /&gt;
&lt;pre class="code"&gt;$ project install-facet forge.spec.servlet
&lt;/pre&gt;&lt;br /&gt;
Now, we can run the "richfaces" command, with no arguments to see the options available:&lt;br /&gt;
&lt;pre class="code"&gt;$ richfaces
Use the install commands to install:
  install-base: maven dependencies, and web.xml configuration
  install-example-facelet: a sample RichFaces enabled facelet file with backing bean
  install: both base and example-facelet
&lt;/pre&gt;&lt;br /&gt;
Running "richfaces install" duplicates the behaviour of the existing &lt;a href="http://docs.jboss.org/richfaces/latest_4_0_X/Developer_Guide/en-US/html/chap-Developer_Guide-Getting_started_with_RichFaces.html#sect-Component_Reference-Using_RichFaces_with_Maven-Using_the_RichFaces_project_archetype"&gt;RichFaces maven archetype&lt;/a&gt;.  If you have an existing project, and you just want to use forge to add the RichFaces dependencies and setup the web.xml, run "richfaces isntall-base".  For our vanilla application, we'll run the full install, and see a simple facelet page with an input component "ajaxified" with RichFaces.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;$ richfaces install
***SUCCESS*** RichFaces BOM dependency has been installed.
***SUCCESS*** org.richfaces.ui:richfaces-components-ui:4.0.0.Final dependency has been installed.
***SUCCESS*** org.richfaces.core:richfaces-core-impl:4.0.0.Final dependency has been installed.
***SUCCESS*** javax.servlet:servlet-api dependency has been installed.
***SUCCESS*** javax.servlet.jsp:jsp-api dependency has been installed.
***SUCCESS*** javax.servlet:jstl dependency has been installed.
***SUCCESS*** net.sf.ehcache:ehcache dependency has been installed.
***SUCCESS*** javax.faces.PROJECT_STAGE context-param has been installed.
***SUCCESS*** javax.faces.SKIP_COMMENTS context-param has been installed.
***SUCCESS*** Faces Servlet mapping has been installed.
Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/WEB-INF/web.xml
Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/templates/template.xhtml
***SUCCESS*** template.xhtml file has been installed.
Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/index.xhtml
***SUCCESS*** index.xhtml file has been installed.
Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/java/ca/bleathem/richfaces/test/RichBean.java
***SUCCESS*** RichBean class has been installed.
&lt;/pre&gt;&lt;br /&gt;
This new RichFaces enabled maven project is ready to be opened up in your favorite IDE (I used Netbeans) and run in your preferred run-time container (I used Glassfish 3.1).&lt;br /&gt;
&lt;br /&gt;
This is early days for this plugin.  I achieved my initial goal of being functionally equivalent to the maven archetype, but there is plenty of room for improvement.  Some of my ideas are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Make the sample facelet page more attractive, and showcase more of RichFaces capabilities&lt;/li&gt;
&lt;li&gt;Test and support the generated application in more containers - including Servlet 2.5&lt;/li&gt;
&lt;li&gt;Scan and convert vanilla facelet tags (or tags from other frameworks) converting them to RichFaces components.  I'm thinking specifically dataTables, but I'm sure this would work well for other components.&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
Fork away, lets show the power of Seam Forge with the RichFaces plugin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2743343522731842273?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2743343522731842273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/04/richfaces-plugin-for-seam-forge.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2743343522731842273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2743343522731842273'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/04/richfaces-plugin-for-seam-forge.html' title='RichFaces Plugin for Seam Forge'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-4364847404015435078</id><published>2011-03-27T22:03:00.000-07:00</published><updated>2011-03-27T22:26:05.574-07:00</updated><title type='text'>View Configuration with Seam 3 Faces - the Introduction</title><content type='html'>&lt;a href="http://seamframework.org/Seam3/FacesModule" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://seamframework.org/service/File/147460" /&gt;&lt;/a&gt;In &lt;a href="http://seamframework.org/Seam3/FacesModule"&gt;Seam Faces&lt;/a&gt; we've provided JSF developers with a mechanism to centrally configure various aspects of their JSF views. Concerns like transaction control and view security are currently supported, and support for URL rewriting, XSRF attack prevention, and JSF navigation is in the planning stage.&lt;br /&gt;
&lt;br /&gt;
The end-goal is to support view configuration via multiple sources  (including some support for &amp;lt;f:metadata&amp;gt; child tags).  For now we  provide type-safe configuration using annotations on enums.  The benefit  of type-safety for page configuration is a tremendous benefit, and will  become evident in the following code examples.&lt;br /&gt;
&lt;br /&gt;
In this post I will cover the @ViewConfig security annotations supported  in the Seam 3.0 release.  This view configuration feature is still  considered "beta" and the @ViewConfig API is subject to change in  upcoming releases - based on the feedback we get from you, our community  of Seam developers!&lt;br /&gt;
&lt;br /&gt;
(Note: Seam Faces delegates authorization checks to &lt;a href="http://seamframework.org/Seam3/SecurityModule"&gt;Seam Security&lt;/a&gt;, which must be included in your project for the security annotations to have any effect)&lt;br /&gt;
&lt;br /&gt;
Consider this @ViewConfig interface:&lt;br /&gt;
&lt;pre class="code brush: java"&gt;@ViewConfig
public interface Pages {
 
    static enum Pages1 {
 
        @ViewPattern("/*")
        @LoginView("/login.xhtml")
        @AccessDeniedView("/item/list.xhtml")
        ALL,
 
        @ViewPattern("/admin/*")
        @Admin(restrictAtPhase=RESTORE_VIEW)
        ADMIN,
         
        @ViewPattern("/item.xhtml")
        @Owner
        ITEM;
    }
}
&lt;/pre&gt;&lt;br /&gt;
The following annotations are available:&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;@ViewConfig&lt;/dt&gt;
&lt;dd&gt;This marker annotation identifies this interface as containing view configuration annotated enums.&lt;/dd&gt;
&lt;dt&gt;@ViewPattern&lt;/dt&gt;
&lt;dd&gt;This contains the view pattern to which these annotations apply.  Notice the use of wildcards in the view&lt;/dd&gt;
&lt;dt&gt;@LoginView, @AccessDeniedView&lt;/dt&gt;
&lt;dd&gt;The viewIds to redirect to for for authentication, and authorization failure&lt;/dd&gt;
&lt;dt&gt;@Admin, @Owner&lt;/dt&gt;
&lt;dd&gt;These "security" annotations are qualified with @SecureBindingType from Seam Security. The authorization methods themselves are each annotated with both the @Secures annotation and the corresponding "security" annotation&lt;/dd&gt;
&lt;dt&gt;@RestrictAtPhase&lt;/dt&gt;
&lt;dd&gt;Specify the phases at which the security restrictions will be applied.  Default phases are the Invoke Application and Render Response phases&lt;/dd&gt; &lt;/dl&gt;&lt;br /&gt;
The secret sauce is in the annotations qualified with the @SecureBindingType qualifier.&lt;br /&gt;
&lt;pre class="code brush: java"&gt;@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
public @interface Owner {
}
&lt;/pre&gt;&lt;br /&gt;
These annotations are mapped to methods that check for appropriate  authorization, functionality provided by the Seam Security module.  The  authorization methods themselves are annotated with @Secure and the  corresponding @SecureBindingType qualified annotation, as in the class  below:&lt;br /&gt;
&lt;pre class="code brush: java"&gt;public class SecurityRules {
 
    private transient final Logger logger = Logger.getLogger(SecurityRules.class.getName());
 
    public @Secures @Owner boolean ownerCheck(Identity identity) {
        if (identity == null || identity.getUser() == null) {
            logger.info("Identity/User is null");
            return false;
        } else {
            String id = identity.getUser().getId();
            logger.infof("Username is: %s", id);
            return "demo".equals(id);
        }
    }
 
    public @Secures @Admin boolean adminCheck() {
        return false; // No one is an admin!
    }
}
&lt;/pre&gt;&lt;br /&gt;
So how do these pieces fit together?  Consider a request for the view &lt;i&gt;/list.xhtml&lt;/i&gt;.  This would match the view pattern, "/*" and access would be granted, as no  SecureBindingType qualified annotation is present.  On the other hand, a request to the view &lt;i&gt;/item.xhtml&lt;/i&gt; is matched by the more specific pattern "/item.xhtml", and the request would be intercepted.  Authorization would be checked according to the method annotated by @Secures, and @Owner, and the user redirected to the login view &lt;i&gt;/login.xhtml&lt;/i&gt;.  If the user was already logged in, and authorization still failed, the user would be instead redirected to the access denied view. If these views are not defined by their respective annotations, a 401 response is returned.&lt;br /&gt;
&lt;br /&gt;
The enforcement of security restrictions is highly tuned to the JSF  life-cycle. By default, authorization is checked before the Invoke Application and Render Response phases (because the view requested may  change between these phases). However, by including a "restrictAtPhase"  method on SecureBindingType qualified annotation, the phases at which that  restriction is applied can be fine tuned. Additionally, the  @RestrictAtPhase annotation can be applied to an enum value to change the  default phase for all SecureBindingType qualified annotations on enums  values that match that pattern.  In the example above, the @Admin restriction would be checked at the RestoreView phase, and the @Admin annotation is defined as follows:&lt;br /&gt;
&lt;pre class="code brush: java"&gt;@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
public @interface Admin {
    public PhaseIdType[] restrictAtPhase();
}
&lt;/pre&gt;&lt;br /&gt;
While there are a lot of controls to fine tune your security  requirements, the defaults are sensible (we hope!) and your security  configuration can be quite straight forward. Of course one still has to configure Seam Security to perform the authentication - see the &lt;a href="http://seamframework.org/Seam3/SecurityModule"&gt;Seam 3 Security module page&lt;/a&gt; for further details.&lt;br /&gt;
&lt;br /&gt;
In an upcoming blog series, I'll examine use cases, and propose how we  can build more annotations into the view configuration to further centralize application configuration. The @ViewConfig API will also be  further refined, based on community feedback. Feel free to leave  comments here, or in one of the many &lt;a href="http://seamframework.org/Community"&gt;communication avenues of the Seam framework&lt;/a&gt; with any ideas you have on how this feature can be refined. And of course, we're always looking for more developers to &lt;a href="http://seamframework.org/Seam3/Contribute"&gt;jump in and contribute&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-4364847404015435078?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/4364847404015435078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/03/view-configuration-with-seam-3-faces.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4364847404015435078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4364847404015435078'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/03/view-configuration-with-seam-3-faces.html' title='View Configuration with Seam 3 Faces - the Introduction'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-4119025294156597334</id><published>2011-02-16T19:15:00.001-08:00</published><updated>2011-03-27T09:46:32.032-07:00</updated><title type='text'>Updating Weld in Glassfish 3.1</title><content type='html'>Like any piece of software, &lt;a href="http://seamframework.org/Weld"&gt;Weld&lt;/a&gt;, the reference implementation for &lt;a href="http://jcp.org/en/jsr/detail?id=299"&gt;JSR-299&lt;/a&gt;, is continually improving as bugs are discovered, and performance is optimized.&amp;nbsp; However, since Weld is tightly coupled with your application server of choice, using the latest weld is slightly more complicated than just bundling a weld release with your web application.&amp;nbsp; This post outlines the relatively painless process of updating the Weld implementation of Glassfish 3.1 to use the latest SNAPSHOT, or any later release for that matter.&lt;br /&gt;
&lt;br /&gt;
A quick search of the Glassfish folder structure identifies the Weld implementation:&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;$ find /opt/sun/glassfish/ -iname '*weld*'
/opt/sun/glassfish/glassfish/modules/weld-integration-fragment.jar
/opt/sun/glassfish/glassfish/modules/weld-integration.jar
/opt/sun/glassfish/glassfish/modules/weld-osgi-bundle.jar
&lt;/pre&gt;&lt;br /&gt;
The weld-osgi-bundle.jar is the file we have to replace.  But how does one go about creating such an OSGI bundle?  I for one am not an OSGI expert, and I'm sure I'm not alone :P&lt;br /&gt;
&lt;br /&gt;
&lt;hr/&gt;Update: The Weld OSGI bundle is now published to the maven repository.&amp;nbsp; Instead of building it yourself, you can download it via: &lt;style type="text/css"&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt; &lt;br /&gt;
&lt;div style="margin: 0px; text-indent: 0px;"&gt;&lt;a href="https://repository.jboss.org/nexus/content/repositories/snapshots/org/jboss/weld/weld-osgi-bundle/1.1.0-SNAPSHOT/"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;https://repository.jboss.org/nexus/content/repositories/snapshots/org/jboss/weld/weld-osgi-bundle/1.1.0-SNAPSHOT/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;hr/&gt;Not to worry, the weld guys have this in hand.  The OSGI bundle is built as an artifact during the weld build.  To begin, proceed to the&lt;a href="https://github.com/weld/core"&gt; Weld core github page&lt;/a&gt;,&amp;nbsp; and checkout the project:&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;git clone https://github.com/weld/core.git
cd core
&lt;/pre&gt;&lt;br /&gt;
I had a bit of trouble building the entire project, due to the requirement of some &lt;a href="http://community.jboss.org/wiki/MavenGettingStarted-Developers"&gt;deprecated artifacts&lt;/a&gt;.  So just build the impl module in core:&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;cd impl
mvn clean install
&lt;/pre&gt;&lt;br /&gt;
Next, build the OSGI bundle:&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;cd ../bundles/osgi/
mvn clean install
&lt;/pre&gt;&lt;br /&gt;
Now take that newly created Weld OSGI bundle, and use it to replace the Glassfish weld-osgi-bundle.jar file we located earlier.&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;cp target/weld-osgi-bundle-1.1.0-SNAPSHOT.jar /opt/sun/glassfish/glassfish/modules/weld-osgi-bundle.jar
&lt;/pre&gt;&lt;br /&gt;
Restart Glassfish, and you should see a message in the log file along the lines of:&lt;br /&gt;
&lt;pre class="code brush: bash"&gt;INFO: Updated bundle 75 from /opt/sun/glassfish-3.1-b41/glassfish/modules/weld-osgi-bundle.jar
&lt;/pre&gt;&lt;br /&gt;
And there you have it, Glassfish 3.1 running with the latest Weld.&amp;nbsp; Thanks to Stuart Douglas who guided me through the process!&lt;br /&gt;
&lt;br /&gt;
Note: this will not work to get Weld 1.1+ to run on Glassfish 3.0.1, as the interface between Glassfish and Weld changed considerably with Weld 1.1/Glassfish 3.1.  However that interface is for the most part stable, so we can use newer releases of Weld on Glassfish 3.1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-4119025294156597334?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/4119025294156597334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/02/updating-weld-in-glassfish-31.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4119025294156597334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4119025294156597334'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/02/updating-weld-in-glassfish-31.html' title='Updating Weld in Glassfish 3.1'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-4632423929272906721</id><published>2011-01-29T11:33:00.000-08:00</published><updated>2011-03-27T09:50:16.396-07:00</updated><title type='text'>RESTful URLs, with JSF 2</title><content type='html'>JSF 2 introduced the ability to create RESTful URLs with the introduction of the &amp;lt;f:viewParam&amp;gt; tag.&amp;nbsp; The tag is easy enough to use, you simply place it in the &amp;lt;f:metadate&amp;gt; tag, and configure the attributes to decode the url.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code brush: xml"&gt;&amp;lt;f:metadata&amp;gt;
     &amp;lt;f:viewParam /&amp;gt;
&amp;lt;/f:metadata&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
There are no words to explain how great a feature this is for JSF.  The old "every request is a POST" theory didn't pan out.  RESTful URLs are bookmarkable, and meaningful to end-users. Unfortunately they are still a bit tricky to use in vanilla JSF, as there are only three backing bean scopes in "vanilla" Java EE 6 that are capable of dealing with business transactions/conversations, and each currently has it's own set of limitations.  They are the Session, Conversation, and View scopes&lt;br /&gt;
&lt;br /&gt;
First the Session scope - don't use it!  The Session scope is essentially global for your user as they interact with your web application; there is no concept of a business conversation.  In short, you'll end up with a scalability issue as your session fills up with business objects that are no longer relevant to the current user task.&lt;br /&gt;
&lt;br /&gt;
The second scope to consider is the Conversation scope introduced in Java EE 6 with CDI.  It can span multiple requests, but is shorter lived than the Session.  It at first seems great, but if you're not careful, it breaks the concept of RESTful URLs by tagging the nasty little "cid=#" parameter to your query string.  If the user bookmarks, or otherwise shares the URL, a conversation expired exception will be thrown when the URL is later reloaded.  This quickly becomes a burden to try and deal with.  This *is* something that &lt;a href="https://issues.jboss.org/browse/WELD-549"&gt;is fixed with Weld 1.1&lt;/a&gt;, but I've got apps to write today!  &lt;br /&gt;
&lt;br /&gt;
Finally, this leaves the View scope introduced with JSF 2.  The lifetime of the bean is tied to the JSF view - ie. your bean falls out of scope when you navigate to a new view.  The short, well defined nature of this scope means you don't have the memory leak problems of the Session scope, and it doesn't mess up your RESTful URLs the way the Conversation scope does.  However, the only way to get View scoped beans to to share information between views is by using viewParams.  So if you store your business data in View scoped beans, you have to persist your data before moving on to the next view.  This is how I currently build my applications, but the views are becoming too cluttered with javascript panels and popup boxes, as I try to fit a complete business conversation in a single view.&lt;br /&gt;
&lt;br /&gt;
I'm very hopeful that with Weld 1.1, and the fix of issue &lt;a href="https://issues.jboss.org/browse/WELD-549"&gt;WELD-549&lt;/a&gt;, that I will be able to make better use of Conversation scoped beans.  I will the be able to navigate between URLs (with faces-redirect=false) with conversation scoped beans, and not have to worry about the "cid=#" parameter showing up in my URLs when the user performs navigations not relevant to the current conversation.  At least hopefully this will be the case!&lt;br /&gt;
&lt;br /&gt;
Additionally and/or alternatively, we need more scopes.  Something like the ViewAccess scope I &lt;a href="http://blog.bleathem.ca/2010/12/viewaccessscope-why-its-useful.html"&gt;last blogged about&lt;/a&gt;, where the developer doesn't have to think about bean scope so much.  Just write your app, and have the framework do the right thing.&lt;br /&gt;
&lt;br /&gt;
Please share your thoughts if you've got another way of working with RESTful URLs in your JSF apps, I would love to hear about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-4632423929272906721?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/4632423929272906721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2011/01/restful-urls-with-jsf-2.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4632423929272906721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/4632423929272906721'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2011/01/restful-urls-with-jsf-2.html' title='RESTful URLs, with JSF 2'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-1130500915591519254</id><published>2010-12-17T10:51:00.000-08:00</published><updated>2010-12-17T10:51:22.317-08:00</updated><title type='text'>ViewAccessScope - why it's useful</title><content type='html'>At first the conversation scope introduced with CDI seemed like it would be incredibly useful.&amp;nbsp; Unfortunately, working with conversations ended up being more difficult than expected.&amp;nbsp; Details of why this is, is fodder for another post.&lt;br /&gt;
&lt;br /&gt;
I ended up often using the JSF ViewScope, exposed as a CDI scope though the &lt;a href="http://seamframework.org/Seam3/FacesModule"&gt;Seam Faces&lt;/a&gt; CDI extension.&amp;nbsp; When used in conjunction with JSF viewParams to propagate information between pages, the result is a book-markable end user experience.&lt;br /&gt;
&lt;br /&gt;
The problem with this is that the "business conversation" is now restricted to a single page.&amp;nbsp; JSF components that provide a tabbed interfaces allow one to pack a lot into a single page, in a clear and structured way, but there are times when it just makes more sense to navigate to a new page (or view in JSF speak).&lt;br /&gt;
&lt;br /&gt;
This is where the &lt;a href="https://cwiki.apache.org/confluence/display/EXTCDI/Conversations"&gt;ViewAccessScope&lt;/a&gt; comes in.&amp;nbsp; It's a scope defined in MyFaces CODI (a CDI extension).&amp;nbsp; The ViewAccessScope is like a long-lived conversation, where the conversation ends as soon as you use a view that does not reference the ViewAccessScoped bean.&lt;br /&gt;
&lt;br /&gt;
The pattern I see as being incredibly useful, is to initiate a "business conversation" by passing viewParams to a page, then navigate through appropriate views to complete the process.&amp;nbsp; When we come to a page that no longer references the ViewAccessScoped bean, the business conversation is over.&amp;nbsp; This is a perfect fit with how I think of structuring my apps.&lt;br /&gt;
&lt;br /&gt;
Now to try it out, and see how well it works!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-1130500915591519254?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/1130500915591519254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/12/viewaccessscope-why-its-useful.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/1130500915591519254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/1130500915591519254'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/12/viewaccessscope-why-its-useful.html' title='ViewAccessScope - why it&apos;s useful'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-354525876138855511</id><published>2010-11-20T14:06:00.000-08:00</published><updated>2010-11-20T14:06:56.659-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java ee 6'/><category scheme='http://www.blogger.com/atom/ns#' term='cdi'/><title type='text'>CDI does events too!</title><content type='html'>CDI is the new programming model introduced with Java EE 6.  An acronym for Contexts and Dependency Injection, CDI advertises well two of the programming paradigms it aims to solve.  But there is another, often overlooked sibling: Event handling.  While I'd heard it mentioned in the context of CDI, I'd never really paid much attention - I was probably too busy trying to wrap my head around Conversations, and how CDI provides Dependency Injection.  And me being me, once I learn something cool, I have to tell everyone who will isten all about it!&lt;br /&gt;
&lt;br /&gt;
Adam Bien does a fantastic job introducing CDI events in his &lt;a href="http://www.adam-bien.com/roller/abien/entry/java_ee_6_observer_with"&gt;blog entry&lt;/a&gt;.  There are only three really noteworthy lines of code that I will repeat here: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;@Inject Event&lt;helloevent&gt; events; &lt;/helloevent&gt;&lt;/li&gt;
&lt;li&gt;&lt;helloevent&gt; events.fire(new HelloEvent(...)); &lt;/helloevent&gt;&lt;/li&gt;
&lt;li&gt;&lt;helloevent&gt; public void listenToHello(@Observes HelloEvent helloEvent){ ... }&lt;/helloevent&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;helloevent&gt;These three lines are all that's required to produce and observe the event.  Anyone who's programmed with Swing knows the benefit of decoupling concerns with action events and action listeners.&amp;nbsp; This is the same thing, only far more elegantly implemented.&lt;/helloevent&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;helloevent&gt;One of distinguishing points for me is the POJO nature of the events.&amp;nbsp; With nothing to extend or implement, they can be as simple or as complex as necessary.&amp;nbsp; All without the loss of (compile-time) type safety, due to the generic implementation.&lt;/helloevent&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;helloevent&gt;Well done guys, CDI just got that much better for me! &lt;/helloevent&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-354525876138855511?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/354525876138855511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/11/cdi-does-events-too.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/354525876138855511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/354525876138855511'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/11/cdi-does-events-too.html' title='CDI does events too!'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2060374425980797169</id><published>2010-07-15T13:10:00.000-07:00</published><updated>2010-07-26T08:39:29.157-07:00</updated><title type='text'>My Glassfish support subscription came through - finally</title><content type='html'>&lt;p&gt;Call me eager, call me insane, I had a JavaEE 6 app up and running in production on &lt;a href="http://glassfish.dev.java.net/"&gt;Glassfish&lt;/a&gt; 3.0 one month after it's release.  The improvements in JSF 2 and CDI were too compelling for me to hold off adopting, and sure enough, the application was quick and painless to develop.
&lt;/p&gt;
&lt;p&gt;
I did however pay a price for being an early adopter - a Glassfish / Weld bug was preventing my JSF login pages from working.  Fortunately I was able to quickly find an (ugly)  workaround to get me going using JSPs.  This brings me to the interesting nugget of this post: the story of my first use of our Glassfish v3 support contract.
&lt;/p&gt;
&lt;p&gt;
I promptly reported the &lt;a href="https://glassfish.dev.java.net/issues/show_bug.cgi?id=11504"&gt;bug&lt;/a&gt; to Glassfish, using the support tools provided, and was overall impressed at how quickly the bug was isolated, and a resolution was found.  All I had to do was wait for the patch, and my problem would disappear. So I waited for the patch.  And waited.  And waited...
&lt;/p&gt;
&lt;p&gt;
I reported the bug in January, and heard of a fix in February.  The patched release was supposed to come out in March.  By May, there was still no release.  I made a little noise, and got some attention from both Glassfish support, and the &lt;a href="http://blogs.sun.com/theaquarium/"&gt;Glassfish Community&lt;/a&gt;, but was told the release was delayed by Oracle &lt;a href="http://www.oracle.com/us/sun/index.htm"&gt;buying Sun&lt;/a&gt;, and the  associated "Change in Control".  I was however assured that the release was imminent.
&lt;/p&gt;
&lt;p&gt;
Sure enough, Glassfish 3.0.1 was released June 17th, with the fix to my bug - a turnaround of 5 months.  While annoyed that I had to wait so long for the fix, I do appreciate having that support structure in place to ensure we get our apps working.  I'm just glad we had a workaround.
&lt;/p&gt;
&lt;p&gt;
Here's to looking forward to a regular release schedule for Glassfish patches!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2060374425980797169?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2060374425980797169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/07/my-glssfish-support-subscription-came.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2060374425980797169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2060374425980797169'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/07/my-glssfish-support-subscription-came.html' title='My Glassfish support subscription came through - finally'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2281779263863532653</id><published>2010-06-25T10:20:00.000-07:00</published><updated>2010-06-25T10:26:27.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsf2'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><title type='text'>JSF Validation Failed Notice</title><content type='html'>Here's how I show a notice on a JSF 2 page indicating that the JSF 2 postback failed due to validation errors.  The following facelet snippet is rendered only when validation fails:

&lt;pre class="code"&gt;
&amp;lt;h:outputtext 
   styleclass="errorMessage globalMessage" 
   value="Request *not* saved due to input errors" 
   rendered="#{facesContext.validationFailed}" /&amp;gt;
&lt;/pre&gt;

The user then knows they should look through the page to correct the individually marked validation failures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2281779263863532653?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2281779263863532653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/06/jsf-validation-failed-notice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2281779263863532653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2281779263863532653'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/06/jsf-validation-failed-notice.html' title='JSF Validation Failed Notice'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-6141571021652876398</id><published>2010-04-09T20:03:00.000-07:00</published><updated>2011-03-27T09:53:24.718-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='mvn'/><category scheme='http://www.blogger.com/atom/ns#' term='migrate'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ldap'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='hg'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>From svn to mercurial, the hg rises!</title><content type='html'>I've been toying with the idea of moving from svn to a distributed version control system (dvcs) for a long time.  I held back, hoping the mercurial (hg) vs. git "war" would declare a winner, but as major projects started adopting the two dvcs's, it became apparent to me that neither tool was going to disappear anytime soon.  This notion was cemented for me when I read a forum post saying &lt;pre&gt;hg = git &gt;&gt; svn&lt;/pre&gt;That settled it.  I had to pick one, and move forward.  I chose mercurial, not because it stood out above git, but it seemed to be more widely adopted in the communities I was interested in.  Joel Spolsky's &lt;a href="http://hginit.com"&gt;mercurial primer&lt;/a&gt; settled it for me.  Mercurial was on it's way in.  I had identified identified some key obstacles I needed to overcome to replace my subversion infrastructure with a new mercurial one.  I had to figure out: &lt;ol&gt;&lt;li&gt;&lt;a href="#install"&gt;How to install hg in CENTOS 5&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#import"&gt;How to import the revision history from svn into hg&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#ldap"&gt;How to get LDAP authentication to work with hg&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#hudson"&gt;How to integrate hg with hudson (our continuous integration server)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#maven"&gt;How to get the maven release plugin to work with hg&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;These were all things I'd achieved with subversion, so they set the bar I had to achieve with any subversion replacement.  Each of these steps turned out to be pretty easy overall.  I ended up completing the process with a single days work (or two half-days...)  &lt;h2&gt;&lt;a name="install"&gt;1) Install mercurial in CENTOS 5&lt;/a&gt;&lt;/h2&gt;I hunted around for a while looking for an RPM, but found nothing recent.  On a twitter recommendation, I tried &lt;a href="http://mercurial.selenic.com/wiki/UnixInstall"&gt;installing from source&lt;/a&gt;.  Turned out to be pretty easy.  The install ended up putting mercurial in my /usr/local/lib64 directory, which is not one of the default places python looks for it's modules.  I had to do set the PYTHONPATH environment variable pointing to this directory to get things to work.  &lt;h2&gt;&lt;a name="import"&gt;2) svn import into hg&lt;/a&gt;&lt;/h2&gt;Turns out mercurial has this functionality built in with the bundled &lt;a href="http://mercurial.selenic.com/wiki/ConvertExtension#Converting_from_Subversion"&gt;Convert Extension&lt;/a&gt;.  One has to enable this extension in a &lt;a href="http://www.selenic.com/mercurial/hgrc.5.html"&gt;mercurial configuration file&lt;/a&gt;, then it's pretty simple to point the "hg convert" command at your subersion repo.  Done and done!  &lt;h2&gt;&lt;a name="ldap"&gt;3) LDAP integration&lt;/a&gt;&lt;/h2&gt;I'd achieved svn LDAP integration using apache, so I was quite happy to see hg did the same thing.  I &lt;a href="http://mercurial.selenic.com/wiki/PublishingRepositories#multiple"&gt;set up the hgwebdir.cgi&lt;/a&gt; script to serve my newly imported hg repositories, hi-jacking the LDAP authentication from my svn setup.  Worked like a charm.  &lt;p&gt;Update, here's the apache config for authentication: &lt;br /&gt;
&lt;pre class="code brush: bash"&gt;# cat /etc/httpd/conf.d/hg.conf
ScriptAlias /hg "/var/www/hg/hgwebdir.cgi"

&lt;location /hg&gt;
        Order deny,allow
        Deny from all
        Allow from 10.0.0.1
        AuthType Basic
        AuthBasicProvider ldap
        AuthName "LDAP password"
        AuthLDAPURL "ldaps://ldap.domain.com/ou=users,dc=domain,dc=ccom?uid?sub?(&amp;(uniqueidentifier=*)(objectclass=eperson))"
        AuthLDAPGroupAttribute ibm-allmembers
        require ldap-group cn=mis,ou=web,ou=Groups,dc=domain,dc=com
        Satisfy Any
&lt;/Location&gt;
&lt;/pre&gt;Note: the group terms are specific to the IBM Tivoli LDAP server.  &lt;h2&gt;&lt;a name="hudson"&gt;4) hg integration with Hudson&lt;/a&gt;&lt;/h2&gt;This one seemed simple enough, given that there is a mercurial &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Mercurial+Plugin"&gt;plugin for hudson&lt;/a&gt;.  It was simple enough to install, but took a bit of effort to get going.  I had to go into the hudson configuration, and define a mercurial "instance" pointing to a wrapper that set the PYTHONPATH environment variable, then delegated the argument to mercurial itself.  Again, I think this is due to the /usr/local/lib64 path the mercurial installer chose.  Maybe this could be done more cleanly, but it's working now. &lt;p&gt; Another hiccup with the hudson configuration, was that there was no place to put a username and password, as one did with the svn/hudson config.  I worked around this by adding the IP of my hudson server to the "allow from" section of my apache config file.  Thus hudson could pull from my hg repos without authenticating. &lt;p&gt;A few hurdles with this one, but nothing severe. &lt;p&gt;Update (in answer to a comment):&lt;br /&gt;
My hg warpper looks like: &lt;br /&gt;
&lt;pre class="code brush: bash"&gt;# cat /usr/local/bin/hg_pythonpath_wrapper
#!/bin/sh
export PYTHONPATH=/usr/local/lib64/python2.4/site-packages
/usr/local/bin/hg "$@"
&lt;/pre&gt;&lt;p&gt;To get hudson to use this wrapper, goto: Manage Hudson -&gt; Configure System Scroll down to the mercurial section, click the "Add Mercurial" plugin, and point the executable to the above wrapper.   &lt;h2&gt;&lt;a name="maven"&gt;5) The maven release plugin&lt;/a&gt;&lt;/h2&gt;I use the maven release plugin to perform my releases.  I initially tried to get maven to push/pull from the "central" hg repository I had setup, but ran into similar authentication issues as I did with hudson.  I read some advice on &lt;a href="http://www.chrissearle.org/blog/technical/using_maven2_scm_and_release_plugins_with_mercurialhg"&gt;using the maven release plugin with mercurial&lt;/a&gt;, and realized I was still thinking in terms of subversion.  Of course it makes more sense to do the release against a local hg repo, and only push the change-sets if the release worked.  Oh I love mercurial!  And that's it.  One day later, and I've converted our multi-module subversion repository into several mercurial directories served by apache with LDAP authentication.  Our hudson continuous integration polls the "primary" mercurial repository, and maven tags releases against my local repo.  I was told correctly, one you ditch subversion and go with mercurial, you'll never go back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-6141571021652876398?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/6141571021652876398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/04/from-svn-to-mercurial-hg-rises.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6141571021652876398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/6141571021652876398'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/04/from-svn-to-mercurial-hg-rises.html' title='From svn to mercurial, the hg rises!'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-2623639912847105410</id><published>2010-01-20T08:11:00.000-08:00</published><updated>2010-05-12T12:13:58.800-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_jk'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaEE'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><title type='text'>Glassfish V2 and V3 on the same host, behind mod_jk</title><content type='html'>&lt;p&gt;I've jumped on the JavaEE 6 bandwagon, with one application already in production.  The developer productivity improvements in JavaEE6/Glassfish V3 are tremendous.  The only downside is that I still have some JavaEE 5 applications in production.  The JavaEE 5 apps can't migrate to JavaEE 6 until Icefaces supports JSF 1.2.
&lt;/p&gt;
&lt;p&gt;
One workaround to this is to bundle the JSF 1.2 implementation with your application, then  configure the classloader using the sun-web.xml file to load this bundled JSF library instead of the container's JSF 2.0 library.  This however only works with a standalone WAR file; when the WAR is bundled in an EAR, and references other EJB-JAR's, this trick isn't possible.  Yet I still wanted to move new application development to JavaEE 6.
&lt;/p&gt;
&lt;p&gt;
My solution was to run both Glassfish V2 and Glassfish V3 on the same box, with mod_jk forwarding requests to the appropriate container.  In this way I am able to keep my existing JavaEE 5 / Icefaces applications running, and deploy new applications to the JavaEE 6 environment.
&lt;/p&gt;
&lt;p&gt;
The first step was to get GF v2, and GF v3 running on the same machine.  I have GF v2 running on the standard ports, and I incremented each port by 1 for GF v3.  It looks like:
&lt;/p&gt;
&lt;table style="font-family: fixed-width;"&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;/td&gt;&lt;td&gt;GF v2 Port&lt;/td&gt;&lt;td&gt;GF v3 Port&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;HTTP&lt;/td&gt;&lt;td&gt;8080&lt;/td&gt; &lt;td&gt;8081&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;HTTPS&lt;/td&gt; &lt;td&gt;8181&lt;/td&gt; &lt;td&gt;8182&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;HTTP - ADMIN&lt;/td&gt; &lt;td&gt;4848&lt;/td&gt; &lt;td&gt;4849&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IIOP&lt;/td&gt; &lt;td&gt;3700&lt;/td&gt; &lt;td&gt;3701&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IIOP SSL&lt;/td&gt;&lt;td&gt;3820&lt;/td&gt; &lt;td&gt;3821&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IIOP SSL-MUTUALAUTH&lt;/td&gt; &lt;td&gt;3920&lt;/td&gt; &lt;td&gt;3921&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JMX&lt;/td&gt; &lt;td&gt;8686&lt;/td&gt; &lt;td&gt;8687&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JMS&lt;/td&gt;&lt;td&gt;7676&lt;/td&gt;&lt;td&gt;7677&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;
Next, we had to get mod_jk installed and working.  The glassfish support team (yes, I pay for support!) pointed me to the following resources:
&lt;ul&gt;
&lt;li&gt;
V2 instructions -  &lt;a class="moz-txt-link-freetext" href="http://weblogs.java.net/blog/2006/03/17/running-glassfish-apache-httpd"&gt;http://weblogs.java.net/blog/2006/03/17/running-glassfish-apache-httpd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
V3 instructions -  &lt;a class="moz-txt-link-freetext" href="http://weblogs.java.net/blog/2009/06/24/running-glassfish-v3-apache-httpd"&gt;http://weblogs.java.net/blog/2009/06/24/running-glassfish-v3-apache-httpd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
These were a great starting point, from which I ended up with the solution.
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;
mod_jk.conf:
&lt;/p&gt;
&lt;pre class="code"&gt;
#mod_jk/1.2.28
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/worker.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories +DisableReuse
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

# Should mod_jk send SSL information (default is On)
JkExtractSSL On
# What is the indicator for SSL (default is HTTPS)
JkHTTPSIndicator HTTPS
# What is the indicator for SSL session (default is SSL_SESSION_ID)
JkSESSIONIndicator SSL_SESSION_ID
# What is the indicator for client SSL cipher suit (default is SSL_CIPHER)
JkCIPHERIndicator SSL_CIPHER
# What is the indicator for the client SSL certificated? (default is SSL_CLIENT_CERT)
JkCERTSIndicator SSL_CLIENT_CERT

# Set the following if you want all vhosts to inherhit JkMounts from global
JkMountCopy All

# Send requests to GlassFish
JkMount /javaee6app* worker1
JkMount /javaee6app/* worker1

JkMount /javaee6app* worker2
JkMount /javaee6app/* worker2

# Send all glassfish-test requests to GlassFish
JkMount /glassfish-test/* worker1

JkShmFile /var/log/httpd/jk-runtime-status
&lt;/pre&gt;
&lt;p&gt;
And worker.properties:
&lt;/p&gt;
&lt;pre class="code"&gt;
## Define 1 real worker using ajp13
worker.list=worker1,worker2
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost.localdomain
worker.worker1.port=8009
#Only used for a member worker of a load balancer. 
#worker.worker1.lbfactor=50
#Do not use cachesize with values higher then 1 on Apache 2.x prefork
#worker.worker1.cachesize=10
#connection_pool_size replace cachesize as of v1.2.16
worker.worker1.connection_pool_size=1
worker.worker1.connection_pool_timeout=0
worker.worker1.socket_keepalive=1
#Socket timeout in seconds
worker.worker1.socket_timeout=60

worker.worker2.type=ajp13
worker.worker2.host=localhost.localdomain
worker.worker2.port=8010
#Only used for a member worker of a load balancer. 
#worker.worker2.lbfactor=50
#Do not use cachesize with values higher then 1 on Apache 2.x prefork
#worker.worker2.cachesize=10
#connection_pool_size replace cachesize as of v1.2.16
worker.worker2.connection_pool_size=1
worker.worker2.connection_pool_timeout=0
worker.worker2.socket_keepalive=1
#Socket timeout in seconds
worker.worker2.socket_timeout=60
&lt;/pre&gt;
&lt;p&gt;
These are not the worker.properties as prescribed in the above links.  After implementing the initial solution, I got reports from the wild of users mysteriously losing sessions.  After much reading about mod_jk, I think I narrowed down the problem to a cachesize/connection_pool_size &gt; 1 in conjunction with the prefork mpm apache module.  Apparently this is a no-no.
&lt;/p&gt;
&lt;p&gt;
So with these settings in place, I am able to develop new apps in JavaEE 6, while still running my older JavaEE 5 apps, on the same box.  Looking forward to Icefaces 2.0 though, so I can drop this needless complexity!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-2623639912847105410?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/2623639912847105410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2010/01/glassfish-v2-and-v3-on-same-host-behind.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2623639912847105410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/2623639912847105410'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2010/01/glassfish-v2-and-v3-on-same-host-behind.html' title='Glassfish V2 and V3 on the same host, behind mod_jk'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3343991232268303219.post-8226718933769074159</id><published>2009-11-14T00:11:00.000-08:00</published><updated>2009-11-14T00:19:27.778-08:00</updated><title type='text'>In the beginning...</title><content type='html'>Ok, this is my blog.  I'm not sure how I will use it, for the most part it will just be a place where I can organize my thoughts and ideas about Java development.  Maybe it will be useful for others, but probably not!
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3343991232268303219-8226718933769074159?l=blog.bleathem.ca' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.bleathem.ca/feeds/8226718933769074159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.bleathem.ca/2009/11/in-beginning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/8226718933769074159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3343991232268303219/posts/default/8226718933769074159'/><link rel='alternate' type='text/html' href='http://blog.bleathem.ca/2009/11/in-beginning.html' title='In the beginning...'/><author><name>Brian Leathem</name><uri>http://www.blogger.com/profile/13273862335129948796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://1.bp.blogspot.com/_75UK5bLSMIU/S5skAHhzCbI/AAAAAAAAABI/Ccz1DpchDbU/S220/bleathem.jpg'/></author><thr:total>0</thr:total></entry></feed>
