<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4939023579346660870</id><updated>2011-12-27T07:57:08.528-05:00</updated><category term='JSP decode'/><category term='OAS 10.1.3.4'/><category term='JSP'/><category term='books'/><category term='JSF 1.2'/><category term='JSF Custom Components'/><category term='events'/><category term='Operation Binding'/><category term='Career Change'/><category term='Oracle WebCenter'/><category term='MyFaces Orchestra'/><category term='Postbacks'/><category term='presentation'/><category term='DatabaseTransactionFactory'/><category term='demo app'/><category term='First Post'/><category term='h:inputText'/><category term='AD4J'/><category term='h:inputTextarea'/><category term='backing bean scope'/><category term='Wrapper pattern'/><category term='af:treeTable'/><category term='ViewLink'/><category term='auto-suggest'/><category term='ADF Faces components'/><category term='XML Schema'/><category term='af:commandMenuItem'/><category term='custom component'/><category term='JDeveloper 11g'/><category term='ViewObject'/><category term='ADF Faces 10g'/><category term='ADF Job'/><category term='cue cards'/><category term='Oracle Developer Day'/><category term='RowSetIterator'/><category term='bc4j.xcfg'/><category term='Oracle Portal'/><category term='Commit'/><category term='Java EE'/><category term='error handling'/><category term='rows property'/><category term='selected'/><category term='blank rows'/><category term='ADF/BC'/><category term='ADF Faces 11g'/><category term='Decorator pattern'/><category term='XML'/><category term='AjaxTags'/><category term='stretching'/><category term='restoreState'/><category term='WSRP'/><category term='Deepak Vohra'/><category term='Renderers'/><category term='JAZN'/><category term='LDAP'/><category term='iterators'/><category term='database column default value'/><category term='Java Thread Dump'/><category term='binding layer'/><category term='Task Flows'/><category term='af:menuBar'/><category term='Portal-JSF integration'/><category term='FindBugs'/><category term='auto-save'/><category term='f:verbatim'/><category term='f:ajax'/><category term='JSF'/><category term='IAS 10.1.2'/><category term='jsf.js'/><category term='Data Control pane'/><category term='Facelets'/><category term='J2EE'/><category term='Excel'/><category term='JSF 2.0'/><category term='TreeModel'/><category term='Dojo'/><category term='migration ADF from 10 to 11'/><category term='MVC'/><category term='CDATA'/><category term='Peter Moskovits'/><category term='DOMSource'/><category term='JSF Portlet Bridge'/><category term='row key'/><category term='page unload'/><category term='-Xrs'/><category term='ADF Faces Rich Client'/><category term='JDev 10g'/><category term='ADF 11g'/><category term='Trinity'/><category term='JDev 11g'/><category term='rows attribute'/><category term='Oracle WebLogic Portal'/><category term='Ajax'/><category term='Net Beans'/><category term='post-redirect-get'/><category term='JSF 2.0 New Features'/><category term='entity'/><category term='Collection of Type objects'/><category term='Jade'/><category term='managed beans'/><category term='JavaScript object properties'/><category term='Class Diagrammer'/><category term='af:iterator'/><category term='OAS 10.1.2'/><category term='auto-complete'/><category term='ADF bookmarks'/><category term='t:popup'/><category term='XHTML'/><category term='SSL'/><category term='saveState'/><category term='Oracle Open World'/><category term='custom NavigationHandler'/><category term='Book Review'/><category term='Anghel Leonard'/><category term='Tomahawk'/><category term='Refresh Icon'/><category term='af:forEach'/><category term='STATUS_INITIALIZED'/><category term='af:inputText'/><category term='GlassFish'/><category term='PhaseListeners'/><category term='JBO-35007'/><category term='Java'/><category term='tree binding'/><category term='doubling'/><category term='Constraint'/><category term='ADF'/><category term='JDBC'/><category term='role-name'/><category term='bean validation'/><category term='regex'/><category term='setNewRowState'/><category term='Forms to Java'/><category term='IE bug'/><category term='Packt Publishing'/><category term='ValueChangeEvent'/><category term='Maven'/><category term='MetaObjectManager scope'/><category term='row currency'/><category term='Controller'/><category term='NoVAJUG'/><category term='query bind variables'/><category term='JSF Blueprint Auto-suggest'/><category term='JSF 2.0 book'/><category term='Oracle SSO'/><category term='JSF 2.0 tutorial'/><category term='DBTransaction.isDirty()'/><category term='JSF request scope'/><category term='OC4J 10.1.3.4'/><category term='ADF Faces'/><category term='web.xml'/><category term='J-Integra'/><category term='Pentaho'/><category term='Oracle Technet'/><title type='text'>The JSFAndADFInjectionMachine</title><subtitle type='html'>This site promotes and supports the development and deployment of JSF, Oracle ADF applications, and other web development topics.  If you have interesting facts to share about any of these or any related technologies, please feel free to post a comment.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default?start-index=101&amp;max-results=100'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>110</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5910201595300205568</id><published>2011-07-05T11:35:00.000-04:00</published><updated>2011-07-05T11:35:07.108-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0 tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Net Beans'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0 practice</title><content type='html'>This weekend, when my wife took her naps, I did some JSF 2.0 stuff…mostly getting a platform up and running on my work laptop that would allow me to write some JSF 2.0 code and perhaps have something to show y’all.  &lt;br /&gt;&lt;br /&gt;I have done this setup before on other machines, but I tried some different things.&lt;br /&gt;&lt;br /&gt;I recommend the following download:  &lt;a href="http://netbeans.org/downloads/"&gt;http://netbeans.org/downloads/&lt;/a&gt;  (pick the “Java EE” download).&lt;br /&gt;&lt;br /&gt;If you do this you get the netbeans IDE, and it will also install (optionally…you have to select a checkbox to install it) glassfish server 3.x.  This version of Glassfish is Java EE 6 certified.  And this version of Netbeans is integrated pretty well with Glassfish, even with regard to JSF 2.0.&lt;br /&gt;&lt;br /&gt;If I do examples I will do it with these two.  So if you want to reproduce whatever I will be able to give you specific advice.&lt;br /&gt;&lt;br /&gt;I have used this combination of IDE and web server before for JSF 2.0, and it was recommended by the Burns and Schalk JSF 2.0 book that I read.&lt;br /&gt;&lt;br /&gt;That said…I DID find a really good JSF 2.0 tutorial:  &lt;a href="http://www.coreservlets.com/JSF-Tutorial/jsf2/"&gt;http://www.coreservlets.com/JSF-Tutorial/jsf2/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This tutorial seems to have been put together really recently.  They use eclipse Helios and Tomcat 7.  I think this combination would be pretty easy to get started on as well, as Eclipse appears to have some decent support for Tomcat.  However I would not recommend Eclipse/Glassfish combination, because the latest version of Eclipse’s Glassfish server adapter seems to have a bug or two…at any rate:  figuring this particular problem is really not my top priority right this second, so I did not pursue this problem to the ends of the earth…just partway around the earth :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5910201595300205568?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5910201595300205568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5910201595300205568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5910201595300205568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5910201595300205568'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/07/jsf-20-practice.html' title='JSF 2.0 practice'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2662475437231025507</id><published>2011-02-03T07:19:00.009-05:00</published><updated>2011-07-04T11:52:22.224-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0 New Features'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>My new JSF 2.0 presentation</title><content type='html'>Well it is done...ish.&lt;br /&gt;&lt;br /&gt;I have put a copy of this presentation on slide share, the link for which is &lt;a href="http://www.slideshare.net/mfons/pdf-whats-new-with-jsf-20"&gt;here&lt;/a&gt; ; you can also see my other papers by using the link on the right side of this blog, in the section for resumes and presentations. &lt;br /&gt;&lt;br /&gt;This presentation is also available in slideshare for download, in Powerpoint and PDF format.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;div style="width:477px" id="__ss_8503983"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/mfons/pdf-whats-new-with-jsf-20" title="PDF What&amp;#39;s new with JSF 2.0"&gt;PDF What&amp;#39;s new with JSF 2.0&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse8503983" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=whatsnewandexcitinginjsf2-20110630-s2f-110704103122-phpapp01&amp;stripped_title=pdf-whats-new-with-jsf-20&amp;userName=mfons" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse8503983" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=whatsnewandexcitinginjsf2-20110630-s2f-110704103122-phpapp01&amp;stripped_title=pdf-whats-new-with-jsf-20&amp;userName=mfons" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mfons"&gt;Michael Fons&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2662475437231025507?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2662475437231025507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2662475437231025507' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2662475437231025507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2662475437231025507'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/02/my-new-jsf-20-presentation.html' title='My new JSF 2.0 presentation'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4763162549064403738</id><published>2011-01-31T11:48:00.004-05:00</published><updated>2011-01-31T22:29:20.659-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='managed beans'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 11g'/><category scheme='http://www.blogger.com/atom/ns#' term='Controller'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>Yes, but WHAT IS A CONTROLLER??</title><content type='html'>I asked Simon Lessard (a guru among gurus for Java and ADF) in the ADF Methodology &lt;a href="http://groups.google.com/group/adf-methodology"&gt;&lt;/a&gt; Group about what he thought a controller was, and his response is of great interest to me; so I am going to publish it.&lt;br /&gt;&lt;br /&gt;From it I learned that Struts did not use the event model, what an Observer pattern was, and a better way to organize your backing bean (controller bean/data bean) code.&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://groups.google.com/group/adf-methodology/browse_thread/thread/c7427b4b0b69766d"&gt;this thread&lt;/a&gt;, we have the following:&lt;br /&gt;&lt;blockquote&gt;Hi Michael,&lt;br /&gt;&lt;br /&gt;It depends, "controller" can have many meanings. In the purist version, the MVC model is a triangle (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). The model exposes the data and services, the controller is the one in charge of calling the model, and the view represents it, calling the controller whenever a UI event occurs and observing (observer pattern http://en.wikipedia.org/wiki/Observer_pattern) the model layer for change and updating itself if something happens.&lt;br /&gt;&lt;br /&gt;Now, since the Web model is a detached one, that last interaction is not possible so the MVC model in the Java web world is a mutation of the pure one. As of Struts, the controller was defined as the component in charge of managing the page flow, the navigation of which was implemented by two type of entities, the Action and the struts-config.xml file (and the control flow engine running it). With JSF, the event model like that of Swing was added, providing a way to implement another part of the controller layer -- the UI event management -- through various listeners. Each listener can therefore be considered a controller or part of a bigger controller (depending how you implement it) since these listeners can modify the component (refresh it, change its state, etc.). Also, since those listeners are accessed through EL and call managed bean methods in the end, then yes, I consider some managed beans a controller (or a part of a controller) -- but only if they are not used to store data. I call the latter data beans, and they often implement an interface from the model layer so that they can be used as service call parameters. So, in the pages, you have:&lt;br /&gt;&lt;br /&gt;&amp;lt;af:inputText value="#{expressionToADataBeanField}"/&gt;&lt;br /&gt;&amp;lt;af:commandButton action="#{expressionToAControllerBeanMethod}"/&gt;&lt;br /&gt;&amp;lt;af:someComponent binding="#{expressionToAControllerBeanField}"/&gt;&lt;br /&gt;&lt;br /&gt;Since the controller bean often needs access to the data bean, I inject the data bean into the controller bean (using the managed-property feature of JSF) when the controller is created. The data bean is stored in a persistent scope like session or page flow and must therefore be Serializable. The controller bean, on the other hand, must be stateless; so it can only be placed in the backing bean or the request scope and cannot be Serializable since UIComponent (the root class for components) isn't and can be bound in the bean.&lt;br /&gt;&lt;br /&gt;So yes, I call a backing bean a "controller" since they manage the UI interactions, call the model layer services and participate in the navigation through the action's outcome which is everything a controller should do. However, the controller layer is also completed by the JSF's NavigationHandler, which takes care of the actual page flow from the outcomes.&lt;br /&gt;&lt;br /&gt;So to summarize, I consider:&lt;br /&gt;- Managed beans used to bind components and deal with events: backing beans, controllers, controller beans&lt;br /&gt;- Managed beans used to store the data entered by the user: data beans, page flow beans, session bean&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I hope it clarifies the concepts a bit,&lt;br /&gt;&lt;br /&gt;~ Simon&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4763162549064403738?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4763162549064403738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4763162549064403738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4763162549064403738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4763162549064403738'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/01/yes-but-what-is-controller.html' title='Yes, but WHAT IS A CONTROLLER??'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2731821275140086076</id><published>2011-01-27T15:07:00.003-05:00</published><updated>2011-01-27T22:39:24.647-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 11g'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF request scope'/><category scheme='http://www.blogger.com/atom/ns#' term='backing bean scope'/><title type='text'>Backing Bean Scope</title><content type='html'>What is a key difference between JSF request scope and ADF backing bean scope?&lt;br /&gt;&lt;br /&gt;Well, the "lifetime" of these two scopes is exactly the same.  However if you need to create a backing bean for an ADF declarative component, the you will need to use backing bean scope for that managed bean.  This enables using multiple instances of your declarative component in a single ADF page...something which the JSF request scope does NOT support.&lt;br /&gt;&lt;br /&gt;(Please see the comments on this blog entry for an additional function of Backing Bean Scope as relates to regions and bounded task flows; many thanks to Chris Muir for pointing these things out.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2731821275140086076?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2731821275140086076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2731821275140086076' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2731821275140086076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2731821275140086076'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/01/backing-bean-scope.html' title='Backing Bean Scope'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5845932486632579568</id><published>2011-01-26T12:21:00.000-05:00</published><updated>2011-01-26T12:21:04.324-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Control pane'/><category scheme='http://www.blogger.com/atom/ns#' term='Refresh Icon'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF 11g'/><title type='text'>Refresh Data Controls in JDeveloper 11g</title><content type='html'>If you are looking on your ViewController project and you do not see new columns you have added to your business components, press the refresh icon on your Data Controls pane.  It is very important...this is not just a convenience...to hurry something along that just has not happened yet in the due process of polling or whatever other triggers might be used in the inner sanctums of JDeveloper.  This refresh action is more like, the View does not even recognize the changes until this refresh button is pressed.&lt;br /&gt;&lt;br /&gt;Perhaps it is just the way I am using JDeveloper, but this seems to be a very helpful thing to know, if you are used to JDeveloper 10g.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5845932486632579568?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5845932486632579568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5845932486632579568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5845932486632579568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5845932486632579568'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/01/refresh-data-controls-in-jdeveloper-11g.html' title='Refresh Data Controls in JDeveloper 11g'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3245666194549438388</id><published>2011-01-20T11:13:00.002-05:00</published><updated>2011-01-20T11:15:10.231-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript object properties'/><category scheme='http://www.blogger.com/atom/ns#' term='f:ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf.js'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0 observations on JavaScript format for Ajax</title><content type='html'>I notice that on the version of JSF 2.0 I have on GlassFish, that the jsf.js page may not be included to make a call to jsf.ajax.request(), if you need access to this function.  I guess in that case you would either add a do-nothing f:ajax tag to your JSF file, or do some include of the jsf.js library programmatically.  The former option may be better.&lt;br /&gt;&lt;br /&gt;Also I noticed that if you want to key in on a non-default event when calling jsf.ajax.request() that you will need to create an object for the last parameter that includes the property javax.faces.behavior.event...but be careful:  you will get a JavaScript error if you try to do this all in line without some extra work.  Property names typically do not have periods in them (".").  So you have to do something like the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;...onkeyup="var lArgs = {}; lArgs['render'] = 'form:output'; lArgs['javax.faces.behavior.event'] = 'keyup'; jsf.ajax.request(this,event,lArgs);"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3245666194549438388?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3245666194549438388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3245666194549438388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3245666194549438388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3245666194549438388'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2011/01/jsf-20-observations-on-javascript.html' title='JSF 2.0 observations on JavaScript format for Ajax'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5914837365244768943</id><published>2010-12-25T18:56:00.001-05:00</published><updated>2010-12-25T18:56:13.167-05:00</updated><title type='text'></title><content type='html'>I am currently in the best seat in an IMAX 3-D version of Tron Legacy!!!!  Been waiting most of my adult life for this sequel.  Lol...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5914837365244768943?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5914837365244768943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5914837365244768943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5914837365244768943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5914837365244768943'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/12/i-am-currently-in-best-seat-in-imax-3-d.html' title=''/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5747774942360239060</id><published>2010-12-17T10:05:00.000-05:00</published><updated>2010-12-17T10:05:24.058-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NoVAJUG'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>JSF 2.0 paper coming</title><content type='html'>I am on the hook to present JSF 2.0 New Features presentation to the NoVAJUG February 17 or so.  It should be fun.  JSF 2.0 is really cool.  I will publish this presentation to slideshare when I get it fleshed out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5747774942360239060?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5747774942360239060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5747774942360239060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5747774942360239060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5747774942360239060'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/12/jsf-20-paper-coming.html' title='JSF 2.0 paper coming'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1365964786078962678</id><published>2010-12-17T10:02:00.000-05:00</published><updated>2010-12-17T10:02:34.220-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='J-Integra'/><title type='text'>J-Integra</title><content type='html'>On the project I am at now we are using a product called J-Integra for COM.  It allows us to control Excel (in our case...probably any MS Office tool) through DCOM in Java.  We tried things like Apache POI and Actuate BIRT Spreadsheet Engine/API first, but the spreadsheet we had to control had visual basic macros in it which called C++ DLL's.  And Java does not (yet) understand anything about VBA, so those efforts did not work for us.&lt;br /&gt;&lt;br /&gt;The set up of J-Integra is fairly minimal.  There is a license xml file which is emailed to you upon request, and you must rebuild their product's JAR files using their JAR rebuild command.  Then you have 30 days.&lt;br /&gt;&lt;br /&gt;At that time you can run something called comtojava (I think) and it generates a great many java/class files which do the DCOM calls.  There are also a lot of interfaces in there defined.&lt;br /&gt;&lt;br /&gt;The result is that you can open/create a workbook, manipulate it, and close the book.  The opening actually opens a copy of Excel, so you have pretty much complete API access.  It is almost like a testing tool.&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1365964786078962678?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1365964786078962678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1365964786078962678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1365964786078962678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1365964786078962678'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/12/j-integra.html' title='J-Integra'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3421473058181478846</id><published>2010-10-29T08:03:00.003-04:00</published><updated>2010-10-29T08:09:45.092-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='f:ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>kudos to JSF 2.0's f:ajax tag!</title><content type='html'>It has been verging on too long since my last blog entry.&lt;br /&gt;&lt;br /&gt;I have been reading in &lt;i&gt;JSF 2.0: the complete referece&lt;/i&gt; by Burns, Schalk and Griffin about the f:ajax tag, and the Ajax implementation in JSF 2.0.&lt;br /&gt;&lt;br /&gt;It's really cool.  &lt;br /&gt;&lt;br /&gt;Here is my background with Ajax.  I have implemented Ajax solutions in JSF apps using straight JavaScript.  This was kinda hard but not too bad actually.  But I am fairly comfortable with JavaScript.  I have also worked with the JSF Blueprint auto-suggest component.  This worked out rather well and hid much of the details of the JavaScript functionality behind a JSF component.  I have also studied a bit more than half of Deepak Vohra's book &lt;i&gt;Ajax in Oracle JDeveloper&lt;/i&gt; and seen what a huge number of ways there are to do Ajax...and that is just with Java!  I have also been working with ADF 10g's PPR solutions and my own frame/iframe kluges for years as well.&lt;br /&gt;&lt;br /&gt;I really like the simplicity of the f:ajax tag.  For starters, I love that you can get some basic, useful Ajaxian functionality simply by including the f:ajax tag either inside or wrapped around you JSF tags!  This basically would do the equivalent of submitting those fields when the default event for those JSF components fires.  The default JavaScript client event for a component is a sensible value depending on whether it is an action component or a value-change component.&lt;br /&gt;&lt;br /&gt;Then it is possible to have all the flexibility of doing Ajax from raw JavaScript.&lt;br /&gt;&lt;br /&gt;It is certainly much much easier than having to construct a bunch of JavaScript then do a bunch of request hijacking from a PhaseListener, like in JSF 1.1 and 1.2.&lt;br /&gt;&lt;br /&gt;Thumbs way up guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3421473058181478846?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3421473058181478846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3421473058181478846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3421473058181478846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3421473058181478846'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/10/jsf-20s-fajax-tag-thoughts.html' title='kudos to JSF 2.0&apos;s f:ajax tag!'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6837930054062076909</id><published>2010-08-18T13:41:00.000-04:00</published><updated>2010-08-18T13:41:58.629-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ValueChangeEvent'/><category scheme='http://www.blogger.com/atom/ns#' term='Commit'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>Value Change listener method hint</title><content type='html'>Here is an important fact.  Amazing even.&lt;br /&gt;&lt;br /&gt;If you have ever experienced where you have a difference in the behavior of your ADF Faces screen between when somebody when you do a commit by executing the commit Action binding, or doing a commit by pressing a commandLink which fires an action binding...I have some help for you.&lt;br /&gt;&lt;br /&gt;In my (sample) senario, I had changed a name in the Name field on a screen.  I wanted to get this change into the database, because there is a unique key constraint in the database on the table column associated with this name field.  When I create a new record, I call a pl/sql procedure to do the work, then execute a query, then go to the screen where this name field is.  The name field has a default value in it, but it is important that the end user change this name field.  So I put a value change listener on the name field, so that if they change the name, a commit will be fired.  &lt;br /&gt;&lt;br /&gt;The only problem was that the value change listener method is called before the value in the fields gets written to the binding layer.  So you have to force it prior to calling the commit.&lt;br /&gt;&lt;br /&gt;If you have Steve Muench's EL helper class you can do the following in the value change listener method:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;EL.set("#{bindings.Name.inputValue}", valueChangeEvent.getNewValue());&lt;br /&gt;&lt;/blockquote&gt;Works great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6837930054062076909?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6837930054062076909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6837930054062076909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6837930054062076909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6837930054062076909'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/08/value-change-listener-method-hint.html' title='Value Change listener method hint'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6448629995277941544</id><published>2010-08-05T08:37:00.000-04:00</published><updated>2010-08-05T08:37:05.811-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Deepak Vohra'/><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><category scheme='http://www.blogger.com/atom/ns#' term='AjaxTags'/><title type='text'>AjaxTags</title><content type='html'>As I continue to work through Deepak Vohra's &lt;em&gt;Ajax in Oracle JDeveloper&lt;/em&gt; book, I was very impressed not only by the book (thanks Mr. Vohra!), but also AjaxTags.&amp;nbsp; I must be tag/jsp-oriented, because I tend to view just using javascript to do Ajax as being kind of messy.&lt;br /&gt;&lt;br /&gt;It has not taken me very long to get the example in this book which demonstrates AjaxTags up and running.&amp;nbsp; There were a few gotchas.&amp;nbsp; For example, in the example there were only three javascript files which needed to be included in the jsp page using script tags with source attributes.&amp;nbsp; The book was written in 2006.&amp;nbsp; Now in 2010, using the next major version of AjaxTags there are 7 or 8 javascript files, which I had to include.&amp;nbsp;&amp;nbsp; Also Vorha-ji used a "button" tag, which in my browser issued a submit.&amp;nbsp; If you are doing Ajax you don't want to use a button that automatically submits, so I switched to using an &amp;lt;input&amp;gt; tag with a type attribute with the value of "button".&lt;br /&gt;&lt;br /&gt;With this example I could register a select list and a button to do Ajax transactions with (in the jsp) only the following two tags:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;ajax:htmlContent baseUrl="formservlet" source="catalogId" target="validationMessage"&lt;br /&gt;parameters="catalogId={catalogId}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;ajax:updateField action="updateForm" baseUrl="formupdateservlet" &lt;br /&gt;parameters="catalogId={catalogId}" source="catalogId" &lt;br /&gt;target="journal,publisher,edition,title,author"&lt;br /&gt;parser="new ResponseXmlParser()"/&amp;gt;&lt;/blockquote&gt;So, in this example, you had to define two servlets, one called formservlet and one called formupdateservlet.&amp;nbsp; The ajax:htmlContent tag above made it so that if you changed the selected value of a select list with the id of catalogId, it would "doGet" on formservlet with the request parameter&amp;nbsp;which has that selected&amp;nbsp;value.&amp;nbsp; The&amp;nbsp;value of the element with the id of "validationMessage" (as specified in the ajax:htmlContent tag above) is set to the text of the response of this servlet.&amp;nbsp; That is a lot of meaning to pack into a little tag...but that "meaning" is just what we want, time and time again...isn't it...with AJAX.&lt;br /&gt;&lt;br /&gt;The second tag, ajax:updateField, keys off of a button whose id is updateForm (see the action attribute of the tag above).&amp;nbsp; This button click does a doGet on formupdateservlet, again passing the parameter of the current value of a select list with the id of catalogId.&amp;nbsp; The target attribute is a comma-delimited list of element ids in our form of various fields we have.&amp;nbsp; This servlet (formupdateservlet) produces XML, unlike the formservlet, which just produced text.&amp;nbsp; So we specify a parser in the tag above to handle the XML.&amp;nbsp; I think then that you just have to make your servlet produce elements which match these target element ids.&amp;nbsp; Again...very compact...but exactly what we are looking for.&amp;nbsp; The only javascript involved is the script tags which include the AjaxTags javascript libraries.&amp;nbsp; These are the ones I had to include:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script src="prototype.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script src="scriptaculous.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="overlibmws.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="effects.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="controls.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="ajaxtags_controls.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="ajaxtags_parser.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="ajaxtags.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;Scriptaculous is used to make some of this happen, and is part of AjaxTags.&amp;nbsp; It has some support javascript files which I did not include.&amp;nbsp; It would probably be safest just to include all of them, since there are not that many.&lt;br /&gt;&lt;br /&gt;That's it!&amp;nbsp; &lt;br /&gt;&lt;br /&gt;I would like to explore this a bit more (since this example does not begin to cover AjaxTags functionality fully)&amp;nbsp;and see how it performs when incorporated into JSF pages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6448629995277941544?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6448629995277941544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6448629995277941544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6448629995277941544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6448629995277941544'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/08/ajaxtags.html' title='AjaxTags'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-699593576159852038</id><published>2010-08-04T11:12:00.002-04:00</published><updated>2010-08-12T20:34:35.782-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Task Flows'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 11g'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Continuing to look at Task Flows</title><content type='html'>I have a question now about Task Flows in Oracle ADF Faces/Bindings 11g.&amp;nbsp; I see from reading Frank Nimphius and Lynn Munnsinger's new ADF book, how you can make two page fragments talk to each other by creating an event map in the parent page's pageDef, and then raising events in one fragment's bindings, and "consuming" these events with a backing bean method in the other fragment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What still does not make sense to me is...how does the binding know what event to raise?&amp;nbsp; Granted:&amp;nbsp; I am still messing with ADF Faces 10g, but af:tables, af:tree's, etc. have more than one event associated with them.&amp;nbsp; And yet in this book I do not remember reading a description of how and event raised in the binding knows what kind of event to raise...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For example if I select a node on a tree and that triggers a context event, and then I expand a node on a tree and that triggers a context event (if that is possible...?), where does the link occur between the binding event and the particular component event?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This has more to do with events and production/consumption of them across bounded task flows for page fragments. The example in the book is as follows. On a page there is a panel splitter. On the left side is a tree with deparment nodes and employee nodes under each department node. On the right side is either a department or an employee data update screen with fields and a save buttons. The selection of a dept or emp node on the left gives you an update screen on the right with the correct row queried up. The left and right side are both regions with bounded task flows inside containing page fragments. the parent page (the one with the splitter) has the task flow bindings on it, plus it has the event map defined on the task flow bindings.&lt;br /&gt;&lt;br /&gt;So the part I am confused about currently is when you click the tree and the tree binding raises an event, you just enter in the page def for the tree the xml element &amp;lt;events&amp;gt; with and &amp;lt;event&amp;gt; sub-element in it. In the event map you map this event producer to the consumer page/bindings on the right to get a sub-dynamic task flow to either show a emp or dept page fragment. But I do not see where it says what kind of event is getting generated. Surely a tree node can generate more than one kind of event. for example a node can be clicked/selected. Also a node can be disclosed/opened or closed/shut/collapsed/whatever.&lt;br /&gt;&lt;br /&gt;I think the following comes close to answering my original question (taken from FUSION DEVELOPER'S GUIDE 11g):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;You can raise a contextual event for an action binding, a method action binding, a value attribute binding, a tree binding, a table binding, or a list binding. For action and method action bindings, the event is raised when the action or method is executed. For a value attribute binding, the event is triggered by the binding container and raised after the attribute is set successfully. For a range binding (tree, table, list), the event is raised after the currency change has succeeded. Value attribute binding and range binding contextual events may also be triggered by navigational changes.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Contextual events are not the same as events raised by UI components. For a description of these types of events, see the Oracle Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework. Contextual events can be used in association with UI events. In this case, an action listener that is invoked due to a UI event can, in turn, invoke a method action binding that then raises the event.&lt;/blockquote&gt;&lt;br /&gt;What is confusing to me is the documentation says you can associate an event with bindings of different types, and that the binding-associated events are not the same as ui component-associated events. But then they turn around and say that these binding-associated events all happen in response to actions for which there are component listener properties. So I naturally would assume that we would then says that...these binding-associated events are raised in direct response to the corresponding component event.&lt;br /&gt;&lt;br /&gt;From a high level, anyway, it appears that for these binding-associated events we are triggered by a particular event in association with that binding. For range bindingg (tables, trees) the big event is changing of "row currency". (OR POSSIBLY NAVIGATION). Action/Method: when the thing is executed. Attribute -- when the value is set. So I guess the payLoad is different in each case? For the row currency, is the default payload the row? I think for the action, the payload is whatever the action or method returns...? the attribute...the new value? More reading...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-699593576159852038?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/699593576159852038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=699593576159852038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/699593576159852038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/699593576159852038'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/08/continuing-to-look-at-task-flows.html' title='Continuing to look at Task Flows'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5861557177754515152</id><published>2010-07-21T07:19:00.001-04:00</published><updated>2010-07-21T09:20:33.370-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0 book'/><category scheme='http://www.blogger.com/atom/ns#' term='Anghel Leonard'/><title type='text'>Continuing Impressions of JSF 2.0 Cookbook</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;7/16/2010 9:36:01 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;After just having gone through the selectOneMenu custom car converter example, I have to admit it does seem to use JSF to best advantage.  I have often wondered why SelectItem takes an Object as its key value.  I kept thinking:  why isn't this just a String?  This example answers that question.  I learned that a converter is called for each item in the select list to come up with the options element values within the generated select list.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;This must be one of those powerful examples that the author was speaking of in his forward.  Nice!  I am glad to have this example as a reference, and look forward to trying to these list concepts right from now on.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;7/18/2010 7:41:48 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;OK, the next example is just a tweak of the first example; the code as shown in the book, however, does not work.  However it is very close to what does work.  The value of the selectManyCheckbox should be a list of CarBeans.  And the rendering page should have the dataTable having a value of the same list.  In the managed bean I defined such a list and in initialized it to an empty ArrayList of CarBeans.  After this adjustment this example worked fine.  After looking at his example code this is what his example did; it would be good however if in his book, he were to mention changing the datatype of the selectedCar property.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;The next example is fine and is explained fine, although the names of his variables were odd.  Calling a number converter "number" and calling the number that was being converted "numbery" was bizarre.  I guess the author had his reasons.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;This next example is good.  It is exposing some converters in other JSF component sets – RichFaces in this case.  I am looking forward to trying it out and starting to get a feel for some JSF component offerings other than the ones I am currently familiar with.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5861557177754515152?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5861557177754515152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5861557177754515152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5861557177754515152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5861557177754515152'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/07/continuing-impressions-of-jsf-20.html' title='Continuing Impressions of JSF 2.0 Cookbook'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4653397814593714656</id><published>2010-07-05T19:34:00.001-04:00</published><updated>2010-07-05T19:39:36.185-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Anghel Leonard'/><title type='text'>First Impressions of new Book</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Overall I think the cookbook is pretty good.  I am not very far in it yet, but it seems like the author is a lively creative technically proficient person who will probably do a good job covering some intermediate/advanced JSF 2.0 implementation topics.  I would say beginner also, but I think there is too much left out to really call this a manual that helps beginners.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;If you would like to see my first impressions as I had them please keep reading…&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;6/25/2010 6:35:24 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Sounds like Anghel Leonard (author) has some good experience writing books and developing Java and maybe other technologies.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;When reading a technical manual I always study the table of contents.  After doing so I am usually more excited about what I am reading because I am aware, not only aware of what the book covers, but also of topics and combinations of things that I have never thought of before.  That is certainly the case with Mr. Leonard's book's Table of Contents.  I come away from his TOC thinking that if I can learn about 1/7&lt;sup&gt;th&lt;/sup&gt; of what is in this book I will be learning quite a bit!  He covers not only JSF 2.0, but apparently how it integrates with 30 or 40 other technologies.  So:  I am looking forward to continuing to read.  On to the Preface…&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;"What this book covers" is an elaboration on the TOC.  After reading that and the following section, "What you need for this book," I am beginning to wonder if this is more of a JSF book with some JSF 2.0 thrown in…?  Not sure there seems to be some indication that you can use this book with JSF 1.2 or 2.0.  I am wondering how that would/will be accomplished?  At any rate, even if the subject matter had little or nothing to do with JSF 2.0, the range of topics seems amazing…and I am still looking forward to continuing my read…although…if JSF 2.0 is not so much the focus, maybe the book should not be called JSF 2.0?  OK, I will shut up and continue reading to see what Mr. Leonard's bent is.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;The who is this book for section:  I am not a newbie to JSF, but I would love a look at some "best JSF practices," so I can improve my coding ability and compare the code I have seen in projects that others have written, and code that I have written and see how it compares/sizes up.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I just noticed something kind of funny.  In order to assure that copyright is maintained for the e-book copy they gave me, they have given me a pdf with a not at the bottom saying this book is registered to me, then it gives my address, but instead of &amp;lt;city&amp;gt;, &amp;lt;state&amp;gt;  &amp;lt;zipcode&amp;gt; …they have put &amp;lt;city&amp;gt;, &amp;lt;county&amp;gt;  &amp;lt;zipcode&amp;gt; …I guess I am easily amused.  Just like when I first started trying to learn a bit about Hindi, I learned that /dood/ means "friend".  I found this funny because "dude" in English is sort of slang for "guy", or about 15 other meanings…probably including "friend"…in fact some people communicate *only* using the word "dude" with different emphases and inflections.  Aside over.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Well, I found my first typo on page 8; typos are probably the price you pay for getting relevant textbooks out before they are out of date… I can live with typos, as long as the example code works.  I will download the errata, example code, netbeans, and other software needed for the exercises in this book (looks like about 25 different software packages!).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;OK, now wait a minute.  The author used a phrase "converter lifecycle."  Strictly speaking it is the JSF Request Lifecycle he is referring to.  And what is a "render page?"  I know he knows what he is talking about, and I am probably picking at nits…so I will try to tone it down a notch.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I can tell that reading this manual will take some getting used to.  I am not sure where the author is from, but I am having a bit of trouble negotiating his explanations.  Right now, however, I am kind of tired; so perhaps this is an unfair statement.  Maybe with more sleep and a little patience I will have a better "meeting of the minds" with Mr. Leonard.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I can tell he is covering the material.  It kind of seems like he has 1000 different ideas in his mind in his head about a particular subject and the sentences he reveals come out like lottery balls.  But let's face it:  his goals for the audience of this book and the breadth of the topics he covers, this book may end up being more like trying to read War and Peace, by carefully tearing each page out of that book, stapling these pages to the Bonnyville Salt Flats in a straight line, fixing a camera pointing downward on the side of the Blue Flame car, and then trying to read this novel through the camera's eye view while the driver uses the line of pages as a guide-line to drive next to. &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;6/27/2010 7:49:26 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I think I am  in a better frame of mind now.  Sorry for the whining…anyone who might be reading this.  I have downloaded the code and started filing errata on this text.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;It is fairly embarrassing but I have never tried net beans.  I downloaded version 6.9.  Since I already had glassfish v3 installed.  I saw from the startup script for my already-installed glassfish app server that the default domain name was domain1.  So I was relieved when I gave Netbeans the install directory (c:\glassfish3 on my machine) and it found domain1 automatically and installed it.  I just had to go to the window menu, services sub-menu, and specify I wanted to add a server by right-clicking the servers node and choosing "add server…".&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Then I opened the Projects window, and right-clicked New Project…&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I created a new Java EE project.  It activated "Java Web".  I took the defaults on this application.  So it created an application with two Java EE modules:  an EJB module, and a war module.  These basically correspond to the model and viewController projects on a JDeveloper application.  The war module had a libraries directory, to which I added the JSF 2.0 libraries.  Then I created a new page under the war module's Web Pages folder.  The page type I created was "JSF Page"; this allows you to create a facelets page.    When I created a facelets page, netbeans automatically added a web.xml file.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Netbeans creates a default "hello world" facelets page.  I was able to run it by right-clicking the .xhtml file I had created in the Projects Window, and choosing run file.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;At that point I was able to simply put the code into the ide.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;7/2/2010 6:26:56 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I like the simple example that Mr. Leonard starts off with.  I wish that the text had not chosen to put a line break in the middle of the "faces-redirect" directive/parameter; the author used this feature but did not really explain why.  The other JSF 2.0 book I read did not use this until they had explained why.  Not sure which is the better approach.  This directive does not work if there is a line break.  I am assuming the sample code is OK in this regard so that one can check this.  Probably though, since the line break does not throw an error, anyone that copies the text out of the book will never know that it was wrong, but perhaps they will see it and it will start their subconscious mind working on getting-used-to-seeing-it so that later, when it will probably be introduced in earnest, the learning will come easier.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;But, as I said I do like the first example, because of its simplicity.  This simplicity allowed me to find my feet with netbeans, to experiment with explicit conversion (explicitly using a double converter when the backing bean property is an int…just to see what it would do.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Aside:  in case anyone is wondering why I am focusing so much on JSF 2.0 lately, I am thinking that Oracle will maybe keep using JSF and eventually adopt this standard…perhaps even soon.  So, we will see; just trying to paddle ahead of the wave so I can surf to shore in style.  End of aside.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I think the use of the term "recipe" in this book may not be the best word; while the code is enough for me, the beginning of the book says one sort of audience this book is supposed to cater to is people who know the basics of JSF and not much more.  Such a user may not know anything about, say, setting up netbeans or glassfish and could be given a little more help possibly.  Typically a recipe in a cookbook spells out precisely what you need to do to make it happen.  Of course if you do not have a tablespoon, or know what a degree of temperature is, or what an oven or a stove is…well you have a problem.  I will continue to reserve judgment.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;The second example is a good example for f:convertNumber component; it shows lots of different usages for anybody needing them.  At the moment I do not, but it is nice to know this resource exists for reference or to teach a beginner.  Also I enjoyed seeing some usages of Max* attributes, as I have mostly used patterns when I needed them.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I really like the next example…especially the usage of locale.  I have not used the locale features of JSF much, and it is nice to know there is that flexibility whenever we may need it.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;The next recipe is a toughy.  This seems like a tip/trick, of which it will take me a while to discover the true value. This recipe deals with JSF sometimes inconvenient habit of not being able to use  a converter to deal with null values, because converters are not fired.  This is an annoying feature of JSF.  The nice thing about JSF 2.0 is that there have been some new additions to help alleviate this pain (NOTE TO SELF:  GO RESEARCH WHAT THESE ARE AGAIN).  But it is always good to have many ways to do something in case one particular method has side effects you do not like.  So thank you very much, Mr. Leonard.  I will have to read it through a few times and maybe implement the recipe before I completely get what it is doing.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;This keeps occurring in this book.  I can tell that Mr. Leonard is probably not a native English-speaker (just like I did not grow up speaking Romanian, which may be Mr. Leonard's nationality and native tongue).  What keeps occurring is I keep getting distracted by certain usages of the English language.  These usages may make sense in Romanian (assuming that is Mr. Leonard's native tongue), or they may be perfectly fine usages of this word in some dialect of English, or perhaps they sound like other English words and get swapped out for the correct word, or perhaps Mr. Leonard is just creative.  At any rate, I am having trouble reading the text of this book quickly because of strange usages of interjections that are not used quite right (in my opinion), words that are close to some other word like "particularity", and words that are not helpful, like "Placebo.".  In the case of particularity, I think he might have meant "peculiarity" or probably some other word.  He seemed to want to say that the hash codes on null objects will be different than the hash codes of non-null objects when using this class.  And the use of Placebo brings to mind the usage of a sugar pill instead of actual medicine.  Maybe NullConverterObjectHelper would have been another choice that would have made more sense when read back.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Still though, I would have never thought of this approach; so: bravo, Mr. Leonard, for your creativity, and thanks for the tip and the insight into directly overcoming this problem.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;7/5/2010 1:52:33 PM&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;I implemented his example, and now I see clearly what he was trying to accomplish:  whereas before I thought he was trying to obtain a substitute for the required attribute for EditableValueHolder components, which would still run use the converter, I see in his example he is trying to also intercept an initial value as well of the managed bean property in question.  I am not sure however why he decided to make hashcode Placebo return a value…why not just look for instanceof Placebo in the converter?  I am also trying to decide in my own mind if Placebo was really the ideal name for this class.  It's purpose is to substitute for a null value…but it serves a real purpose, unlike a real-life placebo…ah, who knows anyway…I know what he means.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4653397814593714656?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4653397814593714656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4653397814593714656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4653397814593714656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4653397814593714656'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/07/first-impressions-of-new-book.html' title='First Impressions of new Book'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-615967405604053706</id><published>2010-06-24T09:22:00.000-04:00</published><updated>2010-06-24T09:34:44.631-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0 book'/><category scheme='http://www.blogger.com/atom/ns#' term='Packt Publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='Anghel Leonard'/><title type='text'>Reviewing JSF 2.0 cookbook</title><content type='html'>Well, readers, I am reviewing a book for Packt Publishing, called the &lt;i&gt;JSF 2.0 Cookbook&lt;/i&gt; by Anghel Leonard.&amp;nbsp; My mind is open and I am expectant about the content, as it surely seems like good subject matter; I will be getting started reviewing it probably on the plane ride back to Denver tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zNUPYeAf3GA/TCNeyJ_66NI/AAAAAAAAAMA/h0DJfezfiuU/s1600/tn.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_zNUPYeAf3GA/TCNeyJ_66NI/AAAAAAAAAMA/h0DJfezfiuU/s200/tn.jpg" width="160" /&gt;&lt;/a&gt;&lt;/div&gt;Here is more information about the book:&amp;nbsp; &lt;a href="https://www.packtpub.com/jsf-2-0-cookbook/book?utm_source=mfonsadf.blogspot.com&amp;amp;utm_medium=link&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_003726"&gt;book link&amp;nbsp;&amp;nbsp; &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will let you know my impressions for this book and the two other big ones I am working on as well, as usual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-615967405604053706?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/615967405604053706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=615967405604053706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/615967405604053706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/615967405604053706'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/06/reviewing-jsf-20-cookbook.html' title='Reviewing JSF 2.0 cookbook'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zNUPYeAf3GA/TCNeyJ_66NI/AAAAAAAAAMA/h0DJfezfiuU/s72-c/tn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4821873286404938797</id><published>2010-06-22T09:48:00.001-04:00</published><updated>2010-06-22T09:53:35.049-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Constraint'/><category scheme='http://www.blogger.com/atom/ns#' term='bean validation'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>Conversion and Validation in JSF 2.0</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Well, we have all the old stuff plus some new stuff here.  The most remarkable additions I can see here are that a validator tag can now &lt;i&gt;wrap&lt;/i&gt; a set of tags…not just be a child in one that needs a validator added to it.  So your page can have default validators.  Another addition that I don't entirely understand the syntax of yet is Java EE 6 Bean Validation.  This seems very useful, but the syntax is a bit odd to me.  But mostly this is because I am not familiar with defining custom annotations.  Also they seem to have come up with a new usage of generics…I guess it is the same, but the usage bent my mind in a new direction.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;So let me elaborate.  ("Go right ahead!" you are probably thinking)  Let's say I start by removing the 'validator="#{userBean.validateEmail}"' code from my h:inputText tag.  I do this because when I get everything switched to Bean Validation, I will not need this JSF tag validation any more.  I then put the custom annotation @Email above my UserBean.java property declaration for the "protected String email;" property.  If I recompile at this point I get an error:  UserBean.java:18:  Cannot find symbol…symbol:  class Email…   So the compiler knows this is an annotation but it does not know about it yet…because I have not created that class yet.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Now I define the class that defines my annotation  (code taken from (Ed Burns, 2010)):&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span xmlns=""&gt;import java.lang.annotation.Documented;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; import java.lang.annotation.ElementType;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; import java.lang.annotation.Retention;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; import java.lang.annotation.RetentionPolicy;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; import java.lang.annotation.Target;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; import javax.validation.Constraint;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; &lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; @Documented&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; @Constraint (validatedBy = EmailConstraintValidator.class)&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; @Target ({ElementType.METHOD, ElementType.FIELD})&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; @Retention (RetentionPolicy.RUNTIME)&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; public @interface Email {&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; String message() default "{validator.email}";&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; &lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class&amp;lt;?&amp;gt;[] groups() default {};&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; &lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Class&amp;lt;? extends ConstraintPayload&amp;gt;[] payload() default {}; &lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt; }&lt;/span&gt;&lt;/blockquote&gt;&lt;span xmlns=""&gt; &lt;br /&gt;&lt;br /&gt;If you have never defined your own annotation before there a lot of mysteries to unfurl in this class.  The two bits I think are the most important is the part that points to the class where our validation code is stored (…validatedBy = EmailConstraintValidator.class…), and also the bit which stores what message will occur should the validation indicate that (in this case) our email is not valid.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;OK:  so now when I try to compile Email .java, I get a complaint that package javax.validation does not exist.  This is my JSF 2.0 manual says the Constraint annotation lives.  So that means there is a jar out there I need to find somehow.  This is not surprising since my manual (Ed Burns, 2010) says that this is a Java EE 6 (container) thing and not just a JSF thing.  So…where to look…I am using glass fish, so I imagine that Glass Fish knows about this jar.  Maybe if I ask it nicely, it will tell me where it is kept.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;OK, I went looking through administrator's console, and there is nothing jumping out at me…like "find a jar with a known class in it".  Maybe JDev fine search will prove useful…well not so much.  Of course I was trying to use the search files tool.  Maybe there is a different tool?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Meanwhile I went on a manual hunt through all glassfish jar files with suspicious names.  Like for example there is a javax.annotation.jar   Well, then!!  That certainly sounds promising!  But when I used VIM to inspect the contents of this jar file…I found…no javax.annotation.Constraint!!  Very odd.  I also searched for javax and annotation in all the files under the glassfish installation directory.  It was not there.  So:  maybe glassfish does not offer Bean Validation?  I thought it did since it was Java EE 6.  But maybe it is not the Enterprise edition or the weaseldoodle's edition or some-such.  I will have to ask what is going on with this when I get out of the sky in back into internet areas.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;OK:  so this is a good URL to know to find this JAR…  &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr303/index.html"&gt;http://jcp.org/aboutJava/communityprocess/final/jsr303/index.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Javax.constraints.ConstraintPayload.class seems to be a hard one to track down.  The JSR says that the reference implementation is hibernate validator.  When I open that up I see the source contains one jar called validation-api-1.0.0.GA.jar but this has no class in it called ConstraintPayload.  It does have a "Payload" class in it however.  So then I tried to do a mvn install on the online code for chapter 8 for (Ed Burns, 2010) and it all built ok.  His source included references to ConstraintPayload…so I reasoned that he must have a different jar.  So I looked in his pom.xml for this code and it referred to bean-validator.jar, and referred to org.glassfish (great!  That is what I am using!) and also JBoss (darn…not what I am using) and something about Beta (yikes!!).  Sure enough there is a bean-validator.jar in my glassfish distribution (yay!!) also with no mention of ConstraintPayload.class (damn, damn, damn).  Apparently I have to download a jar from &lt;a href="http://download.java.net/maven/2//org/glassfish/bean-validator/3.0-JBoss-4.0.0.Beta3A/bean-validator-3.0-JBoss-4.0.0.Beta3A.jar"&gt;http://download.java.net/maven/2//org/glassfish/bean-validator/3.0-JBoss-4.0.0.Beta3A/bean-validator-3.0-JBoss-4.0.0.Beta3A.jar&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Jeez!  I am beginning to wonder whether they renamed ConstraintPayload.class to just Payload.class…    &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;And of course…this is correct according to &lt;a href="http://opensource.atlassian.com/projects/hibernate/browse/HV-319"&gt;http://opensource.atlassian.com/projects/hibernate/browse/HV-319&lt;/a&gt; "&lt;a href="http://opensource.atlassian.com/projects/hibernate/secure/ViewProfile.jspa?name=hardy.ferentschik"&gt;&lt;b&gt;Hardy Ferentschik&lt;/b&gt;&lt;/a&gt;&lt;b&gt; added a comment - 06/May/10 4:55 AM --&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;javax.validation.ConstraintPayload&lt;/span&gt; got renamed into {javax.validation.Payload}} for the final release of the Bean Validation spec…"  &lt;/b&gt;Well, OK then.  So I am going with the jar that came with GlassFish!!  That is:  bean-validator.jar, and change my ConstraintPayload.class references to Payload.class.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;So now the class that defines the Constraint annotation refers to the Validator.  But the Validator class also makes reference to the annotation class.  So neither one can finish compiling it seems…?  This is kind of annoying…how does maven compile this shit as is?  It must compile twice, the first time suspending failing compilation if there is this kind of cross-reference.  It must be some kind of directive that is made just for annotations…OK:  I'm a forgetful so-and-so:  the class path must contain either jar's (that I knew) or directories that contain the base of packages you need during compilation.  Interestingly I see that the java compiler compiled both files when I only explicitly asked for the compilation of one file:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;In the C:\sandbox\jsf2-0book\facelets1\target\facelets1\WEB-INF\classes\com\jsfcompref\model directory, I issued a successful compilation command of EmailConstraintValidator.java, when it was dependent on another class called Email.java in the same directory.  Email.java had not been compiled yet, but it was valid except for a reference to the EmailConstraintValidator.java class.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;In the compilation command, javac -classpath jsf-api.jar;jsf-impl.jar;bean-validator.jar;..\..\.. EmailConstraintValidator.java, we see adding ..\..\.. gives visibility to the directory that contains the com\jsfcompref\model directory which is the base of the package that Email and EmailConstraintValidator declared as being located in.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4821873286404938797?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4821873286404938797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4821873286404938797' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4821873286404938797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4821873286404938797'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/06/conversion-and-validation-in-jsf-20.html' title='Conversion and Validation in JSF 2.0'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-913366565886545016</id><published>2010-06-18T11:06:00.000-04:00</published><updated>2010-06-18T11:06:10.352-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='JAZN'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle SSO'/><title type='text'>SSL/SSO/JAZN-enable iAS 10.1.3 that is authenticated with 10.1.2 OID</title><content type='html'>So our client's topology was iAS 10.1.2 infra with OID on machine 1, and two mid-tiers on machine 2 -- one 10.1.2 Portal instance and the other 10.1.3 J2EE (OC4J) instance with added OHS (HTTP Server) to enable Oracle SSO.&lt;br /&gt;&lt;br /&gt;We would create portal pages, and put iframe calls to web-apps in the 10.1.3 iAS.  Since both were SSO-enabled authentication and authorization was no problem.  I believe I have covered how to SSO/JAZN enable 10.1.3 a year or two ago on a different blog entry for this same blog.&lt;br /&gt;&lt;br /&gt;However, when we added SSL (terminating at the Web Cache) this iframe arrangement did not work out so well.  This is for several reasons:  one the military establishment with which we were affiliated had the rule that only port 443 shall be used/seen by external users.  With the iframe arrangement, there were additional HTTP ports (i.e., the 10.1.3 HTTP Server port) that needed to be open on everybody's firewalls.  This was unacceptable to our end-users.&lt;br /&gt;&lt;br /&gt;The second nastiness we encountered was that while our computer hostname was one thing (according to dns), there was another alias that pointed to the same IP which was the external users moniker of choice for our mid-tier computer.  So the 10.1.3 mid-tier and SSO registration wanted to use the host name, while all external references were to the alias.  So, when it came time to register the SSL certificate, we had to pick one...we thought.  So we picked the external alias.  Either choice would have created nasty certificate errors when the other name was attempted to be used, because a certificate is often for a particular name...although we learned that (for a fee, of course) our certificate company would allow wild-cards.&lt;br /&gt;&lt;br /&gt;So our end users hated the certificate errors, so we called Oracle Support.  We worked with them, and what we worked out...really...is the topic of this blog entry.  &lt;br /&gt;&lt;br /&gt;In short we implemented the section in the following Oracle doc &lt;a href="http://download.oracle.com/docs/cd/B31017_01/core.1013/b28940.pdf"&gt;Oracle Application Server Administrator's Guide 10g Release 3 (10.1.3.1.0) B28940&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;The above doc contains some information in section 6.4 entitled "Configuring Oracle Application Server 10.1.2 with Oracle Application Server 10.1.3"  &lt;br /&gt;&lt;br /&gt;Note that for the opmn.xml entry we saw that the port element showed a remote port, which we used to create an entry such as the following:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;notification-server interface="ipv4"&gt;&lt;br /&gt;      &amp;lt;port local="6100" remote="6202" request="6005"/&gt;&lt;br /&gt;      &amp;lt;ssl enabled="true" wallet-file="$ORACLE_HOME/opmn/conf/ssl.wlt/default"/&gt;&lt;br /&gt;      &amp;lt;topology&gt;&lt;br /&gt;          &lt;nodes list="ourmachinename.oursite.org:6200,ourmachinename.oursite.org:6202"/&gt;&lt;br /&gt;      &lt;/topology&gt;&lt;br /&gt;   &amp;lt;/notification-server&gt;&lt;br /&gt;&lt;/blockquote&gt;... where 6200 was the remote port of the portal mid-tier and 6202 was that of the 10.1.3 mid-tier...as you can see in the "port" element above.  Note that all we added was the &amp;lt;toplogy&gt; element and its nodes child as per the doc I mentioned.&lt;br /&gt;&lt;br /&gt;Also per the aforementioned doc, we altered the mod_oc4j.conf file.  We added additional Oc4jMount entries to tell the Web Cache (I think?  or maybe the HTTP Server) of the Portal instance to communicate with 10.1.3 instance whenever it saw a context-root (i.e., the part of the JSF web-app url that is right after the domain but before the "faces" bit.  It designates with J2EE/Java EE app you are referring to on the server you are addressing with your URL.  Some of these entries looked like this:&lt;br /&gt;&lt;blockquote&gt;Oc4jMount /ContextRoot1 ajp13://ourmachinename.oursite.org:8888&lt;br /&gt;    Oc4jMount /ContextRoot1/* ajp13://ourmachinename.oursite.org:8888&lt;br /&gt;    Oc4jMount /ContextRoot2 ajp13://ourmachinename.oursite.org:8888&lt;br /&gt;    Oc4jMount /ContextRoot2/* ajp13://ourmachinename.oursite.org:8888&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Note that we obtained the 8888 port by doing an "opmnctl status -l" on the 10.1.3 site, and looking for the primary ajp port for the OC4J to which our apps were deployed.&lt;br /&gt;&lt;br /&gt;httpd.conf on the Portal/Web Cache instance we had been using proxy and reverse proxy entries for these two apps (as designated by the ContextRoot* designations above.  We had to comment those out.&lt;br /&gt;&lt;br /&gt;I appologize that I cannot give more details about SSL enabling the topology, because I was not really involved more with that process.  It was involved though, and took the people that knew what they were doing 3 hours to hand-enable a pre-existing production topology as I described. That might give you an idea of what was involved in this SSL enabling process for this technology stack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-913366565886545016?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/913366565886545016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=913366565886545016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/913366565886545016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/913366565886545016'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/06/sslssojazn-enable-ias-1013-that-is.html' title='SSL/SSO/JAZN-enable iAS 10.1.3 that is authenticated with 10.1.2 OID'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4790022682211498017</id><published>2010-05-20T08:23:00.000-04:00</published><updated>2010-05-20T08:23:31.008-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF bookmarks'/><category scheme='http://www.blogger.com/atom/ns#' term='post-redirect-get'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>post-redirect-get in JSF 2.0</title><content type='html'>In Burns's and Schalk's JAVASERVER FACES 2.0:  THE COMPLETE REFERENCE, the authors do some exercises regarding redirects.  There are new facilities in JSF 2.0 to allow using redirect to easily follow the post-redirect-get convention (instead of the normal JSF post-forward convention).  Now with these facilities we have bookmarkable url’s in our web browser.  We also expose some of our parameters to whomever looks at their address line.  Under some circumstances this is OK.&lt;br /&gt;&lt;br /&gt;The conversion of a page that does not use this to one that does is pretty quick.  I took the same book's registration application and converted it to use PRG (post-redirect-get) in one airplane ride (3 hours) and I only worked 2 of those hours, and I worked very slowly.&lt;br /&gt;&lt;br /&gt;There are apparently two ways to communicate between pages that use redirect in JSF 2.0.  One of them is to use a new “scope” called Flash.  Flash allows you to store information between redirected pages; apparently request scope does not.  Redirecting makes a second request, whereas the normal post-forward does the page/view navigation all in one request.  So that means that things stored on request scoped managed beans will persist from one page to the next, while redirects will re-instantiate request scoped beans.&lt;br /&gt;&lt;br /&gt;The other way to store stuff in between redirects is to pass parameters on the request url.  Interestingly the new view parameter facility has the parameters defined on the page you are going to.  If you define them on this page/view, then there they will be…on your request url, as if you had put them there yourself (which you did…indirectly ;-)&lt;br /&gt;&lt;br /&gt;Interestingly enough, ADF 11g, the controller portion, has solved the same issue in JSF 1.2 with something called bookmarks.  These bookmarks make a structure called a task flow compensate (like view parameters and redirecting combination in JSF 2.0) for the same issue.  I suspect in the long run ADF will adopt JSF 2.0.  I wonder if at that point, view parameters will have something to do with the implementation of bookmark parameters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4790022682211498017?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4790022682211498017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4790022682211498017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4790022682211498017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4790022682211498017'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/05/post-redirect-get-in-jsf-20.html' title='post-redirect-get in JSF 2.0'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-358990015348307487</id><published>2010-05-06T12:34:00.001-04:00</published><updated>2010-05-06T16:29:07.767-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='-Xrs'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Thread Dump'/><category scheme='http://www.blogger.com/atom/ns#' term='OC4J 10.1.3.4'/><title type='text'>thread dump for OC4J JVM</title><content type='html'>To get a thread trace on a JVM, make sure your opmn java-options in your start-options does not include -Xrs. (If you had to remove it, be sure to restart your AS (maybe the OC4J restart would be enough...)) This -Xrs option reduces signaling capability. Then (in UNIX) you get the JVM process id to kill. One way is through Enterprise manager. In 10.1.3.4 EM, in your topological list of oc4j's, you should have a link showing how many JVM's you have for each oc4j you have in you iAS. If you click on this, the resulting page will show you your process id. If you then type &lt;br /&gt;&lt;blockquote&gt;kill -3 &amp;lt;theprocessidyoujustlookedup&amp;gt;&lt;/blockquote&gt;and hit enter, your opmn log (you know:  the one in $ORACLE_HOME/opmn/logs that has your oc4j's name in the middle of it, with tilde's in the name...*THAT* log) should display a lovely thread dump.&lt;br /&gt;&lt;br /&gt;I wanted a thread dump because such a thing seems to be how Oracle characterizes their bugs against their iAS. So for example they might say, if a thread dump shows the following...then you have this problem...and here's how to fix it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mike-lehmann.blogspot.com/2006/10/thread-dump-with-oracleas-on-windows.html"&gt;Thanks to Mike Lehmann for his helpful article, which you can see, is just a click away; I basically took what he did, distilled it and added the things I had to go look up.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-358990015348307487?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/358990015348307487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=358990015348307487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/358990015348307487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/358990015348307487'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/05/thread-dump-for-oc4j-jvm_06.html' title='thread dump for OC4J JVM'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-50537263489632359</id><published>2010-04-22T08:57:00.000-04:00</published><updated>2010-04-22T09:06:06.220-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0 exploration notes</title><content type='html'>As I embark along the path to learning JSF 2.0 from a having a fairly firm, intermediate grasp of JSF 1.1/1.2; I am following Burns and Schalk’s JSF 2.0: the complete reference.  I got my current grasp of JSF in no small part from studying and referring to their book by the same name which pertained to JSF 1.1/1.2.  In that former book they started you off doing the assembly of the deployable war by hand from the source code which they walked you through in the book in detail.  The newer book starts similarly, except that the new book seems to rely on Maven to construct the war file.  While I have maven installed on my machine, my lack of the downloadable pom file from the book’s on-line downloadable source code website, the book’s failure to spell out the pom file (probably due to size??) in the text of the book, the fact that I am on an airplane and unable to download anything, and my undeniable stubbornness – all these things add up me now assembling the exploded war directory by hand – according to the book’s documentation of what this exploded directory structure should look like and what it should contain.  When I have this, I will use jar –c to build a war file because I just don’t have the patience to wait until I get off the plane to build my first JSF 2.0 program!  I will have to go from memory and jar --help and experimentation to accomplish this.  Wish me luck!&lt;br /&gt;Some observations so far:  jsf-api.jar and jsf-impl.jar seem to be all you need to compile a JSF 2.0 program (which does not use any external libraries).  That is to say…no more standard.jar, or commons*.jar any more…which is not surprising, since JSF 2.0 is based on Facelets, and not JSP/JSTL etc.  Also:  no more faces-config.xml (if you don’t want to); you can go with all annotations if you want that.&lt;br /&gt;&lt;br /&gt;After I installed java 1.6 JDK, set up the exploded directory copying the xhtml to the exploded directory’s root directory, copied the two jsf jars into the WEB-INF/lib and the source packages into the WEB-INF/classes directory of my exploded directory, and the web.xml file into my WEB-INF directory, I executed the following command:  &lt;br /&gt;&lt;blockquote&gt;javac -classpath ../../../../lib/jsf-api.jar;../../../../lib/jsf-impl.jar UserBean.java&lt;br /&gt;&lt;/blockquote&gt;…where UserBean.java is the book’s first sample class (backing bean/request-scoped-managed bean).&lt;br /&gt;Then I went to the root directory of the exploded directory and executed the jar command to make the war:&lt;br /&gt;&lt;blockquote&gt;C:\sandbox\jsf2-0book\personaltrainer\target\jsfreg&gt;jar cvf jsfreg.war *&lt;br /&gt;added manifest&lt;br /&gt;adding: register.xhtml(in = 2690) (out= 730)(deflated 72%)&lt;br /&gt;adding: WEB-INF/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/classes/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/classes/com/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/classes/com/jsfcompref/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/classes/com/jsfcompref/model/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/classes/com/jsfcompref/model/UserBean.class(in = 2305) (out= 109&lt;br /&gt;1)(deflated 52%)&lt;br /&gt;adding: WEB-INF/classes/com/jsfcompref/model/UserBean.java(in = 2378) (out= 757)&lt;br /&gt;(deflated 68%)&lt;br /&gt;adding: WEB-INF/classes/com/jsfcompref/model/UserBean.java~(in = 2377) (out= 754&lt;br /&gt;)(deflated 68%)&lt;br /&gt;adding: WEB-INF/lib/(in = 0) (out= 0)(stored 0%)&lt;br /&gt;adding: WEB-INF/lib/jsf-api.jar(in = 591845) (out= 530662)(deflated 10%)&lt;br /&gt;adding: WEB-INF/lib/jsf-impl.jar(in = 1816536) (out= 1682891)(deflated 7%)&lt;br /&gt;adding: WEB-INF/web.xml(in = 883) (out= 384)(deflated 56%)&lt;br /&gt;&lt;br /&gt;C:\sandbox\jsf2-0book\personaltrainer\target\jsfreg&gt;dir&lt;br /&gt;Volume in drive C is SW_Preload&lt;br /&gt;Volume Serial Number is B2D3-A76F&lt;br /&gt;&lt;br /&gt;Directory of C:\sandbox\jsf2-0book\personaltrainer\target\jsfreg&lt;br /&gt;&lt;br /&gt;03/05/2010  07:56 PM    &amp;lt;dir&gt;          .&lt;br /&gt;03/05/2010  07:56 PM    &amp;lt;dir&gt;          ..&lt;br /&gt;03/05/2010  07:56 PM         2,219,418 jsfreg.war&lt;br /&gt;02/28/2010  07:37 PM             2,690 register.xhtml&lt;br /&gt;03/05/2010  07:10 PM    &amp;lt;dir&gt;          WEB-INF&lt;br /&gt;2 File(s)      2,222,108 bytes&lt;br /&gt;3 Dir(s)  111,780,872,192 bytes free&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;I am confident (grin) that this war file will deploy ok on the glass fish web server that I downloaded and have yet to try (at least after I correct all my typos) from copying the book’s code manually.)&lt;br /&gt;&lt;br /&gt;Looks like I am already using port 8080, so I will need to ask glassfish nicely to use some other port as its default… (or Oracle XE…that seems to be the other user of this port number…).  Oh well:  the trip back.&lt;br /&gt;&lt;br /&gt;3/14/2010 8:23:25 PM&lt;br /&gt;&lt;br /&gt;OK, I finally got my own code going…that is to say…the code I tried to copy manually form chapter 1 I finally got to run on glassfish app server.&lt;br /&gt;&lt;br /&gt;Apparently I had made a number of critical typos, which has interesting results.  The most interesting of these was the mistakes I made in the web.xml file:&lt;br /&gt;1. In the root element (web-app?) the xsi:schemaLocation attribute’s value has a couple of places in it where it should say “…/xml/…”.  For some reason I had mistakenly typed “…/sml/…”.  This letter difference was enough to confuse the html server for glass fish in to responding with a 404 code, saying that a “resource” was missing.  Obviously that was not a very helpful error.  Once I got through that however there was …&lt;br /&gt;2. In the servlet-mapping element I had a sub-element defined called url-mapping.  I should have called this sub-element url-pattern instead.  This however kept deployment from happening properly.  &lt;br /&gt;&lt;br /&gt;After solving these errors, I had to correct three minor typos in register.xhtml, then things worked fine.  These typos were mine, not the book’s – I am sure.&lt;br /&gt;&lt;br /&gt;Anyway, as I was getting things in running condition, I remembered reading that I could deploy on glass fish as an exploded directory.  I had done such a thing on weblogic server (when it was still bea weblogic (10.3 I think)).  Up until trying to do this on glassfish, I had been using the jar command above to package things up as a jar in between changes.  I got pretty quick at it, but not quick enough to compete with the speed of working on an exploded directory and just recompiling when necessary.&lt;br /&gt;&lt;br /&gt;So basically I just deployed the root directory I had been jar-ing up, and it worked fine.  I made a change or to to the xhtml files, and hit f5; then I saw the changes I had just made.  Great!&lt;br /&gt;&lt;br /&gt;Back to the book now for more information…&lt;br /&gt;&lt;br /&gt;4/16/2010 7:26 PM&lt;br /&gt;&lt;br /&gt;So some new things I have learned today about JSF 2.0:&lt;br /&gt;1. On page 96 of [Burns] is a section called invoking arbitrary methods in EL.  This means that, for instance, if you have a method that returns a string you can conjure up an expression like the following, and put it right in the middle of your page:  #{myManagedBean.myMethod(someOtherManagedBean.property1, anotherManagedBean.property2)}  (BTW:  the caveat here really got my attention:  this kind of invocation in EL is only available if your EE6 container is Java-based.  I was not aware there were any other EE6 containers besides Java-based EE6 containers.)&lt;br /&gt;2. …&lt;br /&gt;&lt;br /&gt;I next want to talk about Facelets.  I have made a stab or two at working with Facelets.  Now that I am studying JSF 2.0, Facelets is the standard, not JSP any more&lt;br /&gt;&lt;br /&gt;So in my first experiment, I took the files (the little registration program in chapter 3) and tried to use the templating concepts presented in Chapter 4 a reality; so I got the template file and template client file which references the template through the ui:composition tag.  But when I start referencing the template instead of the full page I had in the register.xhtml page I get the following errors:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix body but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix title but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix tr but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix tr but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix html but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix td but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix table but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix h1 but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix head but no taglibrary exists for that namespace. &lt;br /&gt;• Warning: This page calls for XML namespace http://www.w3c.org/1999/xhtml declared with prefix meta but no taglibrary exists for that namespace. &lt;br /&gt;&lt;/blockquote&gt;Here is the error I made to cause that:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;html xmlns="http://www.w3c.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"&gt;&lt;br /&gt;&lt;/blockquote&gt;Can you see it?  I could not, but the error message kept driving me back to this line…here is how it is supposed to be:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;html xmlns=http://www.w3.org/1999/xhtml …  &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now can you see it?  I had to see a file that was working side by side to get it.  I typed “w3c” instead of “w3”.  I thought w3c was the name of the domain.  Oh, well:  live and learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-50537263489632359?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/50537263489632359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=50537263489632359' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/50537263489632359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/50537263489632359'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/04/jsf-20-exploration-notes.html' title='JSF 2.0 exploration notes'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4515199533288420693</id><published>2010-04-08T11:41:00.000-04:00</published><updated>2010-04-08T11:59:08.711-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Collection of Type objects'/><category scheme='http://www.blogger.com/atom/ns#' term='JDBC'/><title type='text'>ADF/BC JDBC to retrieve structured data from packaged function</title><content type='html'>Got a request for code to show how to retrieve a collection of structured data (Oracle Type Objects) using JDBC in an ADF/BC scenario.  The first parameter is the name of the Oracle Type that is the collection of your structured data type.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;public Object callStoredFunctionReturningArrayOfRecords(String pfunctionReturnType, String stmt,Object[] bindVars) throws SQLException {&lt;br /&gt;oracle.sql.STRUCT [] returnArray = null;&lt;br /&gt;String [] recordArray = null;&lt;br /&gt;Connection conn = getDBTransaction().createStatement(1).getConnection();&lt;br /&gt;//Connection conn = getConnection();&lt;br /&gt;// Now, declare a descriptor to associate the host array type with the&lt;br /&gt;// array type in the database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ArrayDescriptor arrayDescriptor=ArrayDescriptor.createDescriptor(pfunctionReturnType, conn);&lt;br /&gt;// example:&amp;nbsp; StructDescriptor structDescriptor = StructDescriptor.createDescriptor("TEST_ARR_OF_REC_TYPE", conn);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Create the ARRAY objects to associate the host array&lt;br /&gt;// with the database array.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;oracle.sql.ARRAY returnARRAY = new oracle.sql.ARRAY(arrayDescriptor,conn,returnArray);&lt;br /&gt;&lt;br /&gt;OracleCallableStatement st = null;&lt;br /&gt;try {&lt;br /&gt;// 1. Create a JDBC CallabledStatement&lt;br /&gt;st = (OracleCallableStatement)getDBTransaction().createCallableStatement(&lt;br /&gt;"begin ? := " + stmt + ";end;", 0);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// 2. Register the first bind variable for the return value&lt;br /&gt;st.registerOutParameter(1, OracleTypes.ARRAY, pfunctionReturnType);&lt;br /&gt;if (bindVars != null) {&lt;br /&gt;// 3. Loop over values for the bind variables passed in, if any&lt;br /&gt;for (int z = 0; z &amp;lt; bindVars.length; z++) {&lt;br /&gt;// 4. Set the value of user-supplied bind vars in the stmt&lt;br /&gt;st.setObject(z + 2, bindVars[z]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;// 5. Set the value of user-supplied bind vars in the stmt&lt;br /&gt;st.executeUpdate();&lt;br /&gt;// Associate the returned arrays with the ARRAY objects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;returnARRAY = (oracle.sql.ARRAY)st.getARRAY(1);&lt;br /&gt;// OracleResultSet mainRS = (OracleResultSet)st.getResultSet();&lt;br /&gt;// ARRAY anotherARRAY = mainRS.getARRAY(1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Get the data back into the data arrays.&lt;br /&gt;// NOTE: I got an NPE on the following line at one point...not sure why...&lt;br /&gt;// I saw this error in opmn log; not sure if returnARRAY was null or&lt;br /&gt;// if there are special rules about casting null into an array.&lt;br /&gt;Object[] oarray = (Object[])returnARRAY.getArray();&lt;br /&gt;// Object[] oarray = (Object[])anotherARRAY.getArray();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &amp;lt; oarray.length; i++) {&lt;br /&gt;oracle.sql.STRUCT struct = (oracle.sql.STRUCT)oarray[i];//new STRUCT(structDescriptor, conn, recordArray);&lt;br /&gt;StructDescriptor structDescriptor = struct.getDescriptor();&lt;br /&gt;ResultSetMetaData rsmd = structDescriptor.getMetaData();&lt;br /&gt;Object [] attrs = struct.getAttributes();&lt;br /&gt;if (rsmd != null &amp;amp;&amp;amp; attrs != null &amp;amp;&amp;amp; attrs[0] != null &amp;amp;&amp;amp; attrs[1] != null) {&lt;br /&gt;getLogger().fine("nested row [" + i + "]: " + rsmd.getColumnLabel(1) +&lt;br /&gt;" " + attrs[0].toString() + " " + rsmd.getColumnLabel(2) +&lt;br /&gt;" " + attrs[1].toString());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;// 6. Return the value of the first bind variable&lt;br /&gt;return oarray;&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;throw new JboException(e);&lt;br /&gt;} finally {&lt;br /&gt;if (st != null) {&lt;br /&gt;try {&lt;br /&gt;// 7. Close the statement&lt;br /&gt;st.close();&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4515199533288420693?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4515199533288420693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4515199533288420693' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4515199533288420693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4515199533288420693'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/04/adfbc-jdbc-to-retrieve-structured-data.html' title='ADF/BC JDBC to retrieve structured data from packaged function'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3216158537897885152</id><published>2010-03-25T08:14:00.000-04:00</published><updated>2010-03-25T08:14:18.405-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='auto-save'/><category scheme='http://www.blogger.com/atom/ns#' term='page unload'/><category scheme='http://www.blogger.com/atom/ns#' term='Dojo'/><title type='text'>dojo and JSF integration page unload solution when auto-saving</title><content type='html'>If you have integrated dojo and JSF in the way described &lt;a href="http://www.ibm.com/developerworks/web/library/wa-aj-jsfdojo/index.html"&gt;here&lt;/a&gt; in the authors' first method of integration, the you probably ran into a problem of how to copy the values back to the hidden field -- if you are trying to implement an auto-save feature.&amp;nbsp; In other words, if you want to allow a user to not have to click a link/button in order to save their changes then you must find some other client event to tap into.&amp;nbsp; I believe the authors of that article I referred to used an example for their first method which simply used onclick of a button to save back a value.&lt;br /&gt;&lt;br /&gt;For the purposes of my auto-save feature, I went with something much more piggy:&amp;nbsp; onkeyup for the dojo field itself.&amp;nbsp; So with every keystroke I copy back the value to the hidden field.&amp;nbsp; This fix was quick, and it really is not that slow.&lt;br /&gt;&lt;br /&gt;For a more efficient implementation, you could program javascript to wait 5 seconds after every keystroke, then check to see if the value has changed, but I wonder if the simple copy would be more efficient than all that...probably!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3216158537897885152?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3216158537897885152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3216158537897885152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3216158537897885152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3216158537897885152'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/dojo-and-jsf-integration-page-unload.html' title='dojo and JSF integration page unload solution when auto-saving'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4736180595934710803</id><published>2010-03-25T07:45:00.000-04:00</published><updated>2010-03-25T07:45:38.709-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom NavigationHandler'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 10g'/><category scheme='http://www.blogger.com/atom/ns#' term='JDev 10g'/><title type='text'>ADF dialog framework simplified?</title><content type='html'>If you can overcome about any (needless) fear you might have about implementing a custom JSF NavigationHandler, you can actually open up your applications for many new possibilities.&lt;br /&gt;&lt;br /&gt;The focus of this blog post is not how to create custom JSF framework extensions.&amp;nbsp; It is just this:&amp;nbsp; every time you use ADF's dialog framework (where you create an navigation outcome of the form "dialog:...", set useWindow in the af:commandButton/Link to true, partialSubmit to true) it is possible to create a bit of custom NavigationHandler code that simply launches a dialog window programatically instead of doing the normal navigation function.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;I tried this out because I was "forced to" due to a quirk of af:commandButton/Link which somehow has useWindow property ignored when inside of an af:iterator.&amp;nbsp; So I tried to think of the spot where it made the most sense to programmatically call up the dialog...duh!&amp;nbsp; The NavigationHandler of course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4736180595934710803?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4736180595934710803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4736180595934710803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4736180595934710803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4736180595934710803'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/adf-dialog-framework-simplified.html' title='ADF dialog framework simplified?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-187138501608272397</id><published>2010-03-17T12:32:00.000-04:00</published><updated>2010-03-17T12:34:12.653-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>JSF 2.0, Part I.b.</title><content type='html'>Initially the example I got working was just the downloaded code from the book.&amp;nbsp; Since then I also found out why my own assembed version (copied from the text of the book) did not work.&lt;br /&gt;&lt;br /&gt;The short answer is:&amp;nbsp; I made some typos.&lt;br /&gt;&lt;br /&gt;The longer answer is that:&amp;nbsp; I discovered that in web.xml, the JSF runtime is very sensitive to inaccuracies in the root node attributes.&amp;nbsp; I guess I thought they were not that important, but jsf runtime could not even run my application without correcting a typo in these attributes.&amp;nbsp; Before I corrected this typo I kept getting a "resource cannot be found" or something like that.&lt;br /&gt;&lt;br /&gt;After that correction, I still had several more typos, but for each there was a sensible JSF error to help me find it, unlike the first.&lt;br /&gt;&lt;br /&gt;Also used maven to compile the book's examples...first on-line...then on a different example...offline.&amp;nbsp; maven is such a boon the way it downloads what it needs the first time you run it, so that if you run it again on the same pom...or one with similar dependencies...it uses what it downloaded the last time to assemble things.&amp;nbsp; Very cool.&lt;br /&gt;&lt;br /&gt;I should also mention in Glassfish that I deployed my exploded directory also, so now I can change xhtml files on the fly and just refresh the page and I see my page with the new changes in it when running the Glassfish JSF 2.0 app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-187138501608272397?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/187138501608272397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=187138501608272397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/187138501608272397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/187138501608272397'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/jsf-20-part-ib.html' title='JSF 2.0, Part I.b.'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4942507726859126587</id><published>2010-03-11T13:53:00.000-05:00</published><updated>2010-03-11T13:53:01.452-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF 2.0'/><title type='text'>Just got my first JSF 2.0 program working on Glass Fish</title><content type='html'>I just got my first JSF 2.0 program working on Glass Fish.&amp;nbsp; Maybe I can be ahead of the power curve on this one!&amp;nbsp; I think I heard Frank Nimphius say something (unofficially) hinting that they might have plans to use JSF 2.0 2011...in ADF Faces.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;So I am studying &lt;em&gt;JavaServer Faces 2.0: the complete reference&lt;/em&gt; by Burns and Schalk on airplane rides back and forth to/from VA from/to CO.&amp;nbsp; Also when I am on the treadmill in VA.&lt;br /&gt;&lt;br /&gt;Also Frank Nimphius and Lynn Munsinger's new book as well.&lt;br /&gt;&lt;br /&gt;I have submitted abstracts for both of these topics to both JavaOne and Oracle Open World...so I am under the gun now.&amp;nbsp; Nothing new there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4942507726859126587?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4942507726859126587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4942507726859126587' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4942507726859126587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4942507726859126587'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/just-got-my-first-jsf-20-program.html' title='Just got my first JSF 2.0 program working on Glass Fish'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2399233427010184670</id><published>2010-03-11T05:16:00.000-05:00</published><updated>2010-03-11T05:16:02.285-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AD4J'/><category scheme='http://www.blogger.com/atom/ns#' term='Jade'/><title type='text'>AD4J provides surgical improvements</title><content type='html'>I have talked about AD4J before.&amp;nbsp; I revisited it after doing some hands-on labs with it at Oracle Open World.&amp;nbsp; I still think I could use a huge manual of discussions on what to do with all the information they provide.&amp;nbsp; Maybe that is a class Oracle provides...I don't know.&lt;br /&gt;&lt;br /&gt;I do know this...in my basic state of not knowing much about AD4J, I was able to do a default install (there is more to do on this install if you are using SSL, but if not the install takes hardly any time at all), deploy the agent app to my target OC4J container, and do a 60-second monitor of my system which resulted in lots of data.&lt;br /&gt;&lt;br /&gt;It also has, right there in front of you, a list of the top 5 or 10 most "expensive" things that were going on while it was monitoring.&amp;nbsp; During the monitoring session, I was randomly darting about in my app which has been slow.&lt;br /&gt;&lt;br /&gt;It gave my pl/sql calls a relatively high rating.&amp;nbsp; I checked it out...I was making 28 pl/sql calls unnecessarily with each request!!&amp;nbsp; I corrected this, and now my slow app is quite a bit faster!!&amp;nbsp; Thank you AD4J!!&amp;nbsp; (AKA Jade).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2399233427010184670?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2399233427010184670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2399233427010184670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2399233427010184670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2399233427010184670'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/ad4j-provides-surgical-improvements.html' title='AD4J provides surgical improvements'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6228783704317946887</id><published>2010-03-02T10:52:00.000-05:00</published><updated>2010-03-02T10:55:41.914-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='row key'/><category scheme='http://www.blogger.com/atom/ns#' term='row currency'/><category scheme='http://www.blogger.com/atom/ns#' term='RowSetIterator'/><title type='text'>RowSetIterator example</title><content type='html'>Because of its utility I would like to give an example of a piece of RowSetIterator code which will help avoid row currency issues, even if your void object instance is used by a UI component:&lt;br /&gt;&lt;br /&gt;I use it as a method in VOImpl class to help me navigate to a particular row without changing the row currency of the RowSetIterator of the VO instance that is also connected to a UI and could thereby cause row currency issues.  (BTW this was a best practice I took out of the ADF Developers 10g Guide; my guess is that it is still best practice...but it might not be.):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;style&gt;&lt;!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman";}a:link, span.MsoHyperlink {color:blue; text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline;}span.EmailStyle17 {mso-style-type:personal-compose; font-family:Arial; color:windowtext;}@page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in;}div.Section1 {page:Section1;}--&gt;&lt;/style&gt;&lt;br /&gt;&lt;div class="Section1"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp; private AnotherViewRowImpl findRowMatch (Number pMenuId)  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this.isExecuted())  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  this.executeQuery();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean lFoundMatch =  false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  TbReviewerCommentAnotherViewRowImpl lRow = null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowSetIterator lRSI =  this.createRowSetIterator(null);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(lRSI.hasNext())  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lRow =  (TbReviewerCommentAnotherViewRowImpl)lRSI.next();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pMenuId != null  &amp;amp;&amp;amp; pMenuId.equals(lRow.getMenuItemId())) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lFoundMatch =  true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  lRSI.closeRowSetIterator();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!lFoundMatch)  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lRow =  null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return  lRow;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;span style="font-family: Arial; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6228783704317946887?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6228783704317946887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6228783704317946887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6228783704317946887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6228783704317946887'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/03/rowsetiterator-example.html' title='RowSetIterator example'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2135537931064632400</id><published>2010-02-18T13:49:00.001-05:00</published><updated>2010-02-18T13:49:34.317-05:00</updated><title type='text'>I'm an Oracle ACE now!</title><content type='html'>Yay!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2135537931064632400?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2135537931064632400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2135537931064632400' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2135537931064632400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2135537931064632400'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/im-oracle-ace-now.html' title='I&apos;m an Oracle ACE now!'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2479899712769062372</id><published>2010-02-16T08:06:00.000-05:00</published><updated>2010-02-16T08:06:48.970-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Books I'm Reading</title><content type='html'>&lt;a href="http://www.amazon.com/gp/product/0071625097/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=486539851&amp;pf_rd_s=lpo-top-stripe-1&amp;pf_rd_t=201&amp;pf_rd_i=0072224371&amp;pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_r=04VFPTJZ2MX6C78QE46D"&gt;JavaServer Faces 2.0:  the complete reference&lt;/a&gt; by Ed Burns, Chris Schalk &lt;br /&gt;&lt;br /&gt;Also&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mhprofessional.com/product.php?cat=112&amp;isbn=0071622543"&gt;Oracle Fusion Developer Guide&lt;/a&gt; by Frank Nimphius and Lynn Munsinger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2479899712769062372?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2479899712769062372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2479899712769062372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2479899712769062372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2479899712769062372'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/books-im-reading.html' title='Books I&apos;m Reading'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7673662982814456549</id><published>2010-02-16T08:01:00.000-05:00</published><updated>2010-02-16T08:01:06.974-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MetaObjectManager scope'/><category scheme='http://www.blogger.com/atom/ns#' term='bc4j.xcfg'/><category scheme='http://www.blogger.com/atom/ns#' term='DatabaseTransactionFactory'/><title type='text'>MetaObjectManager scope (I'm listening now...)</title><content type='html'>I recommend that people working with ADF on JDev 10.1.3 read the MetaObjectManager entry at the following URL:  &lt;a href="http://blogs.oracle.com/Didier/bc4j/"&gt;http://blogs.oracle.com/Didier/bc4j/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...especially if you are deploying applications to OC4J and have overridden the DatabaseTransactionFactory... you might have done this if you wanted to do a post-commit or pre-commit type move, as was laid out in the &lt;i&gt;Oracle ADF Developer's Guide for 4GL Developers&lt;/i&gt; version 10.1.3.0.&lt;br /&gt;&lt;br /&gt;I first noticed when I added this override that, odd crap began to occur with my and others' deployed applications.  Essentially they all began trying to use my SAME DatabaseTransactionFactory, which is not what I intended at all.  The scope of this AM Module configuration property is something called MetaObjectManager.  This means that every app deployed to that same OC4J instance will have the same setting...presuming I was the first one to deploy an app with this property defined in my bc4j.xcfg to that OC4J instance.  This is not a smart way to identify a global setting...i.e., hidden in an app.  &lt;br /&gt;&lt;br /&gt;I am repeating this because, for me at any rate, the topic apparently bares repeating.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7673662982814456549?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7673662982814456549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7673662982814456549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7673662982814456549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7673662982814456549'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/metaobjectmanager-scope-im-listening.html' title='MetaObjectManager scope (I&apos;m listening now...)'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-270835209770569437</id><published>2010-02-09T16:20:00.000-05:00</published><updated>2010-02-09T16:21:33.659-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF/BC'/><category scheme='http://www.blogger.com/atom/ns#' term='DBTransaction.isDirty()'/><category scheme='http://www.blogger.com/atom/ns#' term='JDBC'/><title type='text'>jdbc calling procedures and DBTransaction isDirty()</title><content type='html'>Did you know that even if you create a callableStatement from the DBTransaction in your ADF/BC layer and call a database stored procedure, function, package, etc...that; and if that stored program unit that you called does DML and dirty's the transaction, the DBTransaction's isDirty() method will not go to true (unless it was true before the call)?&lt;br /&gt;&lt;br /&gt;I did not; but now I do.  And now:  so do you, dear reader.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-270835209770569437?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/270835209770569437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=270835209770569437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/270835209770569437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/270835209770569437'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/jdbc-calling-procedures-and.html' title='jdbc calling procedures and DBTransaction isDirty()'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3590401470311830390</id><published>2010-02-04T08:53:00.000-05:00</published><updated>2010-02-04T08:53:51.011-05:00</updated><title type='text'>cafebabe?</title><content type='html'>I just noticed that the first four bytes of every Java class file (magic number) that designates that file as a class file spells "cafebabe" in hexadecimal.&lt;br /&gt;&lt;br /&gt;Who says geeks don't have a sense of humor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3590401470311830390?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3590401470311830390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3590401470311830390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3590401470311830390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3590401470311830390'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/cafebabe.html' title='cafebabe?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-846066250980558120</id><published>2010-02-03T18:40:00.000-05:00</published><updated>2010-02-03T18:40:46.118-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error handling'/><category scheme='http://www.blogger.com/atom/ns#' term='binding layer'/><category scheme='http://www.blogger.com/atom/ns#' term='Operation Binding'/><title type='text'>Error Handling and the Binding layer</title><content type='html'>Well...&lt;br /&gt;&lt;br /&gt;Jan has beat on the subject of error handling, and I believe Frank Nimphius and Steve Muench have both thrown in their two cents.  But I still had some nagging questions, so I pressed him; he did amazing things, and I think I responded pretty well.  It was not a bad day all in all.  &lt;br /&gt;&lt;br /&gt;Check this JDev thread out if you have been wondering about using operation bindings versus calling the app module methods directly.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=958407&amp;start=0&amp;tstart=0"&gt;Op binding/error handling thread on Oracle JDev Technet forum&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-846066250980558120?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/846066250980558120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=846066250980558120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/846066250980558120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/846066250980558120'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/02/error-handling-and-binding-layer.html' title='Error Handling and the Binding layer'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6210117383532846447</id><published>2010-01-13T18:25:00.000-05:00</published><updated>2010-01-13T18:32:44.146-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t:popup'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomahawk'/><title type='text'>Tomahawk Popup loss of focus</title><content type='html'>A while back I realized that when using the tomahawk popup component (t:popup) in my ADF faces page that I was having a problem:  whenever I had a field (like an af:inputText) inside the popped-up region along with something else, I would get some behaviour I did not want:  as soon as my cursor left the field (but stayed within the popup region) focus would leave the input field.  This made it awkward when I wanted to have a search field in the popup.  But I found a simple solution:  in the inputText's onblur property, put the following code:  try{ this.focus(); } catch(e){}&lt;br /&gt;&lt;br /&gt;What this does is keep it there rather than lose focus.  I would really like to know what code is making this field lose focus.  I did some searching, but it was very slow going for me, and I needed a quick fix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6210117383532846447?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6210117383532846447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6210117383532846447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6210117383532846447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6210117383532846447'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/01/tomahawk-popup-loss-of-focus.html' title='Tomahawk Popup loss of focus'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-481735300167107863</id><published>2010-01-08T11:02:00.000-05:00</published><updated>2010-01-08T11:12:19.365-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF Blueprint Auto-suggest'/><title type='text'>JSFBlueprint auto-suggest field enhancements</title><content type='html'>What follows is an listing of the javascript that goes with the auto-suggest field you can find in JSF Blueprints.&lt;br /&gt;&lt;br /&gt;The original brought up a basic list of suggestions which could be mouse selected.  I added code to allow you to arrow down and up directly if you did not want to reach for your mouse.  Also I added code (per a suggestion by Frank Nimphius, Oracle Corporation), which would reduce the number of ajax calls...very important for many use-cases of this component.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;gReq = "";&lt;br /&gt;var req;&lt;br /&gt;var requests;&lt;br /&gt;var target;&lt;br /&gt;&lt;br /&gt;function getElementX(element){&lt;br /&gt;    var targetLeft = 0;&lt;br /&gt;    while (element) {&lt;br /&gt;        if (element.offsetParent) {&lt;br /&gt;            targetLeft += element.offsetLeft;&lt;br /&gt;        } else if (element.x) {&lt;br /&gt;            targetLeft += element.x;&lt;br /&gt;        }&lt;br /&gt;        element = element.offsetParent;&lt;br /&gt;    }&lt;br /&gt;    return targetLeft;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function getElementY(element){&lt;br /&gt;    var targetTop = 0;&lt;br /&gt;    while (element) {&lt;br /&gt;        if (element.offsetParent) {&lt;br /&gt;            targetTop += element.offsetTop;&lt;br /&gt;        } else if (element.y) {&lt;br /&gt;            targetTop += element.y;&lt;br /&gt;        }&lt;br /&gt;        element = element.offsetParent;&lt;br /&gt;    }&lt;br /&gt;    return targetTop;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getWidth(element){&lt;br /&gt;    if (element.clientWidth &amp;amp;&amp;amp; element.offsetWidth &amp;amp;&amp;amp; element.clientWidth &amp;lt; element.offsetWidth) {&lt;br /&gt;        return element.clientWidth; /* some mozillas (like 1.4.1) return bogus clientWidth so ensure it's in range */&lt;br /&gt;    } else if (element.offsetWidth) {&lt;br /&gt;        return element.offsetWidth;&lt;br /&gt;    } else if (element.width) {&lt;br /&gt;        return element.width;&lt;br /&gt;    } else {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function initRequest(url) {&lt;br /&gt;    if (window.XMLHttpRequest) {&lt;br /&gt;        req = new XMLHttpRequest();&lt;br /&gt;    } else if (window.ActiveXObject) {&lt;br /&gt;        req = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // ********** INSERTED CODE ***********************&lt;br /&gt;    // The general idea here is that, the end user is only interested in the&lt;br /&gt;    // latest request.  As of right now (9/20/2009), I have not seen anything&lt;br /&gt;    // to indicate otherwise.  Assuming this is true, I am hoping that&lt;br /&gt;    // we never have a corresponding backlog of request on the database end.&lt;br /&gt;        if (typeof(gReq) != 'undefined' &amp;amp;&amp;amp; typeof(gReq.readyState) != 'undefined'&lt;br /&gt;            &amp;amp;&amp;amp; typeof(req) != 'undefined' &amp;amp;&amp;amp; typeof(req.readyState) != 'undefined') {&lt;br /&gt;//            alert("gReq.readyState is " + gReq.readyState + ", and req.readyState is " +&lt;br /&gt;//                                                   req.readyState);&lt;br /&gt;              gReq.abort();&lt;br /&gt;        }&lt;br /&gt;        gReq = req;&lt;br /&gt;        //1/1/2010, mfons, The above was a brilliant idea, but it did nothing I can discern:  still&lt;br /&gt;        // querying every keystroke.  So now I&lt;br /&gt;        // will try waiting .5 seconds before registering the keystroke...if&lt;br /&gt;        // they are still typing I will keep waiting until I get something&lt;br /&gt;        // that has not changed...then query.  See doCompletionDelayed()&lt;br /&gt;        // function below.&lt;br /&gt;    // ************ END OF INSERTED CODE **************&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * 12/31/09, mfons - originally doCompletion() called the ajax for each keyclick,&lt;br /&gt; * but really we only want to only call the db if the user has not typed anything new&lt;br /&gt; * in a while.  Credit for this idea goes to Frank Nimphius, Oracle Corp.,&lt;br /&gt; * who responded to my query on the technet.oracle.com jdeveloper forum.&lt;br /&gt; * However, I figured the coding out myself.&lt;br /&gt; **/&lt;br /&gt;function doCompletionDelayed(targetName, menuName, method, onchoose, ondisplay, oldTargetValue) {&lt;br /&gt;    var target = document.getElementById(targetName);&lt;br /&gt;    if (target.value == oldTargetValue) {&lt;br /&gt;        var menu = document.getElementById(menuName);&lt;br /&gt;        menu.style.left = getElementX(target) + "px";&lt;br /&gt;        menu.style.top = getElementY(target) + target.offsetHeight + 2 + "px";&lt;br /&gt;        var width = getWidth(target);&lt;br /&gt;        if (width &gt; 0) {&lt;br /&gt;            menu.style.width = width + "px";&lt;br /&gt;        }&lt;br /&gt;        var url = "faces/ajax-autocomplete?method=" + escape(method) + "&amp;amp;prefix=" + escape(target.value);&lt;br /&gt;        initRequest(url);&lt;br /&gt;   &lt;br /&gt;        if (!requests) {&lt;br /&gt;            requests = new Object();&lt;br /&gt;        }&lt;br /&gt;        requests.menu = menu;&lt;br /&gt;        requests.onchoose = onchoose;&lt;br /&gt;        requests.ondisplay = ondisplay;&lt;br /&gt;        requests.targetName = targetName;&lt;br /&gt;   &lt;br /&gt;        req.onreadystatechange = processRequest;&lt;br /&gt;        req.open("GET", url, true);&lt;br /&gt;        req.send(null);   &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function doCompletion(ev, targetName, menuName, method, onchoose, ondisplay) {&lt;br /&gt;    var menu = document.getElementById(menuName);&lt;br /&gt;    var evt = (typeof(ev.keyCode) == 'undefined') ? window.event : ev;       //IE reports window.event not arg &lt;br /&gt;    //alert('ev.keyCode is '+ev.keyCode+' and window.event.keyCode is '+ window.event.keyCode);&lt;br /&gt;    /*&lt;br /&gt;      Try #1:  I am trying to allow people to select items with the arrow keys as&lt;br /&gt;      well.  Not just on a click of the anchor.&lt;br /&gt;     */&lt;br /&gt;    /****************ADDED CODE BEGIN***********/&lt;br /&gt;    if (typeof(evt) != 'undefined') { // in firefox, focus event may leave evt undefined.&lt;br /&gt;        if (evt.keyCode == 38 /*up*/ || evt.keyCode == 40 /*down*/) {&lt;br /&gt;           try {&lt;br /&gt;                var childAnchors = menu.getElementsByTagName("a");&lt;br /&gt;                var targetAnchor = childAnchors[0];&lt;br /&gt;                // Look for highlighted item.  If found&lt;br /&gt;                for (var i = 0; i &amp;lt; childAnchors.length; i++) {&lt;br /&gt;                        if (childAnchors[i].className == "selectedPopupItem") {&lt;br /&gt;                                 if (evt.keyCode == 38 &amp;amp;&amp;amp; i &gt; 0) {&lt;br /&gt;                                       childAnchors[i].className = "popupItem";&lt;br /&gt;                                       targetAnchor = childAnchors[i - 1];&lt;br /&gt;                                 }&lt;br /&gt;                                 else if (evt.keyCode == 40 &amp;amp;&amp;amp; i &amp;lt; childAnchors.length - 1) {&lt;br /&gt;                                       childAnchors[i].className = "popupItem";&lt;br /&gt;                                       targetAnchor = childAnchors[i + 1];&lt;br /&gt;                                 }&lt;br /&gt;                                 else {&lt;br /&gt;                                       targetAnchor = childAnchors[i];&lt;br /&gt;                                 }&lt;br /&gt;                                 break;&lt;br /&gt;                        }&lt;br /&gt;                }&lt;br /&gt;                targetAnchor.className = "selectedPopupItem";&lt;br /&gt;            } catch (e) {  alert("error");}&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;        else if (evt.keyCode == 13 /*Enter*/){&lt;br /&gt;            try{&lt;br /&gt;                var childAnchors = menu.getElementsByTagName("a");&lt;br /&gt;                for (var i = 0; i &amp;lt; childAnchors.length; i++) {&lt;br /&gt;                        if (childAnchors[i].className == "selectedPopupItem") {&lt;br /&gt;                                try{&lt;br /&gt;                                      childAnchors[i].click(); // It appears that firefox has no "click()" defined for anchors??&lt;br /&gt;                                } catch(e) {&lt;br /&gt;                                      childAnchors[i].onclick();&lt;br /&gt;                                }&lt;br /&gt;                                stopCompletion(menuName);&lt;br /&gt;                                return;&lt;br /&gt;                        }&lt;br /&gt;                }&lt;br /&gt;            } catch(e) {}&lt;br /&gt;        }&lt;br /&gt;        else if (evt.keyCode == 27 /* Escape */ ) {&lt;br /&gt;            stopCompletion(menuName);&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    /****************more added code...***************/&lt;br /&gt;    // 1/1/2010, mfons, added the following call in order to avoid launching an&lt;br /&gt;    // ajax-request (i.e., doing a database query) for each keystroke.&lt;br /&gt;    // This wait make sure that the target value does not change for some&lt;br /&gt;    // time period (500ms at the moment) before actually doing the query.&lt;br /&gt;        var target = document.getElementById(targetName);&lt;br /&gt;        //alert(target.value);&lt;br /&gt;        setTimeout("doCompletionDelayed('" + targetName + "', " +&lt;br /&gt;        "'" + menuName + "', '" + method + "', '" + onchoose + "', " +&lt;br /&gt;        "'" + ondisplay + "', '" + target.value + "')", 500);&lt;br /&gt;    /****************ADDED CODE END***************/&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function chooseItem(targetName, item) {&lt;br /&gt;    if (!requests.onchoose || requests.onchoose == "null") {&lt;br /&gt;        var target = document.getElementById(targetName);&lt;br /&gt;        target.value = item;&lt;br /&gt;    } else {&lt;br /&gt;        requests.onchoose(item);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function stopCompletion(menuName) {&lt;br /&gt;    var menu = document.getElementById(menuName);&lt;br /&gt;    if (menu != null) {&lt;br /&gt;        clearItems(menu);&lt;br /&gt;        menu.style.visibility = "hidden";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Stop completion shortly.&lt;br /&gt;   This is necessary because I want to stop completion from the blur&lt;br /&gt;   (focus loss event) of the completion text field, but that will also&lt;br /&gt;   happen, right BEFORE a link click in the completion dialog is processed.&lt;br /&gt;   If this is done synchronously, the link is deleted before it is processed&lt;br /&gt;   by stop completion. Therefore, I use the delayed variety which schedules&lt;br /&gt;   stop completion instead such that the link is processed first.&lt;br /&gt;*/&lt;br /&gt;function stopCompletionDelayed(menuName) {&lt;br /&gt;    /* Would like to shorten timeout but this seems to trip up Safari */&lt;br /&gt;    setTimeout("stopCompletion('" + menuName + "')", 400);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function processRequest() {&lt;br /&gt;    if (req.readyState == 4) {&lt;br /&gt;        if (req.status == 200) {&lt;br /&gt;          parseMessages(requests.menu);&lt;br /&gt;        } else if (req.status == 204){&lt;br /&gt;            clearItems(requests.menu);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function parseMessages(menu) {&lt;br /&gt;    clearItems(menu);&lt;br /&gt;    menu.style.visibility = "visible";&lt;br /&gt;    //alert(req.responseText);&lt;br /&gt;    var lItemsRE = new RegExp("&amp;lt;item&gt;(.*?)&amp;lt;/item&gt;", "g");&lt;br /&gt;    var lItems = req.responseText.match(lItemsRE);&lt;br /&gt;    for (var i = 0; i &amp;lt; lItems.length; i++) {&lt;br /&gt;        //alert("item "+ i+ " is " + lItems[i].replace(lItemsRE, "$1"));&lt;br /&gt;        appendItem(menu, lItems[i].replace(lItemsRE, "$1"));&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;//    var items = req.responseXML.getElementsByTagName("items")[0];&lt;br /&gt;//    for (loop = 0; loop &amp;lt; items.childNodes.length; loop++) {&lt;br /&gt;//   &lt;br /&gt;//        var item = items.childNodes[loop];&lt;br /&gt;//alert('item is '+ item); // why is item null now?  xml is coming back OK, it appears.&lt;br /&gt;//        appendItem(menu, item.childNodes[0].nodeValue);&lt;br /&gt;//    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function clearItems(menu) {&lt;br /&gt;    if (menu) {&lt;br /&gt;      for (loop = menu.childNodes.length -1; loop &gt;= 0 ; loop--) {&lt;br /&gt;         menu.removeChild(menu.childNodes[loop]);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function appendItem(menu, name) {&lt;br /&gt;    var item = document.createElement("div");&lt;br /&gt;    menu.appendChild(item);&lt;br /&gt;    var linkElement = document.createElement("a");&lt;br /&gt;    linkElement.className = "popupItem";&lt;br /&gt;    linkElement.href = "#";&lt;br /&gt;    linkElement.onclick = function() {&lt;br /&gt;        chooseItem(requests.targetName, name);&lt;br /&gt;        stopCompletion();&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    var displayName = name;&lt;br /&gt;    if (requests.ondisplay &amp;amp;&amp;amp; requests.ondisplay != "null") {&lt;br /&gt;        displayName = requests.ondisplay(name);&lt;br /&gt;    }&lt;br /&gt;    linkElement.appendChild(document.createTextNode(displayName));&lt;br /&gt;    item.appendChild(linkElement);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;This code has been tested against IE 7 and 8 and also the latest version of FF.&lt;br /&gt;&lt;br /&gt;Please let me know if this is helpful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-481735300167107863?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/481735300167107863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=481735300167107863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/481735300167107863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/481735300167107863'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2010/01/jsfblueprint-auto-suggest-field.html' title='JSFBlueprint auto-suggest field enhancements'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1835166736584292295</id><published>2009-12-17T09:14:00.000-05:00</published><updated>2009-12-17T09:22:59.865-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database column default value'/><category scheme='http://www.blogger.com/atom/ns#' term='entity'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF/BC'/><title type='text'>default database values</title><content type='html'>If you get an error that indicates that ADF/BC (the version out of JDev 10g) has compared the value it originally retrieved from the database to the value now in the database, and finds that they have changed; please, bear in mind that a database default value will do this on new records also!&lt;br /&gt;&lt;br /&gt;So for example:  you are now editing a record that you just created, suddenly you get this jbo error on a postback.  The ADF Developer's Guide... says that in the case of columns altered by triggers associated with an insert, that you will need to check the "update after insert" checkbox in the entity for that attribute.  The documentation does not specifically mention database table column default values, but these will have the same effect. &lt;br /&gt;&lt;br /&gt;Once you realize this is what is happening you need only check these checkboxes to fix this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1835166736584292295?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1835166736584292295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1835166736584292295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1835166736584292295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1835166736584292295'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/12/default-database-values.html' title='default database values'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-64170569126337231</id><published>2009-12-14T15:51:00.000-05:00</published><updated>2009-12-14T15:53:47.083-05:00</updated><title type='text'>Just updated my blog profile</title><content type='html'>I just updated my blog  profile to have a &lt;em&gt;valid&lt;/em&gt; email address.  I forgot that the one in there was not valid, since I am not job-hunting at the moment.&lt;br /&gt;&lt;br /&gt;Sorry if it has caused me to give the appearance of ignoring anybody's questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-64170569126337231?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/64170569126337231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=64170569126337231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/64170569126337231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/64170569126337231'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/12/just-updated-my-blog-profile.html' title='Just updated my blog profile'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4049453750016682028</id><published>2009-12-11T10:00:00.000-05:00</published><updated>2009-12-14T16:12:44.821-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STATUS_INITIALIZED'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF/BC'/><category scheme='http://www.blogger.com/atom/ns#' term='setNewRowState'/><category scheme='http://www.blogger.com/atom/ns#' term='blank rows'/><title type='text'>adding 1 or more blank rows to your af:table for data entry</title><content type='html'>Boy am I embarressed. I read the whole 1160 ADF 10g developers guide for 4GL developers from Oracle, have professional experience with building ADF, and claim to be becoming an expert in all this stuff.&lt;br /&gt;&lt;br /&gt;But I had failed in getting this simple thing done before successfully: have more than one rows availble in an af:table to allow data entry. I kept running into trouble with validation on the second row. I knew how to do what I wanted in Oracle*forms, just not ADF/BC/ADF Faces!&lt;br /&gt;&lt;br /&gt;To my credit though I am sure I must have inquired of the JDev Forum at least once before on this subject. Literally I had come up with an "alternative" solution on a prior contract, but it was WRONG!&lt;br /&gt;&lt;br /&gt;The correct solution is very simple: like it says in the manual: whenever you do a VO.create(); follow that by taking the resulting row and saying resultingRow.setNewRowState(Row.STATUS_INITIALIZED);&lt;br /&gt;&lt;br /&gt;Then you can VO.insertRow(resultingRow), or do whatever you want.&lt;br /&gt;&lt;br /&gt;The odd part of this is, I guess, if you have overridden your initDefaults in the VO's entity, using the entity's setters may changed the status of this VO row from STATUS_INITIALIZED to STATUS_NEW. I kinda figured that if you have setter method calls (e.g., this.set...(blah))in that method that you would not "dirty" your row or entity. I guess that is not right.&lt;br /&gt;&lt;br /&gt;At any rate: that's how it is supposed to be done.&lt;br /&gt;&lt;br /&gt;So embarressed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4049453750016682028?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4049453750016682028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4049453750016682028' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4049453750016682028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4049453750016682028'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/12/adding-1-or-more-blank-rows-to-your.html' title='adding 1 or more blank rows to your af:table for data entry'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2192085779454387416</id><published>2009-12-06T08:54:00.000-05:00</published><updated>2009-12-06T09:43:11.225-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='h:inputText'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='af:inputText'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>The proper tool for the job</title><content type='html'>My grandpa used to say, "The proper tool for the proper job!" I knew what he meant, and it seemed to apply to what I was experiencing yesterday.&lt;br /&gt;&lt;br /&gt;I am using some Dojo widgits to get ADF Faces (JDev 10g/Trinidad) some extra functionality. It integrates pretty well. The way I am doing the integration each widgit I use requires a hidden field in the background. But I think there is a caveat. There is something that does not work right in some JavaScript I am using so that the integration code does not work right if there are only af:inputHidden's on the screen, and no actual input fields...just the dojo widgits providing that function. In other words there still needs to be at least one inputText for the dojo integration to work right. No problem, I just made my first dojo integrate with an af:inputText with a style of "display:none;". Works fine normally.&lt;br /&gt;&lt;br /&gt;Well yesterday and the day before it was NOT working fine. I was imagining a SIMPLE use-case whereby I had several Dojo rich text editors on the same page. I thought: I will just bind the value of my hidden af:inputText to a backing bean getter/setter that just pulls the data it needs from the database when it needs it and caches it when possible on a session bean HashMap to avoid needless trips to the database.&lt;br /&gt;&lt;br /&gt;I typed out some code how I imagined it would work...that was 3 working days ago!&lt;br /&gt;&lt;br /&gt;Since then, trying to make af:inputText work, knowing what I know, I think I have encountered every caveat know to man related to using af:inputText and not binding to the database with ADF bindings. For one thing my setter would not fire! The processing would go through the motions like it WANTED to fire (i.e., it was firing "isReadOnly()" in the PropertyResolver when it was trying to evaluate my value binding. The only reason I know of to fire isReadOnly() is to test for fitness for doing a set, and every call it made returned "false", so I kept waiting for the setter to fire. It did not!&lt;br /&gt;&lt;br /&gt;So I started thinking of alternatives. I thought: maybe I can use a valueChangeListener. It turned out that either the presense of the value binding or perhaps references to the binding layer (not for a value but just for VO attribute metadata purposes, like getting a value for required property) was diabling my use of the valueChangeListener, so I had a hard time even getting that to fire. When I got it to fire, it was without the value binding. So I switched to bind to an input component in my backing bean.&lt;br /&gt;&lt;br /&gt;The nice thing about my original plan is that the getting and setting happens at all the right time, and since my af:inputText was inside an af:iterator loop, I need access to the requestScope "var" variable generated each loop. Using the getters and setters I had the perfect alternatives. But since that was not working out so well, I now was trying to figure out how to use this component I was bound to that is going through the ringer anyway to populate it. I was imagining that I would ultimately need a custom component that would give me the control I needed to be able to fire things at the right time so that I could hit the database for the values I wanted in time to use them as Dojo was loading, and also be able to save them back if someone updated the Dojo widgit.&lt;br /&gt;&lt;br /&gt;Anyway, I was really not looking forward to going down that road, so after doing a few more experiments, I finally tried using h:inputText and going back to my original plan.&lt;br /&gt;&lt;br /&gt;IT WORKED BEAUTIFULLY.&lt;br /&gt;&lt;br /&gt;I was grateful; I did not have to slit my wrists after all! It worked so beautifully that I literally just connected up that code I created initially for the getter and setter, and everything worked according to plan, just like I had imagined.&lt;br /&gt;&lt;br /&gt;I think the lesson I learned was, if you are going through ADF binding layer, there is probably no better solution than using af:inputText, and the like. And if not...if you have a simple JSF usecase that does not seem to fit the ADF Binding scenario, maybe you are (or at least, I am) better off using good old JSF components for simplicity and predictability sake.&lt;br /&gt;&lt;br /&gt;One thing in my career I am trying to obtain is some depth and breadth to my knowledge. I think yesterday helped me obtain that just a bit more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2192085779454387416?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2192085779454387416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2192085779454387416' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2192085779454387416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2192085779454387416'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/12/proper-tool-for-job.html' title='The proper tool for the job'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1979818241404773903</id><published>2009-11-18T12:02:00.000-05:00</published><updated>2009-11-20T16:26:55.525-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF Job'/><title type='text'>Job posting</title><content type='html'>We are looking for a new addition to our team out in Fairfax, VA, to help out with ADF work. We are trying mightily to convert an old web-pl/sql toolkit/portal system to ADF Faces. Right now our target for conversion is the ADF Faces (JSF 1.1) which comes with JDeveloper 10.1.3.x. We are deploying to OC4J/iAS 10.1.3.4&lt;br /&gt;&lt;br /&gt;Ultimately we would like to get to ADF Faces Rich Client (JSF 1.2) version, but that is contingent on resolving some licensing issues.&lt;br /&gt;&lt;br /&gt;So, if you know ADF/JSF/J2EE/Java EE/Java/JSP and are looking for work in the Fairfax, VA area please contact me at michael_fons at yahoo dot com.&lt;br /&gt;&lt;br /&gt;Limited telecommuting might be possible, but more than likely you would be commuting (like me) or moving to this area on some basis.&lt;br /&gt;&lt;br /&gt;U.S. Citizenship required.&lt;br /&gt;&lt;br /&gt;There is also some BI reporting work to do as well, so if you know BI or Pentaho that would be a plus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1979818241404773903?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1979818241404773903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1979818241404773903' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1979818241404773903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1979818241404773903'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/11/job-posting.html' title='Job posting'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6222368096054217627</id><published>2009-10-28T14:02:00.000-04:00</published><updated>2009-10-28T14:16:18.043-04:00</updated><title type='text'>What to study next...</title><content type='html'>So many technologies I want to study further:  JSF 2.0, GWT, ADF Faces Rich Client component library, deployment of Java EE apps to phones and pda's, Scala, Wicket, Tapestry, Facelets, &lt;em&gt;et cetera ad nausium&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;...so little time.  I wish we could learn like they did on the matrix  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6222368096054217627?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6222368096054217627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6222368096054217627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6222368096054217627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6222368096054217627'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/10/what-to-study-next.html' title='What to study next...'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8348899312882822435</id><published>2009-10-19T20:38:00.000-04:00</published><updated>2009-10-28T15:23:12.382-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF Custom Components'/><category scheme='http://www.blogger.com/atom/ns#' term='Renderers'/><category scheme='http://www.blogger.com/atom/ns#' term='PhaseListeners'/><title type='text'>Oracle Open World Aftermath</title><content type='html'>I definitely owe a blog entry at this point!&lt;br /&gt;&lt;br /&gt;Just came back from Open World, and boy: is my brain tired!! (ba-dum-CRASH)&lt;br /&gt;&lt;br /&gt;Anyway. I had a request that I make some specific entries on my blog from someone in the audience that came up to visit after my presentation.&lt;br /&gt;&lt;br /&gt;He wanted to know how to do two things that I mentioned:&lt;br /&gt;1. how to use the phase listener to get resource files in a custom component, and&lt;br /&gt;2. how to use a renderer to divide up functionality.&lt;br /&gt;&lt;br /&gt;These are somewhat meaty topics but I will try to be concise.&lt;br /&gt;&lt;br /&gt;I. PhaseListener "magic"&lt;br /&gt;If you have Schalk and Burns's&lt;br /&gt;&lt;em&gt;JavaServer Faces: the complete reference &lt;/em&gt;then just (re)read Chapter 11.&lt;br /&gt;&lt;br /&gt;If you do not...here comes the paraphrase. The general idea is that you need to add a phase listener to your application in the normal manner: by adding a few lines to your faces-config.xml file. Note that if you have a custom component in JSF, then your jar has in it in its META-INF directory a faces-config.xml file, where you can reference this phase listener. JSF guarentees that this will be read first before the one in your application, I believe, provided this jar is in your WEB-INF/lib directory of your application.&lt;br /&gt;&lt;br /&gt;Anyway you take your added phase listener, and make it listen for the RESTORE_VIEW phase by overriding the getPhaseId() method, and returning PhaseId.RESTORE_VIEW constant.&lt;br /&gt;&lt;br /&gt;So let us say for example that your component has a need to have javascript code, that you want to keep in a sepparate file...because there is too much code to render on the html page itself (or you are a "tidy" individual). So your component will encode/render a javascript "include" (i.e.,&amp;lt;script src="somename" type="text/JavaScript"&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;br /&gt;). So you encode this line onto the page. Then when this page is "interpreted", and issued as a request, your phaseListener can be ready. Your phaseListener has knowledge that at some point after the RESTORE_VIEW phase is complete, the FacesContext.getViewRoot().getViewId() will contain "somename". At that point, the phase listener can use getClass().getResource("somename's filename"), to get a url. This url can be connected-to and read from, an inputStream, then an inputStreamReader, then a BufferedReader. Meanwhile you open the outputWriter from the response on the FacesContext's ExternalContext, create an outputStreamWriter, then do a while loop reading lines from the buffered reader and writing lines to the outputStreamWriter, until there are no more lines to write. By the way the FacesContext is available from the PhaseEvent that your receive as a parameter. And with this FacesContext, you finish with a call to its responseComplete() method.&lt;br /&gt;&lt;br /&gt;II. Renderer.&lt;br /&gt;&lt;br /&gt;This is easier. If you have a custom component that has no renderer you can move your encode*() methods and decode() method to the a custom Renderer class. The main changes you will need to make are because you now no longer say "this" when you need to reference your component. In your new renderer class (which BTW extends "Renderer") the encode*() and decode methods receive your component as a parameter, so you much change your "this" references to use this parameter.&lt;br /&gt;&lt;br /&gt;You must also augment the faces-config.xml, to have a &lt;render-kit&gt;element with a &lt;renderer&gt;sub-element which shows the family, type, and class of your renderer. Type can be anything, but whatever it is must now also be returned by getRendererType() overridden method in your tag handler class.&lt;br /&gt;&lt;br /&gt;Also you will need to guard against receiving a null FacesContext or a null Component value for your parameters. This is in the spec so don't shoot me; I'm just the messenger.&lt;br /&gt;&lt;br /&gt;Sir, I hope, whoever you said you were, that this blog entry, approaches meeting your custom-component writing needs or curiosities, or whatever drove your question. I bid you: good day!&lt;br /&gt;&lt;br /&gt;I bid the same for the rest of you as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8348899312882822435?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8348899312882822435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8348899312882822435' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8348899312882822435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8348899312882822435'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/10/oracle-open-world-aftermath.html' title='Oracle Open World Aftermath'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7409878214447811002</id><published>2009-09-16T11:58:00.000-04:00</published><updated>2009-10-13T13:04:19.522-04:00</updated><title type='text'>New slideshow uploaded to slideshare</title><content type='html'>Check out my new slide share presentation on JSF Custom Components that I will be presenting for Oracle Open World 2009...if you go to the slideshare site you can download the ppt and get the notes that go with the presentation.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/mfons/jsf-custom-components-972003"&gt;http://www.slideshare.net/mfons/jsf-custom-components-972003&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can also download the powerpoint by pressing the Menu icon on the bottom left of the embedded slideshare image below, and selecting Download in the context menu.&lt;br /&gt;&lt;br /&gt;Or view the presentation below without the notes...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: left; WIDTH: 425px" id="__ss_2006593"&gt;&lt;a style="MARGIN: 12px 0px 3px; DISPLAY: block; FONT: 14px Helvetica,Arial,Sans-serif; TEXT-DECORATION: underline" title="JSF Custom Components" href="http://www.slideshare.net/mfons/jsf-custom-components-972003"&gt;JSF Custom Components&lt;/a&gt;&lt;object style="MARGIN: 0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsfcustomcomponents972003-12531145863014-phpapp03&amp;amp;stripped_title=jsf-custom-components-972003"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsfcustomcomponents972003-12531145863014-phpapp03&amp;stripped_title=jsf-custom-components-972003" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="FONT-FAMILY: tahoma,arial; HEIGHT: 26px; FONT-SIZE: 11px; PADDING-TOP: 2px"&gt;View more &lt;a style="TEXT-DECORATION: underline" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="TEXT-DECORATION: underline" href="http://www.slideshare.net/mfons"&gt;Michael Fons&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;a href="http://www.slideshare.net/mfons/jsf-custom-compoents-972003"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7409878214447811002?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7409878214447811002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7409878214447811002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7409878214447811002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7409878214447811002'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/09/new-slideshow-uploaded-to-slideshare.html' title='New slideshow uploaded to slideshare'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8074819918475565996</id><published>2009-08-27T13:07:00.000-04:00</published><updated>2009-08-31T11:33:04.139-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trinity'/><category scheme='http://www.blogger.com/atom/ns#' term='doubling'/><category scheme='http://www.blogger.com/atom/ns#' term='af:forEach'/><title type='text'>ADF Faces (Trinity):  af:forEach and af:table...think twice</title><content type='html'>Rule of thumb: be careful of using af:forEach in af:table rows to generate the options of a select list. Much safer to use getter to get a list and plug into value of f:selectItems (plural), than to use f:selectItem (singular) and use af:forEach to iterate over. af:iterator might work instead of af:forEach, too, but I am not sure.&lt;br /&gt;&lt;br /&gt;Also mixed in with this was using forEach's varStatus property...something I have had bad luck with in the past.&lt;br /&gt;&lt;br /&gt;Basically what was happening, was this forEach was not even on a part of the screen that was getting rendered, but it was causing components to render multiple times and get all mixed up. Pretty hard to track down.&lt;br /&gt;&lt;br /&gt;So in this particular case I would get this doubling when I used the following inside of an af:selectOneChoice...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;af:forEach begin="1"&lt;br /&gt;end="#{bindings.SomeIterator.estimatedRowCount}"&lt;br /&gt;var="priorityRow"&lt;br /&gt;varStatus="priorityLoop"&gt;&lt;br /&gt;&amp;lt;f:selectItem itemLabel="#{priorityLoop.index}"&lt;br /&gt;itemValue="#{priorityLoop.index}"/&gt;&lt;br /&gt;&amp;lt;/af:forEach&gt;&lt;/blockquote&gt;&lt;br /&gt;...instead of using someting like the following... &lt;br /&gt;&lt;blockquote&gt;&amp;lt;f:selectItems&lt;br /&gt;value="#{SomeBackingBean.someHashMapProperty[bindings.SomeIterator.estimatedRowCount]}"/&gt;&lt;/blockquote&gt;&lt;br /&gt;The use-case for this problem was a bit odd, but nothing too bad...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8074819918475565996?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8074819918475565996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8074819918475565996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8074819918475565996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8074819918475565996'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/08/adf-faces-trinity-afforeach-and.html' title='ADF Faces (Trinity):  af:forEach and af:table...think twice'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-827153393436936276</id><published>2009-08-23T16:39:00.000-04:00</published><updated>2009-08-23T16:58:49.285-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='af:menuBar'/><category scheme='http://www.blogger.com/atom/ns#' term='selected'/><category scheme='http://www.blogger.com/atom/ns#' term='af:commandMenuItem'/><title type='text'>af:menuBar selected style</title><content type='html'>If you want to use af:commandMenuItem inside an af:menuBar, with the af:commandMenuItem's selected property set to a particular value (true, false, EL), that is great.  Just remember you cannot embed your af:commandMenuItem inside some other component and have this selected work...even if that other component is embedded inside an af:menuBar component.  The CSS that is generated by the skin selector for the af:menuBar for this purpose is picky about how it wants to see things:  td.&lt;menuBarselectedstyleclass&gt; a&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-827153393436936276?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/827153393436936276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=827153393436936276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/827153393436936276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/827153393436936276'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/08/afmenubar-selected-style.html' title='af:menuBar selected style'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3418887113932632726</id><published>2009-08-19T20:49:00.000-04:00</published><updated>2009-08-19T20:54:52.999-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF Custom Components'/><category scheme='http://www.blogger.com/atom/ns#' term='NoVAJUG'/><title type='text'>speaking at NoVAJUG</title><content type='html'>If you live/work in Virginia, I will be be giving a preliminary viewing of my Oracle Open World presentation on JSF Custom Component basics.&lt;br /&gt;&lt;br /&gt;Here is more info on the matter:  &lt;a href="http://novajug.wordpress.com/2009/08/19/sept-9-lets-make-some-jsf-custom-components-by-michael-a-fons/"&gt;http://novajug.wordpress.com/2009/08/19/sept-9-lets-make-some-jsf-custom-components-by-michael-a-fons/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also here is the NoVAJUG website:  &lt;a href="http://novajug.org/"&gt;http://novajug.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3418887113932632726?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3418887113932632726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3418887113932632726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3418887113932632726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3418887113932632726'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/08/speaking-at-novajug.html' title='speaking at NoVAJUG'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2805202924255729208</id><published>2009-08-18T11:52:00.000-04:00</published><updated>2009-08-18T12:04:47.497-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF/BC'/><category scheme='http://www.blogger.com/atom/ns#' term='query bind variables'/><category scheme='http://www.blogger.com/atom/ns#' term='ViewObject'/><category scheme='http://www.blogger.com/atom/ns#' term='ViewLink'/><category scheme='http://www.blogger.com/atom/ns#' term='JDev 10g'/><title type='text'>view links internal to sql statement</title><content type='html'>There is an esoteric aspect of links that I had not really experimented with until yesterday.  &lt;br /&gt;&lt;br /&gt;First know that it is possible to write a query/view object, that contains a bind variable in the query which is not defined in the list of bind variables in the view object itself.&lt;br /&gt;&lt;br /&gt;Why would you want to do this?  &lt;br /&gt;&lt;br /&gt;What if you wanted (for speed reasons) to put a bind variable referencing a parent query column in a subquery of a query in the child view object?  &lt;br /&gt;&lt;br /&gt;Well, if you create a view link between the parent and child queries, ADF will automatically create a bind variable on behalf of the view-link with the name "Bind_&lt;viewlinkconnectingattributename&gt;.  So if the parent was DeptView, and the child EmpView, and their connecting view link was DeptView.DeptNo = EmpView.DeptNo, then at run time this view link would create :Bind_DeptNo referenceable in the child query.  So you could put this in a sub-query.  &lt;br /&gt;&lt;br /&gt;At the moment this still leaves the sometimes problem that you may have to have a connecting DeptNo in the child query select clause, but that is only a problem in some cases.  This bit of flexibility can be good enough in many cases.&lt;br /&gt;&lt;br /&gt;Also this may be a case where the problem is that I am not sure just how much more flexibility ADF/BC will allow.  It is quite possible that you could connect these two queries based on bogus columns like select 1 bogus_columnn, ... from ... in both the parent and child, and then change the where clause in the view link to join on :Bind_DeptNo.  Maybe it is even more flexible than that; I just am not sure at this time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2805202924255729208?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2805202924255729208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2805202924255729208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2805202924255729208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2805202924255729208'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/08/view-links-internal-to-sql-statement.html' title='view links internal to sql statement'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3538071383488203762</id><published>2009-08-11T23:05:00.000-04:00</published><updated>2009-08-11T23:11:25.714-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TreeModel'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 10g'/><category scheme='http://www.blogger.com/atom/ns#' term='tree binding'/><category scheme='http://www.blogger.com/atom/ns#' term='af:treeTable'/><title type='text'>af:treeTable:  getting at a clicked node</title><content type='html'>Hi.&lt;br /&gt;&lt;br /&gt;I was working with an af:treeTable and its accompanying tree binding.  I wanted to click a node to open it (if that node had sub nodes) and then automatically do something with the data in that node.  I did not want to have to click on a link in the tree to identify the node.&lt;br /&gt;&lt;br /&gt;Here is what I came up with:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    public void onDisclosure(DisclosureEvent disclosureEvent) {&lt;br /&gt;        CoreTreeTable cmt = (CoreTreeTable)disclosureEvent.getSource();&lt;br /&gt;                PathSet ps = cmt.getTreeState();&lt;br /&gt;                Set ks = ps.getKeySet();&lt;br /&gt;                //ks.clear();&lt;br /&gt;                // The key-set is the set of addresses of keys that are open.&lt;br /&gt;                // Clearing it closes all that are open.&lt;br /&gt;        &lt;br /&gt;                List rwKey = (List)cmt.getRowKey();&lt;br /&gt;                // The row-key is the address of the row that was just disclosed/clicked.&lt;br /&gt;                // It is a list of Strings, which contain 0-based numbers.&lt;br /&gt;                int depth = 0;           &lt;br /&gt;                for (Object o1 : rwKey) {&lt;br /&gt;                    ArrayList pathToAdd = new ArrayList();&lt;br /&gt;                    for (int i = 0; i &amp;lt; depth + 1; i++) {&lt;br /&gt;                        pathToAdd.add(rwKey.get(i));&lt;br /&gt;                    }&lt;br /&gt;                    //ks.add((Object)pathToAdd);&lt;br /&gt;                    depth++;&lt;br /&gt;                }&lt;br /&gt;                // This for loop just added the address of the node clicked,&lt;br /&gt;                // to the set of "open" nodes.  Along the way it also enters&lt;br /&gt;                // all the parent node addresses as well, creating a new&lt;br /&gt;                // array list to store the address for each ancestor as well as&lt;br /&gt;                // the node clicked.&lt;br /&gt;                &lt;br /&gt;                // I want to get the node that was clicked.  I should be able to &lt;br /&gt;                // use the row-key to traverse the tree model to get the node I want.&lt;br /&gt;                TreeModel lTreeModel = (TreeModel)cmt.getValue();&lt;br /&gt;                Object lRowData = null;&lt;br /&gt;                for (Object lRowKeyIndexObject : rwKey) {&lt;br /&gt;                    // Can I assume I start out with the tree model looking at root&lt;br /&gt;                    // node?&lt;br /&gt;                    String lRowKeyIndexString = (String)lRowKeyIndexObject;&lt;br /&gt;                    int lIndex = Integer.parseInt(lRowKeyIndexString);&lt;br /&gt;                    if (lTreeModel.isRowAvailable(lIndex)) {&lt;br /&gt;                        lRowData = lTreeModel.getRowData(lIndex);// JUCtrlHierNodeBinding&lt;br /&gt;                        lTreeModel.setRowIndex(lIndex);  &lt;br /&gt;                    }&lt;br /&gt;                    if (lTreeModel.isContainer()) {&lt;br /&gt;                        lTreeModel.enterContainer();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                // When the loop is over the tree model should be &lt;br /&gt;                // set to the level and row that was clicked.  &lt;br /&gt;                // Also lRowData should be the row we care about...the &lt;br /&gt;                // clicked row.&lt;br /&gt;                &lt;br /&gt;                // We do not have to reset.  I think each request the tree model &lt;br /&gt;                // resets.  Traversing the tree model does not affect the way&lt;br /&gt;                // the tree table renders or looks.&lt;br /&gt;                &lt;br /&gt;                JUCtrlHierNodeBinding lNodeBinding = (JUCtrlHierNodeBinding)lRowData;&lt;br /&gt;                String lNodeContents = (String)lNodeBinding.getAttribute(1);&lt;br /&gt;                // Display the found node.&lt;br /&gt;                this.setLSelectedNodeString(lNodeContents);&lt;br /&gt;                &lt;br /&gt;                // Next experiment.  Create binding in query&lt;br /&gt;                // and a field that allows you to set this binding.&lt;br /&gt;                // See if when you open a node if it affects any others nodes&lt;br /&gt;                // or not.&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3538071383488203762?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3538071383488203762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3538071383488203762' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3538071383488203762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3538071383488203762'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/08/aftreetable-getting-at-clicked-node.html' title='af:treeTable:  getting at a clicked node'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3985642328607404003</id><published>2009-07-22T23:08:00.000-04:00</published><updated>2009-07-22T23:45:05.563-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t:popup'/><category scheme='http://www.blogger.com/atom/ns#' term='IE bug'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomahawk'/><title type='text'>tomahawk t:popup component</title><content type='html'>If you have to remember something about the t:popup component:  remember this:  if you use it on a af:commandLink (or some command component...something that submits) and you click on that component, you will get an error when your page reloads (due to postback), if you are running on IE 6 or 7.  "...Operation aborted" &lt;br /&gt;&lt;br /&gt;The cause of this error seems to be that you are trying to run javascript before the DOM is all the way loaded.&lt;br /&gt;&lt;br /&gt;It also seems to mess up the wysiwyg editor in JDeveloper 10g, but I can kinda get used to that...for what this popup component brings to the tables.  It allows you to hover over an element and get a popup which will stay open until you leave it.  Or you can make the popup go away when when you leave the driving element. &lt;br /&gt;&lt;br /&gt;Anyway...everything is peachy in IE 8 and in the latest version of Firefox.  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3985642328607404003?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3985642328607404003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3985642328607404003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3985642328607404003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3985642328607404003'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/07/tomahawk-tpopup-component.html' title='tomahawk t:popup component'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6947513240918349771</id><published>2009-07-21T20:02:00.000-04:00</published><updated>2009-07-21T20:10:32.184-04:00</updated><title type='text'>web.xml minutiae:  SecurityContext.isUserInRole()</title><content type='html'>So...&lt;br /&gt;&lt;br /&gt;If you are using Oracle SSO, iAS 10.1.4 infra, iAS 10.1.3.4 mid-tier, and running ADF on it, and Oracle Portal on another mid-tier...here is some information that may come in handy for you:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In ADF if you use isUserInRole() method in the SecurityContext, you will need to bounce your 10.1.3 instance every time you make a change (or a set of changes) to the OID users and groups/roles.  I imagine there is a way to get my 10.1.3 to refresh from the oid explicitly, but I have not figured it out yet.&lt;/li&gt;&lt;li&gt;isUserInRole also expects that particular roles that you are testing to be listed in web.xml.  So just because the user has the role in OID does not mean you can test for it successfully...you must first add it to web.xml.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;:-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6947513240918349771?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6947513240918349771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6947513240918349771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6947513240918349771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6947513240918349771'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/07/webxml-minutiae-securitycontextisuserin.html' title='web.xml minutiae:  SecurityContext.isUserInRole()'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7491281957962817259</id><published>2009-07-14T11:15:00.001-04:00</published><updated>2009-07-14T11:31:57.368-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSP decode'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Custom Components'/><category scheme='http://www.blogger.com/atom/ns#' term='af:iterator'/><title type='text'>Custom Components in JSF and af:iterator</title><content type='html'>I have something to report that I did not realize about custom UI components in JSF (lots of things probably...)&lt;br /&gt;&lt;br /&gt;Consider the following scenario:  you put a custom component in a af:iterator component.  Can you answer the following questions?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How many instances of your custom component that you included in that af:iterator loop will be created?&lt;/li&gt;&lt;li&gt;If your component's function is to print a different kind of input field or widget depending on the parametric input given to the component tag, what might you need to do with any attributes in your component?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The answer to 1 is:  one.  One for each af:iterator.  So if your iterator loop brings back 1000 records from the database, it loops 1000 times and "prints" your component 1000 times, but there is ever only one instance of the component.&lt;/p&gt;&lt;p&gt;For question 2...let us say that your component offers the printing of 4 different kinds of components depending on the value of its "type" tag attribute.  So in that page you will have 1000 fields printed one for each af:iterator loop.  If your component only rendered UIOutput components then it would suffice to have one property in your component class for each type of component.&lt;/p&gt;&lt;p&gt;But we are doing input components, so decode will be involved.  That complicates things.  JSF will generate a client id for each field that you generate with your component.  If it is in the af:iterator loop it will look something like:  formname:iteratorname:n:yourcomponentid -- where n is the zero-based loop index of your af:iterator.&lt;/p&gt;&lt;p&gt;On a JSF postback/decode, each field first runs the decode method.  Then each field runs the encode methods for the component.  In between the decode runs and the encode runs you need to store the submitted value of each component.  I used a HashMap with client id as the key, and the component as the value.  If you store everything away in decode you will have whatever you need to do the encode when it occurs for the postback.&lt;/p&gt;&lt;p&gt;Hope this helps someone.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7491281957962817259?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7491281957962817259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7491281957962817259' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7491281957962817259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7491281957962817259'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/07/custom-components-in-jsf-and-afiterator.html' title='Custom Components in JSF and af:iterator'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1988324475728240422</id><published>2009-07-08T16:15:00.000-04:00</published><updated>2009-07-08T16:17:33.597-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF Custom Components'/><category scheme='http://www.blogger.com/atom/ns#' term='af:iterator'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces Rich Client'/><title type='text'>af:iterator</title><content type='html'>I was trying to use af:forEach with a custom component I made. This custom component is a bit like the declarative components in ADF Faces Rich Client components, in that it renders different components depending on what type you send it. I was trying to pass a value binding through an attributes and then trying to evaluate the value of this in the component at encode time, but the af:forEach request scope "var" variable could not be evaluated by the property resolver. af:iterator, I am happy to say, for some reason did something different however so the "var" was more accessable to the child custom component.&lt;br /&gt;&lt;br /&gt;There was another project also where af:forEach really was acting up, where I wish I had known about af:iterator.&lt;br /&gt;&lt;br /&gt;The inspiration to try this component came from Duncan Mills blog entry &lt;a href="http://groundside.com/blog/DuncanMills.php?blog=6&amp;amp;c=1&amp;amp;page=1&amp;amp;more=1&amp;amp;title=jsf_and_the_foreach_loop&amp;amp;tb=1&amp;amp;pb=1&amp;amp;disp=single"&gt;http://groundside.com/blog/DuncanMills.php?blog=6&amp;amp;c=1&amp;amp;page=1&amp;amp;more=1&amp;amp;title=jsf_and_the_foreach_loop&amp;amp;tb=1&amp;amp;pb=1&amp;amp;disp=single&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1988324475728240422?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1988324475728240422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1988324475728240422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1988324475728240422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1988324475728240422'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/07/afiterator.html' title='af:iterator'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7310449310503808502</id><published>2009-06-17T20:21:00.000-04:00</published><updated>2009-06-17T20:24:51.957-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='f:verbatim'/><category scheme='http://www.blogger.com/atom/ns#' term='af:inputText'/><category scheme='http://www.blogger.com/atom/ns#' term='Dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>f:verbatim's affects on af:inputText</title><content type='html'>Did you know if f:verbatim is a parent of af:inputText that the af:inputText will ignore changes made by the end-user to its data???  That one drove me a little nuts.  I am trying to integrate Dojo with ADF is why I ran into such a scenario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7310449310503808502?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7310449310503808502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7310449310503808502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7310449310503808502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7310449310503808502'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/06/fverbatims-affects-on-afinputtext.html' title='f:verbatim&apos;s affects on af:inputText'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3759847126275681898</id><published>2009-06-17T10:39:00.000-04:00</published><updated>2009-06-24T13:23:00.275-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF Custom Components'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Open World'/><title type='text'>Oracle Open World 2009 Campaign</title><content type='html'>All,&lt;br /&gt;Thank you so much for your votes on my Oracle Open World presentation proposals.  Many heavy hitters in the ADF community have voted for this presentation.  It is on JSF Custom Components:  Frank Nimphius, Grant Ronald, Peter Moskovits, and the list goes on and on. &lt;br /&gt;I have noticed that Oracle Mix has been a bit flaky at time for the links that I distributed.  If you wanted to vote but could not see the links, please try the proposal page; you should have better luck.  At this time I am on the second page of Top proposals:&lt;br /&gt;&lt;a href="https://mix.oracle.com/oow/proposals/"&gt;https://mix.oracle.com/oow/proposals/&lt;/a&gt;&lt;br /&gt;I am very excited to be involved with this campaign.  :-)&lt;br /&gt;Michael Fons&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hi. I want to speak at Oracle Open World 2009. My paper is on creating JSF Custom Components.&lt;br /&gt;&lt;br /&gt;Please read my abstract and vote for my paper at&lt;br /&gt;&lt;a href="https://mix.oracle.com/oow/proposals/10362" target="_blank"&gt;https://mix.oracle.com/oow/proposals/10362&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: in order for your vote to count, you will need to ...&lt;br /&gt;1. Have/log into an Oracle Mix account (follow the appropriate links if you don't already have an Oracle Mix account; good site to check out, anyway)&lt;br /&gt;2. Vote for at least 3 papers.&lt;br /&gt;&lt;br /&gt;To help with 2. above, please also vote for a friend of mine...&lt;br /&gt;&lt;a href="https://mix.oracle.com/oow/proposals/10432" target="_blank"&gt;https://mix.oracle.com/oow/proposals/10432&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And then...your vote #3 can be random or pointed...&lt;br /&gt;&lt;br /&gt;Thanks for your time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3759847126275681898?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3759847126275681898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3759847126275681898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3759847126275681898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3759847126275681898'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/06/oracle-open-world-2009-campaign.html' title='Oracle Open World 2009 Campaign'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6200425453895779668</id><published>2009-06-13T08:30:00.000-04:00</published><updated>2009-06-16T13:21:06.149-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='auto-complete'/><category scheme='http://www.blogger.com/atom/ns#' term='auto-suggest'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><title type='text'>sun's blueprints</title><content type='html'>Very nice. I just had another look at Duncan Mills' Autosuggest tutorial using Sun's blueprint project. I am really beginning to understand what they were doing. I downloaded a bunch more stuff to look at on the plane going back to Virginia. Very interesting.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/jdev/tips/mills/AjaxAutoSuggest/AjaxAutoSuggest.html"&gt;http://www.oracle.com/technology/products/jdev/tips/mills/AjaxAutoSuggest/AjaxAutoSuggest.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is the article I am talking about. I looked at it a year or so ago; I understand it much better today. The blueprint project has a bunch of very useful, interesting custom JSF component code to look at for free. What a learning opportunity.&lt;br /&gt;&lt;br /&gt;So was able to implement this as is, but I had some trouble using the BindingContainer. But I used #{data.&lt;datacontrolname&gt;.dataProvider} to get the application module instead of going through the bindings layer, and that got me to the same place. I have not isolated the exact trouble with the bindings layer yet.&lt;br /&gt;&lt;br /&gt;I realize that the BindingContainer layer (JSR 227?) is very important, but I believe I am still abiding by the overall architechtural bent of using the Application Module as a repository for services, and accessing only the exposed ones. Right now I just have some vague notion that creating a PageDef and hooking it into the DataBindings.cpx file is somehow fraut with opportunities to make mistakes. I have made a variety of mistakes setting these up, but the binding layer issues have the trouble of not yet revealing to me how on earth to troubleshoot the problem. I only see that when I get the value for #{bindings} that it is null.&lt;br /&gt;&lt;br /&gt;Ah well. On the lighter side, I was able to download the source for this textfield.jar that this example uses; and I was able to get the source working just fine. I also obtained the source to the other aspects of J2EE blueprints avaialble in the same download, and also an additional download which gives the updates for Java EE 5.0 :-)&lt;br /&gt;&lt;br /&gt;That should keep me busy on those 3.5 hour plane-trips. ;-)&lt;br /&gt;&lt;br /&gt;One thing I would like to improve upon for this component is that it does not respond to a down arrow or up-arrow. I think this should be doable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6200425453895779668?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6200425453895779668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6200425453895779668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6200425453895779668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6200425453895779668'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/06/suns-blueprints.html' title='sun&apos;s blueprints'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2755613168924014999</id><published>2009-06-03T15:27:00.000-04:00</published><updated>2009-06-03T15:34:19.449-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='DOMSource'/><title type='text'>DOMSource</title><content type='html'>Time sink...&lt;br /&gt;&lt;br /&gt;I spent way too much time trying to get this to work.  It is upsetting me, so it goes on the blog.&lt;br /&gt;&lt;br /&gt;The general idea is I wanted to change an XML file from my Java program.  My approach was to load it into a Document object, manipulate it.  Then when I was done I would use a DOMSource and a Transformer to convert this Document to a String.&lt;br /&gt;&lt;br /&gt;What was supposed to work that did NOT was giving DOMSource a non-document Node...like an element.  I wanted a string for a particular element.  DOMSource would give me an empty string when I gave it a viable element, but gave me exactly what I expected when I gave it a real document.&lt;br /&gt;&lt;br /&gt;I have no doubt that there is some magic I did not adhere to that will get this to work; by God I am have a limited life span!!  Someday I will be savvy enough to deal with this problem I guess...but for now I found it easier to convert the whole document to a string and use regex to extract the node I wanted.  Man!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2755613168924014999?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2755613168924014999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2755613168924014999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2755613168924014999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2755613168924014999'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/06/domsource.html' title='DOMSource'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5746482928639918846</id><published>2009-05-29T06:45:00.000-04:00</published><updated>2009-05-31T14:23:40.014-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wrapper pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='Decorator pattern'/><title type='text'>Decorator/Wrapper pattern</title><content type='html'>I started writing code using Document class from &lt;a target="_blank" href="http://w3c.org/"&gt;&lt;span class="yshortcuts" id="lw_1243593930_0"&gt;w3c.org&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pretty soon it seemed like I was writing a lot of methods which would logically go into an extension of the Document implementation.&lt;br /&gt;&lt;br /&gt;So I tried extending XMLDocument (Oracle's implementation of this) in order to have a better place to put these methods.&lt;br /&gt;&lt;br /&gt;But the way I was producing this document I was using DocumentBuilder method that parses a file, and returns a Document.&lt;br /&gt;&lt;br /&gt;So in my code I could not think of a way to call this, parse method and get a XMLDocument and then cast it to my class so I could use my new methods.&lt;br /&gt;&lt;br /&gt;SO:  Here is what I did.  I created a decorator (wrapper) class which implements the Document interface, and then passed in the returned document from the parse method to the constructor to my new class.  Then all I had to do was to implement every method in the Document and Node interface (Document interface extends Node interface).&lt;br /&gt;&lt;br /&gt;Only trouble here is there were a lot of methods in these interfaces, and other than write my own program to generate the default wrapper methods I had to hand-type them all in.  Pretty tedious and generates a gob of code.&lt;br /&gt;&lt;br /&gt;Vik Kumar from Oracle Corporation seemed to agree that this extra code was necessary to "extend" implementations of the Document interface. &lt;br /&gt;&lt;br /&gt;Someone else mentioned on the internet that IntelliJ IDEA had a wizard to generate this decorator pattern class, but I downloaded a trial and could not find such a wizard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5746482928639918846?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5746482928639918846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5746482928639918846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5746482928639918846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5746482928639918846'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/05/question.html' title='Decorator/Wrapper pattern'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7193246630884950054</id><published>2009-05-27T09:46:00.000-04:00</published><updated>2009-05-27T09:50:15.212-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FindBugs'/><title type='text'>FindBugs</title><content type='html'>OK.  Been too long.  Must do blog entry.  Appologies in advance.&lt;br /&gt;&lt;br /&gt;I like FindBugs.  Check it out.  Help you with your Java form and application robustness.  Thanks to Olaf Heimberger for pointing me to it...someone else too from another part of the world also that seemed to have his head screwed on straight.&lt;br /&gt;&lt;br /&gt;It lists and categorizes suspicious and crappy stuff in your code.  You just can point it at the root of your application and say go.  In no time you are going..."gee!" and "golly!"&lt;br /&gt;&lt;br /&gt;Try it!  You'll like it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7193246630884950054?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7193246630884950054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7193246630884950054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7193246630884950054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7193246630884950054'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/05/findbugs.html' title='FindBugs'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7556145191649123752</id><published>2009-04-30T13:16:00.000-04:00</published><updated>2009-05-05T16:42:33.519-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBO-35007'/><category scheme='http://www.blogger.com/atom/ns#' term='iterators'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><title type='text'>exclusively programmatic use of PageDef iterators</title><content type='html'>Revision: if you have an iterator that you have included for usage programatically only, be very careful!  I kept getting JBO-35007 errors when I did a post back!!  So finally I removed the iterator and just got the app module programmatically, and did a findViewObject("viewObjectInstanceName") from it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7556145191649123752?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7556145191649123752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7556145191649123752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7556145191649123752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7556145191649123752'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/04/if.html' title='exclusively programmatic use of PageDef iterators'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5154830455397048249</id><published>2009-04-17T13:57:00.000-04:00</published><updated>2009-04-17T14:00:57.593-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><title type='text'>Where and how does ADF expand on or deviate from JSF?</title><content type='html'>&lt;p&gt;ADF is different from  JSF, that is for sure.  &lt;/p&gt;&lt;p&gt;&lt;br /&gt;JSF is an open standard, whereas ADF open for its Trinidad components, but not its newest ones.  For example ADF Faces UI components are custom JSF UI components.  Generalizing about ADF Faces components, they usually have many more properties than the JSF components.  For example, compare the af:table with the h:dataTable.  There function is to be the same, but the af:table has many additional features that the h:dataTable does not have.  For example the af:table has a selectionListener and sortListener built right into the component’s properties.  The h:dataTable has no such property.  It is still possible to have a radio button select a particular row in the table, but the way that is to be done is totally different.  Selecting a row in a table can involve many things:  selectionListener of the table, an tableBinding, the CollectionModel interface (for the value of the af:table), and the af:table’s selection facet.  The h:dataTable does not have nearly so many hooks into this row selection functionality.&lt;br /&gt;On the other hand there is a certain simplicity to the way JSF without ADF Faces works.  For example, you may not need a SortListener, when you can write a backing bean method that does the sorting, and have your table column header link simply call the sucker.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Another difference between af:table and h:dataTable is that af:table can use the built-in Partial Page Rendering to simply refresh the table without refreshing the entire page.  This refreshing can get a bit involved, but usually it is not if you remember one thing:   the command item that instigates the partial page rendering of the table cannot be from within the table itself.  So for example if there is a button within the action facet of a table that needs PPR-ing, then either the button needs to be moved out of the table, or it needs to use its onclick event property to press another (perhaps hidden) button which is outside of the table.  But even with this odd caveat af:tables can do PPR relatively easily.  &lt;/p&gt;&lt;p&gt;&lt;br /&gt;(PPR outside of tables seems to be pretty straight forward and helpful; some rudimentary AJAX at its best.)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Another add-on for af:table’s are how they work with the page def table binding and iterator definitions in order to easily page groups of rows forwards and backwards.  The component that supports the h:table has hooks for this, but it must all be implemented relatively manually.  This binding layer is part and parcel of JSR227 (Data binding).  Part of this data binding layer also implements DataControl’s.  I think this is very important for allowing the layers to be interchangeable, and hiding the implementation of the business service layer.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Another big addition that ADF brings to the table is the Page Definition file; this is also part of the data binding layer they implement.   JSF components typically connect to backing beans for their values, whereas Oracle ADF likes to route value properties (and others) through the bindings in the page definition file for that page.  Most times I think the addition of binding layer functionality is a boon.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;At another level, Oracle ADF Faces Lifecycle augments the JSF Request Processing lifecycle;  ADF lifecycle adds a prepareModel and a prepareRender and an extra validation phase to the various JSF phases.  &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Here is Oracle’s point of view of some of these differences:&lt;br /&gt;The Java Server Faces components differ from the ADF Faces components in ways completely spelled out at the following URL:  &lt;a href="http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/doc/spec-diff.html"&gt;http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/doc/spec-diff.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following list gives Oracle’s list of advantages of ADF Faces component set over straight JSF HTML and Core components  (Oracle Corporation, 2006)&lt;br /&gt;1)      Provide more efficient implementations of client-side state saving (reduced per-component size)&lt;br /&gt;2)      Rich set of components, validators, and converters&lt;br /&gt;3)      ADF Faces tags often offer more features than the standard tags; for example, all input components offer built-in label and message display support ( For more information on the differences between the ADF Faces tags and the standard Faces tags, please see the &lt;a href="http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/doc/spec-diff.html"&gt;following document &lt;/a&gt;).&lt;br /&gt;4)      Client-side converters/validators - JavaScript enabled converters and validators that attempt to catch and display errors on the client&lt;br /&gt;5)      ADF Faces tags can be used inside of the &lt;&gt; tag (it is, unfortunately, not possible to support standard tags inside &lt;&gt; ).&lt;br /&gt;6)      Accessibility - support similar to &lt;a href="http://helponline.oracle.com/jdeveloper/help/state/content/vtTopicId./navSetId.jdeveloper/vtTopicFile.jdeveloper%7Cuixhelp%7Cuixdevguide%7Caccessibility~html/navId.4/"&gt;ADF UIX Accessibility &lt;/a&gt;&lt;br /&gt;7)      Bidirectional language support - ADF Faces components automatically render themselves appropriately for bidirectional languages. Users can also use the "start" and "end" constants described in &lt;a href="http://helponline.oracle.com/jdeveloper/help/state/content/vtTopicId./navSetId.jdeveloper/vtTopicFile.jdeveloper%7Cuixhelp%7Cuixdevguide%7Cinternational~html/navId.4/"&gt;ADF UIX Bidirectional Language Support &lt;/a&gt;&lt;br /&gt;8)      Partial Page Rendering (PPR) - support similar to &lt;a href="http://helponline.oracle.com/jdeveloper/help/state/content/vtTopicId./navSetId.jdeveloper/vtTopicFile.jdeveloper%7Cuixapps%7Chtmlhelp%7Ccreateui%7Cadd%7Ctable%7Cuix_atabppr~html/navId.4/"&gt;ADF UIX PPR overview &lt;/a&gt;&lt;br /&gt;9)      Skinning - support similar to &lt;a href="http://helponline.oracle.com/jdeveloper/help/state/content/navSetId.jdeveloper/navId.4/vtAnchor.laf/vtTopicFile.jdeveloper%7Cuixhelp%7Cuixdevguide%7Ccustomization~html/"&gt;ADF UIX Look and Feel &lt;/a&gt;&lt;br /&gt;10)   ADF integration - including support for JSR227 (Data binding)&lt;br /&gt;11)   Rich Client - upcoming rich DHTML client-side renderers&lt;br /&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5154830455397048249?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5154830455397048249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5154830455397048249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5154830455397048249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5154830455397048249'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/04/where-and-how-does-adf-expand-on-or.html' title='Where and how does ADF expand on or deviate from JSF?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8074674061428406128</id><published>2009-04-17T13:51:00.000-04:00</published><updated>2009-04-17T13:57:01.076-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces components'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Open World'/><title type='text'>Open World Abstract...</title><content type='html'>I have submitted an abstract for Oracle Open World. I want to do an instructive paper on how to do custom component development. I think I still have a lot to learn; I had read a chapter or two and done some exercises and examples and thought I knew what I was doing. At the time I learned these basics I felt very proud of them. Now I feel sheepish for feeling proud, since I now know definitively some things which then I only kind of knew.&lt;br /&gt;&lt;br /&gt;At the height of my smugness I decided I would try and extend a rich faces component…that did not work out quite as well as I had hoped. I was able to put markup before and after the af:table (rich table, that is), but I cannot seem (yet) to figure out how to get into the middle of it – inside the box where the columns are or in-between the columns. I thought I knew where to look for this, but I am not finding what I expected when I look where I thought I should.&lt;br /&gt;&lt;br /&gt;So far my efforts to augment these components have met with very limited success. There is a section in the Fusion Developers ADF Guide 11g about extending components (I hope they mean UI components and not business components) that I should read for sure and probably reference. Maybe that will give me some insight. Maybe for my understanding level, it would be more helpful to attendees if I stick with more basic concepts, like how the pieces I know about interact.&lt;br /&gt;&lt;br /&gt;I know the declarative components are custom component combinations, which is quite handy. I have a 10g project where I could really use something like that. Maybe that is something I can explore for my paper: implementing declarative component conceptually, in order to help understand custom component development.&lt;br /&gt;&lt;br /&gt;For my edification however I would like to know more details on how Oracle implemented their rich components. When I try to alter them or get inside of them, everything I do seems to not allow me to get at the inner parts of the component. I do not know how Oracle is hiding this.&lt;br /&gt;For starters I see that there are property elements in the components when they are defined in faces-config.xml. I did not know that component properties could be define or elaborated on there. I do not know what that adds, but I would like to know.&lt;br /&gt;&lt;br /&gt;I should study JSF details from the Java EE 5.0 tutorial. Hopefully they would have some further explanation of this. Or maybe the standards for Java EE 5.0: maybe they specify some details of JSF that would help me understand what Oracle and everybody else is doing with their components…and help me with this paper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8074674061428406128?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8074674061428406128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8074674061428406128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8074674061428406128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8074674061428406128'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/04/open-world-abstract.html' title='Open World Abstract...'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-978054101540468857</id><published>2009-04-17T13:35:00.000-04:00</published><updated>2009-04-17T14:02:10.238-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pentaho'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces 10g'/><title type='text'>ADF 10g interfacing with Pentaho</title><content type='html'>Pentaho is an open-source reporting tool that has a Discoverer-like metadata store for ad-hoc querying; I am alternately battling with that getting my ADF interface to it implemented.&lt;br /&gt;&lt;br /&gt;Yesterday I went down a path I had probably been down before but forgotten.&lt;br /&gt;&lt;br /&gt;I used a tree binding on a table to have a table in the details facet of an af:table. This worked reasonably well until I tried to update the child table data. At that point all kinds of strange things started to happen. The rows would get mixed up as to who their parent was, I think there might have been some errors....at any rate I backed out of that and went another route because that one was proving somewhat unstable.&lt;br /&gt;&lt;br /&gt;Things are starting to get green here in Virginia!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-978054101540468857?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/978054101540468857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=978054101540468857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/978054101540468857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/978054101540468857'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/04/adf-10g-interfacing-with-pentaho.html' title='ADF 10g interfacing with Pentaho'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2819478203673720062</id><published>2009-03-26T19:56:00.000-04:00</published><updated>2009-04-03T14:01:35.482-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle WebCenter'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Portlet Bridge'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><title type='text'>JSF Portlet Bridge and WebCenter</title><content type='html'>I did a post a while back on JSF Portlet Bridge that I will now revise, because things are not quite like I thought they were.&lt;br /&gt;&lt;br /&gt;Let's say that your organization has an Oracle Portal 10g install. Then let's say you want to start integrating ADF Faces apps that were generated from JDev 10g. (That would be Apache Trinidad in JDev 11g parlance). Here is what you would want to do: install your ADF apps on a 10.1.3.4 Oracle App Server. Let's say you did not have the WebCenter license of any kind. Then you would need to add some kind of generic web page with an iframe on it that called out to the ADF Page. That would be your option.&lt;br /&gt;&lt;br /&gt;But let's say you had the minimal, or "Services" WebCenter License (I believe that is priced by CPU-core count.). Then you can deploy your ADF Faces apps to that same 10.1.3.4 after you have doctored it up. By doctored it up I mean the following:&lt;br /&gt;1. Install SOA 10.1.3.1&lt;br /&gt;2. Apply patchset 10.1.3.4&lt;br /&gt;3. Create new oc4j in EM. Call it wsrp2&lt;br /&gt;4. Install portlet-server-install.jar&lt;br /&gt;5. PER NOTE: Note 752220.1 Java.Lang.Noclassdeffounderror: Javax/Xml/Soap/Soapelement Deploying Standalone Application&lt;br /&gt;cd $ORACLE_HOME/j2ee/wsrp2/config&lt;br /&gt;vi server.xml&lt;br /&gt;&lt;br /&gt;6. Start container. (opmnctl startproc process-type=wsrp2)&lt;br /&gt;7. Deploy application. NO ERROR&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A few notes about this process above:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can get the portlet-server-install.jar by looking at the following: &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.oracle.com/technology/products/webcenter/pdk.html"&gt;http://www.oracle.com/technology/products/webcenter/pdk.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.oracle.com/technology/products/webcenter/portlet_download.html"&gt;http://www.oracle.com/technology/products/webcenter/portlet_download.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(&lt;a href="http://download.oracle.com/otndocs/tech/webcenter/files/pdksoftware.zip"&gt;http://download.oracle.com/otndocs/tech/webcenter/files/pdksoftware.zip&lt;/a&gt;)&lt;/p&gt;&lt;p&gt; Oracle Portlet Container and PDK-Java 10.1.3.2&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Your Oracle Portal installation will need to be up to date.  So that means at least your Portal Repository needs to be at 10.1.4.0...but then you will have a work-around because your images will not work right.  It is best if you upgrade to 10.1.2.3 on your iAS and 10.1.4.2 on your Portal Repository and do all the pertinent patches...and there are a few!  But they are documented.&lt;/li&gt;&lt;li&gt;At this point there will still be some CSS-related issues that are documented in an Oracle bug.  (7968131)  I am gathering this case is not being worked too hard, though.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So then you can consume your "produced", portletized ADF apps just fine.  They work pretty darn well, too!&lt;/p&gt;&lt;p&gt;Apparently, though, JSF Portlet Bridge is not supported by Oracle for Apps that you deploy to the OC4J 10.1.2.x -- which is Portal 10g's current iAS platform until Portal 11g comes out.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2819478203673720062?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2819478203673720062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2819478203673720062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2819478203673720062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2819478203673720062'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/jsf-portlet-bridge-and-webcenter.html' title='JSF Portlet Bridge and WebCenter'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8789788521023422085</id><published>2009-03-26T19:42:00.000-04:00</published><updated>2009-03-26T19:54:21.082-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='role-name'/><category scheme='http://www.blogger.com/atom/ns#' term='XML Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='CDATA'/><category scheme='http://www.blogger.com/atom/ns#' term='web.xml'/><category scheme='http://www.blogger.com/atom/ns#' term='Java EE'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>web.xml role-name with spaces</title><content type='html'>I was having some trouble using &lt;role-name&gt;with a value with spaces in it. I figured out why and how to fix it: The XML parser probably fails to read the role-name data because role-name is defined as xsd:ID in XML Schema which cannot have spaces. So if you escape the role name with CDATA, which suspends parsing, your roles will match up with LDAP roles that have spaces in them -- if you happen to have that convention in your LDAP. So now role-name entries in web.xml look like the following if they have spaces in them:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;role-name&amp;gt;&amp;lt;![CDATA[my role name]]&amp;gt;&amp;lt;/role-name&amp;gt;&lt;/blockquote&gt; instead of&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;role-name&amp;gt;my role name&amp;lt;/role-name&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8789788521023422085?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8789788521023422085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8789788521023422085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8789788521023422085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8789788521023422085'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/webxml-role-name-with-spaces.html' title='web.xml role-name with spaces'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8147745585668419945</id><published>2009-03-25T15:44:00.000-04:00</published><updated>2009-03-25T15:45:02.048-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Postbacks'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>Quick Note about JSF, ADF and Postbacks</title><content type='html'>Unlike ADF, in pure JSF it appears there is no AdfFacesContext.postback context element to use to determine if you are currently in a post back or not.  To determine postback you have to do some odd stuff.&lt;br /&gt;&lt;br /&gt;So what is a postback?  In short it is when a JSF page submits and it stays right where it is.  In other words the action of the form is set to post to itself, passing all of its named fields as parameters.  When the Faces Servlet sees this occurring it alters its “behavior”.  The normal JSF request lifecycle has 7 or 8 phases when it is drawn out for others to see…but all these phases only come into play on a post back.  When you first call a JSF page, all that you actually get is the first and the last phase…everything else is left out.&lt;br /&gt;&lt;br /&gt;These postbacks are extremely important in the Rich Component world though.  You have to postback in order to implement a very nice way to do AJAX functionality without having to make others who want to use your components add servlets to their web.xml.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8147745585668419945?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8147745585668419945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8147745585668419945' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8147745585668419945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8147745585668419945'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/quick-note-about-jsf-adf-and-postbacks.html' title='Quick Note about JSF, ADF and Postbacks'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7020498133824838400</id><published>2009-03-25T15:38:00.000-04:00</published><updated>2009-03-25T15:46:10.035-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Career Change'/><category scheme='http://www.blogger.com/atom/ns#' term='stretching'/><category scheme='http://www.blogger.com/atom/ns#' term='Forms to Java'/><title type='text'>Programmer Metamorphosis Psychology 101</title><content type='html'>It is always interesting to read journal entries.  I found one here that someone might find helpful.  Fortunately it has a happy ending... :-)&lt;br /&gt;&lt;blockquote&gt;I am undergoing a change of a drastic nature. I am going from being a Forms/Reports guy to being a Java guy. I have been elated during most of the professional “metamorphosis” time – especially where I did things I was afraid to do at first, but then I realized I could handle it. I was productive and HAPPY about having done these things…about having suspended my disbelief long enough to know that I was about to say I could do something, that I had no idea I how I would do…long enough to put on a happy face to the person that wanted someone who appeared confident to tell them we would make miracles happen. And after a fashion I would even see how I was going to get these things done. But I never would have tried if I had not suspended the disbelief long enough to say: ‘I can do this’ to someone without having the slightest idea of how I was going to make that happen.&lt;br /&gt;&lt;br /&gt;And…when all was said and done…I was better for this “lie”, and so was my employer. I was always taught not to lie.&lt;br /&gt;&lt;br /&gt;In the Constitution of System Engineering Services Corporation®, there is a phrase in there: that they expect their employees to Stretch. That is what I am talking about.&lt;br /&gt;&lt;br /&gt;When I was doing the work and working miracles, I was happy, and excited…LIKE I HAVE WANTED TO BE IN MY PROFESSION ALL ALONG. I thought the right thing to do was to be faithful to your technology, and your boss and their wishes. But…what if your bosses are fearful? What if they don’t know this secret about stretching? What if they know it but don’t want to do it because it’s scary? Then they suffer. Their company suffers. Their employees suffer…at least those that buy into this mode of behavior.&lt;br /&gt;&lt;br /&gt;Why should anybody GRIND IT OUT with embarrassingly outdated technology at their job which is providing a paycheck, but which is providing a place where they are losing ground? Why?? Everybody is failing then…employer and employee…&lt;br /&gt;&lt;br /&gt;All you need is to find a risk taker…and to be a risk taker. And I think you have to renew your vows to be such a risk taking creature on a daily basis. But the result is you have fun, learn lots, become more marketable, make friends, um…is there a downside to this?&lt;br /&gt;&lt;br /&gt;I am still learning gobs…I hope that never stops. I guess I have something to do with it stopping or not, eh?&lt;br /&gt;&lt;br /&gt;I hope you can benefit from the following analysis, and hope it aides you in whatever metamorphosis you are currently undergoing.&lt;br /&gt;&lt;br /&gt;12/15/08 – Slight addendum to this forward: I am currently looking for work. So this transition is causing me some pain now. I feel it is because there are not jobs running out of everybody’s ears now that the economy is messed up. It is also because it is late in the year and that is a notoriously bad time to be out of work. But there is another thing the fledgling risk-takers should be aware of. You should strive to find good positions where you will continue to learn, but most employers want you to already be experts in whatever their suite of technologies is…and you also have to be better at this particular suite than 90% of the other candidates who are applying for that position.&lt;br /&gt;&lt;br /&gt;Obviously, this is a difficult situation. Yes it is. I do not regret trying to leave Forms/Reports behind. I am a little worried I have not been more responsible…on a bad day, but mostly this is just the trough of the biorhythm of learning a new bunch of technology. Because…as I recall: finding a new job is ALWAYS a little…OK: a LOT…scary! When I get my job I will be elated…not bored and internally dead and miserable.&lt;br /&gt;&lt;br /&gt;1/8/09 – I may have found a place in Minnesota (Trane Corporation) that does custom JSF component development, and really likes my work. So: off I go (happily) to St. Paul for the next 6 months to a year.&lt;br /&gt;&lt;br /&gt;1/20/09 – Trane just announced a hiring freeze. Darn. Back to more looking.&lt;br /&gt;&lt;br /&gt;Tuesday, March 24, 2009 -- OK: I am now at Fairfax, VA. Things are going well and we are speeding our way toward our first ADF app for this company. It would be ideal (in my boss’s words) if we could do work in WebLogic with the new ADF 11g technology. Wouldn’t that be sweet…??? Back on top of the world.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7020498133824838400?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7020498133824838400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7020498133824838400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7020498133824838400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7020498133824838400'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/programmer-metamorphosis-psychology-101.html' title='Programmer Metamorphosis Psychology 101'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8737055875003933528</id><published>2009-03-18T10:24:00.000-04:00</published><updated>2009-03-18T10:45:22.612-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces Rich Client'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Developer Day'/><title type='text'>Developer Day Notes</title><content type='html'>I have some notes I would like to share about Oracle Developer Day.  I got a whole lot out of it.  Most of it extremely positive.&lt;br /&gt;&lt;br /&gt;Here are my notes from the session.  Hope they are helpful.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;OTN Developer Day Notes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;· OPI? OPEE?? (Eclipse Oracle Developer pack)&lt;br /&gt;&lt;br /&gt;· Panel Collection – can surround a table to et a header and footer&lt;br /&gt;&lt;br /&gt;· Rebuild will allow you to sometimes avoid rerunning a page in IDE&lt;br /&gt;&lt;br /&gt;· Export to Excel – component to do that (uses a listener of some sort)&lt;br /&gt;&lt;br /&gt;· FMW 11g released – calendar year 2009&lt;br /&gt;&lt;br /&gt;· Moving splitters – maintained per user by session. To persist user settings you can use Oracle MDS – for example for a set of users you could create a preference set and store it on a database.&lt;br /&gt;&lt;br /&gt;· When I deployed to 11g, I did not see OC4J as an option. But Lynn Munsinger says it is among the app servers they offer.&lt;br /&gt;&lt;br /&gt;· The focus of the binding layer (JSR 227) is to abstract business services so that you don’t have to know implementation specific details SOAP,WSRP. Also it reduced the number of backing beans you need to write, and also shortens the&lt;br /&gt;&lt;br /&gt;· I need to build a wiki of some sort (there is support for this in WebCenter suite).&lt;br /&gt;&lt;br /&gt;· Components are ADA (Americans with disapbilities act) compliant&lt;br /&gt;&lt;br /&gt;· Learn more about MDS (Metadata Services).&lt;br /&gt;&lt;br /&gt;· Although ADF/BC control hints is UI mixed in Model (violation of mvc), it allows us to set standards.&lt;br /&gt;&lt;br /&gt;· Can package up ADF BC’s as a library and deploy it, so developers can use this.&lt;br /&gt;&lt;br /&gt;· Static list – keep small.&lt;br /&gt;&lt;br /&gt;· You need to get a handle on deploying Application Modules for use by company.&lt;br /&gt;&lt;br /&gt;· Google “ADF Methodology” – google group has a grassroots naming standards.&lt;br /&gt;&lt;br /&gt;· Can create resource bundle on the fly when you create control hints.&lt;br /&gt;&lt;br /&gt;· How do you create a plsql web service? Then you can use them in ADF/BC.&lt;br /&gt;&lt;br /&gt;· JSF Component good because for example, table takes a collection and is trusted with doing the right thing with the data to make the table viable in HTML.&lt;br /&gt;&lt;br /&gt;· What is stateless again? Lynne kept talking about stateless components.&lt;br /&gt;&lt;br /&gt;· Check out print component, poll, listeners (that’s that client/javascript thing, I think)…&lt;br /&gt;&lt;br /&gt;· Graphs are svg or flash.&lt;br /&gt;&lt;br /&gt;· ADF Data Visualization are the graphs I think.&lt;br /&gt;&lt;br /&gt;· Experiment with reusing a task flow.&lt;br /&gt;&lt;br /&gt;· Task flows can go into a region really easily.&lt;br /&gt;&lt;br /&gt;· Bounded task flows can battle the back button (huge reason for using task flows).&lt;br /&gt;&lt;br /&gt;· Task flows are integrated with database transactions and process trains&lt;br /&gt;&lt;br /&gt;· Can bundle components (like address block) as declarative components.&lt;br /&gt;&lt;br /&gt;· It is better to add javascript to a component by creating a custom component and adding javascript.&lt;br /&gt;&lt;br /&gt;· Decorative box is a nice layout; three column template is the fusion look.&lt;br /&gt;&lt;br /&gt;· Awesome demo; my bosses really should have been there for it. Lynn Munsinger was doing it.&lt;br /&gt;&lt;br /&gt;· If using non-adf business components (EJB, or session bean…), you can create declarative validation on the adf binding layer….not used to much often.&lt;br /&gt;&lt;br /&gt;· Read the fusion developer guide.&lt;br /&gt;&lt;br /&gt;· Read the Fusion UI Developer’s Guide&lt;br /&gt;&lt;br /&gt;· (there will be a SOA Developers Guide)&lt;br /&gt;&lt;br /&gt;· Q&amp;amp;A on OTn&lt;br /&gt;&lt;br /&gt;· JDeveloper might be “less free” if we do not deploy to WebLogic server.&lt;br /&gt;&lt;br /&gt;· While we are waiting for FMW 11g to come on line, I need to be establishing standards, best practices, packaging task flows and app modules for reuse, creating templates, creating declarative combined components, skins, page fragments, backing bean bases, ADF/BC component bases, ….&lt;br /&gt;&lt;br /&gt;· Active Data Services – pushes changes to data. (ADS) better than polling.&lt;br /&gt;&lt;br /&gt;· If we deploy to Tomcat 6.0 we have to pay for license to use the ADF libraries.&lt;br /&gt;&lt;br /&gt;· For some reasons, when I was trying to add a default value to an entity date attribute, the groovy expression that I typed in did not register as having “taken”. I typed the value in and hit enter…well actually the first thing I did was enter the expression editor, which opens a dialog. But as soon as I went away from that context and came back the value I had entered did not appear. I bet if I had just entered the default value groovy expression on the property, the value would have taken as expected. At any rate entering the value in the field and switching to the source for the page made the little green dot appear in the property sheet, but no corresponding XML attribute value appeared for the “attribute” element for hireDate attribute. So finally I quit out of JDeveloper and reentered the tool. Then I entered the groovy expression, pressed enter, and it took: got the green dot (signifying non-default value in this property), and I checked the source screen and saw the corresponding DefaultValue attribute pop up with the Groovy value in it. Yay! Oddly enough once I got this to take I had accidentally left the value type to literal…which caused an error…because “adf.currentDate” is not really a valid date, is it? But changing to expression type made the XML change to a Transient expression and the data was put in a “CDATA” thingy. Lol Then it worked.&lt;br /&gt;&lt;br /&gt;· Do the demo on page 23, 25, 27, etc. of the class pdf for your bosses.&lt;br /&gt;&lt;br /&gt;· I wonder if the Fusion Developer’s guide has good documentation on the aspects of the groovy language that you need to know in order to, for example, express the endpoint values of a validation rule’s range as parameters that could be incorporated into an error message.&lt;br /&gt;&lt;br /&gt;· For column selection I am not sure what freeze, wrap do. Not sure what the point is of detatch, but maybe I would discover all this stuff down the road. The tutorial called attention to the features, but I do not see what to do with them yet; and the tutorial did not say either.&lt;br /&gt;&lt;br /&gt;· When you do a new ViewObject on the model, and you are to select the entities you want to use, the first one you select is marked as updatable, and reference checkbox is grayed out. When you shuttle over the second entity it assumes it is a reference. Of course this maybe due that not only is employee a child of department, but department is a child of employee due to the manager FK.&lt;br /&gt;&lt;br /&gt;· Lynn said to post test cases of bugs on JDeveloper Forums&lt;br /&gt;&lt;br /&gt;· Need to download a slightly newer version of JDev 11g which has fixes to memory leaks and many other issues…the memory leak issue actually makes the permgen error happen, and when you try to correct for it by restarting the embedded web logic server the same error happens. If you just restart JDeveloper, the WL Server won’t start because it says there is already one running. The fix for this is either remove the java.exe process in task manager and probably restart JDeveloper…or download this new version of JDeveloper that has a patch for this and other problems.&lt;br /&gt;Questions&lt;br /&gt;&lt;br /&gt;· Page Flow versus Task Flow – which one if either is related to an open source standard? Is Page Flow simply JSF’s built in controller, or is it something else?&lt;br /&gt;&lt;br /&gt;· Is there a version of OC4J which works with Java EE 5.0. Yes! OC4J 10.1.4 (did not know that existed.) It does not quite do JPA 3.0 right because it was produced prior to the spec being completed for Java EE…but everything else is fine. When I asked Lynn if ADF Faces Rich Client could be deployed to this, she said “no, because of differences in libraries”.&lt;br /&gt;&lt;br /&gt;· Could developers use either JDev 10.1.3 ADF Faces, or JDev 11g Trinidad for the same app depending on their preference?&lt;br /&gt;&lt;br /&gt;· Client/Server: what does it buy you to run the components on the client side? Server side?&lt;br /&gt;&lt;br /&gt;· Custom login modules? Are these harder to write in WebLogic? The same? Are there more built in options.&lt;br /&gt;&lt;br /&gt;· Can you pass parameters in via EL? Used to be only HashMaps would allow this. Other means now? (In Java EE unified EL)&lt;br /&gt;&lt;br /&gt;· What kind of expressions are allowed in the Token Message Expression area of the validation for an entity? For example, on a range how would you access the ends of the range? Is it Groovy? Where is the list of valid Groovy expressions?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8737055875003933528?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8737055875003933528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8737055875003933528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8737055875003933528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8737055875003933528'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/developer-day-notes.html' title='Developer Day Notes'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1812247349685530963</id><published>2009-03-13T11:19:00.001-04:00</published><updated>2009-03-13T11:37:20.055-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSRP'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle WebCenter'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='IAS 10.1.2'/><title type='text'>doing battle with WSRP, Part II</title><content type='html'>Had a great session with Oracle technical support over the trouble I have been having with portletizing ADF Faces.  The analyst mapped out an upgrade path for me which will solve all my problems; he demonstrated on his upgraded scenario using ias 10.1.2.3 (instead of my 10.1.2.0.2), and using Portal repository 10.1.4.2, plus the mandatory updates (instead of my 10.1.4.0), and also if I am going to deploy to OAS 10.1.3.4, that I make sure I have applied the web center jar file that WSRP-enables your particular OC4J instance that you have designated for exposing ADF apps via WSRP.&lt;br /&gt;&lt;br /&gt;If I do all this, he demonstrated that the same ear I was having problems with, worked like a champ!  YAY.&lt;br /&gt;&lt;br /&gt;(The SR is 7381737.994 if you need it for reference.  If you cannot access it, please leave a comment for this blog entry, and I will see if our situations are similar enough to warrent further action.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1812247349685530963?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1812247349685530963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1812247349685530963' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1812247349685530963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1812247349685530963'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/doing-battle-with-wsrp-part-ii.html' title='doing battle with WSRP, Part II'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4829438481034671096</id><published>2009-03-12T11:31:00.000-04:00</published><updated>2009-03-12T11:34:06.172-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Portal-JSF integration'/><category scheme='http://www.blogger.com/atom/ns#' term='WSRP'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle WebCenter'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Portlet Bridge'/><title type='text'>What forum is best for answering Oracle Portal-JSF integration questions?</title><content type='html'>&lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=354"&gt;WebCenter Framework Oracle Technet forum&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above URL is the WebCenter Framework forum on the Technet forums.  This is the place that Peter Moskovits and similar people review and comment, and the place where questions get answered of the kind I have been dealing with lately. &lt;br /&gt;&lt;br /&gt;I read the overview of WebCenter and I guess I did not realize that portal-JSF integration was synonymous with "WebCenter", but I think it is for some reason...&lt;br /&gt;&lt;br /&gt;I hope it helps you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4829438481034671096?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4829438481034671096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4829438481034671096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4829438481034671096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4829438481034671096'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/what-forum-is-best-for-answering-oracle.html' title='What forum is best for answering Oracle Portal-JSF integration questions?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2453726882659768421</id><published>2009-03-12T10:42:00.000-04:00</published><updated>2009-03-12T10:51:12.897-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JDeveloper 11g'/><category scheme='http://www.blogger.com/atom/ns#' term='Class Diagrammer'/><title type='text'>JDev 11g's Class Diagrammer</title><content type='html'>Must comment on JDev 11g's Class Diagrammer.&lt;br /&gt;&lt;br /&gt;I wanted to diagram some classes.  I was in the Model projects of a MVC project, and the project technologies, under New gallery, under Diagrammers, was Java Class Diagrammer.  So I selected it.  Then I discovered that it seems this diagrammer is geared toward ADF/BC Java Class diagramming...in other words, if you want to model an entity or a view Java Class or something.  I guess my poor brain has not even conceived of the need for such a diagrammer, but there must be a methodology where such a thing is a good idea.  I will have to experiment with that...&lt;br /&gt;&lt;br /&gt;But for that timeframe I just wanted a simple UML Class Diagrammer, but to find it you need to select all technologies, and select Class Diagrammer...not Java Class Diagrammer.  What-EVER!!  Now I am in the KNOW. &lt;br /&gt;&lt;br /&gt;Once in the Class Diagrammer things went very smoothly.  You can enter attributes and method with a short hand where + means public, - means private, # means protected, and blank means package.  The diagrammer makes it pretty simple to enter multiple attributes at a time:  type one, hit enter...and the diagrammer is waiting to take the next attributes.  Same with methods.  Links are pretty intuitive as well...which for a diagrammer is good.&lt;br /&gt;&lt;br /&gt;That's it.  OKThanksBye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2453726882659768421?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2453726882659768421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2453726882659768421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2453726882659768421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2453726882659768421'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/jdev-11gs-class-diagrammer.html' title='JDev 11g&apos;s Class Diagrammer'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3810252514904831184</id><published>2009-03-10T19:26:00.000-04:00</published><updated>2009-03-11T10:39:49.386-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSRP'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Technet'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Portlet Bridge'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>doing battle with WSRP</title><content type='html'>Victory! I got a portletized ADF app to deploy to JDeveloper 10.1.3.4's preconfigured oc4j. Here is how I did it and some pitfalls you can avoid: &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=870510&amp;amp;tstart=0"&gt;technet's jdev forum thread&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I need to add more to this post to document what I did and did not try (for many reasons).  I did a basic ADFBC/JSF master-detail app.  I just dragged a child collection from the Data Control pallet into a Panel page and dropped it as master detail.  I also put a menu tab on top that went no-where.  (If this seems a familiar demo, it is the same one used by Shay Shmeltzer in a recent blog about Trinidad.)&lt;br /&gt;&lt;br /&gt;So, I used the WebCenter Developer Guide 10.1.3.2 to instruct me on portletizing my simple app.  No problem there, I don't think.&lt;br /&gt;&lt;br /&gt;Then I made a deployment profile (WAR) for the ViewController project.  Then I deployed to an ear from that profile.  That's where it starts to get interesting.  During this deployment process, a dialog window comes up asking if your target Portal Container is 10.1.3.2 or above.  Now maybe this number is a WebCenter version of some sort...not sure.  Our Portal version is 10.1.4.  It is on a 10.1.2.0.2 OAS installation.  So I tried answering both yes and no alternately to this question.  Both created an ear, but the deployment results are what varied.&lt;br /&gt;&lt;br /&gt;No seemed to create a JSR 168 producer, but I am not sure how to tell Oracle Portal to find this consumer.  It seemed all the documentation I found has WSRP associated with JSR 168.&lt;br /&gt;&lt;br /&gt;When I tried to deploy the ear to various OC4J's the results were varied:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The "No" version of the ear file deployed everywhere, but I did not know how to consume it.  &lt;/li&gt;&lt;li&gt;The "Yes" version failed to deploy on the Oracle Portal OC4J, 10.1.2.0.2/Portal 10.1.4, because the process of creating the "yes" ear file installed an orion-application.xml file, which had an element that the OAS 10.1.2.0.2 deployment process could not handle...something like &lt;shared-library&gt; or something like that.  I had trouble finding documentation on this element, but I am guessing that J2EE 1.3 had no such element in its DTD for orion-application.  I did try creating my own version of orion-application.xml  with a version 2 orion-application.xml, instead of version 10 -- like the JDeveloper ear generator produced.  Still 10.1.2.0.2 OAS did not like this...the element was still foreign to it.  Also the ear generator renamed my orion-application.xml file and put is own back in there, so I would have had to edit the ear file to get it to accept mine, during the ear generator's "yes" path.  But even on the "no" path, when I put a version 2 orion-application.xml in my META-INF directory, with the same "mystery" element, the OAS deployer still could not deal with that element.&lt;/li&gt;&lt;li&gt;The   The "Yes" version of the ear failed to deploy on a 10.1.3.4 OC4J (stand-alone) version due to a Null Pointer exception I think.&lt;/li&gt;&lt;li&gt;The "yes" version succeeded when I deployed it to the pre-configured OC4J which is installed in the &lt;jdevhome&gt;/jdev/extensions directory.  Although as noted on the technet link above, I had to log in twice to get into EM.  The first time gave a JAXB error.  Also once in I did not have button images, so I had to go from memory.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;So anyway...I am now asking our 10.1.2.0.2 OAS to find and consume this baby, now that it is WSRP-produced.  But...my development computer is apparently on a different sub-net or something.  So today I am going to change my development computer to be fixed IP, and try this stunt again.  Wish me luck. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3810252514904831184?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3810252514904831184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3810252514904831184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3810252514904831184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3810252514904831184'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/doing-battle-with-wsrp.html' title='doing battle with WSRP'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-98618347279177817</id><published>2009-03-04T17:30:00.000-05:00</published><updated>2009-03-05T14:38:22.360-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peter Moskovits'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces Rich Client'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='OAS 10.1.3.4'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Portlet Bridge'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><category scheme='http://www.blogger.com/atom/ns#' term='OAS 10.1.2'/><title type='text'>ADF/Portal interview with Peter Moskovits</title><content type='html'>The company I am with and I interviewed Peter Moskovits, and got some questions answered we had about migration path of Oracle Portal 10g users and how to integrate the changing versions of ADF, which version of WSRP to use in which case, etc. Here are part of the minutes to the meeting:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Peter started with an overview of the Oracle products and product direction. Peter noted that Portal technology is a decade older than ADF technology, so efforts to merge them are challenging. Peter mentioned that there are a couple of kinds of portlets at work here: PDK Java Portlets, and WSRP/JSR168 Portlets. The latter is where the future is. In each case each technology offers something the other does not have, so Oracle promotes both. With Portal you have features such as runtime customization, reusable portlets, and content integration. So you can include portlets into ADF using WebCenter technology, or you can bring ADF portlets over and consume them WSRP 1.0 or 2.0 using JSF Portlet Bridge technology.&lt;br /&gt;&lt;br /&gt;&lt;!--There are apparently a 10g and an 11g version of the Portlet Bridge; the 11g version has had some awesome improvements.--&gt; Regarding Portlet Bridge licensing…Peter says that there are two kinds of licensing for WebCenter: a WebCenter services license (meant mostly for developers) and a suite license (to get everything). The services license would be cheaper also than the suite license. If the Portlet Bridge was the only part of WebCenter that you were using, it sounded like you should get WebCenter Services license which is cheaper. The Portlet Bridge enables communication with OAS/OC4J 10.1.3.4 to obtain exposed portlets through WSRP portlet producer. If we are using 10g portal (OAS 10.1.2.0.2/Portal 10.1.4), we would need to use WSRP 1.0 (I have a question out to Peter to know if we could use ADF Faces (10g) PPR features with WSRP 1.0 or not). &lt;!--We would use WSRP 2.0 if we were communicating from FMW 11g with Portal 11g and consuming portlets which were jsp(x) or task flows that had been published. WSRP 2.0 will enable many of the AJAX and PPR capabilities of ADF. --&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--He mentioned that the 11g version of Oracle Portal was using the WebLogic stack. He also said that when this version came out (expected the first half of this year), that you could get upgraded if you had advanced to Portal version 10.1.4 with the latest patch release. The repository was the main upgrade.--&gt; &lt;/p&gt;&lt;p&gt;Peter acknowledged that if you had to use OAS 10.1.2.0.2/Portal 10.1.4 that you would be much better off if you deployed your portletized 10g ADF Faces apps to OAS 10.1.3.4, and then consumed them with the 10.1.2.0.2 server with WSRP 1.0; rather than deploying directly to OAS 10.1.2.0.2 and having to dumb your 10g ADF Faces app down from 10.1.3.x down to 10.1.2 technology (J2EE 1.3/JDK 1.4 from J2EE 1.4/JDK 1.5).&lt;br /&gt;&lt;br /&gt;We should not deploy portlets with the SOAP provider if we are using ADF; we should use the JSF Portlet Bridge. SOAP was only for Struts applications.&lt;br /&gt;&lt;br /&gt;Peter and Jay both let me know that deploying a 10g ADF program was no big deal: a 3-step process, that was well documented in the 10g WebCenter Developer’s Guide.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-98618347279177817?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/98618347279177817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=98618347279177817' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/98618347279177817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/98618347279177817'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/adfportal-interview-with-peter.html' title='ADF/Portal interview with Peter Moskovits'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8448303460475203841</id><published>2009-03-03T14:19:00.000-05:00</published><updated>2009-03-03T20:25:29.664-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peter Moskovits'/><category scheme='http://www.blogger.com/atom/ns#' term='WSRP'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF Portlet Bridge'/><title type='text'>JSF Portlet Bridge for dummys</title><content type='html'>Today I read an entry from the blog of Oracle Portal Principal Product Manager Peter Moskovits, dated from about 9 months ago.  It talked about JSF Portlet Bridge, and showed him creating a video of his creating a an application which demonstrated JSF Portlet Bridge at work.&lt;br /&gt;&lt;br /&gt;I am just starting to learn about Oracle Portal, unlike Peter, so I thought the world of people who are at my understanding level might like to hear my comments.  All of the following are eithe quotes from Peter Moskovits, or they are my interpretations of Peter's words or actions, coupled with what I know and have read.&lt;br /&gt;&lt;br /&gt;So in JDev 11g you can right-click on a reusable item called a Task Flow, or a jspx/jsp page and something comes up which says "Create Portlet Entry...".  Doing this action will create a file called portlet.xml which is apparently the key file in portlet applications.  I believe this is the equivalent of doing what is called "portletizing" an application.&lt;br /&gt;&lt;br /&gt;In Peter's video, he is deploying his portletized JSF application to the embedded preconfigured OC4J which also had the portlet container in it.  Even after this app was portletized, Peter could still run the jspx/jsp files individually.  But also Peter demonstrated that you could access something called a "portlet producer".  Apparently there is something called WSRP which is a portlet producer.  I guess WSRP is a web service also because it has a WSDL, which you need to copy and save if you are ever going to use the portlet-ized JSF app you made.,..and also deployed.&lt;br /&gt;&lt;br /&gt;WSDL URL's are also called "endpoint URL's".&lt;br /&gt;&lt;br /&gt;Although it appears you get to the portletized JSF applications though the WSRP service, portlet parlance says that your application "consumes" a portlet...just like an app consumes a web service.&lt;br /&gt;&lt;br /&gt;So when you create your application that consumes portlets (preferable, hopes oracle, a webcenter template application out of JDev 11g) it is called a portlet consumer application.  In JDev 11g (and probably all IDE's) you need to register the portlet producer with your application.  In 11g Jdev this is done by...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;clicking ViewController project&lt;/li&gt;&lt;li&gt;New --&gt; WebTier --&gt; Portlets --&gt; WSRP Producer Registration&lt;/li&gt;&lt;li&gt;Name the portlet producer you are registering&lt;/li&gt;&lt;li&gt;paste in that WSRP WSDL you have been saving (see above)&lt;/li&gt;&lt;/ol&gt;After a successful registration you see a WSRP producer node in the Application Resources section.  This opens up to child nodes and you see your portletized JSF app.&lt;br /&gt;&lt;br /&gt;Then in your app you can just create you JSF (or other technology that supports using WSRP), and drag and drop the portlet out from under the WSRP producer node and onto the page.  This will add the portlet tag and portlet binding to the page (assuming you are using ADF, ;-).  If you run it you will see your page in a portlet on the browser.&lt;br /&gt;&lt;br /&gt;So where is the JSF Portlet Bridge coming into play here?  I read that the JSF Portlet Bridge bridges JSF and Portlet technologies...but where do the implementing classes reside.  I think they reside on the machine where you first deployed your portletized JSF application.  I am beginning to think that this app server that you first deploy your portletized JSF app does not need to have a Portlet Container...like Oracle Portal.  I think it just needs that portlet.xml in order for WSRP to talk to it.  I suspect that WSRP needs to be implemented on both ends...probably the same version...but maybe not?&lt;br /&gt;&lt;br /&gt;I know this though, because Peter said it:  when you create your portlet consumer application, you can use your published portletized JSF app in any other 3rd party portal that supports WSRP (and the version of WSRP you are using).&lt;br /&gt;&lt;br /&gt;Still trying to digest all of this.  Tomorrow I have a conference call with Peter and the rest of my teammates.&lt;br /&gt;&lt;br /&gt;Here is the video Peter made...  &lt;a href="http://download.oracle.com/otndocs/tech/webcenter/files/owc_r11_portlet_bridge_demo.html"&gt;video&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also the link for the &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_JCP-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=portlet_bridge-1.0-pfd-oth-JSpec@CDS-CDS_JCP"&gt;JSR for JSF Portlet Bridge has a Spec&lt;/a&gt; with some great overview material in it.  It helped me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8448303460475203841?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8448303460475203841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8448303460475203841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8448303460475203841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8448303460475203841'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/03/jsf-portlet-bridge-for-dummys.html' title='JSF Portlet Bridge for dummys'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-726574880742038047</id><published>2009-02-27T12:39:00.000-05:00</published><updated>2009-02-27T12:40:59.377-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MyFaces Orchestra'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces'/><title type='text'>MyFaces Orchestra conversation-scope</title><content type='html'>I have experienced some issues with ADF Faces (out of JDev 10.1.3) which  (I was told) were probably related to inadequate garbage collection (probably on session-scoped managed beans and variables).  So I have been looking for something that would help this application's robustness.&lt;br /&gt;&lt;br /&gt;I saw a product which may help with some of this.  It is called MyFaces Orchestra, and it might be worth looking into.  It would allow custom bean scopes called conversation-scope.  This framework uses Spring.  If there is a problem with accumulating garbage, this would surely help keep such things under control.  Apparently improving things like this could be an iterative process; conversations are by default of session duration.  But later you can group beans and garbage collect whenever you decide the need arises.  But even the act of putting all session-scoped beans into this framework might be a great first step to helping this situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-726574880742038047?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/726574880742038047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=726574880742038047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/726574880742038047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/726574880742038047'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/myfaces-orchestra-conversation-scope.html' title='MyFaces Orchestra conversation-scope'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2976911585601887615</id><published>2009-02-25T12:19:00.000-05:00</published><updated>2009-02-27T10:44:49.013-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces Rich Client'/><category scheme='http://www.blogger.com/atom/ns#' term='OAS 10.1.2'/><title type='text'>Deploy ADF Rich Faces Client app to OAS 10.1.2</title><content type='html'>My team lead asked me to investigate the idea of moving ADF Rich Faces applications (deploy, that is) into OAS 10.1.2...or at least 10.1.3.&lt;br /&gt;&lt;br /&gt;Shay Shmeltzer said the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="FONT-STYLE: italic"&gt;ADF Faces Rich Client require JSF 1.2 (part of Java EE 5).&lt;br /&gt;OAS 10.1.2 came with a Java EE 1.3 server - you can install an OC4J 10.1.3 on it and that will bring you to Java EE 1.4 - but you still won't get the needed JSF 1.2 support.&lt;br /&gt;&lt;br /&gt;On top of it the ADF 11g libraries were compiled with JDK 1.6 - OAS 10.1.2 uses JDK 1.4 (or maybe even older version).&lt;/blockquote&gt;Let us assume that ADF Rich Faces components uses new features of JDK 1.5 at least, even though it is compiled with JDK 1.6 (this may not be a valid assumption...if they use features that are only in 1.6...which is possible I guess). Is JSF 1.2 certified with J2EE 4 or 3? Let's assume not. So we would either have to find some weird JSF implementation that tries to implement JSF 1.2 features, while being compatible with JDK 1.4. That might be possible, but would it be profitable or interesting for anybody to do such a thing? I do not know.&lt;br /&gt;&lt;br /&gt;What about somehow installing what is necessary into a J2EE 1.3 server to be able to process Java EE 5.0 stuff? I think it would be easier to simply use a different container...&lt;br /&gt;&lt;br /&gt;But what if it is not. Would it be less work to extend a web server so that its core includes multiple j2ee version capabilities...than it would be to simply install a new webserver and reference that? What about manhour costs?&lt;br /&gt;&lt;br /&gt;But what if I developed my own brand of rich faces that looked and smelled pretty much like Oracle ADF Rich Faces, but worked with OAS 10.1.2, or 10. 1.3? The end users would not have to break down and pay for licensing from Oracle (which, by the way, may be covered under their license anyway since there is some transferrance of licensing from OAS 10g to Oracle Fusion Middleware 11g...but they have not got around to checking yet...)&lt;br /&gt;&lt;br /&gt;Given what I know this last option seems the best. Even though it would take eons for me, alone, to get the full suite of Oracle Rich Faces look-alike components implemented and debugged. But it would be fun to try...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2976911585601887615?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2976911585601887615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2976911585601887615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2976911585601887615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2976911585601887615'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/you-want-what.html' title='Deploy ADF Rich Faces Client app to OAS 10.1.2'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8685892322194388562</id><published>2009-02-17T16:29:00.000-05:00</published><updated>2009-02-17T17:31:52.860-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='migration ADF from 10 to 11'/><title type='text'>Migrating ADF app from JDev 10.1.3.x to JDev 11g</title><content type='html'>I guess I had not thought this all the way through before. Now that I have, perhaps others can benefit.&lt;br /&gt;&lt;br /&gt;Let's say you have an ADF application and you want to migrate the application to JDeveloper 11g.&lt;br /&gt;&lt;br /&gt;From reading the forum I gather it matters (perhaps it does not any more...it mattered in October 2008)&lt;br /&gt;&lt;br /&gt;First, know that today I created an application in ADF in 10.1.3.3.0 using ADF/BC and JSF. I used order and order_items tables to create the simplest possible default, read-only drag and drop page. Then I copied that Application folder over the analogous mywork folder on the JDev 11g side, pasted it in, and opened it in JDev 11.1.1.0.1. A migration wizard opens up and tells me that not only is it converting my J2EE technologies to Java EE 5.0 (i.e., JSTL 1.0/1.1 to 1.2, and JSF 1.1 to 1.2), but also is migrating me to the Apache Trinidad JSF libraries automatically. (Also the migration wizard told me it is migrating me to Webapp 2.5...not sure what that entails...I thought it was the same as going from J2EE to Java EE 5.0...but maybe not). So when I click Finish, the migration successfully migrated this simple app. I then ran my one view/screen in this app.&lt;br /&gt;&lt;br /&gt;Failure. Damn...but the failure exception trace showed a problem finding the class UIXPanelTag. So I searched for UIXPanel in all the files in my converted Application using the Search Files menu command. The only references it found were in a jar file located in WEB-INF/lib. So I looked in my project properties... Basically I had gotten accustomed to including ADF Libraries, ADF Portlet library, and Custom Components library in my JDev 10.1.3.3.0 instance. So when I created this quick little ADF app, those files got included as well...which makes sense for the ADF libraries, but the wizard did not know what to do with the portlet or the custom component libraries, so it just made like they existed...unfortunately...apparently they do not...at least not by the same name... So a compile error happened when I tried to build/run the application.&lt;br /&gt;&lt;br /&gt;So my solution was to open the view project properties, remove the portlet and cust comp tag libraries, then also removed the place holder entries for all the libraries JDev 11 could not find, but were referenced since this was a converted app.&lt;br /&gt;&lt;br /&gt;Then the app ran fine!!! Whee!&lt;br /&gt;&lt;br /&gt;Also (for more complex projects...like good ol' SRDemo application) basic migration process is explained here (thanks again to Shay Shmeltzer for calling to Steve Muench article!!!!!): &lt;a class="jive-link-external" href="http://www.oracle.com/technology/products/jdev/collateral/migration.html"&gt;http://www.oracle.com/technology/products/jdev/collateral/migration.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks also to Shay for also noting that, "if your migration process get stuck - try invoking JDeveloper using the jdev.exe and look for any specific exception in the console window."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8685892322194388562?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8685892322194388562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8685892322194388562' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8685892322194388562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8685892322194388562'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/migrating-adf-app-from-jdev-1013x-to.html' title='Migrating ADF app from JDev 10.1.3.x to JDev 11g'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3571106249738291894</id><published>2009-02-17T14:36:00.000-05:00</published><updated>2009-02-17T14:40:05.153-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle WebLogic Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle WebCenter'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Portal'/><title type='text'>Oracle Portal?  Oracle WebCenter? Oracle WebLogic Portal?  huh?</title><content type='html'>I have reviewed these documents.  I have some thoughts about them...&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/weblogic/portal/files/wlp_10gr3_sod.pdf"&gt;http://www.oracle.com/technology/products/weblogic/portal/files/wlp_10gr3_sod.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/ias/portal/pdf/oracle_portal_sod_r11.pdf"&gt;http://www.oracle.com/technology/products/ias/portal/pdf/oracle_portal_sod_r11.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Oracle Portal, Oracle WebLogic Portal, and Oracle WebCenter Suite are all sepparate offerings/product suites.  Portal products are extensions of their respective app servers (OAS, and Oracle WebLogic), which are geared toward developing portals -- sites and pages which display and allow interaction with other sites and pages -- portlets.&lt;br /&gt;&lt;br /&gt;WebCenter Suite includes the following items:&lt;br /&gt;WebCenter Framework -- a JDev extension to help you do more Web 2.0, BI, and SOA stuff.&lt;br /&gt;WebCenter Services -- I am guessing these are either the enabling libraries the the above JDev extension, or maybe they are sepparate program, or perhaps even web services.&lt;br /&gt;WebCenter Interaction -- a development team collaboration suite (formerly BEA Aqualogic User Interaction)&lt;br /&gt;WebCenter Anywhere -- wireless services (hardware? local or remote/hosted?) that let you get alerted to events generated by your webcenter apps, or interact with them, using various portable devices (blackberries, etc.)&lt;br /&gt;&lt;br /&gt;I am also reading another document to round out my understanding of web center:  &lt;a href="http://www.oracle.com/technology/products/webcenter/pdf/owcs_10132_standards.pdf"&gt;http://www.oracle.com/technology/products/webcenter/pdf/owcs_10132_standards.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So we ask the questions:  What about all of our Portal work?  Is it integratable?  Are they planning on merging/phasing out/replacing Portal?&lt;br /&gt;&lt;br /&gt;After reading the WebLogic Portal and Oracle Portal statements of direction above, I am under the impression that Oracle is doing what Oracle does best:  obtaining/promoting competing products, and letting them fight to the death.  It looks to me that the Oracle Portal longevity is being promoted a bit more than the Oracle WebLogic Portal product (suite)...but the documents seem to like both products and highlight aspects of both that are being highly praised and integrated, and also other parts that are being sifted out.  I think both documents point to a future time when the portal products will be part of a larger product suite...perhaps WebCenter.&lt;br /&gt;&lt;br /&gt;After reading these, I come away feeling assured that there is probably going to be continuing support for these products, and that any integration or communication between the portal world and the WebCenter/ADF/application world is going to be supported -- we will probably have to end up choosing which integration method makes the most sense.&lt;br /&gt;&lt;br /&gt;Also I feel that Oracle sees Web 2.0 as an evolution of Portal-type thinking.  Vedy interestink...hmmmm....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3571106249738291894?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3571106249738291894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3571106249738291894' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3571106249738291894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3571106249738291894'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/oracle-portal-oracle-webcenter-oracle.html' title='Oracle Portal?  Oracle WebCenter? Oracle WebLogic Portal?  huh?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2912244463092682136</id><published>2009-02-16T13:14:00.000-05:00</published><updated>2009-02-16T13:20:18.721-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF 1.2'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><category scheme='http://www.blogger.com/atom/ns#' term='OAS 10.1.2'/><title type='text'>put 11g ADF app on 10.1.2?</title><content type='html'>I was asked if we could possibly put an 11g ADF app (rich faces) on an AS 10.1.2 server instance. My instant response was, no...but I needed well defined reasons and my knowledge was failing me. So after a question to Technet here is what Shay Shmeltzer said to me on this subject:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here is the thread: &lt;a title="blocked::http://forums.oracle.com/forums/message.jspa?messageID=" href="http://forums.oracle.com/forums/message.jspa?messageID=3275506"&gt;http://forums.oracle.com/forums/message.jspa?messageID=3275506&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here was his answer in the thread above: &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;It's very simple:  ADF Faces Rich Client require JSF 1.2 (part of Java EE 5).OAS 10.1.2 came with a Java EE 1.3 server - you can install an OC4J 10.1.3 on it and that will bring you to Java EE 1.4 - but you still won't get the needed JSF 1.2 support.On top of it the ADF 11g libraries were compiled with JDK 1.6 - OAS 10.1.2 uses JDK 1.4 (or maybe even older version).&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;So: here is my take what he said was this: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;I have studied the differences between JSF 1.1 and JSF 1.2. These two technologies are implemented by different “implementations” or different sets of Java Libraries. I believe the new libraries are compiled with JDK 1.5 or 1.6. Whereas 1.1 is compile with pre-1.5 JDK versions. &lt;/li&gt;&lt;li&gt;JSF 1.2 components use some Java EE XML formats for the implementations of their components/tags. &lt;/li&gt;&lt;li&gt;The JSF Java libraries main differences are the substitution of “expressions” for “binding” which simplifies and clarifies the purpose of the use of these items in many ways, especially when building custom components. For example a property which is designated as being able to accept a method expression can also take a literal as well as an EL method designation, just by virtue of being an expression. The older method binding would require additional work to deal with a property being able to take a literal or an EL expression. (Please, note that not only are there other differences between 1.2 and 1.1 that I do not yet know about because I am still learning things about JSF 1.2.) &lt;/li&gt;&lt;li&gt;JSF 1.2 is expected to be used with JSP 2.1, JSTL 1.2 and Java EE 5.0, which are usually a factor of which app server/servlet container you are using (i.e., OC4J version, or whatever servlet container you are wanting to use). Whereas JSF 1.1 is designed to use JSP 2.0, JSTL 1.1 and J2EE 1.4. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;Note: there are new features in JSF 1.2 that did not exist in 1.1. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2912244463092682136?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2912244463092682136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2912244463092682136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2912244463092682136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2912244463092682136'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/put-11g-adf-app-on-1012.html' title='put 11g ADF app on 10.1.2?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5617981798929387802</id><published>2009-02-12T13:19:00.000-05:00</published><updated>2009-02-12T13:40:08.789-05:00</updated><title type='text'>11g rich table</title><content type='html'>More thoughts about JDev 11g rich table. It is very important if you are having trouble controlling the width of the table that you check the width property. The wysiwyg editor for Jdeveloper for this component will allow resizing on the screen by clicking and dragging. But once you do, it codes a width in there which disables default sizing behavior, and was causing me some major head-scratching.&lt;br /&gt;&lt;br /&gt;Also, it does not appear that you can turn off the table component's outline. We shall see.&lt;br /&gt;&lt;br /&gt;Also, it appears when adjusting column widths in such a table, that it is best to stay away from using the wysiwyg editor to drag things around. It seems the result of resizing columns is unpreditable to me at this point in my learning; what I mean is this: I tried to resize one column and all columns resize. I can kind of control column resizing, however, by manually changing the columns' width property...because those I can multi-select and change all their properties at once to something smaller (or larger).&lt;br /&gt;&lt;br /&gt;Also (a lot of also's) I wanted to avoid the horizontal scrollbar for the table component. But if you use any of the column stretching capabilities it seems to enact the horizontal scrollbar, even the size of the inner content only exceeds the width of the div by a few pixels. I think I could control this if I used some javascript to somehow identify this div's id, the used overflow-x css command somehow. But I cannot control this on the skin level.&lt;br /&gt;&lt;br /&gt;In many cases, of course, things render much better in these regards in firefox than in IE...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5617981798929387802?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5617981798929387802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5617981798929387802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5617981798929387802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5617981798929387802'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/11g-rich-table.html' title='11g rich table'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1984761175569521219</id><published>2009-02-11T00:05:00.000-05:00</published><updated>2009-02-11T00:19:31.433-05:00</updated><title type='text'>JDev 11g Rich Components</title><content type='html'>My favorite rich component is the RichMenuBar component because it sounds like you could EAT IT!!  :-)&lt;br /&gt;&lt;br /&gt;Nevertheless, I am having fun exploring all the new and interesting developments in JDev 11g ADF Faces...the rich sequel.  Here are some things I have noticed:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;af:tables might handle paging through records differently...is it a scroll now???  I do not readily see an option to designate how many rows go on a page...of course maybe that was never an option.&lt;/li&gt;&lt;li&gt;Adjusting af:table columns in the ide is possible but tricky.  But you can tell it to create a blank column at the end to take up any remaining white space.&lt;/li&gt;&lt;li&gt;af:breadCrumbs are new.  Very nice.&lt;/li&gt;&lt;li&gt;If you do custom skinning you will be delighted to know that you can now EXTEND blaf or any other skin family!!  No longer do you have to invent your own.  This is really great!!&lt;/li&gt;&lt;li&gt;af:menuBar can contain af:menu or a command item.  And menus can contain menus or command items....that means you can now do real menus...that look really, um, menu-like!! yay!  out of the stone age and into the light...&lt;/li&gt;&lt;li&gt;one of my favorite things here is their tool which is an application which allows demoing of each component with respect to functionality, usage and skinning experimentation.  I mentioned this a subject or two ago.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are other things, but it is getting late and I am tired.  I will try to elaborate more tomorrow.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1984761175569521219?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1984761175569521219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1984761175569521219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1984761175569521219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1984761175569521219'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/jdev-11g-rich-components.html' title='JDev 11g Rich Components'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-7538920728323061382</id><published>2009-02-06T09:18:00.000-05:00</published><updated>2009-02-06T10:03:44.424-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cue cards'/><category scheme='http://www.blogger.com/atom/ns#' term='JDev 11g'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title type='text'>JDev 11g Cue Card impressions</title><content type='html'>To begin to get a feel for how things have changed between JDev 10g and 11g, I decided to follow the cue cards to create a new Fusion Application and also the cue cards for the ADF Faces features.&lt;br /&gt;&lt;br /&gt;For the Fusion App here are my impressions:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The same basic features are still there, only with a new look and feel. &lt;/li&gt;&lt;li&gt;I think there were only a couple of mis-matches between what I experienced and what was expected by the cue-cards.  They were that in one case an OrderId1 field on the editOrder screen needed a numeric converter added, and in another case there was a default value that needed to be added (0) for a field/column in the orders entity (order version id or something like that).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The page flow diagram has been enhanced.  Running an app now needs to be done with respect to this page flow diagram.&lt;/li&gt;&lt;li&gt;There are several more WEB-INF xml files that are created as part of the development process.&lt;/li&gt;&lt;li&gt;View Accessors are used a lot to do LOV/Menu/Drop-down list functionality.  These are connected at the entity level also.  I am pretty sure such work would have had to have been done programmatically if at all in JDev 10g ADF.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;View Criteria functionality also would have been done programmatically in 10g; now much is declarative...i.e., done through wizards and dialogs.  View Criteria seem to be intimately connected to Search sections of a form.  In 10g there were several ways to make these search forms happen.  With the help of the ADF Developer Guide these different methods were not so bad, but there with View Criteria, now you can drag and drop such a Search Form region onto your page.  Also you apparently do not have to redefine a new query for each search form you want to create...just a new search criteria.  Also I notice there is a new ADF Faces component called af:query.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I will post some more thoughts as I finish up these cue cards.  I think these will be a great warm up to actually working with 11g on a daily basis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-7538920728323061382?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/7538920728323061382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=7538920728323061382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7538920728323061382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/7538920728323061382'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/jdev-11g-cue-card-impressions.html' title='JDev 11g Cue Card impressions'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5195662086571660434</id><published>2009-02-04T13:03:00.000-05:00</published><updated>2009-03-03T09:54:05.549-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='demo app'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Faces Rich Client'/><title type='text'>Very cool demo app!</title><content type='html'>News flash:  there is a really cool app that Oracle put out to showcase their new components and features and skins with ADF Faces Rich Client suite.  I thought you had to install it to look at it.  But Moskovits's blog says it's online also at the following link!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevadf.oracle.com/adf-richclient-demo/faces/components/index.jspx"&gt;http://jdevadf.oracle.com/adf-richclient-demo/faces/components/index.jspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My goodness:  if you don't study this site you are really missing out.  What a lot of work those Oracle guys and gals have done!!!!!&lt;br /&gt;&lt;br /&gt;This demo app shows all the rich client components and what they do.  You can also view the usage of each of them.  Incredible.&lt;br /&gt;&lt;br /&gt;Also if you want to download this app to study it you can do that as well...&lt;br /&gt;Just click on &lt;a href="http://www.oracle.com/technology/products/adf/adffaces/11/doc/demo/adf_faces_rc_demo.html"&gt;http://www.oracle.com/technology/products/adf/adffaces/11/doc/demo/adf_faces_rc_demo.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In there is a war file you can download.  Take that war file and import it into a Generic application as a project.  In the new project dialog there is an option to create a new project from a war file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5195662086571660434?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5195662086571660434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5195662086571660434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5195662086571660434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5195662086571660434'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/02/very-cool-demo-app.html' title='Very cool demo app!'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3041102479055268658</id><published>2009-01-29T21:28:00.000-05:00</published><updated>2009-01-29T21:33:04.486-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='h:inputTextarea'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF 1.2'/><category scheme='http://www.blogger.com/atom/ns#' term='rows property'/><category scheme='http://www.blogger.com/atom/ns#' term='rows attribute'/><title type='text'>h:inputTextarea rows attribute does not work?</title><content type='html'>For the sun JSF 1.2 Sun implementation, has anybody noticed before that h:inputTextarea's rows attribute has no affect on the height of the textarea? &lt;br /&gt;&lt;br /&gt;JSF 1.2 MyFaces implementation does fine though...  very odd.  I tried googling this issue and did not find it readily advertised.  Maybe now it will be because of this blog entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3041102479055268658?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3041102479055268658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3041102479055268658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3041102479055268658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3041102479055268658'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/hinputtextarea-rows-attribute-does-not.html' title='h:inputTextarea rows attribute does not work?'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1913958831770234038</id><published>2009-01-17T10:36:00.000-05:00</published><updated>2009-01-20T21:36:18.201-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='custom component'/><title type='text'>extra field!!!</title><content type='html'>I was doing a custom component in JSF, and I kept getting an extra input field with the clientId as the id attribute, and I did not know why.  I searched the web and did not find anybody who had ever encountered this.  Since it always came last in the component I could not even figure out a way to hide the thing because any JavaScript I put in the component came prior to the existance of the field.  I do not do anything in my encodeBegin() that asks for this.&lt;br /&gt;&lt;br /&gt;Then I started wondering if extending the UIInput component required something that I was not doing; either that I figured or it was putting this darn extra field.&lt;br /&gt;&lt;br /&gt;After studying other custom components' code, it finally occurred to me that if you extend a custom component (like UIInput) you have to be mindful of what methods that component implements, and what it does in those implemented methods.  Then you have to decide if you still want that particular part of the component you are extending.&lt;br /&gt;&lt;br /&gt;In my case, UIInput used encodeEnd() method to actually produce its field, so I just overrode encodeEnd() and made it do nothing.  Then I started to wonder why I even was extending UIInput instead of UIComponent or something... &lt;br /&gt;&lt;br /&gt;I guess that is another lesson...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1913958831770234038?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1913958831770234038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1913958831770234038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1913958831770234038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1913958831770234038'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/extra-field.html' title='extra field!!!'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-694673027797490349</id><published>2009-01-17T10:11:00.000-05:00</published><updated>2009-01-17T10:20:28.389-05:00</updated><title type='text'>postback</title><content type='html'>I was doing some research on JSF custom components.  I saw that one way to do AJAX in your custom components is to program the code needed to get your data right in your decode() in your component or in your renderer. &lt;br /&gt;&lt;br /&gt;The problem I was having was that when I told the AJAX code to do the POST it was not acting in JSF request lifecycle like a postback had occurred.  It was only running the first and last phases of this lifecycle...like it does when you first visit a page.&lt;br /&gt;&lt;br /&gt;The solution?  Apparently JSF determines if this page was a postback by looking at all the input fields (or textarea, etc), and seeing if they have a name attribute.  If they do then they need to have an entry in the post "search area" that you send as a string to the AJAX "send" command.  So that includes state saving field, and any other fields that are displayed or hidden that have a name...I think.&lt;br /&gt;&lt;br /&gt;Anyway doing this got my decode() method to be called, and the JSF lifecycle to call all the phases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-694673027797490349?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/694673027797490349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=694673027797490349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/694673027797490349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/694673027797490349'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/postback.html' title='postback'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4212382740240107293</id><published>2009-01-08T22:06:00.000-05:00</published><updated>2009-01-08T22:12:03.148-05:00</updated><title type='text'>Making Eclipse (Ganymede) Create Your Custom JSF jar file</title><content type='html'>Apparently I am an IDE man.  I know it is possible to remember the flags to run the jar command so that you can package up a set of directories, but I would rather let the IDE do the work.&lt;br /&gt;&lt;br /&gt;But I am having a bit of difficulty making Eclipse do what I want.&lt;br /&gt;I decided to package up one of my custom components into a jar file, so that someone (like me) could use the component by dropping the jar into their application’s WEB-INF/lib directory.&lt;br /&gt;&lt;br /&gt;So I moved everything my components needed to a different project, and made the project path have every library it needed to build the java files.  This worked fine.&lt;br /&gt;&lt;br /&gt;When you want to create a jar file for your custom JSF component, your jar is pretty simple.  The root directory of the jar contains package trees with class files on the leaves of these trees, and resource files like message bundles or  anything else you would put in the src directory to have it on the class path.&lt;br /&gt;&lt;br /&gt;In Eclipse-ese, creating a Jar is called “export…”  So if you export to a Jar by right-clicking your project, selecting Export… from the context menu, and following the instruction in the Jar export wizard when all is said and done your classes will be in the right place if you select the src directory and the build directory that eclipse manages for you.  But the META-INF directory that eclipse builds for you as a sibling to the WEB-INF file cannot stay where it is if your Jar is going to have the META-INF file in the right place.  The right place for the META-INF file in your jar is in the root directory of the Jar.  In the jar should be your faces-config.xml and your whatever.tld file where you describe your tags.&lt;br /&gt;&lt;br /&gt;So my solution (which worked) was to move the META-INF from being a child of the Web Content directory, to being a sibling of the Web Content directory.  Then you can simply check the box next to the META-INF directory, and it is moved to the right place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4212382740240107293?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4212382740240107293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4212382740240107293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4212382740240107293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4212382740240107293'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/making-eclipse-ganymede-create-your.html' title='Making Eclipse (Ganymede) Create Your Custom JSF jar file'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5016509942668253192</id><published>2009-01-04T16:57:00.000-05:00</published><updated>2009-01-04T16:59:56.004-05:00</updated><title type='text'>Thoughts on JSF 1.2</title><content type='html'>Here are some miscellaneous thoughts on JSF 1.2. &lt;br /&gt;&lt;br /&gt;The differences between JSF 1.2 and JSF 1.1 are not huge.  Essentially the main differences are that you need to use objects called ValueExpressions instead of ValueBindings.  Similarly you need to use MethodExpressions instead of MethodBindings.  Also you will be using JSP 2.1 instead of 2.0.  Also you need to use W3C XML Schema designations for your config files instead of DTD’s.  Also I think you need to use a container that can handle Java EE stuff instead of J2EE stuff…but I am not sure about that.   Also some classes have been deprecated in 1.2 that were in use in 1.1; for example, in the Tag Handler classes you would define for a custom component, you will not be inheriting from the UIComponentELTag instead of UIComponentTag.&lt;br /&gt;&lt;br /&gt;You might take a look at (Vogel, L. (n.d.). JavaServer Faces 1.2 development with Eclipse WTP JSF Tooling - Tutorial. Retrieved from http://www.vogella.de/articles/JavaServerFaces/article.html) which shows how to get a project off the ground using JSF 1.2.  I used Tomcat for my experiments.  I would have liked to have also gotten it working with JDeveloper 11g since it uses a Java EE container.  However I could not see an Enterprise Manager for the standalone 11g OC4J, and I did not want to learn how to use admin.jar, since that is how I supposed I would have to deploy to OC4J without EM working.  Maybe now that 11g OC4J has gone into production now (I was still using a technical preview install) the EM will be in place…or maybe they are calling EM something else now…&lt;br /&gt;Also Eclipse does not know how to talk to OC4J 11g yet.  However it does know how to talk to Tomcat 6.0, which is compliant with JSF 1.2 and JSP 2.1 and Java EE and all that stuff.  So I finally got Eclipse talking to Tomcat with all the right libraries.  I put all the libraries needed in the build path and in the WEB-INF\lib path as well.&lt;br /&gt;&lt;br /&gt;I also used Apache MyFaces JSF implementation.  I think Apache Mojarra would have worked just as well, but again Eclipse may not know how to talk to GlassFish.  I do not think it does.  However if you want to use Apache Mojarra against other Java EE containers you are supposed to be able to do that.  However, it appears to me that in order to actually deploy to any web server there is always a set  libraries you need to include in order to be able to do this.  It is not clear to me quite yet how to lay my hands always on this set of libraries, although I am thinking:  probably the website of the app server in question…in the chapter on JSF perhaps??  Eclipse, if it knows how to deal with a server or a version of that server, will line up these magical libraries for the server if you specify what server you are using for a particular project.  So if you are creating a new “Dynamic Web Project” of the JSF type, you can specify what server you want to deploy to (assuming you have set up Eclipse’s connection to your installation of whatever server you want to deploy to), and then those server-specific libraries will be lined up for you.&lt;br /&gt;&lt;br /&gt;It looks like JSF 2.0 is in the works (ai yi yi!), so y’all better get it (and keep it) in gear!!  J&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5016509942668253192?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5016509942668253192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5016509942668253192' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5016509942668253192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5016509942668253192'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/thoughts-on-jsf-12.html' title='Thoughts on JSF 1.2'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-3804126639790384859</id><published>2009-01-01T22:45:00.000-05:00</published><updated>2009-01-01T22:47:23.122-05:00</updated><title type='text'>Good site</title><content type='html'>Got questions about JSF or JSP or how they fit together? &lt;br /&gt;&lt;br /&gt;The following tutorial may just answer some questions for you!&lt;br /&gt;&lt;a href="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html"&gt;&lt;br /&gt;http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-3804126639790384859?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/3804126639790384859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=3804126639790384859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3804126639790384859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/3804126639790384859'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/good-site.html' title='Good site'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-1208424624130390021</id><published>2009-01-01T22:22:00.000-05:00</published><updated>2009-01-01T22:42:28.117-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='saveState'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='custom component'/><category scheme='http://www.blogger.com/atom/ns#' term='restoreState'/><title type='text'>Hah!  I found it.</title><content type='html'>I am working my way through Schalk and Burns's &lt;span style="font-style: italic;"&gt;JSF:  The Complete Reference&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I skipped ahead to Chapter 10 because I promised my groupies (hah!) that I would put some juicy nuggets about custom JSF component definition in my paper for RMOUG (Rocky Mountain Oracle Users Group) in a month and a half.&lt;br /&gt;&lt;br /&gt;So I had to study more about custom component definition.&lt;br /&gt;&lt;br /&gt;As I worked through the chapters on that subject in this book, I got to one of the examples, and it just did not work.  As I debugged the code, I saw that the component's property called listener (a MethodBinding) was being set in the component's Tag Handler class, in its setProperties() method.&lt;br /&gt;&lt;br /&gt;Then, the component (on a different request) tried to do something with this listener value that was set...but lo!  The value of this property was null.&lt;br /&gt;&lt;br /&gt;That let me to ask a question that I have asked before, but had grown fuzzy on the answer.  The question was...what scope are components at?  Request?  Session?  Does scope even apply to this, since they are not managed beans?&lt;br /&gt;&lt;br /&gt;The partial answer is that components by default span requests.  But if you start adding extra properties to the component then you had better override a couple of properties, if your component or one of its ancestors implemented the StateHolder interface at some point.  If you are extending UIInput for example, this already has implemented this.&lt;br /&gt;&lt;br /&gt;So what are these properties you need to override?  saveState() and restoreState().  In the following example, the "extra" property we are adding is called listener and is a MethodBinding object:&lt;br /&gt;    @Override&lt;br /&gt;    public void restoreState(FacesContext context, Object state) {&lt;br /&gt;          Object values[] = (Object[]) state;&lt;br /&gt;          super.restoreState(context, values[0]);&lt;br /&gt;          listener = (MethodBinding) values[1];&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Object saveState(FacesContext context) {&lt;br /&gt;          Object values[] = new Object[2];&lt;br /&gt;          values[0] =  super.saveState(context);&lt;br /&gt;          values[1] = listener;&lt;br /&gt;          return (values);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;After adding these methods, the books example worked fine. &lt;br /&gt;&lt;br /&gt;The name of the example component was HtmlHelloInputMB if anybody else is working through that same book.&lt;br /&gt;&lt;br /&gt;I have informed the primary author through the email given on the books website, which has all the sample code for the book by the way:   http://www.jsfcompref.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-1208424624130390021?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/1208424624130390021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=1208424624130390021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1208424624130390021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/1208424624130390021'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2009/01/hah-i-found-it.html' title='Hah!  I found it.'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5038762965431928434</id><published>2008-11-22T01:35:00.000-05:00</published><updated>2008-11-22T01:39:04.829-05:00</updated><title type='text'>iReport logging</title><content type='html'>I have been using the iReport IDE for Jasper Reports template creation.  One strange thing about this report of iReport:  I do not see a way to see a compilation or a runtime error/message log.  If an error occurs, by default the report simply does not run.&lt;br /&gt;&lt;br /&gt;A friend of mine finally figured out a way to get some messaging out by using log4j:  here was the note he sent to me:&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;I found  a way to get iReport to log.  If you start iReport from the .bat file  supplied in the bin directory, you can add log4j configuration to JVM command;  i.e., in the bin/startup.bat file, add the following to the java command:   -Dlog4j.configuration=file:C:\bea\domains\oppenDomain\config-oppen\log4j.xml&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;(make  sure you’re pointing to a valid xml file!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;Thanks,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;Ayman&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;p.s.  the full command should look something like:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt;"&gt;java -cp "%IREPORT_CLASSPATH%"  -Dlog4j.configuration=file:C:\bea\domains\oppenDomain\config-oppen\log4j.xml  -Direport.home="%IREPORT_HOME%"  -Djava.security.policy="%IREPORT_HOME%/policy.all" -Xms128m -Xmx512m  it.businesslogic.ireport.gui.MainFrame  %*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5038762965431928434?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5038762965431928434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5038762965431928434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5038762965431928434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5038762965431928434'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/11/ireport-logging.html' title='iReport logging'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2646517842254035911</id><published>2008-11-05T22:58:00.000-05:00</published><updated>2008-11-18T11:43:15.286-05:00</updated><title type='text'>Polymorphism work</title><content type='html'>I have recently started to study polymorphism more.  My goal is to continue to improve my ability to think in Java.  For example, with polymorphism if you have a cascading series of if statements which is meant to branch out like a case/switch statement and call the different methods that basically do the same type of things, you probably should refactor it to take advantage of polymorphism.  I read the following article and it helped me create a solution to such a refactoring problem which was fresh and useful:  &lt;a href="http://www.javaworld.com/javaworld/javatips/jw-javatip30.html"&gt;http://www.javaworld.com/javaworld/javatips/jw-javatip30.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope you find this example useful also.  The syntax of this person's examples is not perfect, but the concepts are there, and there are enough parts of the example to put together some refactoring of your own as I described above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2646517842254035911?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2646517842254035911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2646517842254035911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2646517842254035911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2646517842254035911'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/11/not-quite-nick-of-time-but-better-late.html' title='Polymorphism work'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6686407966783253547</id><published>2008-11-01T19:28:00.000-04:00</published><updated>2008-11-01T19:34:04.834-04:00</updated><title type='text'>iBATIS</title><content type='html'>I mostly wanted to check in because I am job hunting now and I want to keep things flowing. &lt;br /&gt;&lt;br /&gt;I have been starting to work on the RMOUG site redeaux ;-) (with members-only site). &lt;br /&gt;&lt;br /&gt;As I am looking for jobs I keep getting hit with jobs which want JSON, DWR, Prototype, and Dojo.  I better get on the ball with these great tools.&lt;br /&gt;&lt;br /&gt;At any rate, I worked with iBATIS caching.  It is working very well.  iBATIS seems so stable...I am sure there are bad things about it, but I cannot think of too many.  :-)&lt;br /&gt;&lt;br /&gt;Have a great one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6686407966783253547?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6686407966783253547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6686407966783253547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6686407966783253547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6686407966783253547'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/11/ibatis.html' title='iBATIS'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-4427465932767294129</id><published>2008-10-12T00:53:00.001-04:00</published><updated>2008-10-12T01:06:38.097-04:00</updated><title type='text'>component trees (views)</title><content type='html'>I was reading about the differences between binding a UI JSP component to a UIComponent property in your backing bean using the binding property on the JSP component, and value-binding your JSP component to a model-level bean property in some class somewhere.&lt;br /&gt;&lt;br /&gt;Well I figured out a couple of things: &lt;br /&gt;1.  One difference:  if you believe in MVC you should keep your view-level stuff sepparate from your model level stuff.  So using binding is better than value binding if you have the option.&lt;br /&gt;2.  The binding connection gets the values into the backing bean properties in phase two of the JSF lifecycle, where as it is the model update phase (phase 4 or 5) before you get it updated if you have a value binding connection.  At least I think so...&lt;br /&gt;3.  From what I read it sounds like if the JSF container is in the process of rendering a UIComponent, that is no guarentee that any other UIComponent in that page's view has been put in the view (component tree) or rendered!  This is for JSF 1.1.  In JSF 1.2 it sounds like they have made it so that if rendering is occurring you can guarentee that all the view has been built already!  I wonder if in JSF 1.1 a render of a particular UIComponent alway implies that the component has been inserted into the tree.  It seems as if you would have to construct a tree in a way that would allow later traversal.  And not just random nodes...although I do remember algorithms for BTree insertion that allowed you to insert random nodes and have them end up in a reasonable order...so who knows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-4427465932767294129?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/4427465932767294129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=4427465932767294129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4427465932767294129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/4427465932767294129'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/10/component-trees-views.html' title='component trees (views)'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-5055635583033028092</id><published>2008-09-25T22:36:00.000-04:00</published><updated>2008-10-05T18:30:12.210-04:00</updated><title type='text'>BigDecimal converters</title><content type='html'>After today it looks as if choosing to use BigDecimal (for whatever reason) may have a challenge with regard to having both automated conversion and using a pattern to format your numbers.&lt;br /&gt;&lt;br /&gt;So it sounds like it is time create a custom converter which extends the BigDecimal converter from JSF, and putting numeric patterns on top of it.&lt;br /&gt;&lt;br /&gt;I will let you know how it goes...&lt;br /&gt;&lt;br /&gt;...OK:  it went well:  I discovered that the creators of the application I am working on had already created such a converter.  So I just use f:converter component, and reference the id of this component that was created; since the custom converters must be registered in faces-config.xml, you can just get the id from there if you are utilizing a pre-existing custom converter. &lt;br /&gt;&lt;br /&gt;It turns out this converter hard-coded the format string.  So I just loaded the resource bundle with the format string in it and use that instead.  That way there is only once source in the application for the desired format string.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-5055635583033028092?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/5055635583033028092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=5055635583033028092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5055635583033028092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/5055635583033028092'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/09/bigdecimal-converters.html' title='BigDecimal converters'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-6675389394507117480</id><published>2008-09-13T00:31:00.000-04:00</published><updated>2008-09-13T00:55:37.415-04:00</updated><title type='text'>Going Backwards/Forwards Simultaneously</title><content type='html'>Hi, y'all! &lt;br /&gt;&lt;br /&gt;I just started reading the JSF Complete Reference by Schalk and Burns.  I really did not want to do the examples using Tomcat since I am having a love affair with oc4j  ;-)  I also wanted to use JDeveloper.  Oddly enough the authors really did not give much of a clue as to how to do plain ol' JSF within JDeveloper.  The book seems to really want you to use the ADF stuff. &lt;br /&gt;&lt;br /&gt;That's fine, but I am trying to learn the JSF stuff now that I have grown up on ADF stuff.  I want to see what I missed.&lt;br /&gt;&lt;br /&gt;So I now know what jar's I really need to make OC4J run on JDev and to be able to do JSF: &lt;br /&gt;1.  The normal stuff:  commons-beanutils.jar, commons-digester.jar, commons-collections.jar, commons-logging.jar, commons-validator.jar, jsf-impl.jar, jsf-api.jar, jstl.jar, standard.jar,&lt;br /&gt;2.  The oc4j and servlet stuff:  The rest of what you need is wrapped in something called JSP Runtime.  This has the following jars:  ojsp.jar, ojsputil.jar, oc4j.jar, oc4j-internal.jar, servlet.jar, and ojc.jar.&lt;br /&gt;&lt;br /&gt;If you are working through this same book, the rest is in the book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-6675389394507117480?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/6675389394507117480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=6675389394507117480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6675389394507117480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/6675389394507117480'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/09/going-backwardsforwards-simultaneously.html' title='Going Backwards/Forwards Simultaneously'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-8383966023399633730</id><published>2008-08-23T10:02:00.000-04:00</published><updated>2008-11-15T08:56:06.149-05:00</updated><title type='text'>Skill expansion</title><content type='html'>The direction of this blog is expanding a bit, since what I am doing is changing a bit.  I am currently engaged in a JSF/iBatis/Spring project.  So my focus has expanded.  I am looking forward to learning new things; and to seeing more about what JSF is about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-8383966023399633730?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/8383966023399633730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=8383966023399633730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8383966023399633730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/8383966023399633730'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/08/turn-to-face-changes.html' title='Skill expansion'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-2497976521285619100</id><published>2008-08-13T13:31:00.000-04:00</published><updated>2008-08-13T13:34:18.623-04:00</updated><title type='text'>new stuff</title><content type='html'>Next week I will be starting development on some new tools:  iBATIS, Spring, Jasper Reports, and (of course) JSF.&lt;br /&gt;&lt;br /&gt;Should be a blast.  I am already trying to get a grip on all this stuff.  I think Spring may be my hardest challange; I am sure I will get a grip on it eventually. &lt;br /&gt;&lt;br /&gt;I am looking forward to this position so I can round out my ADF-centric existence.  ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-2497976521285619100?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/2497976521285619100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=2497976521285619100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2497976521285619100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/2497976521285619100'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/08/new-stuff.html' title='new stuff'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-575441557519353097</id><published>2008-08-08T13:49:00.000-04:00</published><updated>2008-08-08T13:57:04.315-04:00</updated><title type='text'>hotspot compiler error work-around addendum</title><content type='html'>There is a bug in running some ADF programs in OAS 10.1.3.1 in the default installation.  The fix involves giving the JVM a parameter of&lt;br /&gt;-XX:CompileCommand=exclude,oracle/sql/NUMBER,toBytes&lt;br /&gt;&lt;br /&gt;But when I tried this in the opmn.xml, the hotspot compiler did not seem to recognize this exclude command.  Very odd.  There are alternate fixes to this problem however...like upgrading your JDK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-575441557519353097?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/575441557519353097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=575441557519353097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/575441557519353097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/575441557519353097'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/08/hotspot-compiler-error-work-around.html' title='hotspot compiler error work-around addendum'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4939023579346660870.post-92550054869087609</id><published>2008-08-08T13:46:00.000-04:00</published><updated>2008-08-08T13:49:06.819-04:00</updated><title type='text'>log like in embedded oc4j for OAS</title><content type='html'>Did you know that if you want to see the log like you see for the embedded oc4j in JDeveloper 10g, only for the OAS 10g you can look in the opmn logs?&lt;br /&gt;&lt;br /&gt;In your OAS home look in the opmn\logs directory for a file having a name similar to the following:  default_group~home~default_group~1.log&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4939023579346660870-92550054869087609?l=mfonsadf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mfonsadf.blogspot.com/feeds/92550054869087609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4939023579346660870&amp;postID=92550054869087609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/92550054869087609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4939023579346660870/posts/default/92550054869087609'/><link rel='alternate' type='text/html' href='http://mfonsadf.blogspot.com/2008/08/log-like-in-embedded-oc4j-for-oas.html' title='log like in embedded oc4j for OAS'/><author><name>Michael A. Fons</name><uri>http://www.blogger.com/profile/01367312043515001609</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_zNUPYeAf3GA/S3rFRrCYIaI/AAAAAAAAALg/mxeUhzwK_aE/S220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
