<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>OraNA :: Java Tools and Frameworks</title><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/orana_java" /><language>en</language><managingEditor>noemail@noemail.org (OraNA.info)</managingEditor><lastBuildDate>Sat, 13 Mar 2010 08:53:33 PST</lastBuildDate><generator>Google Reader http://www.google.com/reader</generator><gr:continuation xmlns:gr="http://www.google.com/schemas/reader/atom/">CLrS97zzlaAC</gr:continuation><feedburner:info uri="orana_java" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><description>Read and monitor Java tools and frameworks related blogs and news sources, all in one place.</description><item><title>Applying View Criteria from Application Module</title><link>http://feedproxy.google.com/~r/orana_java/~3/L6gLkxAOfCI/applying-view-criteria-from-application.html</link><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Sat, 13 Mar 2010 08:56:12 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/395f759a49bfd430</guid><description>Often we need to define and invoke View Object filtering. In ADF 11g we can do this by adding WHERE clause to View Object SQL statement or by defining View Criteria and invoking it later. I prefer second approach, why I should play with SQL statement, if ADF 11g can generate it for me. Okej, when there is View Criteria, it should be invoked. There are different approaches to do this - from declarative to programmatic. Today I will describe my preferred approach, I'm not saying you should use it as well.&lt;br&gt;&lt;br&gt;Download sample application - &lt;a href="http://jdevsamples.googlecode.com/files/AppModuleQuery.zip"&gt;AppModuleQuery.zip&lt;/a&gt;. This sample implements View Criteria to filter employees based on their department:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ukK3FKqwI/AAAAAAAADbw/D51mD1IqkH8/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ukK3FKqwI/AAAAAAAADbw/D51mD1IqkH8/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Here is the first trick - I have defined Bind Variable setter method to pass variable value and exposed this method through client interface:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5uk0I_GojI/AAAAAAAADb4/tGQ67sAiUFE/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5uk0I_GojI/AAAAAAAADb4/tGQ67sAiUFE/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;This means I will call it later from Controller layer to pass correct Bind Variable value. Its important to say, you should do ExecuteQuery when new Bind Variable is passed, this will ensure it will be correctly reinitialized:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vAEyGWnOI/AAAAAAAADcA/eV3Vsj1K6AI/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vAEyGWnOI/AAAAAAAADcA/eV3Vsj1K6AI/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Now most interesting part starts, you can declare View Criteria to be executed automatically, each time when View Object is accessed. You can do this in Application Module - select View Object from Data Model section and click Edit:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5vBLWj-_oI/AAAAAAAADcI/J29F4NbI8Ck/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5vBLWj-_oI/AAAAAAAADcI/J29F4NbI8Ck/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Select View Criteria you want to trigger automatically - it will be invoked each time when View Object will be accessed:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vBoTNwG0I/AAAAAAAADcQ/Z22Qup2e8uk/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vBoTNwG0I/AAAAAAAADcQ/Z22Qup2e8uk/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Model part is done, now its time to look into Contoller. As you remember, Bind Variable setter method was exposed through client interface, it is present in Data Control:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vCB2O--pI/AAAAAAAADcY/rzT0ryTtfsU/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vCB2O--pI/AAAAAAAADcY/rzT0ryTtfsU/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Drag and drop it into ADF Bounded Task Flow, it is needed to set correct Bind Variable value. In my case it is defined as Default Activity:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5vCVrww7dI/AAAAAAAADcg/oyy1eLp99-I/s1600-h/7.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5vCVrww7dI/AAAAAAAADcg/oyy1eLp99-I/s320/7.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;On runtime, JobId value is passed as Input Parameter for ADF Bounded Task Flow, where it is used for Bind Variable setter method parameter:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vCu4midlI/AAAAAAAADco/OxEZq8IBoxU/s1600-h/8.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5vCu4midlI/AAAAAAAADco/OxEZq8IBoxU/s320/8.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;ADF Bounded Task Flow is opened, Bind Variable value is set and View Criteria applied automatically:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5vC_1AZjBI/AAAAAAAADcw/Ml3KNPpNhyA/s1600-h/9.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5vC_1AZjBI/AAAAAAAADcw/Ml3KNPpNhyA/s320/9.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-1771097596280867492?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/L6gLkxAOfCI" height="1" width="1"/&gt;</description><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/applying-view-criteria-from-application.html</feedburner:origLink></item><item><title>Jersey 1.1.5.1 released</title><link>http://feedproxy.google.com/~r/orana_java/~3/a8kXmPLyrDs/jersey-1151-released.html</link><category>jax-rs</category><category>jersey</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gerard Davison</dc:creator><pubDate>Thu, 11 Mar 2010 04:35:12 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/77e84a09dfb14f4b</guid><description>&lt;p&gt;There is a &lt;a href="http://blogs.sun.com/sandoz/entry/jersey_1_1_5_1"&gt;minor point release&lt;/a&gt; of Jersey that includes a pair of significant bug fixes for weblogic and JDeveloper users. Worth using in preference to 1.1.5. Thanks a lot to Paul for putting this one together.&lt;/p&gt;&lt;div&gt;
&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2648073517459434852-367057747299530726?l=kingsfleet.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/KingsfleetBlog/~4/Qn7CdYUi7FE" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/a8kXmPLyrDs" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/KingsfleetBlog/~3/Qn7CdYUi7FE/jersey-1151-released.html</feedburner:origLink></item><item><title>A Reader Asks - How To Pass Table Export Id Into ADF 11g Declarative Component</title><link>http://feedproxy.google.com/~r/orana_java/~3/asSPdVXii98/reader-asks-how-to-pass-table-export-id.html</link><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Wed, 10 Mar 2010 10:36:27 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/ccae52631319f6a6</guid><description>"I'm trying to use ExportCollectionActionListener inside Declarative Component, but I can't pass table export Id correctly - it gives error, Id is not found. Is it possible to make it work?"&lt;br&gt;&lt;br&gt;Yes, it is. Download sample application - &lt;a href="http://jdevsamples.googlecode.com/files/DCLibExport.zip"&gt;DCLibExport.zip&lt;/a&gt;. This archive contains two JDeveloper 11g applications - Declarative Component (ExportToolbarLib) and consuming application (EmployeesExport). I will not talk about Declarative Components in this post, you can read more about them from previous &lt;a href="http://andrejusb.blogspot.com/2009/10/custom-declarative-components-in-adf.html"&gt;post&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Declarative Component example is really simple, it contains one attribute - &lt;b&gt;exportId&lt;/b&gt;. Such type of components are really useful for proper application design and architecture, it allows to achieve proper reusability - instead of declaring Export buttons for each table, we are doing it only once:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5fgsy6CfnI/AAAAAAAADao/PoHI1YBHdyg/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5fgsy6CfnI/AAAAAAAADao/PoHI1YBHdyg/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And one button with ExportCollectionActionListener assigned, this will allow to export table data to Excel format automatically:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fhYn-9PWI/AAAAAAAADaw/am9zLgpiXiA/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fhYn-9PWI/AAAAAAAADaw/am9zLgpiXiA/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Important thing to mention - ExportCollectionActionListener gets ExportedId property value from Declarative Component attribute:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fiLsHt29I/AAAAAAAADa4/xB_AAY6jxps/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fiLsHt29I/AAAAAAAADa4/xB_AAY6jxps/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;This means, we will be able to provide table Id value directly from consuming page and reuse Declarative Component in many pages.&lt;br&gt;&lt;br&gt;Consuming application declares Tag library for Declarative Component - ExportToolbar:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fihtJlzLI/AAAAAAAADbA/NztTSA6YyR0/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fihtJlzLI/AAAAAAAADbA/NztTSA6YyR0/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Library is available in Component Palette:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5fir4PLYPI/AAAAAAAADbI/DegCkWnVZE4/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5fir4PLYPI/AAAAAAAADbI/DegCkWnVZE4/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Consuming page structure defines three main elements: data table, panel collection and export toolbar (our Declarative Component):&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5fjGehfWPI/AAAAAAAADbQ/aH_3DNyCUNw/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5fjGehfWPI/AAAAAAAADbQ/aH_3DNyCUNw/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Here is main question now - how to wire together Export listener from Declarative Component and table in consuming page. The main trick - we should declare complete path and pass it through ExportId attribute. We should specify ExportToolbar Id (&lt;b&gt;et1&lt;/b&gt;), enter into this component, and reference Panel Collection (&lt;b&gt;pc1&lt;/b&gt;) from there. Finally, we need to access table component (&lt;b&gt;t1&lt;/b&gt;) itself. Expression language for this case: &lt;b&gt;#{et1::pc1:t1}&lt;/b&gt;:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fkimXNBMI/AAAAAAAADbY/RvJkKVBzzCM/s1600-h/7.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5fkimXNBMI/AAAAAAAADbY/RvJkKVBzzCM/s320/7.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;On runtime we can see Export button from Declarative Component and ADF table with data:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5flbb_AdhI/AAAAAAAADbg/JW2bAJrvPbk/s1600-h/8.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5flbb_AdhI/AAAAAAAADbg/JW2bAJrvPbk/s320/8.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Export works successfully:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5flgoGKwmI/AAAAAAAADbo/yIV2zw6VZd8/s1600-h/9.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5flgoGKwmI/AAAAAAAADbo/yIV2zw6VZd8/s320/9.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-7899440292330575304?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/asSPdVXii98" height="1" width="1"/&gt;</description><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/reader-asks-how-to-pass-table-export-id.html</feedburner:origLink></item><item><title>Gotchas when using memory scope prefixes in EL to access managed beans</title><link>http://feedproxy.google.com/~r/orana_java/~3/gYpSiQTFAZc/</link><category>ADF Faces RC</category><category>Taskflow</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">frank.nimphius</dc:creator><pubDate>Tue, 09 Mar 2010 11:09:52 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/43c4d6301bbd48b6</guid><description>&lt;p&gt;Interesting post on the Oracle JDeveloper Oracle internal mailing list, answered by Andrew Robinson. Accessing a managed bean in a standard servlet scope like sessionScope or requestScope using the scope as a prefix fails if the bean instance does not exist. Thus, bean reference like #{sessionScope.myBean} may fail while #{myBean} always succeeds. The reason for this is that #{sessionScope….} and #{requestScope…} reference a Map in memory and not the JSF framework.&lt;/p&gt;
&lt;p&gt;But why would you want to use the memory scope as a prefix? If you reference an attribute in memory scope, then the search goes from smallest scope to broader scope, which means that if – by accident – there exist two objects with the same name and you wanted to access the object in the broader scope, chances are you access the wrong object. So prefixing the expression puts you on the save side. This however is only good to use when you access objects that already exist in memory (wich could be a previously instantiated managed bean – of course)&lt;/p&gt;
&lt;p&gt;Managed beans must be instantiated before they become available in the memory scope, which means they need to be accessed through JSF. Luckily, JSF does not allow to configure two managed beans with the same name in different scopes. So even without a scope prefix, there is no risk that application code accidentally accesses the wrong object.&lt;/p&gt;
&lt;p&gt;Note however that using ADFc specific scope like viewScope and pageFlowScope, a prefix of “pageFlowScope” or “viewScope” is required in the EL reference. &lt;/p&gt;
&lt;p&gt;Frank&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/gYpSiQTFAZc" height="1" width="1"/&gt;</description><feedburner:origLink>http://thepeninsulasedge.com/frank_nimphius/2010/03/09/gotchas-when-using-memory-scope-prefixes-in-el-to-access-managed-beans/</feedburner:origLink></item><item><title>Integration in Oracle ADF with ADF Task Flows and Dynamic Regions Navigation</title><link>http://feedproxy.google.com/~r/orana_java/~3/DpMBI1L1MN0/integration-in-oracle-adf-with-adf-task_09.html</link><category>Integration</category><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Tue, 09 Mar 2010 01:59:06 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/ef91895b452fc371</guid><description>Today one more post from &lt;a href="http://andrejusb.blogspot.com/search/label/Integration"&gt;Integration&lt;/a&gt; series. There is a case, when Dynamic Region might have navigation to another Dynamic Region. If user will open one region from another, menu selection should be refreshed accordingly. I'm describing how to do this, thanks to blog Reader who asked this question.&lt;br&gt;&lt;br&gt;Download updated sample - &lt;a href="http://jdevsamples.googlecode.com/files/ADFIntegrationRegions3.zip"&gt;ADFIntegrationRegions3.zip&lt;/a&gt;, based on my previous &lt;a href="http://andrejusb.blogspot.com/2010/03/integration-in-oracle-adf-with-adf-task.html"&gt;post&lt;/a&gt;. Main change comparing to previous post sample - there is ADF Task Flow call from Locations to Departments:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5YYjpQd1jI/AAAAAAAADZ4/joUN_BccHLU/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5YYjpQd1jI/AAAAAAAADZ4/joUN_BccHLU/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;All separate applications are deployed and assembled into one main application, same as it was described before. Only one difference now - first Dynamic Region (Locations) contains Departments buttons, it will navigate to second Dynamic Region (Departments) directly:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5YZetr__0I/AAAAAAAADaA/XY3EV0m91AA/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5YZetr__0I/AAAAAAAADaA/XY3EV0m91AA/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;User can click on Departments button:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5YZ8YHWDeI/AAAAAAAADaI/bAPbQhXOX9U/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5YZ8YHWDeI/AAAAAAAADaI/bAPbQhXOX9U/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And here we go - Departments Dynamic Region is opened, menu item selection is synchronized as well:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5YaMkUEHuI/AAAAAAAADaQ/ZTkd1YAzVCs/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5YaMkUEHuI/AAAAAAAADaQ/ZTkd1YAzVCs/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Well, how to implement this? There is a very good hint in Frank Nimphius and Lynn Munsinger book (&lt;a href="http://www.amazon.com/gp/product/0071622543?ie=UTF8&amp;amp;tag=diinad-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0071622543"&gt;Building RIAs w/ Oracle ADF&lt;/a&gt;) on page &lt;b&gt;#201 RegionNavigationListener&lt;/b&gt;. We can declare it for af:region:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5YbeP9Qr1I/AAAAAAAADaY/8ycW_21lyi4/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5YbeP9Qr1I/AAAAAAAADaY/8ycW_21lyi4/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And listen for navigation from Locations to Departments, if such navigation happens - we reset menu and switch Dynamic Region (Departments) as current:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5Yb4qbd5rI/AAAAAAAADag/LGLpdiHB1uQ/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5Yb4qbd5rI/AAAAAAAADag/LGLpdiHB1uQ/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Its how it works.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-5170111703999741689?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/DpMBI1L1MN0" height="1" width="1"/&gt;</description><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/integration-in-oracle-adf-with-adf-task_09.html</feedburner:origLink></item><item><title>Red Samurai Tool - How To Check ADF 11g Package Structure and ADF Task Flow Parameters</title><link>http://feedproxy.google.com/~r/orana_java/~3/oZDuJTo73bA/red-samurai-tool-how-to-check-adf-11g.html</link><category>Red Samurai</category><category>Extensions</category><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Mon, 08 Mar 2010 10:51:50 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/d2056f03c44e7d6b</guid><description>In my previous &lt;a href="http://andrejusb.blogspot.com/2010/03/red-samurai-tool-jdeveloper-11g.html"&gt;post&lt;/a&gt;, I have introduced our JDeveloper 11g extension for ADF code quality validation. I will describe two rules more and will show how you can scan your ADF project for standard guidelines violations. Package structure check and task flow input parameters are documented today.&lt;br&gt;&lt;br&gt;I'm demonstrating rule execution using updated sample application - &lt;a href="http://jdevsamples.googlecode.com/files/RedSamuraiToolTestSample1.zip"&gt;RedSamuraiToolTestSample1.zip&lt;/a&gt;. Just to remind you, extension can be invoked by right clicking on Model or ViewController project and selecting it from available menu:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U7KjuIjZI/AAAAAAAADYA/vXTHwOnnC2E/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U7KjuIjZI/AAAAAAAADYA/vXTHwOnnC2E/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;I will choose to run &lt;b&gt;Package Structure Check&lt;/b&gt; rule:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U7W5K7pbI/AAAAAAAADYI/mEpcD86D6yk/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U7W5K7pbI/AAAAAAAADYI/mEpcD86D6yk/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Several violations are reported for - Application Module, View Link and Association:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U7nt6v_II/AAAAAAAADYQ/z01m8q1a46U/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U7nt6v_II/AAAAAAAADYQ/z01m8q1a46U/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Let's double check Model project structure, and we can see that report was correct - we need to fix few things for application package structure:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5U7-2JpfzI/AAAAAAAADYY/axSiOnQyEHg/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5U7-2JpfzI/AAAAAAAADYY/axSiOnQyEHg/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;First, I will refactor Application Module into &lt;b&gt;appmodules&lt;/b&gt; package:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U8PtdXVqI/AAAAAAAADYg/Dli1ujrPHnk/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U8PtdXVqI/AAAAAAAADYg/Dli1ujrPHnk/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;If we run same rule again, this time only two violations will be reported - good progress:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U8bWsRVRI/AAAAAAAADYo/97wG7U5Oyg4/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5U8bWsRVRI/AAAAAAAADYo/97wG7U5Oyg4/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;We need to complete the rest of refactoring for View Link and Association - whole picture is correct now:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U8q1u2lII/AAAAAAAADYw/SW7AqrNnJCQ/s1600-h/7.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5U8q1u2lII/AAAAAAAADYw/SW7AqrNnJCQ/s320/7.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;This is confirmed by our extension as well - no more violations for package structure:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5U8zXi2tFI/AAAAAAAADY4/ZneJzqnJ7XE/s1600-h/8.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5U8zXi2tFI/AAAAAAAADY4/ZneJzqnJ7XE/s320/8.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Different projects may have different package structure standards, you can customize Red Samurai extension execution through preferences window:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5U_N1Qo_WI/AAAAAAAADZA/ZrJ9kw02L2I/s1600-h/9.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5U_N1Qo_WI/AAAAAAAADZA/ZrJ9kw02L2I/s320/9.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Another rule I will describe - ADF Task Flow parameters naming convention:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5VEdB_2fyI/AAAAAAAADZI/RJk7cbH8nrA/s1600-h/10.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5VEdB_2fyI/AAAAAAAADZI/RJk7cbH8nrA/s320/10.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Let's assume, we have a standard to give &lt;b&gt;&lt;i&gt;in&lt;/i&gt;&lt;/b&gt; prefix for ADF Task Flows parameter names. Developer forgot this standard and gave incorrect name - &lt;b&gt;&lt;i&gt;myParameter&lt;/i&gt;&lt;/b&gt;:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VGengthhI/AAAAAAAADZQ/a01BGsk2Q7g/s1600-h/11.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VGengthhI/AAAAAAAADZQ/a01BGsk2Q7g/s320/11.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;We run our rule to scan for ADF Task Flow input parameters names:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5VGsuVrgXI/AAAAAAAADZY/QUHRdSr-EpM/s1600-h/12.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5VGsuVrgXI/AAAAAAAADZY/QUHRdSr-EpM/s320/12.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And here we go - rule violation is reported:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5VG17Weh-I/AAAAAAAADZg/vdbdBVs7nu8/s1600-h/13.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5VG17Weh-I/AAAAAAAADZg/vdbdBVs7nu8/s320/13.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;When parameter name is fixed to be &lt;b&gt;&lt;i&gt;inLastName&lt;/i&gt;&lt;/b&gt;:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VHFOG_HCI/AAAAAAAADZo/-N6GY0ePalg/s1600-h/14.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VHFOG_HCI/AAAAAAAADZo/-N6GY0ePalg/s320/14.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;No more violations for this rule are reported:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VHOQvS8ZI/AAAAAAAADZw/XqjBdkYWveM/s1600-h/15.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5VHOQvS8ZI/AAAAAAAADZw/XqjBdkYWveM/s320/15.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-6293569825564098237?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/oZDuJTo73bA" height="1" width="1"/&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13086581401790586831</gr:likingUser><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/red-samurai-tool-how-to-check-adf-11g.html</feedburner:origLink></item><item><title>How-to protect your ADF pages</title><link>http://feedproxy.google.com/~r/orana_java/~3/uJPwcRvCJyg/</link><category>ADF</category><category>ADF Faces RC</category><category>Security</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">frank.nimphius</dc:creator><pubDate>Mon, 08 Mar 2010 07:19:56 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/7e177361b439e8a0</guid><description>&lt;p&gt;A great discussion &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=1037721&amp;amp;tstart=0"&gt;on the JDeveloper forum on OTN&lt;/a&gt; brough a new addition to ADF application security that I like to share. &lt;/p&gt;
&lt;p&gt;Chapter &lt;a href="http://download.oracle.com/docs/cd/E15523_01/web.1111/b31974/adding_security.htm#BGBGJEAH"&gt;30 of the Oracle® Fusion Middleware Fusion Developer’s Guide for Oracle Application Development Framework 11g Release 1 &lt;/a&gt; explains the JAAS protection mechanism for ADF pages and Task Flows. In here it is recommended that you reduce the number of JSF pages in the adfc-config.xml file to the absolute minimum and only give ADF Security permissions to those documents that need to be accessible from a browser request.&lt;/p&gt;
&lt;p&gt;All other pages should be located in bounded task flows, which you can protect declaratively against GET requests, as they are issued from a browser URL. Bounded task flows need to be ganted to users through application roles to be accessible. &lt;/p&gt;
&lt;p&gt;The discussion on OTN is about protecting the phyical JSPX files. If you are an authenticated and authorized user, then you could directly access the JSPX page, e.g. calling localhost:7101/myapp/faces/Departments.jspx. This then serves the page – though it may not be fully functional because it is not launched within the controller context. &lt;/p&gt;
&lt;p&gt;The recommendation therefore is to store JSPX documents under the WEB-INF directory of the public_html folder. This solves the problem of users accessing physical files directly&lt;/p&gt;
&lt;p&gt;Frank&lt;/p&gt;
&lt;p&gt;Ps.: Note that if moving JSPX documents into the WEB-INF folder is not an option for you, you can write a servlet filter that checks the incoming request URL for the resource it accesses. If a jspx file is accessed you would return a http 403 error.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/uJPwcRvCJyg" height="1" width="1"/&gt;</description><feedburner:origLink>http://thepeninsulasedge.com/frank_nimphius/2010/03/08/how-to-protect-your-adf-pages/</feedburner:origLink></item><item><title>JDev 11gPS1 – Java editor "Declaration Insight"</title><link>http://feedproxy.google.com/~r/orana_java/~3/YyT9sgHkMWk/jdev-11gps1-java-editor-declaration.html</link><category>JDeveloper</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">noreply@blogger.com (Chris Muir)</dc:creator><pubDate>Sun, 07 Mar 2010 03:54:00 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/4b6edac4b0d09ad9</guid><description>The JDev11gPS1 &lt;a href="http://www.oracle.com/technology/products/jdev/collateral/papers/11/newfeatures/index.html"&gt;New Features&lt;/a&gt; page lists a large amount of improvements, including something called the "Declaration Insight".  The New Features blurb lists this feature as "When declaring local variables from method calls, declaration insight can automatically add the declaration and assignment code as well as completing the method call."&lt;br&gt;&lt;br&gt;Like us, if you're using JDev11gPS1 you've probably already stumbled upon this feature and not realized it.&lt;br&gt;&lt;br&gt;You'll be familiar with the traditional Completion Insight.  Say in an EntityImpl you're implementing a method and within you want to call the super class method to get the database transaction.  However you've forgotten the function name, is it getDBTransaction or getDatabaseTransaction?  This is easily solvable by starting to type the function name "getD" then activating Completion Insight, either via pressing Ctrl-Space or the Source menu's same named option.  The editor will show the Completion Insight popup in blue with all the functions starting with "getD" in the super class stack, including the method we’re interested in getDBTransaction:&lt;br&gt;&lt;br&gt;&lt;a href="http://2.bp.blogspot.com/_5hhNK2aXwp8/S5OUPgRWcwI/AAAAAAAAA8M/9J388pZoIQ4/s1600-h/pic1.png"&gt;&lt;img style="display:block;margin:0px auto 10px;text-align:center;width:400px;height:165px" src="http://2.bp.blogspot.com/_5hhNK2aXwp8/S5OUPgRWcwI/AAAAAAAAA8M/9J388pZoIQ4/s400/pic1.png" border="0" alt=""&gt;&lt;/a&gt;Selecting the same named method, the method is instantly copied into the code:&lt;br&gt;&lt;br&gt;&lt;a href="http://2.bp.blogspot.com/_5hhNK2aXwp8/S5OUQE2waXI/AAAAAAAAA8U/DjdjTkjOthY/s1600-h/pic2.png"&gt;&lt;img style="display:block;margin:0px auto 10px;text-align:center;width:400px;height:145px" src="http://2.bp.blogspot.com/_5hhNK2aXwp8/S5OUQE2waXI/AAAAAAAAA8U/DjdjTkjOthY/s400/pic2.png" border="0" alt=""&gt;&lt;/a&gt;...saving you some typing and hunting around for the right method.&lt;br&gt;&lt;br&gt;However the Completion Insight only really gives the right hand side of the assignment expression.  It would be good if you could get the IDE to create the left hand side of the assignment expression creating a variable of the correct type to take the result from the function, as well as the function call on the right hand side of the assignment operator as per what the Completion Insight does.&lt;br&gt;&lt;br&gt;This is where the new "Declaration Insight" comes in.  On invoking the Completion Insight with Ctrl-Space showing itself in blue, if you press Ctrl-Space again you'll see the popup changes to puce and displays the very similar Declaration Insight:&lt;br&gt;&lt;br&gt;&lt;a href="http://1.bp.blogspot.com/_5hhNK2aXwp8/S5OUQReyUHI/AAAAAAAAA8c/-i-W-DlDW5k/s1600-h/pic3.png"&gt;&lt;img style="display:block;margin:0px auto 10px;text-align:center;width:400px;height:168px" src="http://1.bp.blogspot.com/_5hhNK2aXwp8/S5OUQReyUHI/AAAAAAAAA8c/-i-W-DlDW5k/s400/pic3.png" border="0" alt=""&gt;&lt;/a&gt;Again selecting the same named method, using the Declaration Insight the result is:&lt;br&gt;&lt;br&gt;&lt;a href="http://3.bp.blogspot.com/_5hhNK2aXwp8/S5OUQuoLwsI/AAAAAAAAA8k/GnyUMVs_1Us/s1600-h/pic4.png"&gt;&lt;img style="display:block;margin:0px auto 10px;text-align:center;width:400px;height:136px" src="http://3.bp.blogspot.com/_5hhNK2aXwp8/S5OUQuoLwsI/AAAAAAAAA8k/GnyUMVs_1Us/s400/pic4.png" border="0" alt=""&gt;&lt;/a&gt;....where both the function call and the variable to be assigned the result are inserted into your code, ultimately saving you a bit more typing.  If you're like me, and always forgetting what the return type is by the time you're back to the editor, and having to hunt for it again by double invoking the Completion Insight, this will same some extra time.&lt;br&gt;&lt;br&gt;A minor but useful enhancement in the latest JDev11gPS1 release.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/38586079-23257568635139295?l=one-size-doesnt-fit-all.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/vXy4fVgI3xA" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/YyT9sgHkMWk" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/OneSizeDoesntFitAll/~3/vXy4fVgI3xA/jdev-11gps1-java-editor-declaration.html</feedburner:origLink></item><item><title>Demo of Apache MyFaces 2 and OpenWebBeans</title><link>http://feedproxy.google.com/~r/orana_java/~3/jp6fw3NdTD0/</link><category>CDI</category><category>WebBeans</category><category>apache</category><category>facelets</category><category>fun</category><category>jQuery</category><category>java</category><category>javascript</category><category>jetty</category><category>jsf</category><category>jsp</category><category>myfaces</category><category>web²</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">matthiaswessendorf</dc:creator><pubDate>Sat, 06 Mar 2010 05:28:42 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/0d2635b77ff65993</guid><description>&lt;p&gt;Recently the &lt;a href="http://myfaces.apache.org/"&gt;Apache MyFaces&lt;/a&gt; project released its second beta release and yesterday the &lt;a href="http://openwebbeans.apache.org"&gt;Apache OpenWebBeans&lt;/a&gt; project released its M4 release.&lt;/p&gt;
&lt;p&gt;These are great milestones in the direction of JavaEE at Apache!&lt;/p&gt;
&lt;p&gt;A few month ago &lt;a href="http://www.irian.eu/home/"&gt;Bernd Bohmann&lt;/a&gt; and I were giving a JSF2 + X presentation in &lt;a href="http://www.jug-muenster.de/talklets-munster-jsf-2-0-mit-matthias-wessendorf-253/"&gt;Muenster, at the JUG&lt;/a&gt;. The presentation was great and we showed a lot of cool features of JSF2 and CDI. The big plus was that we were Apache projects (MyFaces and OWB), which we build from the trunk. Now since there are these important milestones, I was able to actually make the demo project available under my “facesgoodies” demo/kickstart project.&lt;/p&gt;
&lt;p&gt;Get the source of the Maven project from &lt;a href="http://code.google.com/p/facesgoodies/downloads/list"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you extracted the source, just run “mvn” and Maven downloads all you need!&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthiaswessendorf.wordpress.com/307/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthiaswessendorf.wordpress.com/307/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthiaswessendorf.wordpress.com/307/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthiaswessendorf.wordpress.com/307/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthiaswessendorf.wordpress.com/307/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthiaswessendorf.wordpress.com/307/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthiaswessendorf.wordpress.com/307/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthiaswessendorf.wordpress.com/307/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthiaswessendorf.wordpress.com/307/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthiaswessendorf.wordpress.com/307/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthiaswessendorf.wordpress.com&amp;amp;blog=1129660&amp;amp;post=307&amp;amp;subd=matthiaswessendorf&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/jp6fw3NdTD0" height="1" width="1"/&gt;</description><media:group xmlns:media="http://search.yahoo.com/mrss/"><media:content url="http://1.gravatar.com/avatar/92d27b816c7652e7bad5ecbfa76705a7?s=96&amp;d=identicon&amp;r=G" /></media:group><feedburner:origLink>http://matthiaswessendorf.wordpress.com/2010/03/06/demo-of-apache-myfaces-2-and-openwebbeans/</feedburner:origLink></item><item><title>Using Struts with JDeveloper 11g?</title><link>http://feedproxy.google.com/~r/orana_java/~3/D0x7FVu3COg/DuncanMills</link><category>General</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Fri, 05 Mar 2010 07:17:50 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/1c34910504612d48</guid><description>&lt;p&gt;If you are, then you need to view and respond to &lt;a href="http://forums.oracle.com/forums/ann.jspa?annID=1239"&gt;this announcement&lt;/a&gt; which I've posted on the OTN discussion forum...
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/D0x7FVu3COg" height="1" width="1"/&gt;</description><feedburner:origLink>http://groundside.com/blog/DuncanMills?title=using_struts_with_jdeveloper_11g&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</feedburner:origLink></item><item><title>Red Samurai Tool - JDeveloper 11g Extension to Validate ADF Code Quality</title><link>http://feedproxy.google.com/~r/orana_java/~3/M5ull05z8mM/red-samurai-tool-jdeveloper-11g.html</link><category>Red Samurai</category><category>Extensions</category><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Sun, 07 Mar 2010 03:44:26 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/08b93b129965706b</guid><description>I was working long on JDeveloper 11g extension for ADF 11g code quality checks. Finally it is available for public use - &lt;b&gt;first release&lt;/b&gt;. This release is based on my Oracle Forms to Oracle Fusion 11g migration experience.&lt;br&gt;&lt;br&gt;You can download extension - &lt;a href="http://jdevsamples.googlecode.com/files/redsamuraiqt_1_0.zip"&gt;redsamuraiqt_1_0.zip&lt;/a&gt; and install it through JDeveloper Update wizard. It is available directly from Oracle JDeveloper &lt;b&gt;Open Source and Partners Extension&lt;/b&gt; update center as well. Additionally, you can download sample project I'm using for this post - &lt;a href="http://jdevsamples.googlecode.com/files/RedSamuraiToolTestSample.zip"&gt;RedSamuraiToolTestSample.zip&lt;/a&gt;.&lt;br&gt;&lt;br&gt;When you will run it, first screen will be welcome screen:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EA_Dq2VyI/AAAAAAAADV4/NSN3tHQ9IRA/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EA_Dq2VyI/AAAAAAAADV4/NSN3tHQ9IRA/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Next, you will be given with a list of rules to be applied for ADF code quality validation:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ECoa4ugnI/AAAAAAAADWA/sthj-63BbiE/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ECoa4ugnI/AAAAAAAADWA/sthj-63BbiE/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And finally, we have confirmation screen:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EDOa-j0_I/AAAAAAAADWI/W_WLvkhm_lU/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EDOa-j0_I/AAAAAAAADWI/W_WLvkhm_lU/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Extension can be customized through JDeveloper Preferences wizard:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EDeGRaPRI/AAAAAAAADWQ/h9LNS4Q4pwA/s1600-h/16.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EDeGRaPRI/AAAAAAAADWQ/h9LNS4Q4pwA/s320/16.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;You can install &lt;a href="http://jdevsamples.googlecode.com/files/redsamuraiqt_1_0.zip"&gt;redsamuraiqt_1_0.zip&lt;/a&gt; extension through JDeveloper Check for Updates wizard from local file:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5EEi07yg0I/AAAAAAAADWY/8SP2hJvBbBw/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5EEi07yg0I/AAAAAAAADWY/8SP2hJvBbBw/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Or simply to download it from &lt;b&gt;Open Source and Partner Extensions&lt;/b&gt; update center:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5NrEaob6hI/AAAAAAAADX4/nuQq-hxURDs/s1600-h/17.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5NrEaob6hI/AAAAAAAADX4/nuQq-hxURDs/s320/17.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;In order to invoke Red Samurai tool, right click on Model or ViewController project and select &lt;b&gt;RedSamurai QT&lt;/b&gt; option:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EG7HeD9KI/AAAAAAAADWg/5ovol1qGevE/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EG7HeD9KI/AAAAAAAADWg/5ovol1qGevE/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;To demonstrate extension functionality, I decided to show how you can ensure all View Objects contain ORDER BY clause:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EH_goR3uI/AAAAAAAADWo/hipuwMHA8EY/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EH_goR3uI/AAAAAAAADWo/hipuwMHA8EY/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;It will report rule violations - View Object name and rule title:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EIO_SZgPI/AAAAAAAADWw/ieU9XQO2k0U/s1600-h/7.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EIO_SZgPI/AAAAAAAADWw/ieU9XQO2k0U/s320/7.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Then you go to View Object screen and add ORDER BY clause:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S5EJsG1VhvI/AAAAAAAADW4/Bwac0j3uWXg/s1600-h/8.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S5EJsG1VhvI/AAAAAAAADW4/Bwac0j3uWXg/s320/8.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;If same rule is applied again, no more violations will be reported:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EKu15leqI/AAAAAAAADXA/j4l_Qi7ltQ4/s1600-h/9.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EKu15leqI/AAAAAAAADXA/j4l_Qi7ltQ4/s320/9.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Another example - page title. We may have a rule to ensure all page titles are coming from Message Bundle file. If developer forgot to use title from Message Bundle and typed hard coded value:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ELfGT3r5I/AAAAAAAADXI/_39Ub7c1OpU/s1600-h/10.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5ELfGT3r5I/AAAAAAAADXI/_39Ub7c1OpU/s320/10.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Let's run Page Document Title rule:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5ELxGPqfwI/AAAAAAAADXQ/Obe4jkVaOko/s1600-h/11.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5ELxGPqfwI/AAAAAAAADXQ/Obe4jkVaOko/s320/11.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Tool will generate report document, where violation will be reported:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EMZlXsQ7I/AAAAAAAADXY/NvuR37DJVjg/s1600-h/12.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S5EMZlXsQ7I/AAAAAAAADXY/NvuR37DJVjg/s320/12.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;It says that page title must be used from Message Bundle and property key should have specific value. I correct this violation and map page title to Message Bundle entry:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EMq4FII5I/AAAAAAAADXg/VWpgucgA-Sg/s1600-h/13.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S5EMq4FII5I/AAAAAAAADXg/VWpgucgA-Sg/s320/13.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;You can check,  Message Bundle reference should be included:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5ENEtouIeI/AAAAAAAADXo/Qbzahucuuq8/s1600-h/14.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5ENEtouIeI/AAAAAAAADXo/Qbzahucuuq8/s320/14.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Run same rule again, no violations now:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EOYX9r6hI/AAAAAAAADXw/QAlqaxx9-r4/s1600-h/15.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S5EOYX9r6hI/AAAAAAAADXw/QAlqaxx9-r4/s320/15.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Check for my next blog posts on the same topic - I will post updates and extension improvements.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-7805367744327645530?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/M5ull05z8mM" height="1" width="1"/&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13086581401790586831</gr:likingUser><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/red-samurai-tool-jdeveloper-11g.html</feedburner:origLink></item><item><title>Ning’s Async Http Client and Twitter Streaming API</title><link>http://feedproxy.google.com/~r/orana_java/~3/ZD8cL_OH-9M/</link><category>ajax</category><category>apache</category><category>comet</category><category>fun</category><category>jetty</category><category>web²</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">matthiaswessendorf</dc:creator><pubDate>Fri, 05 Mar 2010 04:25:33 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/2aa1cf3d7c292e32</guid><description>&lt;p&gt;&lt;a href="http://matthiaswessendorf.wordpress.com/2010/02/16/twitter-streaming-api-and-apache-wink/"&gt;Recently&lt;/a&gt; I played with the Apache Wink REST Client to access the Twitter Streaming API. Yesterday &lt;a href="http://weblogs.java.net/blogs/jfarcand/"&gt;Jean-Francois Arcand &lt;/a&gt;announced the availability of &lt;a href="http://code.ning.com/2010/03/introducing-nings-asynchronous-http-client-library/"&gt;Ning’s new Async Http Client&lt;/a&gt;. The blog looked interesting and the Twitter stream is a perfect example to combine the two. If you are behind a firewall you need to set a proxy-server on the &lt;strong&gt;AsyncHttpClientConfig&lt;/strong&gt; and pass it into the constructor of the &lt;strong&gt;AsyncHttpClient&lt;/strong&gt;. After that, you simply call the prepareGet(…) and here you pass in an anonymous &lt;strong&gt;AsyncCompletionHandler&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;
String logon = &amp;quot;user:password&amp;quot;;
String encodedLogon = new BASE64Encoder().encode(logon.getBytes());

AsyncHttpClientConfig cc = new AsyncHttpClientConfig.Builder()
 .setProxyServer(
 new ProxyServer(Protocol.HTTP, &amp;quot;my-proxy&amp;quot;, 8080)
 )
 .build();

AsyncHttpClient asyncHttpClient = new AsyncHttpClient(cc);

try
{
 Future&amp;lt;Response&amp;gt; f = asyncHttpClient.prepareGet(
 &amp;quot;http://stream.twitter.com/spritzer.json&amp;quot;)
 .addHeader(&amp;quot;Authorization&amp;quot;,&amp;quot;Basic &amp;quot; + encodedLogon)
 .execute(new AsyncCompletionHandler()
 {
 @Override
 public STATE onBodyPartReceived(HttpResponseBodyPart content)
 throws Exception
 {
 System.out.println(&amp;quot;Tweet: &amp;quot; + new String(content.getBodyPartBytes()));

 return STATE.CONTINUE;
 }
 @Override
 public Object onCompleted(Response response) throws Exception
 {
 // TODO Auto-generated method stub
 return response;
 }
 @Override
 public void onThrowable(Throwable arg0)
 {
 }
 });

 Response r = f.get();
....
&lt;/pre&gt;
&lt;p&gt;The interesting part of the anonymous implementation is its onBodyPartReceived(). Once the Twitter server has put a new tweet into the stream, the callback is called as soon as the actual (JSON) output arrives your client machine. In here, you could parse the JSON can trigger different methods of your application, based on what you want.&lt;/p&gt;
&lt;p&gt;The AsyncHttpClient is pretty interesting – However I noticed a limitation that no parameters are allowed on &lt;em&gt;&lt;strong&gt;GET&lt;/strong&gt;&lt;/em&gt; request. Not via its setParameter/s() method nor via using the &lt;strong&gt;?&lt;/strong&gt; character =&amp;gt; http://server_url&lt;strong&gt;?param=value&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Need to check more by checking out the code from &lt;a href="http://github.com/ning/async-http-client.git"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters with HTTP POST&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Of course, doing a HTTP_POST the parameters work as expected &lt;img src="http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)"&gt; &lt;/p&gt;
&lt;pre&gt;
Request req = new
 RequestBuilder(RequestType.POST)
 .setUrl(&amp;quot;http://stream.twitter.com/1/statuses/filter.json&amp;quot;)
 .addHeader(
   &amp;quot;Content-Type&amp;quot;,&amp;quot;application/x-www-form-urlencoded&amp;quot;)
 .addHeader(&amp;quot;Authorization&amp;quot;,&amp;quot;Basic&amp;quot; + encodedLogon)
 .setParameter(&amp;quot;track&amp;quot;, &amp;quot;Java&amp;quot;)
 .build();

 Future&amp;lt;Response&amp;gt; f = asyncHttpClient.executeRequest(req,
  new AsyncCompletionHandler()
 {
 ....
 // similar as above...
 }
...
&lt;/pre&gt;
&lt;p&gt;Looking forward to continue using this neat project! Good job guys…&lt;/p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthiaswessendorf.wordpress.com/300/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthiaswessendorf.wordpress.com/300/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthiaswessendorf.wordpress.com/300/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthiaswessendorf.wordpress.com/300/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthiaswessendorf.wordpress.com/300/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthiaswessendorf.wordpress.com/300/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthiaswessendorf.wordpress.com/300/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthiaswessendorf.wordpress.com/300/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthiaswessendorf.wordpress.com/300/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthiaswessendorf.wordpress.com/300/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthiaswessendorf.wordpress.com&amp;amp;blog=1129660&amp;amp;post=300&amp;amp;subd=matthiaswessendorf&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/ZD8cL_OH-9M" height="1" width="1"/&gt;</description><media:group xmlns:media="http://search.yahoo.com/mrss/"><media:content url="http://1.gravatar.com/avatar/92d27b816c7652e7bad5ecbfa76705a7?s=96&amp;d=identicon&amp;r=G" /></media:group><feedburner:origLink>http://matthiaswessendorf.wordpress.com/2010/03/05/nings-async-http-client-and-twitter-streaming-api/</feedburner:origLink></item><item><title>The Poetry of Wisdom in Oracle Documentation: E.g. PPR and List Of Values</title><link>http://feedproxy.google.com/~r/orana_java/~3/g0L0nq6Mabg/</link><category>Uncategorized</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">frank.nimphius</dc:creator><pubDate>Fri, 05 Mar 2010 02:48:03 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/29767b023ce0fa2a</guid><description>&lt;p&gt;Our ADF Faces documentation contains little nuggets of poetry and wisdom that are easy to memorize helping you to better understand the product – and answer questions on OTN with it. For example, today I found and liked:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Note: If your trigger component is an inputLov or an inputComboBoxLov, and the target component is an input component set to required, then a validation error will be thrown for the input component when the LOV popup is displayed. To avoid this, you must use programmatic partial page rendering.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;
Note: In some cases, you may want a component to be rerendered only when a particular event is fired, not for every event associated with the trigger component, or you may want some logic to determine whether a component is to be rerendered. In these cases, you can programatically enable PPR.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Excellent !&lt;/p&gt;
&lt;p&gt;Frank&lt;/p&gt;
&lt;p&gt;Want to dig your own nuggets? &lt;a href="http://download.oracle.com/docs/cd/E15523_01/web.1111/b31973/toc.htm"&gt;here is the documentation&lt;/a&gt;: Looking forward to read your blogs and tweets with your favorite quotes. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/g0L0nq6Mabg" height="1" width="1"/&gt;</description><feedburner:origLink>http://thepeninsulasedge.com/frank_nimphius/2010/03/05/the-poetry-of-wisdom-in-oracle-documentation-e-g-ppr-and-list-of-values/</feedburner:origLink></item><item><title>Java Memory Management</title><link>http://feedproxy.google.com/~r/orana_java/~3/Vou-gdwQi7g/java-memory-management.html</link><category>java</category><category>hotspot</category><category>garbage collection</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gert Leenders</dc:creator><pubDate>Thu, 04 Mar 2010 12:13:08 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/8d7442ad2ab534c1</guid><description>When writing programs it’s always good to know what’s happing in the core of the Framework you’re using. This allow you to get a better idea why things happen in a certain way or what to do in case you receive an error.&lt;br&gt;&lt;br&gt;So if you’re a java programmer a good thing to read is &lt;a href="http://java.sun.com/javase/technologies/hotspot/gc/memorymanagement_whitepaper.pdf"&gt;this paper on memory management in the Virtual machine&lt;/a&gt;. It has a short introduction, a brief overview of the concepts and later on it dives a little deeper with an overview on the different garbage collectors and a chapter on ergonomics. At the end you get some tips and recommendations. &lt;br&gt;&lt;br&gt;Chapter 6 also contains the paragraph ‘What to Do about OutOfMemoryError’ helpful for us all I think :-) (especially when you’ve ever have used BufferedImage)&lt;br&gt;&lt;br&gt;&lt;a href="http://java.sun.com/javase/technologies/hotspot/gc/index.jsp"&gt;Here&lt;/a&gt; you can find more information on Java HotSpot Garbage Collection.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/808130183756216637-3394016489108740509?l=gleenders.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/Vou-gdwQi7g" height="1" width="1"/&gt;</description><feedburner:origLink>http://gleenders.blogspot.com/2010/03/java-memory-management.html</feedburner:origLink></item><item><title>Patch for SQL Developer 2.1 released</title><link>http://feedproxy.google.com/~r/orana_java/~3/lYmSbyAsrt8/</link><category>Uncategorized</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Olivier Dupont</dc:creator><pubDate>Wed, 03 Mar 2010 06:23:41 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/3f6a7fc39d3be742</guid><description>&lt;p&gt;Just noticed that a patch is released for SQL Developer 2.1.  From the Oracle website:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Oracle SQL Developer 2.1.1 is a patch release to SQL Developer 2.1, which was released in December 2009. This patch release resolves a number of the issues raised and addresses a few additional feature requests raised on the SQL Developer Exchange.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can download it &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/iadviseblog.wordpress.com/1266/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/iadviseblog.wordpress.com/1266/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/iadviseblog.wordpress.com/1266/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/iadviseblog.wordpress.com/1266/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/iadviseblog.wordpress.com/1266/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/iadviseblog.wordpress.com/1266/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/iadviseblog.wordpress.com/1266/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/iadviseblog.wordpress.com/1266/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/iadviseblog.wordpress.com/1266/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/iadviseblog.wordpress.com/1266/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=iadviseblog.wordpress.com&amp;amp;blog=10859083&amp;amp;post=1266&amp;amp;subd=iadviseblog&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/lYmSbyAsrt8" height="1" width="1"/&gt;</description><media:group xmlns:media="http://search.yahoo.com/mrss/"><media:content url="http://0.gravatar.com/avatar/628076e809a5cf2df9f3604421643d45?s=96&amp;d=identicon&amp;r=G" /></media:group><feedburner:origLink>http://iadviseblog.wordpress.com/2010/03/03/patch-for-sql-developer-2-1-released/</feedburner:origLink></item><item><title>SQL Developer and ApEx: Application missing</title><link>http://feedproxy.google.com/~r/orana_java/~3/e538gw5muXA/</link><category>Apex</category><category>SQLDeveloper</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Olivier Dupont</dc:creator><pubDate>Wed, 03 Mar 2010 06:14:54 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/b20b7dc4a8d76752</guid><description>&lt;p&gt;Last week I was searching for a long time to find my application in SQL Developer.  I wanted to deploy it to a production environment, the application had APP_ID 113 but I couldn’t find it in SQL Developer:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_1.jpg"&gt;&lt;img src="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_1.jpg?w=215&amp;amp;h=65" alt="" title="SQLD_apex_app_1" width="215" height="65"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After some time I noticed an other application that had the same name: “Daily Report”.   After I changed the name of my application to “Daily Reports”, I could see it in SQL Developer and deploy it!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_2.jpg"&gt;&lt;img src="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_2.jpg?w=207&amp;amp;h=79" alt="" title="SQLD_apex_app_2" width="207" height="79"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/iadviseblog.wordpress.com/1261/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/iadviseblog.wordpress.com/1261/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/iadviseblog.wordpress.com/1261/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/iadviseblog.wordpress.com/1261/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/iadviseblog.wordpress.com/1261/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/iadviseblog.wordpress.com/1261/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/iadviseblog.wordpress.com/1261/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/iadviseblog.wordpress.com/1261/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/iadviseblog.wordpress.com/1261/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/iadviseblog.wordpress.com/1261/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=iadviseblog.wordpress.com&amp;amp;blog=10859083&amp;amp;post=1261&amp;amp;subd=iadviseblog&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/e538gw5muXA" height="1" width="1"/&gt;</description><media:group xmlns:media="http://search.yahoo.com/mrss/"><media:content url="http://0.gravatar.com/avatar/628076e809a5cf2df9f3604421643d45?s=96&amp;d=identicon&amp;r=G" /><media:content url="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_1.jpg" /><media:content url="http://iadviseblog.files.wordpress.com/2010/03/sqld_apex_app_2.jpg" /></media:group><feedburner:origLink>http://iadviseblog.wordpress.com/2010/03/03/sqldeveloper-and-apex-application-missing/</feedburner:origLink></item><item><title>Normal comment service is now resumed</title><link>http://feedproxy.google.com/~r/orana_java/~3/9HTYMgfD6lI/normal-comment-service-is-now-resumed.html</link><category>ramble</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gerard Davison</dc:creator><pubDate>Tue, 02 Mar 2010 08:51:48 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/05a1d0ea348dd5ec</guid><description>&lt;p&gt;I have been fairly remiss in responding to comments, I have just worked my way though the backlog and now up to date. yay&lt;/p&gt;&lt;div&gt;
&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2648073517459434852-438808515068608474?l=kingsfleet.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/KingsfleetBlog/~4/TfVl7yJkExU" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/9HTYMgfD6lI" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/KingsfleetBlog/~3/TfVl7yJkExU/normal-comment-service-is-now-resumed.html</feedburner:origLink></item><item><title>Building and testing Jersey</title><link>http://feedproxy.google.com/~r/orana_java/~3/e7W0Hj70_TU/building-and-testing-jersey.html</link><category>jax-rs</category><category>jersey</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gerard Davison</dc:creator><pubDate>Tue, 02 Mar 2010 05:01:32 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/f6e3a1176723b28e</guid><description>&lt;p&gt;So I was playing with a patch Building an testing to Jersey but I was having trouble building and running the tests. It seems that there are problems if you don't have the same specific version of Maven, (2.0.9), once that is solved you might run across another issue as the default memory given to Maven will not be enough for all the test to succeed.&lt;/p&gt;

&lt;p&gt;The way to track the correct values is to take a look at "hudson/jersey.sh" and this will set the MAVEN_OPTS to:&lt;/p&gt;

&lt;pre name="code"&gt;
export MAVEN_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
&lt;/pre&gt;

&lt;p&gt;This it turns out isn't sufficient if you are running behind a firewall, at least on Linux, and you need to specify the web proxy as well for some tests:&lt;/p&gt;

&lt;pre name="code"&gt;
export MAVEN_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Dhttp.proxyHost=proxy -Dhttp.noProxyHosts=localhost"
&lt;/pre&gt;

&lt;p&gt;With that resolved I can build and test all of Jersey in a relatively small amount of time. Although it does seem you need an active network connection which is a shame.&lt;/p&gt;&lt;div&gt;
&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2648073517459434852-3738433105378462479?l=kingsfleet.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/KingsfleetBlog/~4/qLJ3dcp8eTw" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/e7W0Hj70_TU" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/KingsfleetBlog/~3/qLJ3dcp8eTw/building-and-testing-jersey.html</feedburner:origLink></item><item><title>Integration in Oracle ADF with ADF Task Flows and Dynamic Regions Pending Changes</title><link>http://feedproxy.google.com/~r/orana_java/~3/Y2i74UbpMd8/integration-in-oracle-adf-with-adf-task.html</link><category>Integration</category><category>ADF</category><category>JDeveloper 11g</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrejus Baranovskis</dc:creator><pubDate>Mon, 01 Mar 2010 11:33:48 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/af70f9ea553d0053</guid><description>From my previous post - &lt;a href="http://andrejusb.blogspot.com/2010/02/integration-in-oracle-adf-with-adf-task.html"&gt;Integration in Oracle ADF with ADF Task Flows and Dynamic Regions&lt;/a&gt;, you can learn how to integrate separate Oracle ADF applications using dynamic regions. I'm sure, you will want to prevent user navigation from one region to another, when there are unsaved pending changes available. Its pretty simple in ADF 11g, I will describe today.&lt;br&gt;&lt;br&gt;I have updated sample application from my previous post, download updated archive - &lt;a href="http://jdevsamples.googlecode.com/files/ADFIntegrationRegions2.zip"&gt;ADFIntegrationRegions2.zip&lt;/a&gt;.&lt;br&gt;&lt;br&gt;So, how to prevent user navigation if there are unsaved changes? Key thing - from main application we can see Data Controls of imported applications. Even when main application Model project doesn't contain any ADF BC, still we can see Data Controls from imported ADF libraries:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S4wOrqKb9II/AAAAAAAADVI/tNe18zDDcJM/s1600-h/1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S4wOrqKb9II/AAAAAAAADVI/tNe18zDDcJM/s320/1.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;And that is great, because we can access Data Control and check it for any existing uncommitted data.&lt;br&gt;&lt;br&gt;I have implemented pending changes check inside Managed Bean, where Dynamic Regions are activated. In case of unsaved data, user is prevented from navigation and forced to stay in current region:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S4wUWC0G8cI/AAAAAAAADVQ/zHafi8P22kE/s1600-h/2.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S4wUWC0G8cI/AAAAAAAADVQ/zHafi8P22kE/s320/2.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Pending changes are validated simply by accessing Data Control transaction and checking if it is dirty:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://1.bp.blogspot.com/_OSq71i5oy0c/S4wVTuQUrUI/AAAAAAAADVY/ftp0n26hi-4/s1600-h/3.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_OSq71i5oy0c/S4wVTuQUrUI/AAAAAAAADVY/ftp0n26hi-4/s320/3.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;If there will be no pending changes, next dynamic region will be opened:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_OSq71i5oy0c/S4wVk4g2VgI/AAAAAAAADVg/KARMikPykn4/s1600-h/4.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_OSq71i5oy0c/S4wVk4g2VgI/AAAAAAAADVg/KARMikPykn4/s320/4.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;But, if user will type data and without saving will try to open another dynamic region, system will prevent him and inform about unsaved data:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/_OSq71i5oy0c/S4wV5UfOTII/AAAAAAAADVo/DLwPLN3xnuA/s1600-h/5.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_OSq71i5oy0c/S4wV5UfOTII/AAAAAAAADVo/DLwPLN3xnuA/s320/5.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Same rule works with form component:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/_OSq71i5oy0c/S4wWCXeP4oI/AAAAAAAADVw/8bPHjJYMaag/s1600-h/6.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_OSq71i5oy0c/S4wWCXeP4oI/AAAAAAAADVw/8bPHjJYMaag/s320/6.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/5874979429188093780-4634528257702751461?l=andrejusb.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/Y2i74UbpMd8" height="1" width="1"/&gt;</description><feedburner:origLink>http://andrejusb.blogspot.com/2010/03/integration-in-oracle-adf-with-adf-task.html</feedburner:origLink></item><item><title>The Obligatory Calculator in JSF 2.0</title><link>http://feedproxy.google.com/~r/orana_java/~3/kVeym_ffw-E/obligatory-calculator-in-jsf-20.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Buttso</dc:creator><pubDate>Sun, 28 Feb 2010 19:32:48 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/b769590a56837850</guid><description>&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Checked out some of the high level JSF 2.0 new features recently using NetBeans 6.8 and GlassFish v3.  For what it&amp;#39;s worth, I think they are very usable, feature rich and effcient pairing for conducting Java EE 6 development.&lt;br&gt;
&lt;br&gt;
As with all old habits, some won&amp;#39;t die.  And my habit for taking a quick look at any new programming language/framework is to build a very simple calculator with one screen and some simple calculation logic.&lt;br&gt;
&lt;br&gt;
With NetBeans, creating a new Web project is trivial.  To add JSF support select it as a framework to use.&lt;br&gt;
&lt;br&gt;
After a bit of navel gazing, I realized a significant part of the unholy dislike I had for JSF 1.2 and its earlier versions predominantly stemmed from the need to live in the configuration red zone -- faces-config.xml. Every damned thing that you wanted to use or access pretty much needed to be defined in the configuration file: managed beans definitions with packages/classes and names and scopes, even the most simples of page navigation paths, etc. &lt;br&gt;
&lt;br&gt;
But as of JSF 2.0, that has mostly changed! Accomodating a convention over configuration model for page navigation and making use of annotations for declaring managed bean components (and associated runtime attributes and property values) in my simple example, I didn&amp;#39;t have to even look at the faces-config.xml file.  Happy Days.&lt;br&gt;
&lt;br&gt;
Here's my simple CalculatorManagedBean, which is responsible for performing the arduous task of calculating a result from a given two values and an operand. It also supplies the operand values for the screen to display.&lt;br&gt;
&lt;br&gt;
To declare this as a ManagedBean, all I had to do was to add the @ManagedBean annotation.  I also decided to bind this ManagedBean into each clients HttpSession so it was created once, and was able to store property values set from eacg clients page.&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;package&lt;/span&gt; sab.demo.calc.beans;
&lt;span&gt; 2&lt;/span&gt; 
&lt;span&gt; 3&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; java.io.Serializable;
&lt;span&gt; 4&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; javax.annotation.PostConstruct;
&lt;span&gt; 5&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; javax.faces.bean.ManagedBean;
&lt;span&gt; 6&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; javax.faces.bean.SessionScoped;
&lt;span&gt; 7&lt;/span&gt; 
&lt;span&gt; 8&lt;/span&gt; &lt;b&gt;@ManagedBean(eager=&lt;span&gt;true&lt;/span&gt;&lt;/b&gt;)
&lt;span&gt; 9&lt;/span&gt; &lt;b&gt;@SessionScoped&lt;/b&gt;
&lt;span&gt;10&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; CalculatorManagedBean &lt;span&gt;implements&lt;/span&gt; Serializable {
&lt;span&gt;11&lt;/span&gt; 
&lt;span&gt;12&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;static&lt;/span&gt; &lt;span&gt;char&lt;/span&gt;[] operands = { &lt;span&gt;'+'&lt;/span&gt;, &lt;span&gt;'-'&lt;/span&gt;, &lt;span&gt;'*'&lt;/span&gt;, &lt;span&gt;'/'&lt;/span&gt; };
&lt;span&gt;13&lt;/span&gt; 
&lt;span&gt;14&lt;/span&gt;     &lt;span&gt;int&lt;/span&gt; value1;
&lt;span&gt;15&lt;/span&gt;     &lt;span&gt;int&lt;/span&gt; value2;
&lt;span&gt;16&lt;/span&gt;     &lt;span&gt;char&lt;/span&gt; operand;
&lt;span&gt;17&lt;/span&gt;     String result;
&lt;span&gt;18&lt;/span&gt; 
&lt;span&gt;19&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; CalculatorManagedBean() {
&lt;span&gt;20&lt;/span&gt;     }
&lt;span&gt;21&lt;/span&gt; 
&lt;span&gt;22&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;ch&lt;/span&gt;&lt;span&gt;ar&lt;/span&gt;[] getOperands() {
&lt;span&gt;23&lt;/span&gt;         &lt;span&gt;return&lt;/span&gt; operands;
&lt;span&gt;24&lt;/span&gt;     }
&lt;span&gt;25&lt;/span&gt;     
&lt;span&gt;26&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;char&lt;/span&gt; getOperand() {
&lt;span&gt;27&lt;/span&gt;         &lt;span&gt;return&lt;/span&gt; operand;
&lt;span&gt;28&lt;/span&gt;     }
&lt;span&gt;29&lt;/span&gt; 
&lt;span&gt;30&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; setOperand(&lt;span&gt;cha&lt;/span&gt;&lt;span&gt;r&lt;/span&gt; operand) {
&lt;span&gt;31&lt;/span&gt;         System.out.printf(&lt;span&gt;"&lt;/span&gt;&lt;span&gt;setOperand: %s&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;, operand);
&lt;span&gt;32&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.operand = operand;
&lt;span&gt;33&lt;/span&gt;     }
&lt;span&gt;34&lt;/span&gt; 
&lt;span&gt;35&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; String getResult() {
&lt;span&gt;36&lt;/span&gt;         &lt;span&gt;return&lt;/span&gt; result;
&lt;span&gt;37&lt;/span&gt;     }
&lt;span&gt;38&lt;/span&gt; 
&lt;span&gt;39&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; setResult(String result) {
&lt;span&gt;40&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.result = result;
&lt;span&gt;41&lt;/span&gt;     }
&lt;span&gt;42&lt;/span&gt; 
&lt;span&gt;43&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;int&lt;/span&gt; getValue1() {
&lt;span&gt;44&lt;/span&gt;         &lt;span&gt;retu&lt;/span&gt;&lt;span&gt;rn&lt;/span&gt; value1;
&lt;span&gt;45&lt;/span&gt;     }
&lt;span&gt;46&lt;/span&gt; 
&lt;span&gt;47&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; setValue1(&lt;span&gt;int&lt;/span&gt; value1) {
&lt;span&gt;48&lt;/span&gt;         System.out.printf(&lt;span&gt;"&lt;/span&gt;&lt;span&gt;setValue1: %s&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;, value1);
&lt;span&gt;49&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.value1 = value1;
&lt;span&gt;50&lt;/span&gt;     }
&lt;span&gt;51&lt;/span&gt; 
&lt;span&gt;52&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;int&lt;/span&gt; getValue2() {
&lt;span&gt;53&lt;/span&gt;         &lt;span&gt;return&lt;/span&gt; value2;
&lt;span&gt;54&lt;/span&gt;     }
&lt;span&gt;55&lt;/span&gt; 
&lt;span&gt;56&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; setValue2(&lt;span&gt;int&lt;/span&gt; value2) {
&lt;span&gt;57&lt;/span&gt;         System.out.printf(&lt;span&gt;"&lt;/span&gt;&lt;span&gt;setValue2: %s&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;, value2);
&lt;span&gt;58&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.value2 = value2;
&lt;span&gt;59&lt;/span&gt;     }
&lt;span&gt;60&lt;/span&gt; 
&lt;span&gt;61&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; calculate() {
&lt;span&gt;62&lt;/span&gt;         &lt;span&gt;switch&lt;/span&gt;(getOperand()) {
&lt;span&gt;63&lt;/span&gt;             &lt;span&gt;case&lt;/span&gt; &lt;span&gt;'+'&lt;/span&gt; :
&lt;span&gt;64&lt;/span&gt;                 result = String.valueOf(value1 + value2);
&lt;span&gt;65&lt;/span&gt;                 &lt;span&gt;break&lt;/span&gt;;
&lt;span&gt;66&lt;/span&gt;             &lt;span&gt;case&lt;/span&gt; &lt;span&gt;'-'&lt;/span&gt; :
&lt;span&gt;67&lt;/span&gt;                 result = String.valueOf(value1 - value2);
&lt;span&gt;68&lt;/span&gt;                 &lt;span&gt;break&lt;/span&gt;;
&lt;span&gt;69&lt;/span&gt;             &lt;span&gt;case&lt;/span&gt; &lt;span&gt;'*'&lt;/span&gt; :
&lt;span&gt;70&lt;/span&gt;                 result = String.valueOf(value1 * value2);
&lt;span&gt;71&lt;/span&gt;                 &lt;span&gt;break&lt;/span&gt;;
&lt;span&gt;72&lt;/span&gt;             &lt;span&gt;case&lt;/span&gt; &lt;span&gt;'/'&lt;/span&gt; :
&lt;span&gt;73&lt;/span&gt;                 &lt;span&gt;double&lt;/span&gt; v1 = value1;
&lt;span&gt;74&lt;/span&gt;                 &lt;span&gt;double&lt;/span&gt; v2 = value2;
&lt;span&gt;75&lt;/span&gt;                 result = String.valueOf(v1 / v2);
&lt;span&gt;76&lt;/span&gt;                 &lt;span&gt;break&lt;/span&gt;;
&lt;span&gt;77&lt;/span&gt;         }
&lt;span&gt;78&lt;/span&gt;         System.out.printf(&lt;span&gt;"&lt;/span&gt;&lt;span&gt;Calculate: %s %s %s = %s&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;,
&lt;span&gt;79&lt;/span&gt;                 getValue1(),
&lt;span&gt;80&lt;/span&gt;                 getOperand(),
&lt;span&gt;81&lt;/span&gt;                 getValue2(),
&lt;span&gt;82&lt;/span&gt;                 getResult());
&lt;span&gt;83&lt;/span&gt; 
&lt;span&gt;84&lt;/span&gt;     }
&lt;span&gt;85&lt;/span&gt; 
&lt;span&gt;86&lt;/span&gt;     @PostConstruct
&lt;span&gt;87&lt;/span&gt;     &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; postConstruct() {
&lt;span&gt;88&lt;/span&gt;         System.out.println(&lt;span&gt;"&lt;/span&gt;&lt;span&gt;postConstruct&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;);
&lt;span&gt;89&lt;/span&gt;         operand = &lt;span&gt;'+'&lt;/span&gt;;
&lt;span&gt;90&lt;/span&gt;         value1 = 0;
&lt;span&gt;91&lt;/span&gt;         value2 = 0;
&lt;span&gt;92&lt;/span&gt;         result = &lt;span&gt;"&lt;/span&gt;&lt;span&gt;n/a&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;;
&lt;span&gt;93&lt;/span&gt;     }
&lt;span&gt;94&lt;/span&gt; }
&lt;span&gt;95&lt;/span&gt; 
&lt;span&gt;96&lt;/span&gt; 
&lt;/pre&gt;&lt;br&gt;
With the ManagedBean taken care of, the next step was to create the JSF page.  With JSF 2.0, it now uses Facelets as the default view technology instead of JSP.  This means there are lots of things that are able to be expressed more naturally in the view layer, which were previously difficult or cumbersome in the older JSP model.  &lt;br&gt;
&lt;br&gt;
A really useful thing I found in facelets was the ability to render a ManagedBean property directly in the page, without needing to surround it with other tag library calls.  &lt;br&gt;
&lt;br&gt;
So to create my calculator screen, I simply added a couple of fields, and wired them into the CalculatorManagedBean that I'd developed.  Again, following convention over configuration, the default name for a ManagedBean is a lower case version of the classname, which makes them easy to remember/lookup from a project hierachy (as opposed to hunting through XML).  Of course NetBeans makes this easy since it has code-insight which presents the names of known ManagedBeans and their available properties for insertion via a few keystrokes.&lt;br&gt;
&lt;br&gt;
The list of operands values shown in the select list are populated from a property on the ManagedBean which returns an array of char.&lt;br&gt;
&lt;br&gt;
The "=" button is wired into the calculate operation, which takes its current property values, performs the desired operation and sets the result property, which is then displayed in the result field on the page.&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span&gt; 1&lt;/span&gt; &amp;lt;?xml version=&amp;#39;1.0&amp;#39; encoding=&amp;#39;UTF-8&amp;#39; ?&amp;gt;
&lt;span&gt; 2&lt;/span&gt; &lt;span&gt;&amp;lt;!DOCTYPE&lt;/span&gt; &lt;span&gt;html&lt;/span&gt; &lt;span&gt;PUBLIC&lt;/span&gt; &lt;span&gt;"-//W3C//DTD&lt;/span&gt; &lt;span&gt;XHTML&lt;/span&gt; &lt;span&gt;1.0&lt;/span&gt; &lt;span&gt;Transitional//EN"&lt;/span&gt; &lt;span&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt; 3&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt; &lt;span&gt;xmlns&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://www.w3.org/1999/xhtml"&lt;/span&gt;
&lt;span&gt; 4&lt;/span&gt;       &lt;span&gt;xmlns:f&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://java.sun.com/jsf/core"&lt;/span&gt;
&lt;span&gt; 5&lt;/span&gt;       &lt;span&gt;xmlns:h&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"http://java.sun.com/jsf/html"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt; 6&lt;/span&gt;     &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt; 7&lt;/span&gt;         &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Calculator Facelet&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt; 8&lt;/span&gt;     &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt; 9&lt;/span&gt;     &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;10&lt;/span&gt;         &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt; &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;font-family: arial; font-variant: small-caps; color: #336699&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Calculator&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;11&lt;/span&gt;         &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;12&lt;/span&gt;             &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:panelGrid&lt;/span&gt; &lt;span&gt;columns&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"1"&lt;/span&gt; &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;text-align: center; border: 1px solid #336699; padding: 5px; &lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;13&lt;/span&gt;             &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;14&lt;/span&gt;                 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:inputText&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"value1"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.value1&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; 
&lt;span&gt;15&lt;/span&gt;                              &lt;span&gt;size&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"5"&lt;/span&gt; &lt;span&gt;maxlengt&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"5"&lt;/span&gt; &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;text-align: right;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;
&lt;span&gt;16&lt;/span&gt;             &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;17&lt;/span&gt;             &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;18&lt;/span&gt;                 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:inputText&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"value2"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.value2&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; 
&lt;span&gt;19&lt;/span&gt;                              &lt;span&gt;size&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"5"&lt;/span&gt; &lt;span&gt;maxlength&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"5"&lt;/span&gt; &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;text-align: right&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;
&lt;span&gt;20&lt;/span&gt;             &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;21&lt;/span&gt;             &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:panelGrid&lt;/span&gt; &lt;span&gt;columns&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"2"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;22&lt;/span&gt;                 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt; &lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;23&lt;/span&gt;                     &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:selectOneMenu&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"operand"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.operand&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; 
&lt;span&gt;24&lt;/span&gt;                                      &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;text-align: center;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;25&lt;/span&gt;                         &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;f:selectItems&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.operands&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;
&lt;span&gt;26&lt;/span&gt;                     &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:selectOneMenu&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;27&lt;/span&gt;                 &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;28&lt;/span&gt;                 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:commandButton&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"="&lt;/span&gt; &lt;span&gt;action&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.calculate&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;29&lt;/span&gt;             &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:pa&lt;/span&gt;&lt;span&gt;nelGrid&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;30&lt;/span&gt;             &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;31&lt;/span&gt;                 &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h:inputText&lt;/span&gt; &lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"result"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;#{&lt;/span&gt;calculatorManagedBean.result&lt;span&gt;}&lt;/span&gt;&lt;span&gt;"&lt;/span&gt; 
&lt;span&gt;32&lt;/span&gt;                              &lt;span&gt;readonly&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"true"&lt;/span&gt; &lt;span&gt;size&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"5"&lt;/span&gt; &lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;font-weight: bold; text-align: right&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;
&lt;span&gt;33&lt;/span&gt;             &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:column&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;34&lt;/span&gt;         &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:panelGrid&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;35&lt;/span&gt;         &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;36&lt;/span&gt;     &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h:body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;37&lt;/span&gt; &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;span&gt;38&lt;/span&gt; 
&lt;span&gt;39&lt;/span&gt; 
&lt;span&gt;40&lt;/span&gt; 
&lt;/pre&gt;&lt;br&gt;
Put it all together and run using the local GlassFish instance, the page works and looks like this.&lt;br&gt;
&lt;br&gt;
&lt;div style="clear:both;text-align:center;border:1px"&gt;&lt;a href="http://4.bp.blogspot.com/_2fxZrJNuQg4/S4s09GMGaRI/AAAAAAAAAOE/CnlLP9lAOo8/s1600-h/calc-facelet.gif" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="1" height="322" src="http://4.bp.blogspot.com/_2fxZrJNuQg4/S4s09GMGaRI/AAAAAAAAAOE/CnlLP9lAOo8/s400/calc-facelet.gif" width="400"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;
So there it is, a JSF 2.0 version of my old habit up and running in a few minutes.  I like what I've seen with JSF 2.0 so far.  &lt;br&gt;
&lt;br&gt;
Of course, the use of @ManagedBean annotation in JSF 2.0 may be dead already with the arrival of CDI in Java EE 6 and its @Named annotation, but that's not an issue I'm going to explore here.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/13556721-7823406020022599630?l=buttso.blogspot.com" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TheButtsoBlathers?a=EIz_Px9hQl0:iuSiGpL5j4A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheButtsoBlathers?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheButtsoBlathers/~4/EIz_Px9hQl0" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/orana_java/~4/kVeym_ffw-E" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/TheButtsoBlathers/~3/EIz_Px9hQl0/obligatory-calculator-in-jsf-20.html</feedburner:origLink></item></channel></rss>
