<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://chrismuir.sys-con.com"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Latest News from Chris Muir</title>
 <link>http://chrismuir.sys-con.com/</link>
 <description>Latest News from Chris Muir</description>
 <language>en</language>
 <copyright>Copyright 2012 Ulitzer.com</copyright>
 <generator>Ulitzer.com</generator>
 <lastBuildDate>Wed, 16 May 2012 09:50:24 EDT</lastBuildDate>
 <docs>http://backend.userland.com/rss</docs>
 <ttl>360</ttl>
<item>
 <title>This blog has moved!</title>
 <link>http://chrismuir.sys-con.com/node/2175500</link>
 <description>No really, it has!  You can find my new Oracle blog &lt;a href=&quot;https://blogs.oracle.com/onesizedoesntfitall/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For the record this older blog will stay to allow readers to continue to benefit from the existing posts.&lt;br /&gt;&lt;br /&gt;I hope to see you on the new blog!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-1055067131989254667?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/RQcNeNGAndM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2175500&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 22 Feb 2012 20:48:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2175500</guid>
 <comments>http://chrismuir.sys-con.com/node/2175500#feedback</comments>
</item>
<item>
 <title>If you can&#039;t beat &#039;em join &#039;em</title>
 <link>http://chrismuir.sys-con.com/node/2113201</link>
 <description>A New Year has brought a desire for new challenges.  As a result early in the year I&#039;ll be taking on a new role as a product manager for ADF at Oracle Corporation.&lt;br /&gt;&lt;br /&gt;The decision to move was certainly a difficult one.  I&#039;ve had an excellent 10+ years at &lt;a href=&quot;http://www.sagecomputing.com.au&quot;&gt;SAGE Computing Services&lt;/a&gt; under the leadership of Oracle ACE Penny Cookson and the SAGE team, all who&#039;ve been inspiring to work with.  In turn I was fortunate enough to have two offers on my table which were both excellent, but both providing different outcomes.  Choices choices.&lt;br /&gt;&lt;br /&gt;The end decision has me moving to Oracle Corporation in early February, still based in Perth Australia for now.  &lt;br /&gt;&lt;br /&gt;One ramification of the move to Oracle is I give up my &lt;a href=&quot;http://www.oracle.com/technetwork/community/oracle-ace/index.html&quot;&gt;Oracle ACE Director&lt;/a&gt; status.  This is a sad moment in many ways because like SAGE I owe the ACE Director program a lot.  I feel that the program has allowed me to grow and extend my skills and experiences significantly.  The chance to mix with other ACEs and Oracle staff, living up to their experiences &amp; expectations, the chance to attend and present at conferences and share my enthusiasm with delegates has been incredibly rewarding.  As a result my thanks go out to both the OTN team for running the program and providing the opportunity, and also to all the ACE and ACE Directors, Oracle staff, user groups reps and Oracle enthusiasts out there I&#039;ve had pleasure of meeting and befriending over the last 5 years.  Seriously your friendships, advice and generosity has meant a lot to me.&lt;br /&gt;&lt;br /&gt;With that little bit of news out of the way I&#039;d like to wish everyone a happy New Year and I hope to see you at a conference somewhere soon.&lt;br /&gt;&lt;br /&gt;(Post edit: as some people have kindly taken the time to point out, yes it is in fact  true, the real reason for the move is I just couldn&#039;t bear to be apart from &lt;a href=&quot;http://richardfoote.wordpress.com/2011/11/30/back-at-oracle-corporation-the-return-of-the-thin-white-duke/&quot;&gt;Richard Foote&lt;/a&gt; ;-)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-1822147533481597222?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/gA8EhY-FlvU&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2113201&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sat, 31 Dec 2011 23:28:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2113201</guid>
 <comments>http://chrismuir.sys-con.com/node/2113201#feedback</comments>
</item>
<item>
 <title>An ADF Logic Bomb</title>
 <link>http://chrismuir.sys-con.com/node/2056373</link>
 <description>One of my talented colleagues discovered an interesting ADF logic bomb which I thought I&#039;d share here. The issue is with the instantiation order of ADF Faces scoped beans in JDev 11g when using Bounded Task Flows embedded as regions in another page.
Regular readers would be familiar that Oracle&#039;s ADF solution is built on top of JavaServer Faces (JSF). ADF supports bean scopes such as ViewScope, PageFlowScope and BackingBeanScope on top of the regular JSF ApplicationScope, SessionScope and RequestScope beans. Readers should also be familiar that the beans have a defined life (ie. scope) as detailed in the JDev Web Guide:&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2056373&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 19 Dec 2011 13:15:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2056373</guid>
 <comments>http://chrismuir.sys-con.com/node/2056373#feedback</comments>
</item>
<item>
 <title>Apache Ivy and JDeveloper Integration</title>
 <link>http://chrismuir.sys-con.com/node/2092814</link>
 <description>As software applications grow, a common technique to reduce the complexity is to break the overall solution into separately built and deployed modules. This allows each component to be worked on independently without being overwhelmed with detail, though the cost of reassembling and building the application is the trade off for the added flexibility. When modules become reusable across applications the reassembly and build problem is exasperated and it becomes essential to track which version of each module is required against each application. Such problems can be reduced by the introduction of dependency management tools.
In the Java world there are a few well-known tools for dependency management including Apache Ivy and Apache Maven. Strictly speaking Ivy is just a dependency management tool which integrates with Apache Ant, while Maven is a set of tools of where dependency management is but just one of its specialties.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2092814&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 08 Dec 2011 13:15:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2092814</guid>
 <comments>http://chrismuir.sys-con.com/node/2092814#feedback</comments>
</item>
<item>
 <title>An Obscure JDeveloper Bug</title>
 <link>http://chrismuir.sys-con.com/node/2074026</link>
 <description>There’s a rather obscure JDeveloper bug that only effects IE7, for af:columns in af:tables that show af:outputText fields based on dates that are null (phew, try and say that with a mouth full of wheaties). It occurs in 11.1.1.4.0 and 11.1.2.0.0 (and all versions in between it’s assumed).
In the previous picture from IE7 if you look closely, you’ll notice that the HireDate2 column has lost its border for the null entries. Note the other columns even when they are null, still have a border.
If we look under IE8 (or any other browser for that matter) we see the problem doesn’t occur at all:&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2074026&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 23 Nov 2011 05:00:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2074026</guid>
 <comments>http://chrismuir.sys-con.com/node/2074026#feedback</comments>
</item>
<item>
 <title>The Magic Sauce for Multi-Browser-Tab Support in JDeveloper ADF Apps</title>
 <link>http://chrismuir.sys-con.com/node/2018950</link>
 <description>Within JDev 11g+ experienced ADF programmers will be familiar with PageFlowScope beans used by tasks flows, in particular Bounded Task Flows (BTFs) where they provide the equivalent of session scope for variables for the life of the BTF for a specific user session. Indeed the Oracle documentation says the following about PageFlowScope beans:
Choose this scope if you want the managed bean to be accessible across the activities within a task flow. A managed bean that has a pageFlow scope shares state with pages from the task flow that access it. A managed bean that has a pageFlow scope exists for the life span of the task flow.

Given we know BTFs have a distinct beginning and end for each user session, a &quot;life span&quot; as such, and conversely Unbounded Task Flows (UTFs) live for the life of the application which is nearly forever, it would appear that PageFlowScope beans only apply to BTFs. However PageFlowScope beans provide some magic sauce with UTFs that shouldn&#039;t be ignored. Before we can have a look at this magic sauce we need to cover some background on modern browsers.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2018950&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 13 Oct 2011 12:00:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2018950</guid>
 <comments>http://chrismuir.sys-con.com/node/2018950#feedback</comments>
</item>
<item>
 <title>ADF Takeaways from Oracle Open World 2011</title>
 <link>http://chrismuir.sys-con.com/node/2014292</link>
 <description>With the huge amount of sessions at Oracle Open World, it’s often hard to find the little gems of information amongst all the marketing.  This is true of ADF like all other technologies at the conference, there’s simply a lot of information to digest and filter.  Luckily Oracle &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/eventcatalog/eventCatalog.do&quot;&gt;publishes&lt;/a&gt; the presentations PPTs afterwards and it’s possible to find a jewel or two in all the content with some careful searching.&lt;br /&gt;&lt;br /&gt;For the ADF developers among us, this blog post attempts to summarize some of the main ADF takeaways from Oracle Open World 2011.  Please remember this is my summary, not Oracle’s (I am not an Oracle employee), and Oracle publishes all of this content under the Safe Harbor statement which means they cannot be held to anything they published.&lt;br /&gt;&lt;br /&gt;All the links in this post are not guaranteed to be up forever as Oracle may remove them in the near future.  I suggest if you&#039;re interested in reading the presentations download them now.&lt;br /&gt;&lt;br /&gt;Finally I apologize for some of the clunky grammer and phrases in this post, I wrote it on the plane back to Australia with the usual jetlag that fogs the brain.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;ADF Mobile&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of the large announcements at Oracle Open World 2011, the soon-to-be-released (2012) Mobile edition of ADF was the most significant in the ADF space.  Some key points of the new platform is it supports both iOS and Android, runs on device with a mini JVM, and uses PhoneGap to allow the native app to access the device’s native facilities.  &lt;br /&gt;&lt;br /&gt;For me the most telling part was the architecture diagram from the &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/11580/11580_Cho2578110.pdf&quot;&gt;Develop Mobile Apps for iOS, Android, and More: Converging Web and Native Applications&lt;/a&gt; presentation by Oracle Corporation’s Joe Huang, Denis Tyrell, and Srini India:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-7VhMMKG4Kxk/TpNvsOAwBoI/AAAAAAAABmg/grLpoWrnc8Q/s1600/pic12.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;&quot; src=&quot;http://2.bp.blogspot.com/-7VhMMKG4Kxk/TpNvsOAwBoI/AAAAAAAABmg/grLpoWrnc8Q/s320/pic12.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991962001016450&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Data Visualization Controls&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dana Singleterry and Jairam Ramanathan from Oracle included screenshots of upcoming DVT components in their &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/08256/08256_Cho235400.pdf&quot;&gt;Building Visually Appealing Web 2.0 Data DashBoards&lt;/a&gt;.  First we see a new Network Diagrammer:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-vqi1G6uft1U/TpNvVBsJwMI/AAAAAAAABlQ/fWHoag-xw78/s1600/pic02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 241px;&quot; src=&quot;http://3.bp.blogspot.com/-vqi1G6uft1U/TpNvVBsJwMI/AAAAAAAABlQ/fWHoag-xw78/s320/pic02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991563556405442&quot; /&gt;&lt;/a&gt;As can be seen the component demonstrates the relationship between disparate nodes.  This is incredibly useful for visualizing relationships in data.  Another screenshot showing a different data relationship structure:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-JhHqnAN8kfo/TpNvVB2awLI/AAAAAAAABlY/cXvXUaa2cyY/s1600/pic03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;&quot; src=&quot;http://4.bp.blogspot.com/-JhHqnAN8kfo/TpNvVB2awLI/AAAAAAAABlY/cXvXUaa2cyY/s320/pic03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991563599462578&quot; /&gt;&lt;/a&gt;In terms of graphs Oracle is looking at a Treemap graph:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-v95wpUcd1ls/TpNvVfUs-qI/AAAAAAAABlg/c9H83yofHfk/s1600/pic04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 206px;&quot; src=&quot;http://3.bp.blogspot.com/-v95wpUcd1ls/TpNvVfUs-qI/AAAAAAAABlg/c9H83yofHfk/s320/pic04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991571511114402&quot; /&gt;&lt;/a&gt;…and a Sunburst graph:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-pFahra6deQY/TpNvVsoc-5I/AAAAAAAABlo/-431ek7Dfe8/s1600/pic05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 306px;&quot; src=&quot;http://4.bp.blogspot.com/-pFahra6deQY/TpNvVsoc-5I/AAAAAAAABlo/-431ek7Dfe8/s320/pic05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991575083613074&quot; /&gt;&lt;/a&gt;...both useful for showing hierarchical data visually.  Of all the DVT controls the Timeline graph excites me most, something I’ve asked for in the past:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-OIMiUHIRj0s/TpNvj1bvG3I/AAAAAAAABlw/axc4nAnuzbQ/s1600/pic06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;&quot; src=&quot;http://4.bp.blogspot.com/-OIMiUHIRj0s/TpNvj1bvG3I/AAAAAAAABlw/axc4nAnuzbQ/s320/pic06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991817964362610&quot; /&gt;&lt;/a&gt;However I must clearly stress to readers these DVT controls are not in the current 11.1.2.1.0 release, and under Oracle’s safe harbor statement is not guarantying they will ever see be released (but fingers crossed anyway huh?).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Maven integration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As the ADF EMG moderator I’m involved in a lot of discussions in the community about the IDE and the framework.  One hot topic is JDeveloper’s Maven support.  11.1.2.0.0 introduced the first cut of Maven support for the IDE, as discussed by Oracle’s Susan Duncan’s &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/11500/11500_Cho2550460.pdf&quot;&gt;Team Productivity with Maven, Hudson and Team Productivity Center&lt;/a&gt;.  This first slide shows the current Maven support:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-Yv4_T9seT4w/TpNvkGy7ROI/AAAAAAAABl4/rF086RIOCQY/s1600/pic07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 182px;&quot; src=&quot;http://1.bp.blogspot.com/-Yv4_T9seT4w/TpNvkGy7ROI/AAAAAAAABl4/rF086RIOCQY/s320/pic07.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991822625031394&quot; /&gt;&lt;/a&gt;Of more interest is the planned Maven features for 12c, which not only tells me Oracle is committed to Maven support, but also there are definitely limitations in the current implementation:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-CFwDEYY1LBQ/TpNvkNXmaZI/AAAAAAAABmA/OCkk1Ri8d5U/s1600/pic08.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;&quot; src=&quot;http://4.bp.blogspot.com/-CFwDEYY1LBQ/TpNvkNXmaZI/AAAAAAAABmA/OCkk1Ri8d5U/s320/pic08.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991824389466514&quot; /&gt;&lt;/a&gt;Most importantly here for me is the first 2 bullet points, which means I wont recommend to customers working with Maven until Oracle makes these available.  Don’t get me wrong though, a couple years back there was no Maven support and it’s great Oracle is working to fill that gap completely.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;What can Fusion Applications teach us about ADF?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unlike OOW10, this year at Oracle Open World there was considerable more Fusion Applications demonstrations and presentations.  This has been a boon as previously we’ve seen a lot of demos of dashboard-like-screens that while pretty don’t show us where the real work occurs for users.  Fatema Madraswala from PwC and Rob Watson from Oracle included screenshots of the Fusion Applications Talent Management system (&lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/07620/7620_Wang2628040.pdf&quot;&gt;The very first Fusion go-live case study&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-BQDSllsoXoM/TpNvU6BbUyI/AAAAAAAABlI/YLVHRqdQHq4/s1600/pic01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 162px;&quot; src=&quot;http://4.bp.blogspot.com/-BQDSllsoXoM/TpNvU6BbUyI/AAAAAAAABlI/YLVHRqdQHq4/s320/pic01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991561498153762&quot; /&gt;&lt;/a&gt;It’s curious to me that while Oracle has put a lot of effort into communicating the User Experience design effort put into Fusion Applications, then we see a screen that looks Oracle-Forms like, especially with it’s tabbed interface.  In turn the worksheet at the bottom looks cluttered with buttons and fields.  Yet with respect designing user interfaces for complex business systems is surely not easy.&lt;br /&gt;&lt;br /&gt;I recommend ADF developers to search out as many Fusion Applications screenshots as possible as it reveals an insight into how to build the UI and what is and isn’t possible.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;What about E-Business Suite?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EBS customers might feel the whole ADF/SOA bandwagon is passing them bye, what with the focus on Fusion Applications.  Yet this year saw presentations tailor fitted to cover integrations points with EBS.  I must admit I can’t really comment on the quality of the solutions as I have no direct experience with EBS, so I’ll leave experienced readers to make their own assessment.  Check out the presentation entitled &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/12382/12382_Cho222096.pdf&quot;&gt;Extending Oracle E-Business Suite with Oracle ADF and Oracle SOA Suite&lt;/a&gt; from Oracle’s Veshaal Singh, Mark Nelson and Tanya Williams.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;MetaData Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As extension to the Fusion Applications demos, I’m detecting more down-and-dirty technical presentations on MedaData Services (MDS) where the framework can support personalizations and customizations.  Gangadhar Konduri and a fellow Oracle colleague discussed the theory and demonstrated customizing a Fusion Applications module, with a focus to what technical people need to know.  I must admit in the past I’ve been a little skeptical of MDS et all, not for it’s implementation but just the lack of information around on how to maintain and work with it from a developer/administrator point of view.  However I’ll need to step back and reassess that opinion.  You can read more in Gangadhar’s &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/10420/10420_Cho226825.pdf&quot;&gt;Managing Customizations and Personalization in Oracle ADF MetaData Services&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;For ADF Experts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For the ADF experts who feel many of the presentations aren’t aimed at them, it’s well worth catching one of Steven Davelaar’s presentation.  Steven who is the JHeadstart Product Manager at Oracle extends and pushes the ADF framework to its limits.  His presentations often include large amounts of code where I discover new properties and techniques way beyond my current level of expertise.  This year Steven presented &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/07974/7974_Cho133881.pdf&quot;&gt;Building Highly Reusable ADF Task Flows&lt;/a&gt; and &lt;a href=&quot;https://sites.google.com/site/oracleemg/adf/files/StevenDavelaar-EmpowerMultitaskingwithanOracleADFUIPowerhouse.pdf?attredirects=0&amp;d=1&quot;&gt;Empowering Multitasking with an Oracle ADF UI Powerhouse&lt;/a&gt; for the &lt;a href=&quot;https://sites.google.com/site/oracleemg/adf&quot;&gt;ADF EMG&lt;/a&gt; (great title Steven ;-).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;ADF Tuning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From my own perspective one of the most important presentations I attended was Oracle’s Duncan Mill’s &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/14526/14526_Cho221791.pdf&quot;&gt;ADF – Real World Performance Tuning&lt;/a&gt; presentation.  As I now have several clients with production level ADF applications, my focus has moved away from the basics of creating ADF applications to architecture and performance.  Duncan’s presentation aggregated a wide range of tuning hints into an easily digestible guide, highly valuable.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;FMW Roadmaps&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In a separate presentation entitled &lt;a href=&quot;https://oracleus.wingateweb.com/published/oracleus2011/sessions/16000/16000_Cho2397230.pdf&quot;&gt;Certified Configurations of Oracle ExaLogic, Oracle Fusion Middleware, BI and Oracle Fusion Apps&lt;/a&gt; by Pavana Jain and Deborah Thompson from Oracle Corp, the future roadmap for FMW releases was revealed. Readers are reminded the safe harbor statement means Oracle doesn’t have to stick to what they present, so take the slides as guidelines only.&lt;br /&gt;&lt;br /&gt;The first slide shows the approximate dates of each version:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-j6mTyk93Ssg/TpNvkusNkMI/AAAAAAAABmI/_p2LcaV7qsI/s1600/pic09.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;&quot; src=&quot;http://1.bp.blogspot.com/-j6mTyk93Ssg/TpNvkusNkMI/AAAAAAAABmI/_p2LcaV7qsI/s320/pic09.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991833334288578&quot; /&gt;&lt;/a&gt;The second slide reveals which 11g FMW products will be included in each release:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-VXNhfzt7lEw/TpNvkyuW-3I/AAAAAAAABmQ/r1il2b0_Mlk/s1600/pic10.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 181px;&quot; src=&quot;http://3.bp.blogspot.com/-VXNhfzt7lEw/TpNvkyuW-3I/AAAAAAAABmQ/r1il2b0_Mlk/s320/pic10.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991834417036146&quot; /&gt;&lt;/a&gt;Some readers might find it curious why the 11g 11.1.1.X.0 series continues to at least 11.1.1.7.0 while there is already an 11.1.2.0.0 release of JDev.  My understanding this is occurring because Fusion Apps will continue on the 11.1.1.X.0 series for some time yet thus extending the life of that branch.&lt;br /&gt;&lt;br /&gt;Finally the third slide the same for the 12c FMW products:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-uDCGi_hTQlE/TpNvrzNNppI/AAAAAAAABmY/XMjg4PtU7aM/s1600/pic11.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;&quot; src=&quot;http://2.bp.blogspot.com/-uDCGi_hTQlE/TpNvrzNNppI/AAAAAAAABmY/XMjg4PtU7aM/s320/pic11.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5661991954805532306&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Oh and the ADF EMG had a great event too&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ADF EMG also had a &quot;super&quot; Super User Group Sunday, but people are probably a little sick of me talking about it, so I&#039;ll just push you to a &lt;a href=&quot;http://groups.google.com/group/adf-methodology/browse_thread/thread/b5db112812436a10?hl=en&quot;&gt;link&lt;/a&gt; instead.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-3779468243340520047?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/GKr-VBeBrvY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/2014292&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 10 Oct 2011 17:57:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/2014292</guid>
 <comments>http://chrismuir.sys-con.com/node/2014292#feedback</comments>
</item>
<item>
 <title>Retrieving Managed Beans Programmatically</title>
 <link>http://chrismuir.sys-con.com/node/1984284</link>
 <description>From time to time in JSF and ADF Faces RC applications there’s the need from one managed bean to retrieve another, typically from a lesser scoped bean to a greater, such as a requestScope bean retrieving a sessionScope bean to access its methods. There’s essentially 3 avenues to solving this problem.
With these 3 approaches in mind it’s interesting to gather some statistics on how long it takes each method to retrieve each type of bean. The following chart shows 5 consecutive runs of each method, per bean type, where each method is repeated in a loop 10000 times (so we can see the statistical differences).&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1984284&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 21 Sep 2011 15:30:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1984284</guid>
 <comments>http://chrismuir.sys-con.com/node/1984284#feedback</comments>
</item>
<item>
 <title>My OOW Presentations</title>
 <link>http://chrismuir.sys-con.com/node/1959456</link>
 <description>If you&#039;re heading to OOW this year, it&#039;d be great to have you at either one of my following presentations:
&lt;br /&gt;
&lt;br /&gt;Session ID: 02240
&lt;br /&gt;Session Title: &lt;span style=&quot;font-weight:bold;&quot;&gt;Angels in the Architecture: An Oracle Application Development Framework Architectural Blueprint&lt;/span&gt;
&lt;br /&gt;Venue / Room: Marriott Marquis - Golden Gate B
&lt;br /&gt;Date and Time: Wednesday 10/5/11, 01:00 PM
&lt;br /&gt;
&lt;br /&gt;Oracle Application Development Framework (Oracle ADF) in Oracle JDeveloper 11g presents an interesting service-oriented solution with the adoption of bounded task flows and Oracle ADF libraries. Yet unlike its Release 10.1.3 counterpart, in which the tendency was to build one large application from the start, the 11g solution comes with its own challenges in terms of bringing the multiple moving parts into a composite master Oracle ADF application. This session presents a blueprint for Oracle ADF application architecture that can be applied to small and large projects alike to assist beginners in pulling 11g Oracle ADF applications together.
&lt;br /&gt;
&lt;br /&gt;Session ID: 2241
&lt;br /&gt;Session Title: &lt;span style=&quot;font-weight:bold;&quot;&gt;A Change Is as Good as a REST: Oracle JDeveloper 11g&#039;s REST Web Services&lt;/span&gt;
&lt;br /&gt;Venue / Room: Marriott Marquis - Golden Gate A
&lt;br /&gt;Date and Time: Thursday 10/6/11, 03:00 PM
&lt;br /&gt;
&lt;br /&gt;It can seem like a hard slog to develop SOAP-based Web services, with their contract-first design requirements and over-engineered specification that includes everything but the kitchen sink. REST-based Web services provide light relief for quick Web service development, whereas the constraints of SOAP Web services feel extreme for some short, sharp development. Luckily, Oracle JDeveloper provides support for both styles, and this presentation includes a short and sweet demonstration of getting REST Web services up and running by using Oracle JDeveloper&#039;s support for the Java API for RESTful Web Services (JAX-RS).
&lt;br /&gt;
&lt;br /&gt;In turn don&#039;t forget the day of &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/07/year-of-adf-developer-at-oracle-open.html&quot;&gt;ADF presentations&lt;/a&gt; for the ADF EMG on the User Group Sunday at Open World.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-1093431387871407732?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/e4w8-OtU304&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1959456&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sat, 27 Aug 2011 03:07:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1959456</guid>
 <comments>http://chrismuir.sys-con.com/node/1959456#feedback</comments>
</item>
<item>
 <title>Book Review: Middleware and Cloud Computing</title>
 <link>http://chrismuir.sys-con.com/node/1956890</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://ecx.images-amazon.com/images/I/41J9elry1FL._SS500_.jpg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;&quot; src=&quot;http://ecx.images-amazon.com/images/I/41J9elry1FL._SS500_.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;With the explosion of Internet content, especially that for the IT industry, it leaves an interesting question hanging over the worth (if any) of IT textbooks.  When you can find an answer on just about anything online, what’s the point of shelling out money, especially for IT texts that have been overpriced for sometime?
&lt;br /&gt;
&lt;br /&gt;Frank Munz’s &lt;a href=&quot;http://www.amazon.com/Middleware-Cloud-Computing-Rackspace-RightScale/dp/0980798000/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1314191367&amp;sr=1-1&quot;&gt;Middleware and Cloud Computing: Oracle on Amazon Web Services and Rackspace Cloud&lt;/a&gt; book is a good reminder of one key fact about text books in context of an internet society, they can save you a lot of research and time on the internet looking for the nitty-gritty details.
&lt;br /&gt;
&lt;br /&gt;The book is clearly aimed at system administrators &amp; architects who are looking for details about moving Oracle Fusion Middleware (FMW) products to the cloud.  A healthy dose of system admin knowledge is required of readers, with discussions on operating system (particularly Linux), us of command lines, and a knowledge of networking concepts would greatly assist too.  FMW knowledge isn’t assumed, with an introductory chapter included, but knowledge in Oracle’s WebLogic Server (WLS) would be highly beneficial to readers, and a familiarity of Java EE technologies too.  
&lt;br /&gt;
&lt;br /&gt;Munz’s book is broken into logical halves.  The first is a general introduction into “as a Service” cloud computing concepts.  For readers who have heard the terminology but haven’t kept up with all the in’s and out’s of what a cloud service is, this provides an opportunity to learn the lingo and also learn how to critique the cloud offerings, which is (let’s just say) over hyped by IT marketing.  
&lt;br /&gt;
&lt;br /&gt;The first part of the book also takes care to look in depth at Amazon Web Services (AWS), including images, instances, storage and even pricing.  In this area the book departs from a typical theoretical text encouraging readers to create their own AWS accounts and gives details on how to configure and run your own instance.  The text however doesn’t just focus on AWS, and also looks at Rackspace’s equivalent cloud services.  
&lt;br /&gt; 
&lt;br /&gt;The second half is where Munz’s book shines.  Moving on from cloud basics, readers are led through considerations on designing and architecture within the cloud, management, availability and scalability, all in context of FMW and specifically of WLS and its supported JEE technologies.  In each area the reader is brought back to specific considerations and limitations of Amazon’s &amp; Rackspace’s platforms.  On completing the book it becomes obvious this is a well thought out inclusion, as like enterprise home-baked operating systems and network infrastructure, cloud vendors’ platform are not born equal or include every feature required.  The implication being certain FMW features and designs simply won’t work on specific cloud platforms.
&lt;br /&gt;
&lt;br /&gt;The book isn’t without fault.  Munz does take a narrative approach that may not be everybody’s cup of tea.  In turn there’s a section that takes an unfortunate cop out on not tackling Oracle’s (let’s just say) less than favourable licensing.  Yet overall the outcome for FMW professionals, in particular administrators and architects, is a positive one, and a recommended read.  In turn it’s the careful research into actually testing what FMW features will really work on each cloud vendor’s platform, all collated into 1 book rather than sprayed across the internet, which will save readers significant time: prewarned is prearmed.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-6659511165897039472?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/aawvhm3AX0Y&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1956890&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 25 Aug 2011 14:45:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1956890</guid>
 <comments>http://chrismuir.sys-con.com/node/1956890#feedback</comments>
</item>
<item>
 <title>Book Review: Oracle ADF Enterprise Application Development Made Simple</title>
 <link>http://chrismuir.sys-con.com/node/1944266</link>
 <description>There are very few pieces of software where a casual approach can be taken to the process of software development. Software development is intrinsically a difficult process, gathering requirements, design, development and testing all taking large effort. In reaction enterprises have setup and adopted strict development processes to build software (or at least the successful enterprises have ;-).
ADF and JDeveloper are sold as productivity boosters for developers. Yet in the end they are just a technology platform. By themselves they don&#039;t solve the complexities of software development process as a whole (though they do make parts of it easier). 
&lt;br /&gt;ADF and JDeveloper are sold as productivity boosters for developers. Yet in the end they are just a technology platform. By themselves they don&#039;t solve the complexities of software development process as a whole (though they do make parts of it easier).
&lt;br /&gt;
&lt;br /&gt;This leaves IT departments struggling, as they might like the potential of ADF as a platform, but they intrinsically know there&#039;s more to software development, there&#039;s the process of development to consider.  How will the tasks of requirement gathering, design, development &amp; testing be applied to ADF? And more importantly how to shortcut the process of establishing these for ADF within the enterprise? There&#039;s a need to bring the two concepts together, the technology &amp; the process, to help the adoption of ADF in the enterprise.
&lt;br /&gt;
&lt;br /&gt;As ADF matures we&#039;re slowly seeing more books on Oracle&#039;s strategic JSF based web framework. Up to now the books have focused on the holistic understanding of the &lt;a href=&quot;http://www.amazon.com/Oracle-JDeveloper-11g-Handbook-Development/dp/0071602380/ref=sr_1_2?ie=UTF8&amp;qid=1313302634&amp;sr=8-2&quot;&gt;technical framework&lt;/a&gt;, the tricky &amp; &lt;a href=&quot;http://www.amazon.com/Oracle-Fusion-Developer-Guide-Applications/dp/0071622543/ref=pd_sim_b_1&quot;&gt;expert level&lt;/a&gt; implementation, or more recently the &lt;a href=&quot;http://www.amazon.com/Quick-Start-Oracle-Fusion-Development/dp/0071744282/ref=pd_sim_b_2&quot;&gt;speed of development&lt;/a&gt;. &lt;a href=&quot;http://www.vesterli.com/&quot;&gt;Sten Vesterli&#039;s&lt;/a&gt; &lt;a href=&quot;http://www.amazon.com/Oracle-ADF-Enterprise-Application-Development/dp/1849681880/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1313302746&amp;sr=1-2&quot;&gt;Oracle ADF Enterprise Application Development - Made Simple&lt;/a&gt; is the first to apply the processes and methodologies of design and development to ADF.
&lt;br /&gt;
&lt;br /&gt;Of particular delight Sten&#039;s book starts out by suggesting building a proof of concept to skill up teams in ADF, to learn the complexities, &amp; gather empirical evidence of the effort required. From here a focus on estimation and considerations of team structure are raised, all valuable stuff for the enterprise trying to control the tricky process of software development.
&lt;br /&gt;
&lt;br /&gt;In order to make use of reuse, the next few chapters focus on the infrastructure and ADF constructs that need to be setup before a real project commences, including page templates, ADF BC framework classes and more. This is the stuff you wish you&#039;d been told to create first if you forged ahead in building with ADF without any guidance.
&lt;br /&gt;
&lt;br /&gt;Then chapter by chapter the tasks of building, adding security, internalization and other development efforts are covered.  There&#039;s even a chapter on using JMeter to stress test your ADF app (with a link back to my blog! Thanks Sten).
&lt;br /&gt;
&lt;br /&gt;As can be seen from the topics, there&#039;s relatively little consideration of actually implementing ADF Business Components or ADF Faces RC.  As such it must be said reading this book won&#039;t make you an expert in the technical side of ADF, but rather will address how you can take a sensible approach to the overall development process.
&lt;br /&gt;
&lt;br /&gt;All in all Sten Vesterli&#039;s &lt;a href=&quot;http://www.amazon.com/Oracle-ADF-Enterprise-Application-Development/dp/1849681880/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1313302746&amp;sr=1-2&quot;&gt;Oracle ADF Enterprise Application Development - Made Simple&lt;/a&gt; is another valuable book in my ADF bookshelf and a recommended read for enterprise specialists looking at adopting ADF into their organisation.
&lt;br /&gt;
&lt;br /&gt;Disclaimer: I know Sten personally and in addition &lt;a href=&quot;http://www.packtpub.com/&quot;&gt;Packt Publishing&lt;/a&gt; has provided me Sten&#039;s book for free to review.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-7328747474887094779?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/UMBKWJ65HcY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1944266&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 16 Aug 2011 13:45:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1944266</guid>
 <comments>http://chrismuir.sys-con.com/node/1944266#feedback</comments>
</item>
<item>
 <title>Task flows: Sayonara auto AM nesting in 11.1.2.0.0.  Hello, ah, let&#039;s call it Bruce.</title>
 <link>http://chrismuir.sys-con.com/node/1929611</link>
 <description>In my &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/07/task-flows-sayonara-automated-nesting.html&quot;&gt;post&lt;/a&gt; from last week I documented the changing behaviour of task flows and Application Module nesting between the 11.1.2.0.0 and 11.1.1.X.0 series of ADF &amp;amp; JDeveloper.  In that post I detected a distinct change in the underlying behaviour of how ADF works with ADF BC Application Modules with certain task flow options and I was concerned this would destroy the scalability of our applications.  To understand those concerns and the rest of this post you need to read that &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/07/task-flows-sayonara-automated-nesting.html&quot;&gt;post&lt;/a&gt; to comprehend where I was coming from.&lt;br /&gt;&lt;br /&gt;One of the fortunate things of being apart of the &lt;a href=&quot;http://www.oracle.com/technetwork/community/oracle-ace/index.html&quot;&gt;Oracle ACE Director&lt;/a&gt; program is behind the scenes, we and Oracle staff are often chatting and helping each other out, which I&#039;m incredibly appreciative of.  In this case I must raise my hat to Steven Davelaar and John Stegeman for their out of hours assistance in one form or another.&lt;br /&gt;&lt;br /&gt;Regarding my last post, John made a reasonable point that I was making/drawing my conclusions far too early, that in fact I needed to test the complete task flow transaction life cycle to see if the behaviour of the task flows has changed in 11.1.2.0.0.  In particular John&#039;s good memory led him back to this OTN forum &lt;a href=&quot;http://forums.oracle.com/forums/thread.jspa?threadID=1012099&quot;&gt;post&lt;/a&gt; by Steve Muench that stated:&lt;br /&gt;&lt;blockquote&gt;In fact, in a future release we will likely be changing that implementation detail so that the AMs are always used from their own AM pool, however they will share a transaction/connection.&lt;/blockquote&gt;Steve&#039;s point from late 2010, and the one that John was re-affirming is that even though the underlying implementation may change, the end effect from the Bounded Task Flow (BTF) programmer&#039;s point of view, everything can still work the same.  And this is what I needed to check, looking at what AM methods are called is not enough.  I needed to check the actual database connections and transaction behaviour.&lt;br /&gt;&lt;br /&gt;From my post I was concerned without auto AM nesting, a page comprised of several BTFs with separate AMs would spawn as many database connections compromising the scalability of the application.  From the logs I thought this was the case as I could see two root AMs created and a separate (ie. two) call to prepareSession() for each.  My assumption being this meant two connections were being raised with the database under 11.1.2.0.0, where alternatively using 11.1.1.X.0 is was only one database connection using the auto AM nesting feature.&lt;br /&gt;&lt;br /&gt;However a query on the v$session table in the database using the 11.1.2.0.0 solution:&lt;br /&gt;&lt;br /&gt;SELECT * FROM v$session WHERE username = &#039;HR&#039;;&lt;br /&gt;&lt;br /&gt;...showed only 1 connection.  So regardless that there is 2 roots AMs instantiated under 11.1.2.0.0, they share connections (and therefore transactions too).  In other words, while the end result is the same, the underlying implementation has changed.&lt;br /&gt;&lt;br /&gt;I don&#039;t have a snazzy name for this new implementation vs the older auto AM nesting, so I figure we should &lt;a href=&quot;http://orangecow.org/pythonet/sketches/bruces.htm&quot;&gt;call it Bruce to keep it simple&lt;/a&gt; (with apologies to Monty Python).&lt;br /&gt;&lt;br /&gt;The only discrepancies between implementations we can see is that the prepareSession() and similar AM methods that deal with the connection or transaction (eg. afterConnect(), afterCommit()) are now called on the secondary AM as it&#039;s treated as a root AM rather than a nested AM.  This was not the behaviour under 11.1.1.X.0 as nested AMs delegate that responsibility back to the root AM.  This in turn may cause you a minor hiccup if you&#039;ve overridden these method in a framework extension of the AppModuleImpl as they&#039;ll now be called across all your AMs, including those who used to be auto nested.&lt;br /&gt;&lt;br /&gt;In returning to Steve Muench&#039;s point:&lt;br /&gt;&lt;blockquote&gt;In fact, in a future release we will likely be changing that implementation detail so that the AMs are always used from their own AM pool, however they will share a transaction/connection.&lt;/blockquote&gt;Via &lt;a href=&quot;http://localhost:7101/dms/Spy&quot; title=&quot;http://localhost:7101/dms/Spy&quot;&gt;http://localhost:7101/dms/Spy&lt;/a&gt; I&#039;ve verified this is the case with Bruce, where under 11.1.1.X.0 is used to be a single AM pool, but now under 11.1.2.0.0 there is 2 AM pools &amp;amp; 1 defined connection.  The end effect and my primary concern from the previous blog post is now mute, the scalability of database connections is maintained.  Bruce is a winner.&lt;br /&gt;&lt;br /&gt;The interesting change under 11.1.2.0.0 is the 1 AM pool vs many AM pools.  Ignoring if at design time create nested AMs under the 1 root AM, traditionally with the runtime auto nesting AM feature you&#039;d still have 1 root AM pool.  Now for each root AM you&#039;ll end up with an associated AM pool.  If you&#039;re app is made up of hundreds of AMs that were nested and used the AM pool of their parent, you&#039;ll now end up with hundreds of AM pools.  Whether this is a problem is hard to tell without load testing an application with this setup, but Steve Muench does comment in a follow up to the OTN forum post &quot;The AM pool in an of itself is not additional overhead, no.&quot;&lt;br /&gt;&lt;br /&gt;So potentially the midtier is less scalable as it needs to maintain more pools and process them, to what degree we don&#039;t know.  Yet, more importantly, we now have a relatively more flexible solution in terms of tuning the AM pools, because previously&lt;br /&gt;it was an all or nothing affair with 1 AM pool under the auto AM nesting 11.1.1.X.0 approach (again ignoring design time nesting AMs under the root AM), and now with Bruce we&#039;ve lots of find grained AM pools to tune.  As such each pool can be tuned where an AM pool for a little used BTF can be set to consume less resources over a BTF with an AM pool that is hit frequently.&lt;br /&gt;&lt;br /&gt;So, besides a couple of minor implementation changes (and if you find more please post a comment), it looks like Bruce is a winner.&lt;br /&gt;&lt;br /&gt;Again thanks must go to John Stegeman for his assistance in working through his issues, and Steven Davelaar for his offer of support.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-6848260164548893120?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/vOyGLlFK_A8&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1929611&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 02 Aug 2011 00:58:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1929611</guid>
 <comments>http://chrismuir.sys-con.com/node/1929611#feedback</comments>
</item>
<item>
 <title>Task Flows: Sayonara automated nesting of Application Modules JDev 11.1.2.0.0?</title>
 <link>http://chrismuir.sys-con.com/node/1926575</link>
 <description>In a previous blog &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-one-root.html&quot;&gt;post&lt;/a&gt; I discussed the concept of automated nesting of Application Modules (AMs) when using Bounded Task Flows (BTFs) with a combination of the transactional options Always Begin New Transaction, Always Use Existing Transaction and Use Existing Transaction if possible.  The automated nesting of AMs is a very important feature as when you have a page made up of disparate regions containing task flows, and those regions have their own AMs, without the auto-nesting feature you end up with the page creating as many connections as there are independent region-AMs.  Thus your application is less scalable, and architectural your application must be built in a different manner to avoid this issue in the first place.&lt;br /&gt;&lt;br /&gt;This automated nesting of AMs is exhibited in the 11.1.1.X.0 series of JDeveloper and the ADF framework including JDev 11.1.1.4.0 &amp;  11.1.1.5.0.  Unfortunately, either by error or design this feature is gone in 11.1.2.0.0.  Having checked the JDev 11.1.2.0.0 &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/jdev/shermanrelnotes-405777.html&quot;&gt;release notes&lt;/a&gt; and &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/jdev/jdev-11gr2-nf-404365.html&quot;&gt;what&#039;s new notes&lt;/a&gt;, I can&#039;t see any mention of this change.&lt;br /&gt;&lt;br /&gt;In turn I don&#039;t believe (please correct me if I&#039;m wrong) there to be a section in the Fusion Guide that specifically talks about the interactions of the task flow transaction options and Application Module creation.  The documentation talks about one or the other, not both in combination.  This is somewhat of a frustrating documentation omission to me because it means Oracle can change the behaviour without being held accountable to any documentation stating how it was meant to work in the first place.  All I have is a number of separate posts and discussions with Oracle Product Managers describing the behaviour which cannot be considered official.&lt;br /&gt;&lt;br /&gt;In the rest of this post I&#039;ll demonstrate the changing behaviour between versions.  It would be appreciated if any readers find errors in both the code, or even factual errors that you follow up with a comment on this blog please.  I&#039;m always wary of misleading others, I write my blog to inform and educate, not lead people down the garden path.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;4 test applications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For this post you can download a single &lt;a href=&quot;www.sagecomputing.com.au/chrism_blog/ByeByeAutoAMNestingExamples.zip&quot;&gt;zip&lt;/a&gt; containing 4 different test applications to demonstrate the changing behaviour:&lt;br /&gt;&lt;br /&gt;a) ByeByeAutoAMNestingJSPX111140&lt;br /&gt;b) ByeByeAutoAMNestingJSPX111150&lt;br /&gt;c) ByeByeAutoAMNestingJSPX111200&lt;br /&gt;d) ByeByeAutoAMNestingFacelets111200&lt;br /&gt;&lt;br /&gt;Why so many versions?  My current client site is using 11.1.1.4.0, not 11.1.1.5.0, so I wanted to check there was consistent behaviour in the pre-11.1.2.0.0 releases.  For this blog post I&#039;ll talk about the 11.1.1.5.0 version, but the exactly same behaviour is demonstrated under 11.1.1.4.0.&lt;br /&gt;&lt;br /&gt;In addition I know that in the 11.1.2.0.0 release because of the support for JSPX &amp; Facelets, that the controllers have different implementations, so it is necessary to see if the issue is different between the two VDL implementations.&lt;br /&gt;&lt;br /&gt;Besides the support for 4 different versions of JDev, and in the 11.1.2.0.0 the different VDLs, each application is constructed in exactly the same fashion, using a near identical Model and ViewController setup.  The following sections describe what has been setup in both these projects across all the example applications.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The Model project&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each application has exactly the same ADF BC setup connecting to Oracle&#039;s standard HR schema.  The Model project in each application includes EOs and VOs that map to the employees and locaitons tables in the HR schema.  The tables and the data they store are not consequential to this post, we simply need some Entity Objects (EOs) and View Objects (VOs) to expose through our Application Modules (AMs) to describe the AM nesting behaviour.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-T0DJhyWgElQ/TjIykN81fbI/AAAAAAAABko/ZtQbmePm5hg/s1600/x.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 259px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/-T0DJhyWgElQ/TjIykN81fbI/AAAAAAAABko/ZtQbmePm5hg/s320/x.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5634621681595415986&quot; /&gt;&lt;/a&gt;In the diagram above you can see the EOs and VOs.  In addition I&#039;ve defined 2 root level AMs EmployeesAppModule and LocationsAppModule.  The EmployeesAppModule exposes the EmployeesView VO and the LocationsAppModule exposes the LocationsView.&lt;br /&gt;&lt;br /&gt;To be clear, note I&#039;ve defined these as separate root level AMs.  So at the ADF BC level there is no nesting of the AMs defined.  What we&#039;ll attempt to do is show the automatic nesting of AMs at the task flow level, or not, as the case might be.&lt;br /&gt;&lt;br /&gt;In order to comprehend if the automated AM nesting is working at runtime, it&#039;s useful to add some logging to the ADF Business Components to show us such things as:&lt;br /&gt;&lt;br /&gt;1) When our Application Modules are being created&lt;br /&gt;2) If the AMs are created as root AMs or nested AMs&lt;br /&gt;&lt;br /&gt;As such in each of the AMs we&#039;ll include the following logging code.  The following example shows the EmployeesAppModuleImpl changes.  Exactly the same would be written into the LocationsAppModuleImpl, with the exception of changing the log messages:&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;public class EmployeesAppModuleImpl extends ApplicationModuleImpl {&lt;br /&gt;  // Other generated methods&lt;br /&gt;&lt;br /&gt;  public static ADFLogger logger = ADFLogger.createADFLogger(EmployeesAppModuleImpl.class);&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void create() {&lt;br /&gt;    super.create();&lt;br /&gt;    if (isRoot())&lt;br /&gt;      logger.info(&quot;EmployeesAppModuleImpl created as ROOT AM&quot;);&lt;br /&gt;    else&lt;br /&gt;      logger.info(&quot;EmployeesAppModuleImpl created as NESTED AM under &quot; + this.getRootApplicationModule().getName());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void prepareSession(Session session) {&lt;br /&gt;    super.prepareSession(session);&lt;br /&gt;    if (isRoot())&lt;br /&gt;      logger.info(&quot;EmployeesAppModuleImpl prepareSession() called as ROOT AM&quot;);&lt;br /&gt;    else&lt;br /&gt;      logger.info(&quot;EmployeesAppModuleImpl prepareSession() called as NESTED AM under &quot; + this.getRootApplicationModule().getName());&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;View Controller project&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each application has a near identical ViewController project with the same combination of task flows, pages &amp;amp; fragments.  The only exception being the 11.1.2.0.0 applications, where the Facelets application doesn&#039;t use JSPX pages or fragments, but rather Facelets equivalents.  This section describes the commonalities across all applications.&lt;br /&gt;&lt;br /&gt;Each application essentially is made up of 3 parts:&lt;br /&gt;&lt;br /&gt;a) A Start page&lt;br /&gt;b) A Bounded Task Flow (BTF) named ParentTaskFlow comprised of a single page ParentPage&lt;br /&gt;c) A BTF named ChildTaskFlow comprised of a single fragment ChildFragment&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Start Page&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) The start page is designed to call the ParentTaskFlow through a task flow call.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;ParentTaskFlow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) The ParentTaskFlow is set to Always Begin New Transaction and Isolated data control scope.&lt;br /&gt;&lt;br /&gt;2) The ParentTaskFlow page contains an af:table showing data from the EmployeesView of the EmployeesAppModuleDataControl.&lt;br /&gt;&lt;br /&gt;3) The ParentTaskFlow page also contains a region that embeds the ChildTaskFlow&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;ChildTaskFlow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) The ChildTaskFlow is set to Use Existing Transaction if Possible and Shared data control scope&lt;br /&gt;&lt;br /&gt;2) The ChildFragment fragment contains an af:table showing data from the LocationsView of the LocationsAppModuleDataControl&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The behaviour under 11.1.1.5.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When we run our 11.1.1.5.0 application, and navigate from the Start Page to the ParentTaskFlow BTF showing the ParentPage, in the browser we see a page showing data from both the Employees VO and Locations VO.  Of more interest this is what we see in the logs:&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&amp;lt;EmployeesAppModuleImpl&gt; &amp;lt;create&gt; EmployeesAppModuleImpl created as ROOT AM&lt;br /&gt;&amp;lt;EmployeesAppModuleImpl&gt; &amp;lt;prepareSession&gt; EmployeesAppModuleImpl prepareSession() called as ROOT AM&lt;br /&gt;&amp;lt;EmployeesAppModuleImpl&gt; &amp;lt;create&gt; EmployeesAppModuleImpl created as NESTED AM under EmployeesAppModule&lt;br /&gt;&amp;lt;LocationsAppModuleImpl&gt; &amp;lt;create&gt; LocationsAppModuleImpl created as NESTED AM under EmployeesAppModule &lt;/pre&gt;Based on my previous blog &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-one-root.html&quot;&gt;post&lt;/a&gt; on investigating and explaining the automated Application Module nesting feature in the 11.1.1.X.0 JDeveloper series, this is what I believe is occurring.&lt;br /&gt;&lt;br /&gt;As the ParentTaskFlow is designed to start a new transaction, when the first binding in the page exercises the EmployeesAppModule via the associated Fata Control and View Object embedded in the table, ADF instantiates the AM as the root AM and attaches it to the Data Control Frame.&lt;br /&gt;&lt;br /&gt;The Data Control Frame exists for chained BTFs who are joining transactions.  So in this example the Employees AM is the first AM to join the Data Control Frame and it becomes the root AM.  A little oddly we see the EmployeesAppModuleImpl then created again and nested under a root instance of itself.  I&#039;m not really sure why this occurs, but it might just be some sort of algorithmic consistency required for the Data Control Frame.  Maybe readers might have something to share on this point?&lt;br /&gt;&lt;br /&gt;It&#039;s worth noting the significance of a root AM unlike a nested AM, is only the root AM connects to the database and manages the transactions through commits and rollbacks.  Nested AMs delegate these responsibilities back to the root AM.  This is why we can see the prepareSession() call for the EmployeesAppModule.&lt;br /&gt;&lt;br /&gt;When the page processing gets to the bindings associated with the ChildTaskFlow, within the fragment of the ChildTaskFlow it discovers the LocationsAppModule via the associated Data Control and View Object embedded in the table.  Now we must remember that the ChildTaskFlow has the Use Existing Transaction if Possible and Shared data control scope options set.  From the &lt;a href=&quot;http://download.oracle.com/docs/cd/E16162_01/web.1112/e16182/taskflows_complex.htm#CHDDDFHA&quot;&gt;Fusion Guide&lt;/a&gt; this transaction option says:&lt;br /&gt;&lt;br /&gt;&quot;Use Existing Transaction if possible - When called, the bounded task flow either participates in an existing transaction if one exists, or starts a new transaction upon entry of the bounded task flow if one doesn&#039;t exist.&quot;&lt;br /&gt;&lt;br /&gt;In order for the BTF to be part of the same transaction, it must use the same database connection too.  As such regardless in the ADF Business Components where we defined the two separate Application Modules as root AMs (which by definition implies they have separate transactions &amp; database connections), it&#039;s expected the task flow transaction options overrides this and forces the second AM to &quot;nest&quot; AM under the first AM as it wants to &quot;participate in the existing transaction if it exists.&quot;&lt;br /&gt;&lt;br /&gt;So to be clear, this is the exact behaviour we see in the logs of our 11.1.1.X.0 JDeveloper series of applications.  The end result is our application takes 1 connection out with the database rather than 2.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The behaviour under 11.1.2.0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Under JDeveloper 11.1.1.2.0.0 regardless if we run the JSPX or Facelets application, with exactly the same combination of task flow elements and transaction options, this is what we see in the log:&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&amp;lt;EmployeesAppModuleImpl&gt; &amp;lt;create&gt; EmployeesAppModuleImpl created as ROOT AM&lt;br /&gt;&amp;lt;EmployeesAppModuleImpl&gt; &amp;lt;prepareSession&gt; EmployeesAppModuleImpl prepareSession() called as ROOT AM&lt;br /&gt;&amp;lt;LocationsAppModuleImpl&gt; &amp;lt;create&gt; LocationsAppModuleImpl created as ROOT AM&lt;br /&gt;&amp;lt;LocationsAppModuleImpl&gt; &amp;lt;prepareSession&gt; LocationsAppModuleImpl prepareSession() called as ROOT AM &lt;/pre&gt;As such regardless that the Oracle task flow documentation for the latest release says that the second task flow with the Use Existing Transaction if Possible option should join the transaction of the calling BTF, it doesn&#039;t.  As can see from the logs both AMs are now treated as root and are preparing their own session/connection with the database.&lt;br /&gt;&lt;br /&gt;The effect of this is our application now uses 2 connections rather than 1, and in turn the BTF transaction options don&#039;t appear to be working as prescribed.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Is it just a case of philosophy?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maybe this is just a case of philosophy?  Prior to JDev 11.1.2.0.0 the ADFc controller (who implements the task flows) was the winner in how the underlying ADF BC Application Modules were created and nested.  Maybe in 11.1.2.0.0 Oracle has decided that no, in fact the ADFm model layer should control its own destiny?&lt;br /&gt;&lt;br /&gt;Who knows – I don&#039;t see any documentation in the release notes or what&#039;s new notes to tell me this has changed.  The task flow transaction option documentation is all I have.  As such if you&#039;ve relied on this feature, your architecture is built on this feature as we have, we&#039;re now in a position we can&#039;t upgrade our application to 11.1.2.0.0 without major rework.&lt;br /&gt;&lt;br /&gt;To get clarification from Oracle I&#039;ll lodge an SR and will keep the blog up to date on any information discovered.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-5787282297686836141?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/An_dshdWGaw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1926575&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 28 Jul 2011 23:59:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1926575</guid>
 <comments>http://chrismuir.sys-con.com/node/1926575#feedback</comments>
</item>
<item>
 <title>&quot;The Year of the ADF developer&quot; at Oracle Open World 2011</title>
 <link>http://chrismuir.sys-con.com/node/1924513</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://groups.google.com/group/adf-methodology/web/adfemg.gif?hl=en&amp;display=thumb&amp;width=96&amp;height=96&quot;&gt;&lt;img style=&quot;float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 96px; height: 47px;&quot; src=&quot;http://groups.google.com/group/adf-methodology/web/adfemg.gif?hl=en&amp;display=thumb&amp;width=96&amp;height=96&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;What&#039;s one of the worst things about attending Oracle Open World?  From my point of view it&#039;s the huge amount of marketing. Booooorrrring.  I&#039;m a developer, I want to hear technical stuff, not sales talk!!&lt;br /&gt; &lt;br /&gt;For ADF developers attending OOW in 2011 this is all set to change.  Not only has Oracle lined up a number of ADF presentations during the mainstream conference, but the &lt;a href=&quot;https://sites.google.com/site/oracleemg/&quot;&gt;ADF Enterprise Methodology Group&lt;/a&gt; (ADF EMG) has a whole day of sessions on the user group Sunday October 2nd!&lt;br /&gt; &lt;br /&gt;Think about it.  That&#039;s a mini ADF conference just for ADF programmers!  Even better it will be hosted by ADF experts from around the world to share their day-to-day ADF experiences with you, not just in a brief 1hr session, but 6 sessions in total.  That&#039;s a lot of ADF content and an addition for no extra cost to your OOW tickets.&lt;br /&gt; &lt;br /&gt;So I officially declare OOW&#039;11 &quot;The Year of the ADF developer&quot;.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Who have we got lined up for you?  I&#039;m glad you asked.  We have such A1 ADF presenters as:&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://www.vesterli.com/&quot;&gt;Sten Vesterli&lt;/a&gt; - Oracle ACE Director, author of the latest ADF book &quot;Oracle ADF Enterprise Application Development - Made Simple&quot; and best speaker at the 2010 ODTUG Kscope conference.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://blogs.oracle.com/jdevotnharvest/&quot;&gt;Frank Nimphius&lt;/a&gt; - Oracle Corp&#039;s own superstar ADF product manager who produces near-1000 blog posts a day, the ADF code harvests, articles in Oracle Magazine and is a top contributor to the OTN forums in assisting others write successful ADF applications.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://adfgarage.blogspot.com/&quot;&gt;Maiko Rocha&lt;/a&gt; - part of Oracle Corp&#039;s own WebCenter A-Team who solves some of the most complex and challenging issues Oracle customers throw at ADF and WebCenter.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://andrejusb.blogspot.com/&quot;&gt;Andrejus Baranovskis&lt;/a&gt; - ADF blogging wiz whose detailed posts on ADF architecture &amp; best practices has shown many an ADF novice how to put together a working, optimised application using a huge range of ADF features.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://www.oratransplant.nl/&quot;&gt;Wilfred van der Deijl&lt;/a&gt; - the author of potentially the most important ADF plug-in OraFormsFaces, which gives you the ability to integrate Oracle Forms &amp; ADF into the same running web pages.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://blogs.oracle.com/jheadstart/&quot;&gt;Steven Davelaar&lt;/a&gt; - one of the key brains behind Oracle&#039;s JHeadstart, and a well known ADF presenter who shows how to push ADF to the extreme for productive development.&lt;br /&gt; &lt;br /&gt;* &lt;a href=&quot;http://technology.amis.nl/blog/author/lucas&quot;&gt;Lucas Jellema&lt;/a&gt; - the Fusion Middleware blogging powerhouse from AMIS in the Netherlands, showing how to solve just a&lt;br /&gt;bout any problem in the ADF and FMW space. &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Excited?  You should be.&lt;br /&gt;&lt;br /&gt;But more importantly what are they presenting?&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;- 09:00 - Sten - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32460&quot;&gt;32460&lt;/a&gt; - Oracle ADF Enterprise Methodology Group: Starting an Enterprise Oracle ADF Project&lt;br /&gt; &lt;br /&gt;- 10:15 - Frank &amp; Maiko - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32480&quot;&gt;32480&lt;/a&gt; - Oracle ADF Enterprise Methodology Group: Learn Oracle ADF Task Flows in Only 60 Minutes&lt;br /&gt; &lt;br /&gt;- 11:30 - Andrejus - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32481&quot;&gt;32481&lt;/a&gt; - Oracle ADF Enterprise Methodology Group: A+-Quality Oracle ADF Code&lt;br /&gt; &lt;br /&gt;- 12:45 - Wilfred - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32500&quot;&gt;32500&lt;/a&gt; - Oracle ADF Enterprise Methodology Group: Transitioning from Oracle Forms to Oracle ADF&lt;br /&gt; &lt;br /&gt;- 14:00 - Steven - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32501&quot;&gt;32501&lt;/a&gt; - Oracle ADF Enterprise Methodoloy Group: Empower Multitasking with an Oracle ADF UI Powerhouse&lt;br /&gt; &lt;br /&gt;- 15:15 - Lucas - Session &lt;a href=&quot;https://oracleus.wingateweb.com/scheduler/modifySession.do?SESSION_ID=32502&quot;&gt;32502&lt;/a&gt; - Oracle ADF Enterprise Methodology Group: Gold Nuggets in Oracle ADF Faces&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;All sessions will be held on Sunday October 2nd, so you need to make sure you turn up a day earlier if you only traditionally attend the main part of the conference.&lt;br /&gt; &lt;br /&gt;All sessions are in Moscone West room 2000, though remember to check on the day in case the sessions have been moved.&lt;br /&gt;&lt;br /&gt;I hope you’re excited as we are in the ADF EMG sessions at Oracle Open World 2011.  We really hope you can attend and spread the word about what we’ve got going this year.  Remember the ADF EMG is only as good as it’s members’ participation – it’s your group.&lt;br /&gt;&lt;br /&gt;(Thanks must go to Bambi Price and the APOUC for giving us the room to hold these presentations at OOW&#039;11).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-8783823804707164508?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/Lj2IwLN1Yh4&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1924513&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 27 Jul 2011 08:58:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1924513</guid>
 <comments>http://chrismuir.sys-con.com/node/1924513#feedback</comments>
</item>
<item>
 <title>Programmatic Activation - Part 2</title>
 <link>http://chrismuir.sys-con.com/node/1882851</link>
 <description>The previous blog post in this series looked at the default behaviour of the ADF framework in 11.1.1.4.0 of the af:region tag embedded in a af:showDetailItem tag. In this post we&#039;ll look at programmatically controlling the activation of regions to stop unnecessary processing.
This example will be simplified to only look at one af:region in the hidden second af:showDetailItem. 
Note the first af:showDetailItem is disclosed (open) and purely exists to act as the open af:showDetailItem with the second af:showDetailItem we&#039;re actually interested in is closed. Note the second af:showDetailItem has our embedded af:region calling CharlieTaskFlow.
&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1882851&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 08 Jul 2011 16:15:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1882851</guid>
 <comments>http://chrismuir.sys-con.com/node/1882851#feedback</comments>
</item>
<item>
 <title>JDev - Immediate Activation - Part 1</title>
 <link>http://chrismuir.sys-con.com/node/1880696</link>
 <description>ADF&#039;s af:showDetailItem tag is used as a child to parent tags such as the af:panelAccordion and af:panelTabbed. JDeveloper&#039;s online documentation states the following about the af:showDetailItem tag:
The showDetailItem component is used inside of a panelAccordion or panelTabbed component to contain a group of children. It is identified visually by the text attribute value and lays out its children. Note the difference between &quot;disclosed&quot; and &quot;rendered&quot;: if &quot;rendered&quot; is false, it means that this the accordion header bar or tab link and its corresponding contents are not available at all to the user, whereas if &quot;disclosed&quot; is false, it means that the contents of the item are not currently visible, but may be made visible by the user since the accordion header bar or tab link are still visible.
The lifecycle (including validation) is not run for any components in a showDetailItem which is not disclosed. The lifecycle is only run on the showDetailItem(s) which is disclosed.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1880696&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 08 Jul 2011 16:15:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1880696</guid>
 <comments>http://chrismuir.sys-con.com/node/1880696#feedback</comments>
</item>
<item>
 <title>JDev 11.1.2.0.0: The Power of Facelets – Part 3</title>
 <link>http://chrismuir.sys-con.com/node/1882853</link>
 <description>The previous blog posts in this series (part 1 and part 2) looked at the behaviour of the af:region tag embedded in a af:showDetailItem tag with JDeveloper 11.1.1.4.0. This post investigates the changing nature of the &quot;deferred&quot; activation property for the underlying af:region task flow binding in JDev 11.1.2.0.0.
JDeveloper 11.1.2.0.0 introduces JSF 2.0 and Facelets as the predominate display technologies for ADF Faces RC pages. As Oracle&#039;s JSF 2.0 roadmap for ADF states: &quot;The introduction of Facelets addresses the shortcomings of JSP and improves the developer page design and reuse experience.&quot;
One of these improvements is how the &quot;deferred&quot; activation property for task flow bindings under af:regions works, and we no longer require the programmatic solution. &lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1882853&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 08 Jul 2011 14:45:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1882853</guid>
 <comments>http://chrismuir.sys-con.com/node/1882853#feedback</comments>
</item>
<item>
 <title>JDev 11g, Task Flows and ADF BC</title>
 <link>http://chrismuir.sys-con.com/node/1836134</link>
 <description>(With apologies, apart of the beginning of this post has been chopped off during copy &amp; paste. I&#039;ll rectify tonight)
Yet as the old saying goes, &quot;with power comes great responsibility&quot;, or alternatively, &quot;the devil is in the detail&quot;. Developers need to have a good grasp of the task flow capabilities and options in order to not paint themselves into a corner. This is particularly true of the transaction and data control scope behavioural options provided by &quot;bounded&quot; task flows.
The transaction and data control scope behavioural options available to bounded task flows provide a sophisticated set of functionality for spawning and managing one or more transactions during an ADF user&#039;s session.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1836134&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 17 May 2011 10:00:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1836134</guid>
 <comments>http://chrismuir.sys-con.com/node/1836134#feedback</comments>
</item>
<item>
 <title>JDev 11g, Task Flows &amp; ADF BC – one root Application Module to rule them all?</title>
 <link>http://chrismuir.sys-con.com/node/1836135</link>
 <description>JDev 11.1.1.5.0&lt;br /&gt;&lt;br /&gt;In my previous blog &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-always-use.html&quot;&gt;post&lt;/a&gt; I discussed the power of the ADF task flow functionality, and the devil in the detail for uninitiated developers using the transaction and data control scope options.  This post will extend the discussion on task flows and the ADF Controller&#039;s interaction with ADF Business Components, in order to show another scenario where programmers must understand the underlying behaviour of the framework.&lt;br /&gt;&lt;br /&gt;Developers who have worked with the ADF framework for some time, especially from the JDeveloper 10g edition and earlier, will likely have stumbled across the concepts of root and nested Application Modules (AM) in the ADF Business Component (ADF BC) layer.  The &lt;a href=&quot;http://download.oracle.com/docs/cd/E21764_01/web.1111/b31974/bcservices.htm#sm0229&quot;&gt;Fusion Guide&lt;/a&gt; has the following to say on the two types of AMs:&lt;br /&gt;&lt;blockquote&gt;Application modules support the ability to create software components that mimic the modularity of your use cases, for which your higher-level functions might reuse a &quot;subfunction&quot; that is common to several business work flows. You can implement this modularity by defining composite application modules that you assemble using instances of other application modules. This task is referred to as &quot;application module nesting&quot;. That is, an application module can contain (logically) one or more other application modules, as well as view objects. The outermost containing application module is referred to as the &quot;root application module&quot;.&lt;/blockquote&gt;&lt;blockquote&gt;At runtime, your application works with a &quot;main&quot; — or what&#039;s known as a &quot;root &quot;— application module. Any application module can be used as a root application module; however, in practice the application modules that are used as root application modules are the ones that map to more complex end-user use cases, assuming you&#039;re not just building a straightforward CRUD application. When a root application module contains other nested application modules, they all participate in the root application module&#039;s transaction and share the same database connection and a single set of entity caches. This sharing is handled for you automatically by the root application module and its &quot;Transaction&quot; object.&lt;/blockquote&gt;The inference is that if for a single user you want to support more than one transaction at a time, you must create 2 or more root AMs.  However the implication of this is if you do so, as a transaction and database connection have a 1 to 1 relationship, a user exercising more than one root AM in the ADF BC layer during their session will take out the same amount of connections with the database.  This implication further effects scalability, as the more connections a user takes out from the database, and more connections in our midtier pool will be tied up by each user too.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Task Flow transaction options&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The transaction and data control scope behavioural options available to bounded task flows provide a sophisticated set of functionality for spawning and managing one or more transactions during an ADF user&#039;s session, an extension of the facilities provided by the ADF BC Application Module.  Straight from the &lt;a href=&quot;http://download.oracle.com/docs/cd/E21764_01/web.1111/b31974/taskflows_complex.htm#CHDDDFHA&quot;&gt;Fusion Developer&#039;s Guide&lt;/a&gt; the task flow transaction options are:&lt;br /&gt;&lt;br /&gt;• &amp;lt;No Controller Transaction&gt;:  The called bounded task flow does not participate in any transaction management.&lt;br /&gt;&lt;br /&gt;• Always Use Existing Transaction:  When called, the bounded task flow participates in an existing transaction already in progress.&lt;br /&gt;&lt;br /&gt;• Use Existing Transaction If Possible:  When called, the bounded task flow either participates in an existing transaction if one exists, or starts a new transaction upon entry of the bounded task flow if one doesn&#039;t exist.&lt;br /&gt;&lt;br /&gt;• Always Begin New Transaction:  A new transaction starts when the bounded task flow is entered, regardless of whether or not a transaction is in progress. The new transaction completes when the bounded task flow exits.&lt;br /&gt;&lt;br /&gt;Ignoring the &quot;No Controller Transaction&quot; option which defaults back to the letting the ADF BC layer manage its own transactions, the other task flow transaction options allow the developer to create and reuse transactions at a higher level of abstraction for relating web pages, page fragments and other task flow activities.  As such the root AM doesn&#039;t constrain when the application establishes a new transaction and connection to the database. &lt;br /&gt;&lt;br /&gt;Yet if now we&#039;ve the option for spawning more transactions in our application, what&#039;s the implication on scalability and the number of connections that are taken out in the midtier and database for each user?  Thanks to a previous OTN forum &lt;a href=&quot;http://forums.oracle.com/forums/thread.jspa?messageID=4022731&quot;&gt;post&lt;/a&gt; and the kind assistance of Steve Muench this &lt;a href=&quot;http://blogs.oracle.com/smuenchadf/&quot;&gt;post&lt;/a&gt; will demonstrate how the ADF framework as a whole attempts to minimize this issue.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The &quot;No Controller Transaction&quot; option&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before investigating how the ADF framework addresses the scalability issue, it&#039;s useful to run through an example of using the &quot;No Controller Transaction&quot; bounded task flow option.  This will demonstrate how the framework establishes database connections when defaulting back to the ADF BC layer&#039;s own transaction and database connection functionality.&lt;br /&gt;&lt;br /&gt;As explained by &lt;a href=&quot;http://thepeninsulasedge.com/frank_nimphius/&quot;&gt;Frank Nimphius&lt;/a&gt; in the following OTN Forum &lt;a href=&quot;http://forums.oracle.com/forums/thread.jspa?messageID=9534487&quot;&gt;post&lt;/a&gt; the No Controller Transaction option infers that task flows are taking no control of the transactions established during the user&#039;s session when the task flow is called, all such functionality is delegated back to the underlying business services.  In context of this blog post the business service layer is ADF Business Components.&lt;br /&gt;&lt;br /&gt;As seen in the following picture overall the ADF BC layer for our example is application is a fairly simple one:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-rhMITB5v4cA/TdHDhSZCV3I/AAAAAAAABdY/iA_EAd9tv2E/s1600/picX01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 272px; height: 320px;&quot; src=&quot;http://3.bp.blogspot.com/-rhMITB5v4cA/TdHDhSZCV3I/AAAAAAAABdY/iA_EAd9tv2E/s320/picX01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607477987692926834&quot; /&gt;&lt;/a&gt;&lt;br /&gt;As can be seen the application is comprised of two ADF BC Application Modules (AM), named Root1AppModule &amp;amp; Root2AppModule.   Both expose the same View Object (VO) OrganisationsView as two separate usages.  In the following picture you see Root1AppModule exposes OrganisationsView as OrganisationsView1:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-if4yazHCosw/TdHDhTbmLWI/AAAAAAAABdg/xkD8fPFQsG0/s1600/picx02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 252px;&quot; src=&quot;http://3.bp.blogspot.com/-if4yazHCosw/TdHDhTbmLWI/AAAAAAAABdg/xkD8fPFQsG0/s320/picx02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607477987972099426&quot; /&gt;&lt;/a&gt;&lt;br /&gt;...and in the following picture Root2AppModule exposes OrganisationsView2 off the same OrganisationsView VO:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-4hVBPcHeTZ8/TdHDhuu9ohI/AAAAAAAABdo/vdZwXwwMwXU/s1600/picx03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 253px;&quot; src=&quot;http://3.bp.blogspot.com/-4hVBPcHeTZ8/TdHDhuu9ohI/AAAAAAAABdo/vdZwXwwMwXU/s320/picx03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607477995301085714&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For what it&#039;s worth to the discussion, OrganisationsView is based on the same Organisations EO:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-jAxge7NnBf4/TdHDuvrhgsI/AAAAAAAABeA/r7aBbckhaHc/s1600/picx06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 253px;&quot; src=&quot;http://3.bp.blogspot.com/-jAxge7NnBf4/TdHDuvrhgsI/AAAAAAAABeA/r7aBbckhaHc/s320/picx06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478218893394626&quot; /&gt;&lt;/a&gt;&lt;br /&gt;However as there are 2 root AMs at play in our example application, each AM will instantiate its own OrganisationsView (namely OrganisationsView1 and OrganisationsView2 respectively) and Organisation EO cache, implying the record sets in the midtier are distinctly different even though we&#039;re using the same underlying design time constructs.&lt;br /&gt;&lt;br /&gt;Like that explained in the previous blog &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2011/05/jdev-11g-task-flows-adf-bc-always-use.html&quot;&gt;post&lt;/a&gt;, how do we know when an AM actually creates a connection?  Without knowing this, in our trials with the transaction options supported by Bounded Task Flows, unless the ADFc explicitly throws an error, we&#039;ll have trouble discerning what the ADF BC layer is actually doing underneath the task flow transaction options.&lt;br /&gt;&lt;br /&gt;While external tools like the Fusion Middleware Control will give you a good insight into this, the easiest mechanism is to extend each root Application Module&#039;s ApplicationModuleImpl&#039;s class with our own AppModuleImpl and override the create() and prepareSession() methods.  The following code shows an example for the Root1AppModuleImpl:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;public class Root1AppModuleImpl extends ApplicationModuleImpl {&lt;br /&gt;  // Other generated methods&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void create() {&lt;br /&gt;    super.create();&lt;br /&gt;    if (isRoot())&lt;br /&gt;      System.out.println(&quot;########Root1AppModuleImpl.create() called.  AM isRoot() = true&quot;);&lt;br /&gt;    else&lt;br /&gt;      System.out.println(&quot;########Root1AppModuleImpl.create() called.  AM isRoot() = false&quot;);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void prepareSession(Session session) {&lt;br /&gt;    super.prepareSession(session);&lt;br /&gt;    if (isRoot())&lt;br /&gt;      System.out.println(&quot;########Root1AppModuleImpl.prepareSession() called.  AM isRoot() = true&quot;);&lt;br /&gt;    else&lt;br /&gt;      System.out.println(&quot;########Root1AppModuleImpl.prepareSession() called.  AM isRoot() = false&quot;);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;Pretty much the code for the Root2AppModuleImpl is the same, except the name of the classes change in the System.out.println calls.&lt;br /&gt;&lt;br /&gt;Overriding the create() method allows us to see when the Application Module is not just instantiated, but ready to be used.  This doesn&#039;t tell us when a transaction and connection is established with the database, but, is useful in identifying situations where the framework creates a root or nested AM.&lt;br /&gt;&lt;br /&gt;The prepareSession() method is a chokepoint method the framework uses to set database session state when a connection is established with the database.  As such overriding this method allows us to see when the AM does establish a new connection and transaction.&lt;br /&gt;&lt;br /&gt;Once we&#039;ve setup our ADF BC Model project, we&#039;ll now create two Bounded Task Flows (BTFs) to allow the user to work with the underlying AMs and VOs.&lt;br /&gt;&lt;br /&gt;Both our task flows are comprised of only 2 activities, a page to view the underlying the Organisations data and an Exit Task Flow Activity.  Root1AppModuleTaskFlow contains the following activities:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-BNXb7ZqSwrk/TdHDh8LkGrI/AAAAAAAABdw/rhCYJLf2wGw/s1600/picx04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 217px;&quot; src=&quot;http://3.bp.blogspot.com/-BNXb7ZqSwrk/TdHDh8LkGrI/AAAAAAAABdw/rhCYJLf2wGw/s320/picx04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607477998910708402&quot; /&gt;&lt;/a&gt;&lt;br /&gt;...and Root2AppModuleTaskFlow is virtually identical:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-v6D7SRg1CWs/TdHDi05N_JI/AAAAAAAABd4/nAaNmbANe0M/s1600/picx05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 218px;&quot; src=&quot;http://4.bp.blogspot.com/-v6D7SRg1CWs/TdHDi05N_JI/AAAAAAAABd4/nAaNmbANe0M/s320/picx05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478014134582418&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The OrganisationsTable1.jspx and OrganisationsTable2.jspx pages in each task flow show an editable table of Organisations data, visually there&#039;s no difference between them:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-xr-S432fnsA/TdHDvFLWr8I/AAAAAAAABeY/XxpiN4e7KhA/s1600/picx09.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-xr-S432fnsA/TdHDvFLWr8I/AAAAAAAABeY/XxpiN4e7KhA/s320/picx09.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478224664047554&quot; /&gt;&lt;/a&gt;&lt;br /&gt;While the pages don&#039;t differ visually, underneath their pageDef files are completely different as they source their data from different root Application Modules and View Objects.  In the following picture we can see the OrganisationsTable1PageDef.xml file makes use of the ADF BC OrganisationsView1  VO mapping to the Root1AppModuleDataControl:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-5-W-Odd9uEM/TdHDutQDQ0I/AAAAAAAABeI/nP1Kap2v7HQ/s1600/picx07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;&quot; src=&quot;http://1.bp.blogspot.com/-5-W-Odd9uEM/TdHDutQDQ0I/AAAAAAAABeI/nP1Kap2v7HQ/s320/picx07.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478218241295170&quot; /&gt;&lt;/a&gt;&lt;br /&gt;And in the following picture we can see the OrganisationsTable2PageDef.xml file uses the ADF BC OrganisationsView2 VO mapping to the Root2AppModuleDataControl:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-YLAyefYetsM/TdHDu6TTb6I/AAAAAAAABeQ/95olYplXu8Y/s1600/picx08.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 169px;&quot; src=&quot;http://2.bp.blogspot.com/-YLAyefYetsM/TdHDu6TTb6I/AAAAAAAABeQ/95olYplXu8Y/s320/picx08.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478221744598946&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Finally we can see the No Controller  Transaction option set for the first task flow:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-yHQWa_FP_gY/TdHDvA1gQ1I/AAAAAAAABeg/VE8QFM46wZs/s1600/picx10.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;&quot; src=&quot;http://4.bp.blogspot.com/-yHQWa_FP_gY/TdHDvA1gQ1I/AAAAAAAABeg/VE8QFM46wZs/s320/picx10.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478223498658642&quot; /&gt;&lt;/a&gt;&lt;br /&gt;..and the second:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-f1ddZhoQ64Y/TdHD6osKPDI/AAAAAAAABeo/L-3sUJtRPRU/s1600/picx11.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 169px;&quot; src=&quot;http://4.bp.blogspot.com/-f1ddZhoQ64Y/TdHD6osKPDI/AAAAAAAABeo/L-3sUJtRPRU/s320/picx11.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478423175445554&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Note I&#039;ve deliberately set the data control scope to Shared  to highlight a point in the future.&lt;br /&gt;&lt;br /&gt;At this point we&#039;ll include a Start.jspx page in our Unbounded Task Flow (UTF) adfc-config.xml file with navigation rules to call each BTF, and navigation rules to return on the Exist Task Flow Return activity being called inside of each BTF:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-gWpAJuQVwJY/TdHD6osv5LI/AAAAAAAABew/rmS2Q6JeUAk/s1600/picx12.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 169px;&quot; src=&quot;http://1.bp.blogspot.com/-gWpAJuQVwJY/TdHD6osv5LI/AAAAAAAABew/rmS2Q6JeUAk/s320/picx12.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478423177913522&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On running our application starting with the Start.jspx page we see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-pwrASa1FlPg/TdHD666uY_I/AAAAAAAABe4/ZFp4mp55Llg/s1600/picx13.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://1.bp.blogspot.com/-pwrASa1FlPg/TdHD666uY_I/AAAAAAAABe4/ZFp4mp55Llg/s320/picx13.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478428068373490&quot; /&gt;&lt;/a&gt;&lt;br /&gt;At this point inspecting the console output for the application in the JDeveloper log window, we don&#039;t see the System.out.println messages:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-4M6eIKw4lRw/TdHD63fgiCI/AAAAAAAABfA/Xa9o6IM722M/s1600/picx14.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://3.bp.blogspot.com/-4M6eIKw4lRw/TdHD63fgiCI/AAAAAAAABfA/Xa9o6IM722M/s320/picx14.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478427148912674&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Returning to the Start page and selecting the Go Root1AppModuleTaskFlow button we then see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-C8xxE2blcIo/TdHD7G0qisI/AAAAAAAABfI/SdGrDBhOPjk/s1600/picx15.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-C8xxE2blcIo/TdHD7G0qisI/AAAAAAAABfI/SdGrDBhOPjk/s320/picx15.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478431264180930&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Note in the above picture I&#039;ve deliberately selected the 5th recorded and changed the Organisation&#039;s name to uppercase.  Checking the log window we now see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-Ylh40xW1jKA/TdHEF5UJytI/AAAAAAAABfQ/zcKdXjFAUx0/s1600/picx16.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://4.bp.blogspot.com/-Ylh40xW1jKA/TdHEF5UJytI/AAAAAAAABfQ/zcKdXjFAUx0/s320/picx16.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478616616717010&quot; /&gt;&lt;/a&gt;&lt;br /&gt;As such we can see that the Root1AppModule in the ADF BC layer has been instantiated, and has established a connection with the database, also establishing a transaction.&lt;br /&gt;&lt;br /&gt;If we now return via the Exit button to the Start.jspx page in the UTF, then select the Go Root2AppModuleTaskFlow button we see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-OJ6W6iqhxYo/TdHEGIL_DPI/AAAAAAAABfY/n_TIfIzVFJ0/s1600/picx17.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://3.bp.blogspot.com/-OJ6W6iqhxYo/TdHEGIL_DPI/AAAAAAAABfY/n_TIfIzVFJ0/s320/picx17.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478620608990450&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Note that the 5th record hasn&#039;t been updated to capitals, and indeed the 1st record is the default selected record, not the 5th, implying that we&#039;re not seeing the same cache of data from the midtier, essentially 2 separate transactions with 2 separate Organisations EO caches, and in turn two separate VOs with their own current row record indicators.  This last point shows that the Shared data control scope we set in the task flows has no use when the No Controller Transaction option is used.&lt;br /&gt;&lt;br /&gt;Returning to the JDev log window we see that the second Root2AppModule was instantiated and has separately established its own connection and therefore transaction:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-U2j2K9XdrVg/TdHEGO6glXI/AAAAAAAABfg/zPslGbRqqS8/s1600/picx18.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://4.bp.blogspot.com/-U2j2K9XdrVg/TdHEGO6glXI/AAAAAAAABfg/zPslGbRqqS8/s320/picx18.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478622414738802&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For completeness if we select the Exit button and return to the Start.jspx page, then return to the first task flow we can see the 5th record is still selected and updated:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-C8xxE2blcIo/TdHD7G0qisI/AAAAAAAABfI/SdGrDBhOPjk/s1600/picx15.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-C8xxE2blcIo/TdHD7G0qisI/AAAAAAAABfI/SdGrDBhOPjk/s320/picx15.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478431264180930&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The key point from this example is the fact that each Application Module is instantiated as a root AM and also creates its own connection.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;A chained &quot;No Controller Transaction&quot; task flow example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the previous example in hand, and building upto our final example, in this section I&#039;d like to rearrange our example application such that rather than calling the two task flows separately, we&#039;ll instead chain them together, the 1st calling the 2nd.&lt;br /&gt;&lt;br /&gt;The substantial change to the setup is that of the Root1AppModuleTaskFlow, where we now include a Task Flow Call to the Root2AppModuleTaskFlow, and a small modification to the OrganisationsTable1.jspx page to include a button to navigate to the Root2AppModuleTaskFlow:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-8Jl_HDqNDg8/TdHEGoT_PQI/AAAAAAAABfo/qI5uwycGLAk/s1600/picx19.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 175px;&quot; src=&quot;http://1.bp.blogspot.com/-8Jl_HDqNDg8/TdHEGoT_PQI/AAAAAAAABfo/qI5uwycGLAk/s320/picx19.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478629232491778&quot; /&gt;&lt;/a&gt;&lt;br /&gt;In running the application, we first land in the Start.jspx page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-72S5X4p9j2Q/TdHEG9QVUCI/AAAAAAAABfw/lcWNybAv5yk/s1600/picx20.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://4.bp.blogspot.com/-72S5X4p9j2Q/TdHEG9QVUCI/AAAAAAAABfw/lcWNybAv5yk/s320/picx20.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478634854305826&quot; /&gt;&lt;/a&gt;&lt;br /&gt;At this stage the log window shows no root AMs have been created:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-RbC5Tu57p0A/TdHES1uEjoI/AAAAAAAABf4/p0rtl5LjPMM/s1600/picx21.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://3.bp.blogspot.com/-RbC5Tu57p0A/TdHES1uEjoI/AAAAAAAABf4/p0rtl5LjPMM/s320/picx21.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478838989983362&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On selecting the Go Root1AppModuleTaskFlow button we arrive at the OrganisationsTable1.jspx page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-u61VeilP5F0/TdHES74nqXI/AAAAAAAABgA/_4jRDSiWJC4/s1600/picx22.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-u61VeilP5F0/TdHES74nqXI/AAAAAAAABgA/_4jRDSiWJC4/s320/picx22.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478840644839794&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The log window shows the Root1AppModule has been instantiated and a new connection/transaction created:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-8lTXRCRBDhA/TdHETO0r5XI/AAAAAAAABgI/OcB_hTL8BmI/s1600/picx23.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://3.bp.blogspot.com/-8lTXRCRBDhA/TdHETO0r5XI/AAAAAAAABgI/OcB_hTL8BmI/s320/picx23.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478845728613746&quot; /&gt;&lt;/a&gt;&lt;br /&gt;This time we&#039;ll select and change the 6th record to all caps:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-JO2rkoHwuDI/TdHETY1KfDI/AAAAAAAABgQ/lvb0_MQxYXw/s1600/picx24.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://3.bp.blogspot.com/-JO2rkoHwuDI/TdHETY1KfDI/AAAAAAAABgQ/lvb0_MQxYXw/s320/picx24.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478848414972978&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Now we&#039;ll select the Go Root2AppModuleTaskFlow button that&#039;s located in the OrganisationsTable1.jspx page.  On navigating to the new page we see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-cMubQb730rQ/TdHETpuBSFI/AAAAAAAABgY/SB2oOHKucZU/s1600/picx25.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://3.bp.blogspot.com/-cMubQb730rQ/TdHETpuBSFI/AAAAAAAABgY/SB2oOHKucZU/s320/picx25.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607478852948412498&quot; /&gt;&lt;/a&gt;&lt;br /&gt;As can be seen, the current row indicator lies on the first row and the 6th row hasn&#039;t been modified, exactly the same as the last example.  In addition in the JDev log window we can see the establishment of the new root AM and connection/transaction:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-cx0FMBIpGD0/TdHEeKmcC_I/AAAAAAAABgg/ARxvngl2NdM/s1600/picx26.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;&quot; src=&quot;http://4.bp.blogspot.com/-cx0FMBIpGD0/TdHEeKmcC_I/AAAAAAAABgg/ARxvngl2NdM/s320/picx26.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479033573673970&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The conclusion at this point of the blog post is chaining task flows when the No Controller Transaction options are used has no effect on the root AMs and the establishment of connections/transaction.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Always Begin New Transaction and Always Use Existing transaction example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the previous 2 examples, we can see with the No Controller Transaction option in use for our bounded task flows, the design of our root Application Modules definitely has an effect on number of transactions and therefore connections taken out from the database.&lt;br /&gt;&lt;br /&gt;With the following third and final example, we&#039;ll introduce BTF transaction options that relegate the transactional behaviour of the underlying ADF BC business services to the task flows themselves.&lt;br /&gt;&lt;br /&gt;Taking our original Root1AppModuleTaskFlow, we&#039;ll now change its transaction options to use Always Begin New Transaction and an Isolated data control scope:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-8x9Ol9ICT7o/TdHEecR30nI/AAAAAAAABgo/w7Mcg7NTqgk/s1600/picx27.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;&quot; src=&quot;http://4.bp.blogspot.com/-8x9Ol9ICT7o/TdHEecR30nI/AAAAAAAABgo/w7Mcg7NTqgk/s320/picx27.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479038319252082&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For our second task flow Root2AppModuleTaskFlow, which we intend to call from Root1AppModuleTaskFlow, we&#039;ll change its transaction options to use Always Use Existing Transaction.  The IDE in this case enforces a Shared data control scope:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-HJg_xNCJNDs/TdHEeoRh51I/AAAAAAAABgw/oZczhGSdpVw/s1600/picx28.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 170px;&quot; src=&quot;http://3.bp.blogspot.com/-HJg_xNCJNDs/TdHEeoRh51I/AAAAAAAABgw/oZczhGSdpVw/s320/picx28.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479041539041106&quot; /&gt;&lt;/a&gt;&lt;br /&gt;From the task flow transaction options described at the beginning of this post via the Fusion Dev Guide, the options we&#039;ve selected here should mean the Root1AppModuleTaskFlow establishes the transaction and therefore connection, and the second Root2AppModuleTaskFlow should borrow/attach itself to the same transaction and connection.  However from our previous examples with the No Controller Transaction option, surely the root Application Modules will enforce they both create their own transaction/connections?&lt;br /&gt;&lt;br /&gt;Running this application we first hit out Start.jspx page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-2LEHWoWw5Z8/TdHEerPPk4I/AAAAAAAABg4/tjBnzib_4-8/s1600/picx29.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://1.bp.blogspot.com/-2LEHWoWw5Z8/TdHEerPPk4I/AAAAAAAABg4/tjBnzib_4-8/s320/picx29.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479042334757762&quot; /&gt;&lt;/a&gt;&lt;br /&gt;And our log window shows no AMs have been created or established connections at this stage:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-KZu04zKzls4/TdHEe6UlJOI/AAAAAAAABhA/efUdHOBg9Qs/s1600/picx30.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;&quot; src=&quot;http://4.bp.blogspot.com/-KZu04zKzls4/TdHEe6UlJOI/AAAAAAAABhA/efUdHOBg9Qs/s320/picx30.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479046383674594&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On navigating to Root1AppModuleTaskFlow via the associated button in the Start.jspx page we see very similar to previously:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-t7PnGdaTT4Y/TdHEsE76LJI/AAAAAAAABhI/FR-LDQkiBjc/s1600/picx31.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-t7PnGdaTT4Y/TdHEsE76LJI/AAAAAAAABhI/FR-LDQkiBjc/s320/picx31.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479272571284626&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Yet our log window shows something interesting:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-hEPH4XWWUbU/TdHEsIZmYpI/AAAAAAAABhQ/19KhM9rOG6E/s1600/picx32.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;&quot; src=&quot;http://2.bp.blogspot.com/-hEPH4XWWUbU/TdHEsIZmYpI/AAAAAAAABhQ/19KhM9rOG6E/s320/picx32.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479273501123218&quot; /&gt;&lt;/a&gt;&lt;br /&gt;We can see that the Root1AppModule has been created as a root AM, then it&#039;s established a connection via the prepareSession() method.  Oddly however we can see a further Root1AppModule has been created?  Even more oddly this secondary AM is not a root AM, but a nested AM?  By deduction as there are no other log entries, this second instance of Root1AppModule must be nested under the root Root1AppModule?  Interesting, but let&#039;s continue with the example.&lt;br /&gt;&lt;br /&gt;Now that we&#039;ve entered the Root1AppModuleTaskFlow, let&#039;s modify the 7th record:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-XBrCW49qxFw/TdHEseEer3I/AAAAAAAABhY/11EobnzRbmc/s1600/picx33.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://3.bp.blogspot.com/-XBrCW49qxFw/TdHEseEer3I/AAAAAAAABhY/11EobnzRbmc/s320/picx33.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479279318118258&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Followed by selecting the button to navigate to the Root2AppModuleTaskFlow, we then see on visiting the OrganisationsTable2.jspx page of the second task flow:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-4xgvYudd5so/TdHEsvpwgiI/AAAAAAAABhg/Q56ziUtfe-M/s1600/picx34.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;&quot; src=&quot;http://2.bp.blogspot.com/-4xgvYudd5so/TdHEsvpwgiI/AAAAAAAABhg/Q56ziUtfe-M/s320/picx34.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479284037878306&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Note the 7th record&#039;s data, and where the current row indicator is located!  Before drawing conclusions, let&#039;s look at the log window&#039;s output:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-xaJpgvc5g7Y/TdHEs9cQjzI/AAAAAAAABho/xyhu4r-hrhk/s1600/picx35.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;&quot; src=&quot;http://3.bp.blogspot.com/-xaJpgvc5g7Y/TdHEs9cQjzI/AAAAAAAABho/xyhu4r-hrhk/s320/picx35.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5607479287739354930&quot; /&gt;&lt;/a&gt;&lt;br /&gt;From the log window we can see a 3rd AM has been instantiated, this time a Root2AppModule as a nested AM.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;What&#039;s going on?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Without a key bit of information from Steve Muench&#039;s &lt;a href=&quot;http://forums.oracle.com/forums/thread.jspa?messageID=4022731&quot;&gt;reply&lt;/a&gt; to my previous OTN Forum&#039;s post, it may be hard to determine the BTF behaviour in the last scenario.  In context of ADF BC and BTFs given the right combination of transaction and data control scope options, the framework will automatically nest your AMs regardless if they&#039;re a root AM.  &lt;br /&gt;&lt;br /&gt;So when we&#039;re running our application, on calling the first task flow, we see:&lt;br /&gt;&lt;br /&gt;a) A single root AM created based on Root1AppModule, as the framework needs at least a signle root AM to drive the transactions and connections.  Let&#039;s refer to this as Root1AppModule1.&lt;br /&gt;&lt;br /&gt;b) A second instance of Root1AppModule as a nested AM under its own root instance.  Let&#039;s refer to this as Root1AppModule2.  This is a little odd, but as the framework automatically nests the AMs of the called BTF under a root AM instance, it&#039;s using the first AM encountered for dual purposes, essentially nesting Root1AppModule2 under Root1AppModule1.&lt;br /&gt;&lt;br /&gt;c) By the time we hit our second BTF, only one instance of Root2AppModule is created, nested under Root1AppModule1.  Let&#039;s refer to this as Root2AppModule1.&lt;br /&gt;&lt;br /&gt;To summarize at this point, our AM structure at runtime is:&lt;br /&gt;&lt;br /&gt;(Root) Root1AppModule1&lt;br /&gt;(Nested Level 1) Root1AppModule2&lt;br /&gt;(Nested Level 1) Root2AppModule1&lt;br /&gt;&lt;br /&gt;Given that we now know nesting is occurring, it does explain why we&#039;re seeing the changes to the 7th record in both BTF OrganisationTable pages.  Only if separate root AMs were used would there be separate EO caches for the Organisations table.  However as the BTFs have nested the AMs, they&#039;re essentially sharing the same EO cache.  So a change to data in one BTF will be reflected in the second, as long as they share transactions and are ultimately based on the same EO.&lt;br /&gt;&lt;br /&gt;The final mystery is why if we can see the data changes are reflected in each BTF, how come the current row indicators of the underlying VOs are out of sync?  This is simply explained by the fact that with the two different VOs defined in each AM, namely OrganisationsView1 &amp; OrganisationsView2, at runtime essentially they are both instantiated separately, even though ultimately they exist under the same Root1AppModule1 at runtime and share the same EO cache.  As such both VOs maintain their own separate row currency, and other state carried by the ADF BC View Objects.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Changing AM connection configurations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point we may start to ask how the framework is deciding to nest the AMs under the one parent AM? Is the underlying framework being smart enough to look at the database connections for the separately defined root AMs, and in determining they&#039;re one and the same, nesting the AMs as it doesn&#039;t matter when they both connect to the same database?&lt;br /&gt;&lt;br /&gt;From my testing it appears to make no difference if you change the connections.  It&#039;s essentially the first AM whose connection details are used, and it&#039;s just assumed the second AM uses the same connection details.  The further inference of this is it&#039;s just assumed that all the database objects required by the second root AM database connection are available to the first.&lt;br /&gt;&lt;br /&gt;This has two knock on effects:&lt;br /&gt;&lt;br /&gt;1) If both AMs did connect to the same database schema, if the first connection is missing privileges on objects required by the second AM&#039;s objects, you&#039;ll hit database privilege errors during runtime when those second AM objects interact with the database (e.q. at query and DML time).&lt;br /&gt;&lt;br /&gt;2) If you actually use your root AMs to connect to entirely different data sources, such as different databases, this automatic nesting will cause your application to fail.&lt;br /&gt;&lt;br /&gt;The first here is easily solved with some database privilege fixes.  For the second, this implies you should move back to the No Controller Transaction options to return to an application where the root AMs use their own connections.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Some caveats&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If the automatic nesting functionality proves useful to you, be warned of one caveat.  From the OTN Forum replies from Steve Muench, even though he describes the fact the framework will automatically nest your AMs for the purposes of connections/transactions, don&#039;t assume this means other AM features are joined or always will display the same behaviour.  To quote: &lt;br /&gt;&lt;blockquote&gt;In fact, in a future release we will likely be changing that implementation detail so that the AMs are always used from their own AM pool, however they will share a transaction/connection.&lt;/blockquote&gt;A second caveat is around the mixing of BTF transaction options.  Notably the No Controller Transaction option because of its inherit different use of root AMs to that of the normal transaction options would imply that mixing No Controller Transaction with other BTFs not using this option could leave to some disturbing and unpredictable behaviour around transactions and connections.  Either use No Controller Transaction exclusively, or not at all.&lt;br /&gt;&lt;br /&gt;A third and final caveat is this and the previous post that describe the transaction behaviours is in context of the interaction with ADF Business Components.  Readers should not assume that the same transaction behaviour will be exhibited by different underlying business services such as EJBs, POJOs or Web Services.   As example Web Services don&#039;t have the concept of transactions, so we can probably guess that there&#039;s no point using anything but the No Controller Transaction option .... however again you need to experiment with these alternatives yourself, don&#039;t base your conclusions on this post.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The implication for ADF Libraries&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Andrejus Baranovski&#039;s blog &lt;a href=&quot;http://andrejusb.blogspot.com/2010/10/how-to-reduce-database-connections-and.html&quot;&gt;post&lt;/a&gt; he shows a technique for mashing the Model projects of several ADF Libraries containing BTFs and their own AMs into a single Model project, such that a single root AM is defined across all BTFs at design time, to be reused by all ADF Libraries.  With this blog post we see we while Andrejus&#039;s technique is fine for those relying on the No Controller Transaction options of BTFs, such an extended build of ADF Libraries and their AM Model projects is not essential to minimize the number of connections of our application.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Feedback&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This blog post and the previous have taken a lot of research and testing to arrive at it&#039;s conclusions. If future readers find anything wrong, or find alternative scenarios where what&#039;s written here doesn&#039;t pan out, it would be greatly appreciated if you could leave a comment to that effect, such that this post doesn&#039;t mislead future readers.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-7044226007500009087?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/ZNMoNXDp1rI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1836135&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 16 May 2011 20:25:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1836135</guid>
 <comments>http://chrismuir.sys-con.com/node/1836135#feedback</comments>
</item>
<item>
 <title>A special event for ADF EMG members - world wide and virtual</title>
 <link>http://chrismuir.sys-con.com/node/1791288</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.oracleimg.com/ocom/groups/public/@ocom/documents/digitalasset/352021.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 360px; height: 129px;&quot; src=&quot;http://www.oracleimg.com/ocom/groups/public/@ocom/documents/digitalasset/352021.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I&#039;m happy to announce that three key participants of the &lt;a href=&quot;http://groups.google.com/group/adf-methodology&quot;&gt;ADF EMG&lt;/a&gt; will be presenting alongside Oracle staff at the upcoming &quot;OTN Virtual Developer Day - Rich Enterprise Applications&quot; .... a virtual conference on all things &quot;ADF&quot; in early May, open to the general public.&lt;br /&gt;&lt;br /&gt;Jean-Marc Desvaux, John Stegeman and Sten Vesterli will be presenting under the &quot;Best Practices&quot; stream on the following topics:&lt;br /&gt;&lt;br /&gt;* ADF Security in a Project-Centric Environment - An ADF Case Study (Jean-Marc)&lt;br /&gt;* The bit every one forgets: Unit testing your ADF applications with JUnit (John)&lt;br /&gt;* Starting an Enterprise ADF project (Sten)&lt;br /&gt;&lt;br /&gt;I need not remind members that these three gentlemen are well known in the ADF community for their volunteer efforts in writing blogs and presenting, writing OTN forum papers, answering OTN forum questions, and even an upcoming ADF book!&lt;br /&gt;&lt;br /&gt;Overall what I like about this event is there&#039;s a good opportunity to pick and choose across 5 streams.  As such depending on your experience and background, you can dip your toe into all sorts of different ADF topics, from basics to best practices, all from the comfort of you&#039;re own desk.&lt;br /&gt;&lt;br /&gt;The online conference will be repeated in several time zones to ensure everyone gets a chance to attend:&lt;br /&gt;&lt;br /&gt;N. America - Tuesday, May 3rd, 2011&lt;br /&gt;08:00 a.m. – 12:30 p.m. US PT&lt;br /&gt;&lt;br /&gt;Europe / Russia - Tuesday, May 10th, 2011&lt;br /&gt;08:00 a.m. – 12:30 p.m. U.K. Time&lt;br /&gt;9:00 a.m. – 1:30 p.m. CET&lt;br /&gt;&lt;br /&gt;Central / South America - Tuesday, May 17th, 2011&lt;br /&gt;08:00 a.m. – 12:30 p.m. US Eastern Time&lt;br /&gt;09:00 a.m. – 1:30 p.m. Brazil time&lt;br /&gt;&lt;br /&gt;Asia Pacific - Tuesday, May 24th, 2011&lt;br /&gt;08:00 a.m. – 12:30 p.m. India Standard Time&lt;br /&gt;10:30 a.m. – 02:30 p.m. Beijing Time&lt;br /&gt;&lt;br /&gt;If you&#039;re interested in attending please follow this &lt;a href=&quot;http://www.oracle.com/go/?&amp;amp;Src=7011174&amp;amp;Act=172&amp;amp;pcode=WWMK10034207MPP043&quot;&gt;link&lt;/a&gt; to register.&lt;br /&gt;&lt;br /&gt;Good luck to Jean-Marc, John and Sten, I look forward to hearing them present, all 3 always have valuable information to share.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-3999796383567467484?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/emM7JDuDF2g&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1791288&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 12 Apr 2011 08:14:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1791288</guid>
 <comments>http://chrismuir.sys-con.com/node/1791288#feedback</comments>
</item>
<item>
 <title>af:table – Restoring the basic browser copy functionality</title>
 <link>http://chrismuir.sys-con.com/node/1778485</link>
 <description>One of the first things any computing user learns is how to select text with the mouse or keyboard, then copy &amp;amp; paste the selected text.  This simple functionality is supported in most applications including browsers, making it a very familiar facility to all users.  &lt;br /&gt;&lt;br /&gt;There are specific scenarios under certain browsers with the af:table component in ADF Faces RC 11.1.1.4.0 (also verified in 11.1.1.2.0) where the ability to select and copy text is absent.&lt;br /&gt;&lt;br /&gt;This post identifies the specific scenarios, as well as a potential workaround for Internet Explorer (only).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The Issue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The following picture from Internet Explorer 7 (also replicated in IE8) shows a simple af:table without its selectionListener and rowSelection properties set.&lt;br /&gt;&lt;br /&gt;If you look closely you can see with my mouse I&#039;ve selected and highlighted the &quot;Hong&quot; in &quot;HongKong&quot;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-pgOhdnuBoGw/TZlPaboaOUI/AAAAAAAABbA/z446mmgLPTs/s1600/t01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 314px; height: 320px;&quot; src=&quot;http://3.bp.blogspot.com/-pgOhdnuBoGw/TZlPaboaOUI/AAAAAAAABbA/z446mmgLPTs/s320/t01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587727869622594&quot; /&gt;&lt;/a&gt;While I can&#039;t demonstrate it in a screenshot, if you were to right click on the selected text you would see IE&#039;s standard right mouse menu with options such as Copy.&lt;br /&gt;&lt;br /&gt;Here we can see similar functionality in Firefox 3.6, with the &quot;Kingdom&quot; in &quot;United Kingdom&quot; selected:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-d648Jo4hqCc/TZlPapGRPLI/AAAAAAAABbI/CGDgeJKa1vA/s1600/t02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 304px;&quot; src=&quot;http://3.bp.blogspot.com/-d648Jo4hqCc/TZlPapGRPLI/AAAAAAAABbI/CGDgeJKa1vA/s320/t02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587731484523698&quot; /&gt;&lt;/a&gt;And finally Chrome 10, the &quot;Can&quot; in &quot;Canada&quot; selected:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-zjnpToy2_tI/TZlPax4AM3I/AAAAAAAABbQ/HDtvZn_nGfY/s1600/t03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 305px; height: 320px;&quot; src=&quot;http://3.bp.blogspot.com/-zjnpToy2_tI/TZlPax4AM3I/AAAAAAAABbQ/HDtvZn_nGfY/s320/t03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587733840606066&quot; /&gt;&lt;/a&gt;(Unfortunately I don&#039;t have access to Safari to test its behaviour)&lt;br /&gt;&lt;br /&gt;In all of these browsers it would be a reasonable requirement that the user would want to be able to highlight text and copy it to some other application running on their desktop.&lt;br /&gt;&lt;br /&gt;Let&#039;s revisit the same af:table within each browser, this time with the selectionListener and rowSelection properties set.&lt;br /&gt;&lt;br /&gt;The following picture shows IE7 (also confirmed in IE8) where you can see the effects of the selectionListener and rowSelection properties, highlighting the selected row.  But what you can&#039;t do with your mouse is select any text.  This disables the user from copying any text from the table:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-2HarDKNTsps/TZlPbGQsxRI/AAAAAAAABbY/Hfqxd9aOraQ/s1600/t04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 314px; height: 320px;&quot; src=&quot;http://4.bp.blogspot.com/-2HarDKNTsps/TZlPbGQsxRI/AAAAAAAABbY/Hfqxd9aOraQ/s320/t04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587739312899346&quot; /&gt;&lt;/a&gt;Yet oddly in Firefox 3.6 the user can do both:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-Blx5Xidw6NA/TZlPbFHeGXI/AAAAAAAABbg/tUooUgKikv4/s1600/t05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 304px;&quot; src=&quot;http://2.bp.blogspot.com/-Blx5Xidw6NA/TZlPbFHeGXI/AAAAAAAABbg/tUooUgKikv4/s320/t05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587739005753714&quot; /&gt;&lt;/a&gt;And in Chrome 10 they can too:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-iTJOAwYz9bg/TZlPesvUDGI/AAAAAAAABbo/LVTpm_lhXFo/s1600/t06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 305px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/-iTJOAwYz9bg/TZlPesvUDGI/AAAAAAAABbo/LVTpm_lhXFo/s320/t06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5591587801181457506&quot; /&gt;&lt;/a&gt;The behaviour or lack of it in Internet Explorer is certainly undesirable, even more so as most corporate environments will choose IE as their preferred browser.  However via bug 9830307 Oracle has noted that this is in fact by design, and Oracle is planning to remove the functionality from the other browsers too.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The following technique demonstrates a solution for Internet Explorer displaying an af:table with its selectionListener and rowSelector properties set.&lt;br /&gt;&lt;br /&gt;The technique requires us to create our own Copy contextMenu option for the table, and then via a combination of JavaScript, af:clientListener and af:clientAttribute tags, we&#039;ll copy the user selected table cell&#039;s data to the clipboard.  &lt;br /&gt;&lt;br /&gt;Starting out this is the code for the page containing the af:table before any modifications:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;?xml version=&#039;1.0&#039; encoding=&#039;UTF-8&#039;?&gt;&lt;br /&gt;&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.1&quot; xmlns:f=&quot;http://java.sun.com/jsf/core&quot;&lt;br /&gt;          xmlns:h=&quot;http://java.sun.com/jsf/html&quot; xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt;&lt;br /&gt;  &lt;jsp:directive.page contentType=&quot;text/html;charset=UTF-8&quot;&gt;&lt;/jsp:directive.page&gt;&lt;br /&gt;  &lt;f:view&gt;&lt;br /&gt;    &lt;af:document id=&quot;d1&quot; title=&quot;View Countries&quot;&gt;&lt;br /&gt;      &lt;af:messages id=&quot;m1&quot;&gt;&lt;/af:messages&gt;&lt;br /&gt;      &lt;af:form id=&quot;f1&quot;&gt;&lt;br /&gt;        &lt;af:table value=&quot;#{bindings.CountriesView1.collectionModel}&quot; var=&quot;row&quot;&lt;br /&gt;                  rows=&quot;#{bindings.CountriesView1.rangeSize}&quot;&lt;br /&gt;                  emptyText=&quot;#{bindings.CountriesView1.viewable ? &#039;No data to display.&#039; : &#039;Access Denied.&#039;}&quot;&lt;br /&gt;                  fetchSize=&quot;#{bindings.CountriesView1.rangeSize}&quot; rowBandingInterval=&quot;0&quot;&lt;br /&gt;                  selectedRowKeys=&quot;#{bindings.CountriesView1.collectionModel.selectedRow}&quot;&lt;br /&gt;                  selectionListener=&quot;#{bindings.CountriesView1.collectionModel.makeCurrent}&quot; rowSelection=&quot;single&quot;&lt;br /&gt;                                  id=&quot;t1&quot; columnStretching=&quot;last&quot;&gt;  &lt;br /&gt;          &lt;af:column sortProperty=&quot;CountryId&quot; sortable=&quot;false&quot;&lt;br /&gt;                     headerText=&quot;#{bindings.CountriesView1.hints.CountryId.label}&quot; id=&quot;c1&quot;&gt;&lt;br /&gt;            &lt;af:outputText value=&quot;#{row.CountryId}&quot; id=&quot;ot1&quot;&gt;&lt;/af:outputText&gt;&lt;br /&gt;          &lt;/af:column&gt;&lt;br /&gt;          &lt;af:column sortProperty=&quot;CountryName&quot; sortable=&quot;false&quot;&lt;br /&gt;                     headerText=&quot;#{bindings.CountriesView1.hints.CountryName.label}&quot; id=&quot;c2&quot;&gt;&lt;br /&gt;            &lt;af:outputText value=&quot;#{row.CountryName}&quot; id=&quot;ot2&quot;&gt;&lt;/af:outputText&gt;&lt;br /&gt;          &lt;/af:column&gt;&lt;br /&gt;        &lt;/af:table&gt;&lt;br /&gt;      &lt;/af:form&gt;&lt;br /&gt;    &lt;/af:document&gt;&lt;br /&gt;  &lt;/f:view&gt;&lt;br /&gt;&lt;/jsp:root&gt;&lt;/pre&gt;We then extend the af:table with a contextMenu facet, which includes an af:clientListener:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;f:facet name=&quot;contextMenu&quot;&gt;&lt;br /&gt;  &lt;af:popup id=&quot;pMenu&quot; contentDelivery=&quot;lazyUncached&quot;&gt;&lt;br /&gt;    &lt;af:menu id=&quot;mMenu&quot;&gt;&lt;br /&gt;       &lt;af:commandMenuItem text=&quot;Copy&quot; id=&quot;cmiCopy&quot;&gt;&lt;br /&gt;          &lt;af:clientListener method=&quot;copyMenu&quot; type=&quot;action&quot;&gt;&lt;/af:clientListener&gt;&lt;br /&gt;       &lt;/af:commandMenuItem&gt;&lt;br /&gt;    &lt;/af:menu&gt;&lt;br /&gt;  &lt;/af:popup&gt;&lt;br /&gt;&lt;/f:facet&gt;&lt;/pre&gt;For each column we wish to provide the copy functionality, we extend each by including an af:clientListener tag and af:clientAttribute tag as follows:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;af:column sortProperty=&quot;CountryId&quot; sortable=&quot;false&quot;&lt;br /&gt;                     headerText=&quot;#{bindings.CountriesView1.hints.CountryId.label}&quot; id=&quot;c1&quot;&gt;&lt;br /&gt;  &lt;af:outputText value=&quot;#{row.CountryId}&quot; id=&quot;ot1&quot;&gt;&lt;br /&gt;    &lt;af:clientListener method=&quot;captureTableFieldName()&quot; type=&quot;contextMenu&quot;&gt;&lt;/af:clientListener&gt;&lt;br /&gt;    &lt;af:clientAttribute name=&quot;ItemValue&quot; value=&quot;#{row.CountryId}&quot;&gt;&lt;/af:clientAttribute&gt;&lt;br /&gt;  &lt;/af:outputText&gt;&lt;br /&gt;&lt;/af:column&gt;&lt;/pre&gt;....note the use of the af:clientListener and af:clientAttribute tags *within* the af:outputText.  Also note how the af:clientAttribute&#039;s value EL expression has been changed to match that of the parent af:outputText value.&lt;br /&gt;&lt;br /&gt;From the code above, each af:clientListener makes a call to separate JavaScript functions captureTableFieldName() and copyMenu.  We provide these in JavaScript attached to the page :&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;af:resource type=&quot;javascript&quot;&gt;&lt;br /&gt;  var globalLastVisitedField = null;&lt;br /&gt;  &lt;br /&gt;  /* &lt;br /&gt;   * Given the user clicking on a field in a table, captures the field name to be later used by the copyMenu&lt;br /&gt;   * function&lt;br /&gt;   */&lt;br /&gt;  function captureTableFieldName() {&lt;br /&gt;    return function (evt) {&lt;br /&gt;      evt.cancel();&lt;br /&gt;      globalLastVisitedField = evt.getSource();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  /* &lt;br /&gt;   * Function referenced from the clientListener on the copy menu option&lt;br /&gt;   */&lt;br /&gt;  function copyMenu(evt) {&lt;br /&gt;    // Copy the last visited field to the clipboard&lt;br /&gt;    if (globalLastVisitedField == null) {&lt;br /&gt;      alert(&quot;copyMenu() Error: No field could be identified to be in focus&quot;);&lt;br /&gt;    }&lt;br /&gt;    else if (navigator.appName != &quot;Microsoft Internet Explorer&quot;) {&lt;br /&gt;      alert(&quot;Copy function is only supported in Microsoft Internet Explorer&quot;);&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      var txt = globalLastVisitedField.getProperty(&quot;ItemValue&quot;);&lt;br /&gt;      window.clipboardData.setData(&#039;Text&#039;, &quot;&quot; + txt);&lt;br /&gt;    }&lt;br /&gt;    evt.cancel();&lt;br /&gt;  }&lt;br /&gt;&lt;/af:resource&gt;&lt;/pre&gt;The complete code for the page is as follows:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;?xml version=&#039;1.0&#039; encoding=&#039;UTF-8&#039;?&gt;&lt;br /&gt;&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.1&quot; xmlns:f=&quot;http://java.sun.com/jsf/core&quot;&lt;br /&gt;          xmlns:h=&quot;http://java.sun.com/jsf/html&quot; xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt;&lt;br /&gt;  &lt;jsp:directive.page contentType=&quot;text/html;charset=UTF-8&quot;&gt;&lt;/jsp:directive.page&gt;&lt;br /&gt;  &lt;f:view&gt;&lt;br /&gt;    &lt;af:document id=&quot;d1&quot; title=&quot;View Countries&quot;&gt;&lt;br /&gt;      &lt;af:resource type=&quot;javascript&quot;&gt;&lt;br /&gt;        var globalLastVisitedField = null;&lt;br /&gt;        &lt;br /&gt;        /* &lt;br /&gt;         * Given the user clicking on a field in a table, captures the field name to be later used by the copyMenu&lt;br /&gt;         * function&lt;br /&gt;         */&lt;br /&gt;        function captureTableFieldName() {&lt;br /&gt;          return function (evt) {&lt;br /&gt;            evt.cancel();&lt;br /&gt;            globalLastVisitedField = evt.getSource();&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        /* &lt;br /&gt;         * Function referenced from the clientListener on the copy menu option&lt;br /&gt;         */&lt;br /&gt;        function copyMenu(evt) {&lt;br /&gt;          // Copy the last visited field to the clipboard&lt;br /&gt;          if (globalLastVisitedField == null) {&lt;br /&gt;            alert(&quot;copyMenu() Error: No field could be identified to be in focus&quot;);&lt;br /&gt;          }&lt;br /&gt;          else if (navigator.appName != &quot;Microsoft Internet Explorer&quot;) {&lt;br /&gt;            alert(&quot;Copy function is only supported in Microsoft Internet Explorer&quot;);&lt;br /&gt;          }&lt;br /&gt;          else {&lt;br /&gt;            var txt = globalLastVisitedField.getProperty(&quot;ItemValue&quot;);&lt;br /&gt;            window.clipboardData.setData(&#039;Text&#039;, &quot;&quot; + txt);&lt;br /&gt;          }&lt;br /&gt;          evt.cancel();&lt;br /&gt;        }&lt;br /&gt;      &lt;/af:resource&gt;&lt;br /&gt;      &lt;af:messages id=&quot;m1&quot;&gt;&lt;/af:messages&gt;&lt;br /&gt;      &lt;af:form id=&quot;f1&quot;&gt;&lt;br /&gt;        &lt;af:table value=&quot;#{bindings.CountriesView1.collectionModel}&quot; var=&quot;row&quot;&lt;br /&gt;                  rows=&quot;#{bindings.CountriesView1.rangeSize}&quot;&lt;br /&gt;                  emptyText=&quot;#{bindings.CountriesView1.viewable ? &#039;No data to display.&#039; : &#039;Access Denied.&#039;}&quot;&lt;br /&gt;                  fetchSize=&quot;#{bindings.CountriesView1.rangeSize}&quot; rowBandingInterval=&quot;0&quot;&lt;br /&gt;                  selectedRowKeys=&quot;#{bindings.CountriesView1.collectionModel.selectedRow}&quot;&lt;br /&gt;                  selectionListener=&quot;#{bindings.CountriesView1.collectionModel.makeCurrent}&quot; rowSelection=&quot;single&quot;&lt;br /&gt;                  id=&quot;t1&quot; columnStretching=&quot;last&quot;&gt;&lt;br /&gt;          &lt;f:facet name=&quot;contextMenu&quot;&gt;&lt;br /&gt;            &lt;af:popup id=&quot;pMenu&quot; contentDelivery=&quot;lazyUncached&quot;&gt;&lt;br /&gt;              &lt;af:menu id=&quot;mMenu&quot;&gt;&lt;br /&gt;                &lt;af:commandMenuItem text=&quot;Copy&quot; id=&quot;cmiCopy&quot;&gt;&lt;br /&gt;                  &lt;af:clientListener method=&quot;copyMenu&quot; type=&quot;action&quot;&gt;&lt;/af:clientListener&gt;&lt;br /&gt;                &lt;/af:commandMenuItem&gt;&lt;br /&gt;              &lt;/af:menu&gt;&lt;br /&gt;            &lt;/af:popup&gt;&lt;br /&gt;          &lt;/f:facet&gt;&lt;br /&gt;          &lt;af:column sortProperty=&quot;CountryId&quot; sortable=&quot;false&quot;&lt;br /&gt;                     headerText=&quot;#{bindings.CountriesView1.hints.CountryId.label}&quot; id=&quot;c1&quot;&gt;&lt;br /&gt;            &lt;af:outputText value=&quot;#{row.CountryId}&quot; id=&quot;ot1&quot;&gt;&lt;br /&gt;              &lt;af:clientListener method=&quot;captureTableFieldName()&quot; type=&quot;contextMenu&quot;&gt;&lt;/af:clientListener&gt;&lt;br /&gt;              &lt;af:clientAttribute name=&quot;ItemValue&quot; value=&quot;#{row.CountryId}&quot;&gt;&lt;/af:clientAttribute&gt;&lt;br /&gt;            &lt;/af:outputText&gt;&lt;br /&gt;          &lt;/af:column&gt;&lt;br /&gt;          &lt;af:column sortProperty=&quot;CountryName&quot; sortable=&quot;false&quot;&lt;br /&gt;                     headerText=&quot;#{bindings.CountriesView1.hints.CountryName.label}&quot; id=&quot;c2&quot;&gt;&lt;br /&gt;            &lt;af:outputText value=&quot;#{row.CountryName}&quot; id=&quot;ot2&quot;&gt;&lt;br /&gt;              &lt;af:clientListener method=&quot;captureTableFieldName()&quot; type=&quot;contextMenu&quot;&gt;&lt;/af:clientListener&gt;&lt;br /&gt;              &lt;af:clientAttribute name=&quot;ItemValue&quot; value=&quot;#{row.CountryName}&quot;&gt;&lt;/af:clientAttribute&gt;&lt;br /&gt;            &lt;/af:outputText&gt;&lt;br /&gt;          &lt;/af:column&gt;&lt;br /&gt;        &lt;/af:table&gt;&lt;br /&gt;      &lt;/af:form&gt;&lt;br /&gt;    &lt;/af:document&gt;&lt;br /&gt;  &lt;/f:view&gt;&lt;br /&gt;&lt;/jsp:root&gt;&lt;/pre&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;How The Solution Works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When the user wants to invoke the Copy function, there&#039;s effectively two actions.  First they right click the individual af:outputText rendered in a cell of the table.  Second after the contextMenu appears as a result of the right click, the user then left clicks on the Copy af:commandMenuItem.  The action of selecting the af:commandMenuItem obscures the table cell clicked.  As such the two distinct operations require we handle them separately:&lt;br /&gt;&lt;br /&gt;1) On the first right click we capture the name of the field.  This is what the af:clientListener within the af:outputText field does, by calling captureTableFieldName() storing the field name as a JavaScript global to be retrieved later.&lt;br /&gt;&lt;br /&gt;2) On the left click on the Copy menu option that appears in the contextMenu, the af:clientListener within the af:commandMenuItem calls the copyMenu JavaScript function.&lt;br /&gt;&lt;br /&gt;The copyMenu function armed with the field name captured and stored in the JavaScript global from step 1, retrieves the relating &quot;ItemValue&quot; property which is the value from the af:clientAttribute tag within the af:outputText.  It then copies the relating value to the Browser&#039;s clipboard.&lt;br /&gt;&lt;br /&gt;Note the call to window.clipboardData.setData.  This is the limiting code that makes this solution only useful in Internet Explorer.  From &lt;a href=&quot;http://stackoverflow.com/questions/233719/is-it-possible-to-read-the-clipboard-in-firefox-safari-and-chrome-using-javascri&quot;&gt;research&lt;/a&gt; there isn&#039;t a simple solution available in other browsers.  As such in this example we simply alert the user the functionality is only supported in IE.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Limitations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From a design time point of view, having to add the af:clientListener and af:clientAttribute to each column is certainly a pain.  If anybody can think of a simpler solution your comments would be appreciated.&lt;br /&gt;&lt;br /&gt;From a runtime point of view, as already explained the workaround is specific to Internet Explorer.&lt;br /&gt;&lt;br /&gt;Though we haven&#039;t undertaken significant amounts of testing we&#039;ve also found limitations in applying this to check boxes and date fields.  In the case of check boxes we can&#039;t seem to derive the underlying value, and with the date field we sometimes get the date and time in the wrong format.  There&#039;s probably solves for both of these issues but beyond the general technique described here.&lt;br /&gt;&lt;br /&gt;As usual developers adopting this code should be careful to test in their own environments as it hasn&#039;t been rigorously tested in a production environment.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Credit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thanks to Penny Cookson from &lt;a href=&quot;http://www.sagecomputing.com.au/&quot;&gt;SAGE Computing Services&lt;/a&gt; for the original solution.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-9201987882253595302?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/O17B2zDNpWw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1778485&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 04 Apr 2011 00:45:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1778485</guid>
 <comments>http://chrismuir.sys-con.com/node/1778485#feedback</comments>
</item>
<item>
 <title>SAGE Computing Services Success: Forms upgrade to 11g</title>
 <link>http://chrismuir.sys-con.com/node/1774505</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.sagecomputing.com.au/sageWeb2.0LogoSmall.gif&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 122px;&quot; src=&quot;http://www.sagecomputing.com.au/sageWeb2.0LogoSmall.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;I don&#039;t normally write these sort of blog posts, but Oracle&#039;s been keen to let customers know how simple the upgrade of Oracle Forms 10g to 11g is.  One of the major sticking points for customers is that this requires a move from Oracle Application Server and OC4J to WebLogic Server, a foreign application server platform to many traditional Oracle sites.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.sagecomputing.com.au&quot;&gt;SAGE Computing Services&lt;/a&gt; assisted the &lt;a href=&quot;http://www.dtf.wa.gov.au&quot;&gt;Department of Treasury and Finance&lt;/a&gt; in Western Australia in undertaking such an upgrade in late 2010, and we can attest to the fact that this is an easy process, Oracle&#039;s WebLogic Server is fully capable of running your production Oracle Forms systems.&lt;br /&gt;&lt;br /&gt;For those interested Oracle has recorded the success in a &lt;a href=&quot;http://www.oracle.com/us/corporate/customers/dept-of-treasury-5-weblogic-ss-349829.pdf&quot;&gt;whitepaper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So now there&#039;s no reason to upgrade to Apex or ADF, just upgrade your Forms system instead!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-458425089459094326?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/-v-xsP2Uyjc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1774505&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 30 Mar 2011 09:51:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1774505</guid>
 <comments>http://chrismuir.sys-con.com/node/1774505#feedback</comments>
</item>
<item>
 <title>Installing Oracle XE 10g on Ubuntu 10.10 Server and VMWare Fusion 3.1</title>
 <link>http://chrismuir.sys-con.com/node/1764334</link>
 <description>The following blog post is purely for my own purposes, to document how to install Oracle XE 10g on Ubuntu 10.10 Server as a VM under VMWare Fusion 3.1 on Mac OS X 10.6.6.&lt;br /&gt;&lt;br /&gt;These instructions are gathered from numerous internet resources and much of the credit must be given to these authors for their superb guides.  The main difference for my guide is the inclusion of screenshots which I prefer over text or video, and the occasional fix where the original instructions didn’t work for me.  Reference to the external authors is given throughout this article.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Installing Ubuntu 10.10 Server on VMWare Fusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Opening credit must go to Ted Wise for his &lt;a href=&quot;http://tedwise.com/2008/10/03/running-oracle-for-development-on-the-mac/&quot;&gt;XE on Mac guide&lt;/a&gt;.  Ted’s guide is very indepth detailing the exact options for installing Ubuntu’s JeOS 8.04.  Ubuntu doesn’t appear to have a JeOS download for 10.10 so my instructions are the Ubuntu 10.10 Server .iso instead.&lt;br /&gt;&lt;br /&gt;First download the Ubuntu “i386” 10.10 Server edition as the Oracle XE .deb package downloaded later is “i386” too.  I’m a little unsure why, but there doesn’t appear to be a 64bit version of the i386 ISO for Ubuntu, but there is an Ubuntu amd64 server release for 10.10.  While the amd64 version will run in VMWare Fusion, later on attempting to install the Oracle XE .deb package, it will complain it’s only for the i386 platform, which makes the amd64 Ubuntu unviable.&lt;br /&gt;&lt;br /&gt;There’s obviously something I don’t know about the Ubuntu supported platforms and the relating ISOs.&lt;br /&gt;&lt;br /&gt;iiNet (local Aussie ISP) provides a handy &lt;a href=&quot;http://ftp.iinet.net.au/pub/ubuntu-releases/10.10/ubuntu-10.10-server-i386.iso&quot;&gt;mirror&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once downloaded open the VMWare Fusion.  From the menu select File -&gt; New which opens the New Virtual Machine Assistant wizard:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-8PoY4y86n9o/TYii5-Un67I/AAAAAAAABU4/68TjQ1XYBfo/s1600/image001.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://1.bp.blogspot.com/-8PoY4y86n9o/TYii5-Un67I/AAAAAAAABU4/68TjQ1XYBfo/s320/image001.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586894454618844082&quot; /&gt;&lt;/a&gt;Select the “Continue without disc” button which opens the Installation Media page in the wizard:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-0pltlquXk9c/TYii6V0KfmI/AAAAAAAABVI/Zew0EpMnJn8/s1600/image003.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://2.bp.blogspot.com/-0pltlquXk9c/TYii6V0KfmI/AAAAAAAABVI/Zew0EpMnJn8/s320/image003.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586894460925148770&quot; /&gt;&lt;/a&gt;Select the “Use operating system installation disc image file” radio button.  This will open a select file dialog where you select the Ubuntu 10.10 Server i386 iso:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-qxYGUJz74tg/TYii6khCbAI/AAAAAAAABVY/J0QMoN2gKWk/s1600/image005.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;&quot; src=&quot;http://3.bp.blogspot.com/-qxYGUJz74tg/TYii6khCbAI/AAAAAAAABVY/J0QMoN2gKWk/s320/image005.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586894464871459842&quot; /&gt;&lt;/a&gt;Presenting the following options in the previous dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-VtsiGh-2utY/TYijjQISf8I/AAAAAAAABVg/lKRonzVTnrY/s1600/image007.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://2.bp.blogspot.com/-VtsiGh-2utY/TYijjQISf8I/AAAAAAAABVg/lKRonzVTnrY/s320/image007.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895163773583298&quot; /&gt;&lt;/a&gt;Selecting “Continue” presents the Operating System page.  By default Linux and Ubuntu should already be selected under the respective Operating System and Version options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-qJrPzPmUMpE/TYijjrF0LBI/AAAAAAAABVo/GoIKkI-sXh8/s1600/image009.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://1.bp.blogspot.com/-qJrPzPmUMpE/TYijjrF0LBI/AAAAAAAABVo/GoIKkI-sXh8/s320/image009.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895171010964498&quot; /&gt;&lt;/a&gt;Selecting “Continue” presents the Linux Easy Install options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-v2fe7K8XV-w/TYijj7T8xYI/AAAAAAAABVw/Da0zUOA1SqE/s1600/image011.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://2.bp.blogspot.com/-v2fe7K8XV-w/TYijj7T8xYI/AAAAAAAABVw/Da0zUOA1SqE/s320/image011.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895175365215618&quot; /&gt;&lt;/a&gt;Note in the above picture we unselect the “Use Easy Install” option as this will skip many of the options we want to configure when the Ubuntu installation starts in the VM.  Selecting the “Continue” button will present the Finish page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-HanDqCzGx-4/TYijkLcOWMI/AAAAAAAABV4/DnP2ZexZno0/s1600/image013.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;&quot; src=&quot;http://1.bp.blogspot.com/-HanDqCzGx-4/TYijkLcOWMI/AAAAAAAABV4/DnP2ZexZno0/s320/image013.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895179694889154&quot; /&gt;&lt;/a&gt;The default options for the VM are fine.  However you can click the “Customize Settings” button  to change them.  Note on selecting either this button or the Finish button will display a save dialog asking you to name and place the VM file on the OSX file system.  The default location appears to be /Users/(your username)/Documents/Virtual Machines:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-wpzpSEX6Zr4/TYijkV6sAgI/AAAAAAAABWA/W8Jxgpxn4mw/s1600/image015.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;&quot; src=&quot;http://4.bp.blogspot.com/-wpzpSEX6Zr4/TYijkV6sAgI/AAAAAAAABWA/W8Jxgpxn4mw/s320/image015.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895182507016706&quot; /&gt;&lt;/a&gt;Note in the above picture I already have a number of other Ubuntu VMs that were previous trials.&lt;br /&gt;&lt;br /&gt;Once you press Save the VM will start and the Ubuntu installer will flash through some startup screens, quickly arriving at the first option to select English as the preferred language:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-AsSCVjtIzVg/TYiju7Ol0tI/AAAAAAAABWI/ugnWyOx6aK0/s1600/image017.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 262px;&quot; src=&quot;http://3.bp.blogspot.com/-AsSCVjtIzVg/TYiju7Ol0tI/AAAAAAAABWI/ugnWyOx6aK0/s320/image017.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895364321301202&quot; /&gt;&lt;/a&gt;At the next screen select the “Install Ubuntu Server” option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-V8Rw5gH6Ib8/TYijvHPI_PI/AAAAAAAABWQ/sU6b_clq5_s/s1600/image019.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 262px;&quot; src=&quot;http://3.bp.blogspot.com/-V8Rw5gH6Ib8/TYijvHPI_PI/AAAAAAAABWQ/sU6b_clq5_s/s320/image019.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895367544831218&quot; /&gt;&lt;/a&gt;For whatever reason we’re prompted for the language again, “English damn you, English”:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-8Q_yCQyDHkE/TYijvbUUijI/AAAAAAAABWY/BpFV3DVVbns/s1600/image021.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-8Q_yCQyDHkE/TYijvbUUijI/AAAAAAAABWY/BpFV3DVVbns/s320/image021.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895372935268914&quot; /&gt;&lt;/a&gt;Then select your country:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-vXOE-84Yugw/TYijvrHiyYI/AAAAAAAABWg/L2dU2pRgAQ0/s1600/image023.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-vXOE-84Yugw/TYijvrHiyYI/AAAAAAAABWg/L2dU2pRgAQ0/s320/image023.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895377176643970&quot; /&gt;&lt;/a&gt;Select No at the “Detect keyboard layout” option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-NWlUDldo9qs/TYijv3__3pI/AAAAAAAABWo/SE_ytn7stxM/s1600/image025.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://1.bp.blogspot.com/-NWlUDldo9qs/TYijv3__3pI/AAAAAAAABWo/SE_ytn7stxM/s320/image025.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895380634656402&quot; /&gt;&lt;/a&gt;Select USA on the “Origin of the keyboard” screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-pIP_6NDSWGo/TYij6_aWXKI/AAAAAAAABWw/W3qInkGhSP4/s1600/image027.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-pIP_6NDSWGo/TYij6_aWXKI/AAAAAAAABWw/W3qInkGhSP4/s320/image027.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895571602791586&quot; /&gt;&lt;/a&gt;Wow, Ubuntu loves it’s keyboard options.  Select USA at the “Keyboard layout” screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-zIIJs3SkG-s/TYij7Di7dsI/AAAAAAAABW4/sfkm6XI_8Xg/s1600/image029.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-zIIJs3SkG-s/TYij7Di7dsI/AAAAAAAABW4/sfkm6XI_8Xg/s320/image029.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895572712519362&quot; /&gt;&lt;/a&gt;Change the hostname to something more suitable at the Hostname prompt on the next screen, such as “oraclexe”:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-3w3dDNC6zlA/TYij7uj_nmI/AAAAAAAABXA/Cd_8LMrcKAE/s1600/image031.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-3w3dDNC6zlA/TYij7uj_nmI/AAAAAAAABXA/Cd_8LMrcKAE/s320/image031.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895584259710562&quot; /&gt;&lt;/a&gt;At the timezone prompt assuming the right default has been picked, press Yes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-diS-00euUus/TYij76-jI-I/AAAAAAAABXI/Gcf4d33Rba4/s1600/image033.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://1.bp.blogspot.com/-diS-00euUus/TYij76-jI-I/AAAAAAAABXI/Gcf4d33Rba4/s320/image033.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895587592315874&quot; /&gt;&lt;/a&gt;The next set of steps owes all its credit to &lt;a href=&quot;http://tedwise.com/2008/10/03/running-oracle-for-development-on-the-mac/&quot;&gt;Ted Wise’s instructions&lt;/a&gt;.  As Ted notes Oracle XE will require a Linux swap partition twice the size of the available RAM.  This can be done post install but it’s easier done now through the install screens with no typing required.  The first screen titled “Partitioned disks” select the Manual option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-vkzhqXZv9gA/TYij78cowcI/AAAAAAAABXQ/xhTNmDVlwe4/s1600/image035.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-vkzhqXZv9gA/TYij78cowcI/AAAAAAAABXQ/xhTNmDVlwe4/s320/image035.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895587986948546&quot; /&gt;&lt;/a&gt;On the next screen select the SCSI3 option representing the VMWare disk available to the VM:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-xRpvr-UVISg/TYikIi7WKtI/AAAAAAAABXY/Ru23Xe7Q_8Q/s1600/image037.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-xRpvr-UVISg/TYikIi7WKtI/AAAAAAAABXY/Ru23Xe7Q_8Q/s320/image037.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895804474731218&quot; /&gt;&lt;/a&gt;The screen will warn you that we’re going to drop and recreate the partition, which we select the Yes prompt:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-QuXKGvWGy18/TYikIi7lNrI/AAAAAAAABXg/OMKNh8dIrS4/s1600/image039.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-QuXKGvWGy18/TYikIi7lNrI/AAAAAAAABXg/OMKNh8dIrS4/s320/image039.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895804475717298&quot; /&gt;&lt;/a&gt;This returns to the previous screen where under the SCSI option you’ll see that there is an entry for the empty partition entitled “pri/log 21.5GB” which we select:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-_VOM7E8fgsg/TYikIzGx1cI/AAAAAAAABXo/Lzjg8jSNGCM/s1600/image041.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-_VOM7E8fgsg/TYikIzGx1cI/AAAAAAAABXo/Lzjg8jSNGCM/s320/image041.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895808817649090&quot; /&gt;&lt;/a&gt;In the following screen select the “Create a new partition” option to create a new partition in the empty partition we just selected:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-czZKtxpyKi4/TYikJNeIYuI/AAAAAAAABXw/VwYDo3wijno/s1600/image043.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-czZKtxpyKi4/TYikJNeIYuI/AAAAAAAABXw/VwYDo3wijno/s320/image043.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895815894917858&quot; /&gt;&lt;/a&gt;In the following screen downgrade the partition size from 21.5GB to 20GB.  The remaining size will be used for the swap partition soon.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-yO59ncvqK6I/TYikJOG26OI/AAAAAAAABX4/BknHgJjrxLM/s1600/image045.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://1.bp.blogspot.com/-yO59ncvqK6I/TYikJOG26OI/AAAAAAAABX4/BknHgJjrxLM/s320/image045.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586895816065738978&quot; /&gt;&lt;/a&gt;Select “Primary” to make this the primary partition:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-gQaEBfXJUa4/TYikW5bU6VI/AAAAAAAABYA/XK6ZMrwIsNc/s1600/image047.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-gQaEBfXJUa4/TYikW5bU6VI/AAAAAAAABYA/XK6ZMrwIsNc/s320/image047.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896051032615250&quot; /&gt;&lt;/a&gt;Allow the partition to be created at the “Beginning” of the available space:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-pbvjxLP2lwc/TYikW1fn8RI/AAAAAAAABYI/w9mdg-Stg2w/s1600/image049.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://1.bp.blogspot.com/-pbvjxLP2lwc/TYikW1fn8RI/AAAAAAAABYI/w9mdg-Stg2w/s320/image049.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896049976897810&quot; /&gt;&lt;/a&gt;Select “Done setting up the partition” which completes the primary partition.  Next we create the swap partition:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/--uCW26U_qu8/TYikXNEp_zI/AAAAAAAABYQ/wam5JrFpA2U/s1600/image051.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/--uCW26U_qu8/TYikXNEp_zI/AAAAAAAABYQ/wam5JrFpA2U/s320/image051.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896056306237234&quot; /&gt;&lt;/a&gt;Returning to the main partition page, select the remaining “pri/log FREE SPACE” option, which will be used for the swap:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-7WB5HiFlRBI/TYikXIx3ohI/AAAAAAAABYY/AuT_l_ckZRE/s1600/image053.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-7WB5HiFlRBI/TYikXIx3ohI/AAAAAAAABYY/AuT_l_ckZRE/s320/image053.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896055153697298&quot; /&gt;&lt;/a&gt;Again select the “Create a new partition” option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-iEBdMll0LSY/TYikXeN4QaI/AAAAAAAABYg/u9weOGBvYWE/s1600/image055.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-iEBdMll0LSY/TYikXeN4QaI/AAAAAAAABYg/u9weOGBvYWE/s320/image055.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896060908323234&quot; /&gt;&lt;/a&gt;Take the default 1.5GB partition space next which will allocate the remaining free space to the swap:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-0Pz5s_6MVN0/TYikh3KBrFI/AAAAAAAABYo/hS7ZCiszkZ0/s1600/image057.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-0Pz5s_6MVN0/TYikh3KBrFI/AAAAAAAABYo/hS7ZCiszkZ0/s320/image057.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896239401741394&quot; /&gt;&lt;/a&gt;Again make this a Primary partition:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-LKpoHJy2NJE/TYikiEIufAI/AAAAAAAABYw/pAfueGCmI4o/s1600/image059.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://1.bp.blogspot.com/-LKpoHJy2NJE/TYikiEIufAI/AAAAAAAABYw/pAfueGCmI4o/s320/image059.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896242885950466&quot; /&gt;&lt;/a&gt;Select the “Use as” option as we want to change what the partition is used for:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-UkyMi_pPSTo/TYikibMwp-I/AAAAAAAABY4/Gn3xgnjIB7g/s1600/image061.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-UkyMi_pPSTo/TYikibMwp-I/AAAAAAAABY4/Gn3xgnjIB7g/s320/image061.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896249076885474&quot; /&gt;&lt;/a&gt;Select “swap area” when prompted “How to use this partition”:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-3h9Wr9XuIIk/TYikilsT9eI/AAAAAAAABZA/x_W6KpIgEUw/s1600/image063.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-3h9Wr9XuIIk/TYikilsT9eI/AAAAAAAABZA/x_W6KpIgEUw/s320/image063.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896251893577186&quot; /&gt;&lt;/a&gt;Then finally “Done setting up this partition”&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-epYWbvBY6hM/TYiki51VyHI/AAAAAAAABZI/A7eZ44IfkkE/s1600/image065.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-epYWbvBY6hM/TYiki51VyHI/AAAAAAAABZI/A7eZ44IfkkE/s320/image065.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896257300154482&quot; /&gt;&lt;/a&gt;Returning to the partitions screen select “Finish partitioning and write changes to disk”:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-y0MRgqU2XoA/TYikvNZzcsI/AAAAAAAABZQ/5Ssq8VezT00/s1600/image067.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-y0MRgqU2XoA/TYikvNZzcsI/AAAAAAAABZQ/5Ssq8VezT00/s320/image067.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896468711797442&quot; /&gt;&lt;/a&gt;A final prompt warning you on your changes will display, select Yes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-bksHHQUeaWQ/TYikv9sos6I/AAAAAAAABZY/dzkJzSY6lQs/s1600/image069.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-bksHHQUeaWQ/TYikv9sos6I/AAAAAAAABZY/dzkJzSY6lQs/s320/image069.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896481675686818&quot; /&gt;&lt;/a&gt;At this point the installer will start copying and configuring files:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-g5nGArdfXDM/TYikwLMFb6I/AAAAAAAABZg/zhl5JBiIU0M/s1600/image071.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-g5nGArdfXDM/TYikwLMFb6I/AAAAAAAABZg/zhl5JBiIU0M/s320/image071.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896485297254306&quot; /&gt;&lt;/a&gt;At the “Set up users and passwords” screen you have the chance to configure the primary none-root user.  The first page prompts you for the user’s name, not the account name.  However they can be the same.  As seen in this screenshot “administrator” is entered:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-O5FkVd2nNPE/TYikwc4Q5sI/AAAAAAAABZo/qfFKF56IrtA/s1600/image073.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-O5FkVd2nNPE/TYikwc4Q5sI/AAAAAAAABZo/qfFKF56IrtA/s320/image073.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896490045957826&quot; /&gt;&lt;/a&gt;Next screen you enter the actual user account name, again “administrator” is entered in this screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-Pxu7qzt7hz0/TYikwty6FBI/AAAAAAAABZw/_M5nM0mM-KA/s1600/image075.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-Pxu7qzt7hz0/TYikwty6FBI/AAAAAAAABZw/_M5nM0mM-KA/s320/image075.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896494586893330&quot; /&gt;&lt;/a&gt;Over 2 screens you’ll be asked to enter and confirm a password for the new account:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-AqDUsy_45sQ/TYik-XA0tOI/AAAAAAAABZ4/itYpxxaBAMk/s1600/image077.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-AqDUsy_45sQ/TYik-XA0tOI/AAAAAAAABZ4/itYpxxaBAMk/s320/image077.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896728989414626&quot; /&gt;&lt;/a&gt;Choose not to encrypt the home directory:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-9_Aw2yLs134/TYik-m2jnPI/AAAAAAAABaA/m2rUoIJTiXk/s1600/image079.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-9_Aw2yLs134/TYik-m2jnPI/AAAAAAAABaA/m2rUoIJTiXk/s320/image079.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896733241318642&quot; /&gt;&lt;/a&gt;Only if you have a HTTP proxy between the internet and the Mac set the following options, otherwise just select Continue.  The install requires access to the internet so it’s essential this is configured if required:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-MqaKE_tCjvc/TYik-_4wqdI/AAAAAAAABaI/stgv6C7tvv4/s1600/image081.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-MqaKE_tCjvc/TYik-_4wqdI/AAAAAAAABaI/stgv6C7tvv4/s320/image081.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896739961448914&quot; /&gt;&lt;/a&gt;Now the installer will download and install additional files:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-NwHGHdQ74uY/TYik-8jll7I/AAAAAAAABaQ/rLL3YoEAJqI/s1600/image083.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-NwHGHdQ74uY/TYik-8jll7I/AAAAAAAABaQ/rLL3YoEAJqI/s320/image083.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896739067336626&quot; /&gt;&lt;/a&gt;Select your preference at the screen prompting you how to apply security updates:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-z6AONpFKHCQ/TYik_EOJ8rI/AAAAAAAABaY/uNWVW8W1kvw/s1600/image085.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-z6AONpFKHCQ/TYik_EOJ8rI/AAAAAAAABaY/uNWVW8W1kvw/s320/image085.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896741124928178&quot; /&gt;&lt;/a&gt;At the software selection page, as we want this to be a very small server install just to run Oracle XE, leave the software package selection undone:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-wf8B0QCczvM/TYilK-tZN-I/AAAAAAAABag/bdSue4oVemI/s1600/image087.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://3.bp.blogspot.com/-wf8B0QCczvM/TYilK-tZN-I/AAAAAAAABag/bdSue4oVemI/s320/image087.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896945803769826&quot; /&gt;&lt;/a&gt;At the GRUB Boot prompt select Yes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-VJteQM7xnuA/TYilK43Q72I/AAAAAAAABao/oTLiNoj_7Ug/s1600/image089.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://2.bp.blogspot.com/-VJteQM7xnuA/TYilK43Q72I/AAAAAAAABao/oTLiNoj_7Ug/s320/image089.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896944234557282&quot; /&gt;&lt;/a&gt;Hurray!… the installation is complete:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-EL00_xmLyGs/TYilLIm1fWI/AAAAAAAABaw/r-q7bLu24pE/s1600/image091.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 258px;&quot; src=&quot;http://4.bp.blogspot.com/-EL00_xmLyGs/TYilLIm1fWI/AAAAAAAABaw/r-q7bLu24pE/s320/image091.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896948460617058&quot; /&gt;&lt;/a&gt;On a reboot the VM will display the Ubuntu command line login:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-PeEdfqQwxzo/TYilLaVxaZI/AAAAAAAABa4/qv_FbB8MRz0/s1600/image093.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;&quot; src=&quot;http://1.bp.blogspot.com/-PeEdfqQwxzo/TYilLaVxaZI/AAAAAAAABa4/qv_FbB8MRz0/s320/image093.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5586896953220884882&quot; /&gt;&lt;/a&gt;On logging in using the administrator account created in the previous steps, force the Ubuntu Server to update itself using the APT package installer via the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get dist-upgrade&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When prompted press Y&lt;br /&gt;&lt;br /&gt;Finally reboot the server:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo shutdown –r now&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Install VMWare Tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we depart from Ted&#039;s instructions.  The Ubuntu Community &lt;a href=&quot;https://help.ubuntu.com/community/VMware/Tools&quot;&gt;documentation&lt;/a&gt; provides under the &quot;Installing from Ubuntu package from VM-tools&quot; heading the instructions for installing the VMWare Tools.  A number of prescribed methods didn&#039;t work, including those requiring the VMWare Tools to be mounted via a virtual cdrom.&lt;br /&gt;&lt;br /&gt;On logging in again as administrator, enter the following commands.  Note the third command; as we&#039;ve installed a UI-less Ubuntu Server we use this specific command (the Ubuntu documentation lists 2 options):&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo apt-get install linux-headers-virtual&lt;br /&gt;sudo apt-get install --no-install-recommends open-vm-dkms&lt;br /&gt;sudo apt-get install –no-install-recommends open-vm-tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Installing Oracle XE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First login as administrator and install the prerequisite libraries:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo aptitude install libaio-dev&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that there appears to be some documentation around that indicates if Oracle XE is installed under Ubuntu 64bit, there are additional prerequisite libraries that must be installed including &quot;bc&quot; and &quot;ia32-libs&quot;.&lt;br /&gt;&lt;br /&gt;In the next step I had significant issues in using the usual method that most others used to download Oracle XE.  As described in Ted&#039;s instructions, the typical manner is to download and Oracle XE is to add an entry to your /etc/apt/sources.list, use wget to retrieve the GPG key for the Oracle XE package and install it the APT repository, then finally download Oracle XE using APT.&lt;br /&gt;&lt;br /&gt;Instead I came up with the following solution.&lt;br /&gt;&lt;br /&gt;Via my browser I discovered the URL of the Oracle XE i386 deb package from the &lt;a href=&quot;http://www.blogger.com/(http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html&quot;&gt;OTN&lt;/a&gt; web page was as follows:&lt;br /&gt;&lt;a href=&quot;http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe_10.2.0.1-1.0_i386.deb&quot;&gt;http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe_10.2.0.1-1.0_i386.deb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Still logged in as administrator, issue the following command changing the username and password to match your OTN username and password:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;wget --user=(username) --password=(password) http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe_10.2.0.1-1.0_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will download the XE .deb file.  Once completed we can install the .deb file using dpkg (more information on .deb files and dpkg can be found via Chris Buckridge&#039;s &lt;a href=&quot;http://chris-linux.blogspot.com/2007/02/ubuntu-command-line-package-install.html&quot;&gt;page&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo dpkg -i oracle-xe_10.2.0.1-1.0_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Upon a successful install we follow the instructions, issuing the following command.  Ensure to complete this step down to the usermod step otherwise the administrator user will not be given correct privileges to start the database after a reboot:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;sudo /etc/init.d/oracle-xe configure&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the prompts:&lt;br /&gt;&lt;br /&gt;1) Enter a port for Apex, the default being 8080&lt;br /&gt;2) Enter a port for the Oracle Listener, the default being 1521.&lt;br /&gt;3) Enter a password for the SYS/SYSTEM database accounts.&lt;br /&gt;4) When prompted enter Y to allow Oracle XE to be started with the VM boots.&lt;br /&gt;&lt;br /&gt;For reference /etc/default/oracle-xe is the configuration file which stores these options.&lt;br /&gt;&lt;br /&gt;Once completed, edit the following file via or similar:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;vi ~/.bashrc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the end of the file enter the following:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier&quot;&gt;ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server&lt;br /&gt;PATH=$PATH:$ORACLE_HOME/bin&lt;br /&gt;export ORACLE_HOME&lt;br /&gt;export ORACLE_SID=XE&lt;br /&gt;export PATH&lt;br /&gt;sudo usermod -g dba administrator&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally we need to login to the database as system and allow remote access to the HTTP server:&lt;br /&gt;&lt;br /&gt;sqlplus system/(password)&lt;br /&gt;EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);&lt;br /&gt;quit;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Accessing the APEX homepage from the VM Host (not Guest)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally to access the APEX homepage from the VM Host, on the guest issue the command &quot;ifconfig&quot; which will reveal the current IP of the VM guest, listed under the &quot;eth0&quot; &quot;inet addr&quot; entry, as example 192.168.197.131.&lt;br /&gt;&lt;br /&gt;On the VM Host, return to your favourite browser and enter: &lt;a href=&quot;http://192.168.197.131:8080/apex&quot; title=&quot;http://192.168.197.131:8080/apex&quot;&gt;http://192.168.197.131:8080/apex&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;..and the APEX home page should display.  Ensure you can login using the SYSTEM account.&lt;br /&gt;&lt;br /&gt;It&#039;s worth checking from a tool like JDeveloper installed under OSX that you can also access the database.&lt;br /&gt;&lt;br /&gt;Voila.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-2090590981985771377?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/Yer32nsfyg0&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1764334&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 22 Mar 2011 09:03:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1764334</guid>
 <comments>http://chrismuir.sys-con.com/node/1764334#feedback</comments>
</item>
<item>
 <title>Check out the ADF content at this year&#039;s ODTUG KScope11 conference</title>
 <link>http://chrismuir.sys-con.com/node/1741716</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://kscope11.com/images/stories/KscopeButton250.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px; height: 136px;&quot; src=&quot;http://kscope11.com/images/stories/KscopeButton250.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;For all ADF developers, I&#039;d like the chance to point out that this year&#039;s ODTUG Kaleidscope &#039;11 conference in Long Beach USA has a substantial amount of ADF presentations.  In fact quite a few active members of the &lt;a href=&quot;https://groups.google.com/forum/?fromgroups#!forum/adf-methodology&quot;&gt;ADF EMG&lt;/a&gt; will be presenting this year which is great.&lt;br /&gt;&lt;br /&gt;For anyone who doesn&#039;t know much about the KScope events, ODTUG&#039;s conference series highlights real world experience with developers who are actually using Oracle products in the field.  For anyone who doesn&#039;t consider themselves an expert, the KScope conference provides a great opportunity to learn from the pros tips n tricks on how to get your ADF applications from development to production&lt;br /&gt;&lt;br /&gt;In turn for Fusion MiddleWare there&#039;s just on 60 sessions covering topics from SOA to WebCenter and of course ADF.  Further incentives include streams dedicated to PL/SQL, the database, Apex and more.  (Oh, and apparently it&#039;s sunny and warm in Long Beach and there&#039;s beaches too!)&lt;br /&gt;&lt;br /&gt;If you&#039;re interested in the content, specifically the Fusion MiddleWare content, check out: &lt;a href=&quot;http://kscope11.com/fusion&quot;&gt;http://kscope11.com/fusion&lt;/a&gt; ...then select either the Symposium or Presentations links.&lt;br /&gt;&lt;br /&gt;We hope to see you there.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-6023493905162025304?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/knAXnmMccKI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1741716&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 04 Mar 2011 02:47:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1741716</guid>
 <comments>http://chrismuir.sys-con.com/node/1741716#feedback</comments>
</item>
<item>
 <title>ADF BC: Creating an &quot;EXISTS&quot; View Criteria</title>
 <link>http://chrismuir.sys-con.com/node/1722295</link>
 <description>The EXISTS keyword in SQL queries is an efficient mechanism for returning record sets from one dataset when they exist in another dataset.  For example we can write queries like:&lt;br /&gt;&lt;br /&gt;SELECT org.org_id, org.name FROM organisations org WHERE EXISTS&lt;br /&gt;(SELECT 1 FROM events evt WHERE evt.org_id = org.org_id&lt;br /&gt; AND evt.contact_name = &#039;Eddie Harris&#039;)&lt;br /&gt;&lt;br /&gt;....which returns all organisations which have a related event whose contact is Eddie Harris.&lt;br /&gt;&lt;br /&gt;ADF Business Components in JDeveloper 11g allow the creation of EXISTS subqueries via the View Object named View Criteria feature.  They&#039;re easy to implement if you already know how to create View Criteria, as long as you know one small trick.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Default Business Components&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Given the SQL query above using the one-to-many organisations-to-events example, imagine we have default Entity Objects (EOs), EO Associations, View Objects (VOs) and VO Links, as seen in this picture:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-9RMYiD6uNcM/TV3HWAtishI/AAAAAAAABTo/HBkEASmAfeI/s1600/exists01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 221px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/-9RMYiD6uNcM/TV3HWAtishI/AAAAAAAABTo/HBkEASmAfeI/s320/exists01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831094716609042&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;View Object Link Accessors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When created via the Business Components from Table wizard, the VO Link OrgEvtFkLink created, based on the EO Association OrgEvtFkAssoc, will include Accessors options under its Relationship tab in the VO Link editor:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-AMAAW1KmL8c/TV3HWWWoZRI/AAAAAAAABTw/mVprj45lPuc/s1600/exists02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;&quot; src=&quot;http://1.bp.blogspot.com/-AMAAW1KmL8c/TV3HWWWoZRI/AAAAAAAABTw/mVprj45lPuc/s320/exists02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831100526093586&quot; /&gt;&lt;/a&gt;If you select the pencil icon next to the Accessors options it reveals the View Link Properties dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/-QebKyWwzMpI/TV3HWmYLzgI/AAAAAAAABT4/OcMU5hFqOjg/s1600/exists03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;&quot; src=&quot;http://1.bp.blogspot.com/-QebKyWwzMpI/TV3HWmYLzgI/AAAAAAAABT4/OcMU5hFqOjg/s320/exists03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831104827575810&quot; /&gt;&lt;/a&gt;....from which you can see the &quot;Generate Accessor&quot; option selected for the &quot;In View Object: Organisations View&quot;.  While the selected state is the default option when created, it&#039;s this option which is essential for setting up the EXISTS View Criteria.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;View Object View Criteria&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you&#039;ve ensured the Accessor option is set as described above, when you create a new View Criteria for the View Object, Organisations in our case, we configure the View Criteria as follows.  First in the Create View Criteria dialog we should change the View Criteria name to something more suitable to reflect what the View Criteria will do for us:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-Le-qeOi2yK4/TV3HWhLMQoI/AAAAAAAABUA/rueq4-zJYM8/s1600/exists04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;&quot; src=&quot;http://2.bp.blogspot.com/-Le-qeOi2yK4/TV3HWhLMQoI/AAAAAAAABUA/rueq4-zJYM8/s320/exists04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831103430902402&quot; /&gt;&lt;/a&gt;Next select the Add Criteria button, which will create the basis of the expression used by the query:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-crZuXpHTajg/TV3HW91HaKI/AAAAAAAABUI/oiEwUaT-C_Y/s1600/exists05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;&quot; src=&quot;http://2.bp.blogspot.com/-crZuXpHTajg/TV3HW91HaKI/AAAAAAAABUI/oiEwUaT-C_Y/s320/exists05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831111122938018&quot; /&gt;&lt;/a&gt;On selecting the Attribute drop down, you&#039;ll discover a list of attributes from the OrganisationsView VO.  In this list you&#039;ll note an attribute called &quot;EventsView&quot;.  This attribute is only available because of the options you configured in the View Object Link Accessors above.  If you hadn&#039;t gone with the default options, the EventsView attribute would not be available, and you would not be able to create the EXISTS View Criteria:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-HQPEbh_czPw/TV3HenO1XFI/AAAAAAAABUQ/52luegnVcE0/s1600/exists06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;&quot; src=&quot;http://3.bp.blogspot.com/-HQPEbh_czPw/TV3HenO1XFI/AAAAAAAABUQ/52luegnVcE0/s320/exists06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831242495745106&quot; /&gt;&lt;/a&gt;With the EventsView Accessor selected the dialog for the first time shows the EXISTS clause:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/-ELe2UekMcSc/TV3He-pcvQI/AAAAAAAABUY/BTtk1ElqwiQ/s1600/exists07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;&quot; src=&quot;http://3.bp.blogspot.com/-ELe2UekMcSc/TV3He-pcvQI/AAAAAAAABUY/BTtk1ElqwiQ/s320/exists07.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831248781393154&quot; /&gt;&lt;/a&gt;The only think left to do is to select the Criteria Group expression of the EXISTS statement, in the example above this is the &quot;Event No =&quot; option, and change this using the supplied options in the fields below, to the actual expression we want to use in the EXISTS clause.  From our example this is matching the Events Contact Name to a String:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/-NyWZ9vX7wAQ/TV3HfIVMvdI/AAAAAAAABUg/yJI7hG8Jvk4/s1600/exists08.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 253px;&quot; src=&quot;http://4.bp.blogspot.com/-NyWZ9vX7wAQ/TV3HfIVMvdI/AAAAAAAABUg/yJI7hG8Jvk4/s320/exists08.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831251380813266&quot; /&gt;&lt;/a&gt;Once completed in the right hand side you can see the EXISTS subquery that the View Criteria will apply to the OrganisationsView VO when executed.&lt;br /&gt;&lt;br /&gt;Note I&#039;ve also turned off the Ignore Case and Ignore Null Values options.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Testing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the Business Components Browser, on opening the OrganisationsView, and selecting the View Criteria via the Find button, we&#039;re first prompted for a value for the bind variable:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-zKtxhys6hkE/TV3HfeR90ZI/AAAAAAAABUo/Xlo4Cq70uU0/s1600/exists09.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 217px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/-zKtxhys6hkE/TV3HfeR90ZI/AAAAAAAABUo/Xlo4Cq70uU0/s320/exists09.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831257272832402&quot; /&gt;&lt;/a&gt;...which once supplied, returns the only matching Organisations record:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/-6Hm-qKQWZQw/TV3HfdBBxpI/AAAAAAAABUw/T86ljKJuH04/s1600/exists10.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;&quot; src=&quot;http://2.bp.blogspot.com/-6Hm-qKQWZQw/TV3HfdBBxpI/AAAAAAAABUw/T86ljKJuH04/s320/exists10.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5574831256933353106&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Thanks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thanks to Eddie Harris at &lt;a href=&quot;http://www.sagecomputing.com.au&quot;&gt;SAGE Computing Services&lt;/a&gt; for revealing the technique.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-41382439376669686?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/EWciq0_fbys&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1722295&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 22 Feb 2011 16:30:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1722295</guid>
 <comments>http://chrismuir.sys-con.com/node/1722295#feedback</comments>
</item>
<item>
 <title>ADF BC and ADF Libraries: The Library Private Property</title>
 <link>http://chrismuir.sys-con.com/node/1701345</link>
 <description>ADF Libraries are a very useful feature of JDeveloper 11g.  They allow a master application, via the Resource Palette, to load Bounded Task Flows (BTFs) and the BTF&#039;s associated ADF Business Components from separate applications, without having to include the BTF and ADF BC objects in it&#039;s own application.&lt;br /&gt;In the following picture you can see the Resource Palette exposing adflibChildBTF.jar, a BTF application containing both the ChildBTF bounded task flow, and it&#039;s associated Business Components including the ChildAppModule Application Module, Events Entity Object and so on:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGifsd3lI/AAAAAAAABS4/9gmQLgKhybU/s1600/pl01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 196px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGifsd3lI/AAAAAAAABS4/9gmQLgKhybU/s320/pl01.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569059972657831506&quot; /&gt;&lt;/a&gt;If this ADF Library is loaded into a consuming application&#039;s ViewController project, the consuming application is free to call the adflibChildBTF&#039;s embedded Bounded Task Flow.  However it&#039;s also free to call directly the Business Components of the adflibChildBTF.  This is revealed by the Data Control Panel in the Application Navigator, it will by default include the Application Module of the child application as can be seen here:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGisukwZI/AAAAAAAABTA/JUNbcJLMB7s/s1600/pl02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 234px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGisukwZI/AAAAAAAABTA/JUNbcJLMB7s/s320/pl02.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569059976156332434&quot; /&gt;&lt;/a&gt;Yet this isn&#039;t always desirable behaviour, the Child Application may not want to expose all its Business Components for easy picking by the consuming application.  For example, you may have included a collection of test Business Components in the Child Application which really aren&#039;t appropriate for the consuming application to use, or, you may think it inappropriate for the consuming application to even reference the regular Business Components of the Child Application.  How to fix?&lt;br /&gt;&lt;br /&gt;When you open the editor for most Business Components including Application Modules, Entity Objects and View Objects, you may notice that the Property Inspector also reflects options for the selected and edited Business Component.  In the Property Inspector for each Business Component there&#039;s typically a boolean property not included in the associated editors called Library Private.  In the following diagram you can see the property inspector for the Application Module from the Child Application:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TUlGi-YQO9I/AAAAAAAABTI/-VmbaaK1fPI/s1600/pl03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 314px; height: 313px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TUlGi-YQO9I/AAAAAAAABTI/-VmbaaK1fPI/s320/pl03.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569059980894550994&quot; /&gt;&lt;/a&gt;This property, when set to true for each Business Component (the default is false), means the Business Components will not be available in the Resource Palette when the ADF Library is redeployed (note: you must refresh the Resource Palette to see this effect):&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TUlGi9WY9xI/AAAAAAAABTQ/WOwfnDDc_So/s1600/pl04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 218px; height: 320px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TUlGi9WY9xI/AAAAAAAABTQ/WOwfnDDc_So/s320/pl04.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569059980618299154&quot; /&gt;&lt;/a&gt;As can be seen in the previous picture, the ChildAppModule Application Module is no longer available in the Resource Palette.  In addition in the consuming Application&#039;s Data Control Palette, as we&#039;ve hidden the ChildAppModule, simply it doesn&#039;t appear in the Data Control Palette:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TUlGjLEAtCI/AAAAAAAABTY/9XmwN-cb9-M/s1600/pl05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 287px; height: 320px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TUlGjLEAtCI/AAAAAAAABTY/9XmwN-cb9-M/s320/pl05.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569059984299308066&quot; /&gt;&lt;/a&gt;Returning to the Resource Palette, you may in fact want to hide *all* of the Business Components.  This requires you to simply set the Library Private property of each Business Component to true, and then regenerate the ADF Library JAR.  We can see the end effect here:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGqfNNqDI/AAAAAAAABTg/8inU5MRG7fU/s1600/pl06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 297px; height: 320px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TUlGqfNNqDI/AAAAAAAABTg/8inU5MRG7fU/s320/pl06.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5569060109965699122&quot; /&gt;&lt;/a&gt;However it must be noted, in the consuming application, this does not stop the consumed BTF from working.  All the Library Private option is doing is hiding the Business Components from the IDE for the user to use.  The Business Components are still used by Child Application/BTF when called from the caller at runtime.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Caveat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I&#039;ve yet to fully use this feature, so be careful to check it works for you, your mileage will vary.  If you find any issues I&#039;d appreciate a comment to this blog post, to assist other readers.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Addendum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This feature is available in the latest version of JDev 11.1.1.4.0 through 11.1.1.2.0.  It&#039;s possibly available in earlier versions, but I&#039;ll leave readers to check themselves as I no longer have these earlier JDev versions installed.&lt;br /&gt;&lt;br /&gt;In addition this feature works within an Application too, such that the Business Components don&#039;t show in the Data Control Palette for the same Application&#039;s ViewController project.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-1982099010240567295?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/dyWxaNPdSCs&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1701345&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 02 Feb 2011 06:55:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1701345</guid>
 <comments>http://chrismuir.sys-con.com/node/1701345#feedback</comments>
</item>
<item>
 <title>ADF: Changing Your Application&#039;s URL </title>
 <link>http://chrismuir.sys-con.com/node/1647701</link>
 <description>When you start running ADF applications under JDev 11g you&#039;ll become familiar with seeing URLs like the following in your browser:
&lt;a href=&quot;http://127.0.0.1:7101/Sage-ViewController-context-root/faces/Welcome.jspx&quot; title=&quot;http://127.0.0.1:7101/Sage-ViewController-context-root/faces/Welcome.jspx&quot;&gt;http://127.0.0.1:7101/Sage-ViewController-context-root/faces/Welcome.jspx&lt;/a&gt;
Each part of the URL is significant, though the one that stands out as being odd is the rather cumbersome &quot;Sage-ViewController-context-root&quot;. This part of the URL in Java EE parlance is called the context-root, and not just because our example literally has context-root written into it.
The context-root at its most basic form is the unique part of the URL on the application server to clearly distinguish your application from another on the server. However as you can see in this example the &quot;Sage-ViewController-context-root&quot; is hardly something you&#039;d want to present to users. Something more palatable like &quot;Sage&quot; or &quot;HR&quot; would be useful, delivering an end URL like:
&lt;a href=&quot;http://127.0.0.1:7101/Sage/faces/Welcome.jspx&quot; title=&quot;http://127.0.0.1:7101/Sage/faces/Welcome.jspx&quot;&gt;http://127.0.0.1:7101/Sage/faces/Welcome.jspx&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1647701&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 27 Jan 2011 12:15:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1647701</guid>
 <comments>http://chrismuir.sys-con.com/node/1647701#feedback</comments>
</item>
<item>
 <title>A new EMG is born: WebCenter EMG</title>
 <link>http://chrismuir.sys-con.com/node/1684999</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://sites.google.com/site/oracleemg/_/rsrc/1295375637484/wc/wcemg.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 97px;&quot; src=&quot;http://sites.google.com/site/oracleemg/_/rsrc/1295375637484/wc/wcemg.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;I&#039;m happy to announce that the &lt;a href=&quot;http://sites.google.com/site/oracleemg/wc&quot;&gt;WebCenter EMG&lt;/a&gt; has opened its doors for business, run by &lt;a href=&quot;http://www.yonaweb.be/&quot;&gt;Yannick Ongena&lt;/a&gt; and backed by a number of well known WebCenter personalities.  Like it&#039;s older EMG siblings, the ADF EMG, OBIEE EMG and SOA-BPM EMG, the WebCenter EMG will be a place to discuss WebCenter design, best practices, testing, methodologies and similar, beyond the typical bugs and how-do-I-get-this-to-work questions on the OTN Forums.&lt;br /&gt;&lt;br /&gt;I encourage everybody interested in &quot;real&quot; development with Oracle&#039;s WebCenter platform join the WebCenter EMG&#039;s &lt;a href=&quot;http://groups.google.com/group/webcenter-emg&quot;&gt;Google Group&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;Good luck to Yannick in running this new group.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-6321298853578986638?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/urwGLt5V4Cs&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1684999&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 21 Jan 2011 01:36:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1684999</guid>
 <comments>http://chrismuir.sys-con.com/node/1684999#feedback</comments>
</item>
<item>
 <title>Book Review: Oracle SOA Suite 11g Handbook</title>
 <link>http://chrismuir.sys-con.com/node/1656307</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.mhprofessional.com/covers/Jpeg_140-wide/0071608974.jpeg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 140px; height: 172px;&quot; src=&quot;http://www.mhprofessional.com/covers/Jpeg_140-wide/0071608974.jpeg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;I knew before I picked up Lucas Jellema&#039;s &lt;a href=&quot;http://www.amazon.com/Oracle-Suite-Handbook-Osborne-ORACLE/dp/0071608974/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1292241173&amp;sr=8-1&quot;&gt;Oracle SOA Suite 11g Handbook&lt;/a&gt; it would be a struggle to review it.  If you&#039;ve ever read one of Lucas&#039;s huge range of technical &lt;a href=&quot;http://technology.amis.nl/blog/author/lucas&quot;&gt;blogs&lt;/a&gt;, you know he&#039;s a prolific technical writer, and if you&#039;ve ever had the privilege of meeting him you know this comes from his endless energy; I think there&#039;s a possibility Lucas is the illegitimate child of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Energizer_Bunny&quot;&gt;Energizer Bunny&lt;/a&gt;. Long story short, I knew when I was asked to review Lucas&#039;s book, there was going to be a distinct challenge on how to review everything Lucas will have written.&lt;br /&gt;&lt;br /&gt;When reviewing technical books I usually try to think of how I&#039;m going to review the book before I pick it up.  There are definitely different approaches to reviewing technical books.  Viably you can read a book from front to back and write a summary of each and every chapter.  Yet I knew before receiving Lucas&#039;s book reviewing every chapter wouldn&#039;t be feasible, he will have written to much for me to cover.  Couple this with a topic as large and complex as Service Oriented Architecture (SOA) and Oracle&#039;s relating products, a comprehensive review would be tiring and as long as the original book defeating the purpose of me writing a review in the first place, I might as well write my own book.&lt;br /&gt;&lt;br /&gt;So instead I really wanted to achieve a couple of things in assessing this lofty tomb.  Firstly from a professional point of view, how did Lucas&#039;s prolific writing style survive the rigours and length of such a lengthy book?  For readers looking for a book recommendation this equates to how readable I think the book is.&lt;br /&gt;&lt;br /&gt;Secondly, given the vast array of SOA concepts and technologies that would be need to be covered in the book, and given that a book always has high and low points, could I highlight with a choice of a few chapters how much the book varies in quality?&lt;br /&gt;    &lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Let&#039;s start with the writing style&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Lucas&#039;s technical writing style has two main characteristics: 1) in describing any technical problem or solution he&#039;ll deliberately take you though the A-B-Cs to ensure you understand the concepts in a logically progressive manner and, 2) such descriptions are coupled with a narrative, usually a story or business case to illuminate what&#039;s explained, and sometimes a sharp wit (which I must admit passes me by half the time – it must be a Dutch thing).  His writing style has the benefit you&#039;ll learn a lot if you take time to read it, but vis-a-vis, you won&#039;t learn a lot if you don&#039;t give it time as there&#039;s a lot to read.&lt;br /&gt;&lt;br /&gt;With the A-B-Cs in mind, the nature of the McGraw-Hill &quot;Handbook&quot; series, appears to be a end to end coverage of topics required to know a subject, though not a definitive guide in any specific technology or concept covered by the book.  As a Handbook Lucas&#039;s text does cover a lot of ground in my opinion (and believe it or not Lucas published extra appendixes &lt;a href=&quot;http://groups.google.com/group/the-oracle-soa-suite-11g-handbook-&quot;&gt;online&lt;/a&gt; as he couldn&#039;t fit all the content in the book), and given his prolific writing style there is definitely more detail than is average in the &quot;Handbook&quot; series, yet readers should not expect complete coverage of each topic.  As example the OSB chapter covers the basics of OSB, but not an in-depth look at every feature.  This makes the Handbook series great for beginners, and I can&#039;t emphasize that enough, but, not in-depth enough for experts looking for specific detail or solutions, such as that provided in a &quot;Cookbook&quot; series.  Obviously a book can&#039;t be something to everyone.&lt;br /&gt;&lt;br /&gt;In addressing the prolific amount of text in the book potential buyers need to ask themselves will they actually read such a lengthy tomb?  Yet I can&#039;t imagine anyone who was even remotely interested in SOA technologies looking for a quick fix here, so the detail provided in Lucas&#039;s book I think I can safely recommend.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Looking at a chapter: Oracle Service Bus&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of the number of chapters I was particularly interested to read, that of the Oracle Service Bus was high on the list.  There&#039;s a good coverage here, with:&lt;br /&gt;&lt;br /&gt;a) A general discussion on the role of the enterprise service bus.  Having read a few texts on service buses including David Chappell&#039;s &lt;a href=&quot;http://www.amazon.com/Enterprise-Service-Bus-Theory-Practice/dp/0596006756/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1292242933&amp;sr=1-1&quot;&gt;Enterprise Service Bus - Theory in Practice&lt;/a&gt;, I was pleased to find nuggets beyond just the expected descriptions.  In particular the OSB chapter introduces the VET(R)O pattern that an ESB should implement. This is one of the delights in Lucas&#039;s book, you may think you&#039;re going to get a slow feature by feature explanation on Oracle&#039;s SOA offerings, but here&#039;s an example where he brings in outside ideas to further explain concepts, and gives the reader an opportunity with a bit of Googling to discover new areas of computing.&lt;br /&gt;&lt;br /&gt;b) An example in context of the overall story told in the book, that of St Matthews Hospital in the Netherlands in their adoption of SOA.  The ongoing example is an important crutch to the book in order to assist readers to understand the relevance of the SOA technologies described in context of a real business case.&lt;br /&gt;&lt;br /&gt;c) A history of Oracle&#039;s OSB technologies.  I must admit having done some research for a customer some years back keeping track of &lt;a href=&quot;(http://one-size-doesnt-fit-all.blogspot.com/2008/10/esb-vs-oesb-vs-alsb-vs-osb-vs-um.html&quot;&gt;Oracle&#039;s&lt;/a&gt; service bus products, acquisitions and rebranding is a hard task, of which the book tackles well.&lt;br /&gt;&lt;br /&gt;d) A look at implementing OSB&#039;s proxies and business services in context of the St Matthews story, introducing the main OSB concepts and their implementation.&lt;br /&gt;&lt;br /&gt;e) And importantly in context of Oracle&#039;s OSB examples of using an email adapter and REST web services.  These are particularly smart additions to the overall chapter in that they address a common bias that OSBs are very limited in appeal, essentially only SOAP routing engines.  With the email interface it shows OSB&#039;s flexibility, and with REST capabilities a modern take on web service design.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Looking at another chapter: Tactical Management and Governance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another chapter of personal interest was that covering governance.  To me (remembering I&#039;m not a SOA expert) governance is the discipline and expertise a senior developer or architect can bring to a project regardless of the technology at hand.  This chapter does indeed introduce SOA governance, but then shows why it&#039;s a book on Oracle&#039;s SOA Suite 11g rather than SOA in general, as it then investigates Oracle&#039;s MetaData Services as a technical solution to some of the issues addressed by governance.  As I opened earlier in this review, this shows the book possibly at its lowest point, as it covers (what I believe to be) the important topic of governance too briefly, and dwells on the Oracle solution more than the problem at hand.  To be fair, when I say lowest point, the overall average is quite high so there&#039;s still much to learn from the chapter, but as a SOA beginner I feel left short in this chapter.  Also to be fair, while Lucas does a great effort in covering SOA outside of the context of Oracle&#039;s SOA Suite, the book is indeed the SOA Suite 11g Handbook, not a theoretical book on SOA, so this chapter fits well.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Other take-aways&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I mentioned in the OSB chapter that the book takes time out to discuss the history of OSB.  In a similar vein the 3rd chapter of the book is a worthy read in its own right, discussing:&lt;br /&gt;&lt;br /&gt;a) A history of standardisation in the web service arena and how this lead to service oriented architecture, including a long list of standards and when they were published, to show you the amount of work in this area and what has been achieved.&lt;br /&gt;&lt;br /&gt;b) A history of Oracle Corporation, and how it moved from being a database company to in addition a middleware company.  This includes an indepth look of Oracle and its acquisitions.  This is probably the best summary I&#039;ve read on the issue and really puts in context of what Oracle is today and why they make many decisions that they do&lt;br /&gt;&lt;br /&gt;c) The emergence of Oracle&#039;s &quot;Fusion&quot;, including Fusion Applications and Fusion Middleware as a platform.&lt;br /&gt;&lt;br /&gt;From here there&#039;s a great description of the parts of SOA. I must admit even though I&#039;ve been working in the FMW area for sometime, before reading this book I didn&#039;t know my BAMs from my BPMs. Having read this key chapter I&#039;m now full bottle, well, at least enough so I don&#039;t sound like a complete newbie discussing SOA in front of other experts.    This is kind of the launching pad that I needed many years ago to jump from PL/SQL to Java in understanding the hundreds of terms, acronyms, products and more – well worth the read in getting your head around the SOA space.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Oracle SOA Suite 11g Handbook covers a lot of ground, because by necessity SOA is a large topic, SOA Suite has a large array of technical solutions, and Lucas is a prolific writer.  This book will be a good choice for any beginner wanting breadth of coverage of all SOA topics, and offers excellent value for money because so much is covered.  For experts looking for a more in-depth coverage of each individual topic this book is not for you, but would provide a good reference for specialists who need to revisit the basics after sometime away from the SOA arena.&lt;br /&gt;&lt;br /&gt;Phew, now to review something a little shorter, say something under 600 pages!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-2883338265680091022?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/yQwWuAKVuyc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1656307&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 20 Dec 2010 20:05:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1656307</guid>
 <comments>http://chrismuir.sys-con.com/node/1656307#feedback</comments>
</item>
<item>
 <title>Installing OSB 11.1.1.3.0 on Windows</title>
 <link>http://chrismuir.sys-con.com/node/1641272</link>
 <description>Simple post for my benefit, documenting the minimal install for Oracle Service Bus 11.1.1.3.0 under Windows, configuring the server in development mode.  There&#039;s nothing overly exciting for other readers in this post, beyond say an abbreviated form of Oracle&#039;s verbose install documentation.&lt;br /&gt; &lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Downloads&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.html&quot;&gt;Oracle WebLogic Server 11gR1&lt;/a&gt; (10.3.3) + Coherence + OEPE – Package Installer – MS Windows (32-bit JVM) ~ 997MB&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/middleware/service-bus/downloads/index.html&quot;&gt;Oracle Service Bus&lt;/a&gt; (11.1.1.3.0) Generic Installer for all platforms&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Installing WLS 10.3.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Run the executable wls1033_oepe111150_win32.exe&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM0__rjfJI/AAAAAAAABMs/X78dJpQY5_M/s1600/osb01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 319px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM0__rjfJI/AAAAAAAABMs/X78dJpQY5_M/s400/osb01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833840253729938&quot; /&gt;&lt;/a&gt;Just in case you forgot what you ran, the WLS splash will display in all it&#039;s glory:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1AI8WSvI/AAAAAAAABM0/lY9aGhm41nw/s1600/osb02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 228px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1AI8WSvI/AAAAAAAABM0/lY9aGhm41nw/s400/osb02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833842740087538&quot; /&gt;&lt;/a&gt;Once the installer is ready:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1AV77foI/AAAAAAAABM8/5RrUmPdar_E/s1600/osb03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1AV77foI/AAAAAAAABM8/5RrUmPdar_E/s400/osb03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833846227992194&quot; /&gt;&lt;/a&gt;Create a new Middleware home:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1Api_iYI/AAAAAAAABNE/iHF9eAW4akk/s1600/osb04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1Api_iYI/AAAAAAAABNE/iHF9eAW4akk/s400/osb04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833851492108674&quot; /&gt;&lt;/a&gt;Choose to live dangerously:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1BN1YBOI/AAAAAAAABNM/wVOc9_YfT7o/s1600/osb05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 285px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1BN1YBOI/AAAAAAAABNM/wVOc9_YfT7o/s400/osb05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833861232887010&quot; /&gt;&lt;/a&gt;Select a Custom install:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1HmnEwsI/AAAAAAAABNU/OY0lLQNwQCY/s1600/osb06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1HmnEwsI/AAAAAAAABNU/OY0lLQNwQCY/s400/osb06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833970963006146&quot; /&gt;&lt;/a&gt;Among the default products and components installed, ensure the Evaluation Database option is selected.  This installs Derby used by the development mode OSB server for storing reports.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1IPuZ1JI/AAAAAAAABNc/UG9h2lLhIno/s1600/osb07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1IPuZ1JI/AAAAAAAABNc/UG9h2lLhIno/s400/osb07.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833981999600786&quot; /&gt;&lt;/a&gt;Install both JDKs:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1IQM9yPI/AAAAAAAABNk/ZfEJOsG4vd4/s1600/osb08.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1IQM9yPI/AAAAAAAABNk/ZfEJOsG4vd4/s400/osb08.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833982127786226&quot; /&gt;&lt;/a&gt;Use default install directories:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1IiilSLI/AAAAAAAABNs/YLQEBZstGIg/s1600/osb09.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1IiilSLI/AAAAAAAABNs/YLQEBZstGIg/s400/osb09.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833987050293426&quot; /&gt;&lt;/a&gt;Default node manager options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1I11FPoI/AAAAAAAABN0/G6zr29FJk-Y/s1600/osb10.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1I11FPoI/AAAAAAAABN0/G6zr29FJk-Y/s400/osb10.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544833992228159106&quot; /&gt;&lt;/a&gt;Default shortcut location options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1PgiTC_I/AAAAAAAABN8/0wNSxWj9Uh4/s1600/osb11.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1PgiTC_I/AAAAAAAABN8/0wNSxWj9Uh4/s400/osb11.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834106771311602&quot; /&gt;&lt;/a&gt;Let the fun begin:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1P_EuDCI/AAAAAAAABOE/MU1LJOT2GgE/s1600/osb12.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1P_EuDCI/AAAAAAAABOE/MU1LJOT2GgE/s400/osb12.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834114968751138&quot; /&gt;&lt;/a&gt;Watching the paint dry:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1QJGWUWI/AAAAAAAABOM/8otRR8qsdZo/s1600/osb13.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1QJGWUWI/AAAAAAAABOM/8otRR8qsdZo/s400/osb13.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834117659939170&quot; /&gt;&lt;/a&gt;On completion skip the Run Quickstart:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1QYIsONI/AAAAAAAABOU/AVgkustz1IQ/s1600/osb14.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1QYIsONI/AAAAAAAABOU/AVgkustz1IQ/s400/osb14.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834121696295122&quot; /&gt;&lt;/a&gt;WLS installation complete.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Installing OSB 10.3.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cd to Disk1 subdirectory&lt;br /&gt;&lt;br /&gt;Run the setup.exe executable.  A DOS prompt will display seeking the JRE location on your machine.  Point it towards the JRockit JRE directory under WLS:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1Qhm5rhI/AAAAAAAABOc/cG81lNJZD1I/s1600/osb15.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 184px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1Qhm5rhI/AAAAAAAABOc/cG81lNJZD1I/s400/osb15.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834124238925330&quot; /&gt;&lt;/a&gt;Another splash screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1coWNcQI/AAAAAAAABOk/MU0ZQCn13Wk/s1600/osb16.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 254px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1coWNcQI/AAAAAAAABOk/MU0ZQCn13Wk/s400/osb16.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834332206395650&quot; /&gt;&lt;/a&gt;Once the installer is ready to rock n roll:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1couDL-I/AAAAAAAABOs/74uNf9xcLGo/s1600/osb17.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1couDL-I/AAAAAAAABOs/74uNf9xcLGo/s400/osb17.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834332306386914&quot; /&gt;&lt;/a&gt;Select the Custom installer:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1dNtdj1I/AAAAAAAABO0/DH3NiZSQ2pg/s1600/osb18.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1dNtdj1I/AAAAAAAABO0/DH3NiZSQ2pg/s400/osb18.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834342236032850&quot; /&gt;&lt;/a&gt;Select the default Components to install:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1dmdZlhI/AAAAAAAABO8/qN6j6orXYa0/s1600/osb19.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1dmdZlhI/AAAAAAAABO8/qN6j6orXYa0/s400/osb19.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834348879549970&quot; /&gt;&lt;/a&gt;Pass the prerequisite checks:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1d3oCZ6I/AAAAAAAABPE/xthvEJsfzEM/s1600/osb20.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1d3oCZ6I/AAAAAAAABPE/xthvEJsfzEM/s400/osb20.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834353487570850&quot; /&gt;&lt;/a&gt;Change the Oracle Middleware Home to your new WLS home setup in the last section:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1mWb1w_I/AAAAAAAABPM/ZazPKue3ZCk/s1600/osb21.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1mWb1w_I/AAAAAAAABPM/ZazPKue3ZCk/s400/osb21.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834499196863474&quot; /&gt;&lt;/a&gt;Let&#039;s kick ass!:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1nMB5jYI/AAAAAAAABPU/2vJGf5Tt0DE/s1600/osb22.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1nMB5jYI/AAAAAAAABPU/2vJGf5Tt0DE/s400/osb22.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834513583574402&quot; /&gt;&lt;/a&gt;Coffee time!:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1nb7Pm5I/AAAAAAAABPc/5m0AW4R5uTE/s1600/osb23.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1nb7Pm5I/AAAAAAAABPc/5m0AW4R5uTE/s400/osb23.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834517850626962&quot; /&gt;&lt;/a&gt;Glory days are here again:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1n-ek4uI/AAAAAAAABPk/TBOZ6VHzOos/s1600/osb24.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1n-ek4uI/AAAAAAAABPk/TBOZ6VHzOos/s400/osb24.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834527125627618&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Create and configure the WLS Domain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Under the Windows Start Menu, select Oracle WebLogic -&gt; WebLogic Server 11gR1 -&gt; Tools -&gt; Configuration Wizard&lt;br /&gt;&lt;br /&gt;Select the Create a new WebLogic Domain option&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1oOZoTiI/AAAAAAAABPs/ReQ9_Eggm_c/s1600/osb25.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1oOZoTiI/AAAAAAAABPs/ReQ9_Eggm_c/s400/osb25.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834531399847458&quot; /&gt;&lt;/a&gt;Select the Oracle Server Bus Extension – Single Server Domain Topology (suitable for dev mode OSB).  This will also select the WebLogic Advanced Web Services for JAX-RPC Extension and Oracle JRF options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1vxNZlNI/AAAAAAAABP0/uOkh-MxM_s0/s1600/osb26.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM1vxNZlNI/AAAAAAAABP0/uOkh-MxM_s0/s400/osb26.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834661002876114&quot; /&gt;&lt;/a&gt;Define the domain name:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1vymsnxI/AAAAAAAABP8/jqojtISs3oY/s1600/osb27.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1vymsnxI/AAAAAAAABP8/jqojtISs3oY/s400/osb27.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834661377416978&quot; /&gt;&lt;/a&gt;Set the admin user name and password:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1wMatz4I/AAAAAAAABQE/HTXtyjnOjiE/s1600/osb28.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM1wMatz4I/AAAAAAAABQE/HTXtyjnOjiE/s400/osb28.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834668306485122&quot; /&gt;&lt;/a&gt;Specify development mode and select the Sun JDK (satisfactory for development mode OSB):&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1wpOAaWI/AAAAAAAABQM/-jdbnOVy6_E/s1600/osb29.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM1wpOAaWI/AAAAAAAABQM/-jdbnOVy6_E/s400/osb29.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834676037806434&quot; /&gt;&lt;/a&gt;Leave the default option here.  This provider will connect to the Derby database as installed in the WLS server, and is used for reporting:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1w3p89HI/AAAAAAAABQU/lz2omUOIog8/s1600/osb30.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TPM1w3p89HI/AAAAAAAABQU/lz2omUOIog8/s400/osb30.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834679913116786&quot; /&gt;&lt;/a&gt;As the WLS server isn&#039;t running, the following test of the previous provider will never succeed, the error can be ignored:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM16zZjdwI/AAAAAAAABQc/I7JIf23eT4Y/s1600/osb31.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM16zZjdwI/AAAAAAAABQc/I7JIf23eT4Y/s400/osb31.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834850569287426&quot; /&gt;&lt;/a&gt;Also ignore the resulting dialog, click Ok:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM17IsGwfI/AAAAAAAABQk/efbprBYoyS4/s1600/osb32.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 359px; height: 163px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM17IsGwfI/AAAAAAAABQk/efbprBYoyS4/s400/osb32.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834856284242418&quot; /&gt;&lt;/a&gt;Leave the defaults except the Administration Server option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM17M8C5VI/AAAAAAAABQs/TYBqwfZjCg8/s1600/osb33.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM17M8C5VI/AAAAAAAABQs/TYBqwfZjCg8/s400/osb33.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834857424840018&quot; /&gt;&lt;/a&gt;Use the default Administration Server options:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM17sqrriI/AAAAAAAABQ0/_RWk-MFI4x4/s1600/osb34.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM17sqrriI/AAAAAAAABQ0/_RWk-MFI4x4/s400/osb34.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834865941949986&quot; /&gt;&lt;/a&gt;Let the fun begin:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM177vCNgI/AAAAAAAABQ8/aLppjkrXdxI/s1600/osb35.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPM177vCNgI/AAAAAAAABQ8/aLppjkrXdxI/s400/osb35.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544834869986735618&quot; /&gt;&lt;/a&gt;Coffee time again!:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2ENJaPBI/AAAAAAAABRE/WKsTPQoUr6U/s1600/osb36.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2ENJaPBI/AAAAAAAABRE/WKsTPQoUr6U/s400/osb36.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544835012099718162&quot; /&gt;&lt;/a&gt;On completion leave the Start Admin Server box unselected, and select done.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Starting the WLS server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Via the Windows Start Menu select Oracle WebLogic -&gt; User Projects -&gt; (your domain name) -&gt; Start Server for Oracle Service Bus Domain&lt;br /&gt;&lt;br /&gt;This will launch 2 DOS windows, one starting WLS (which will take sometime to start), where you need to wait for the RUNNING message:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPNPKsB_dEI/AAAAAAAABRs/DW_426jW2jc/s1600/osb371.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 261px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TPNPKsB_dEI/AAAAAAAABRs/DW_426jW2jc/s400/osb371.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544862611260011586&quot; /&gt;&lt;/a&gt;....and in the other Window starting Derby:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM2FNrkhiI/AAAAAAAABRU/RhyzcAu6bjs/s1600/osb38.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 127px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TPM2FNrkhiI/AAAAAAAABRU/RhyzcAu6bjs/s400/osb38.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544835029422868002&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Entering the OSB Console&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Via the Windows Start Menu select Oracle WebLogic -&gt; User Projects -&gt; (your domain name) -&gt; Oracle Service Bus Admin Console&lt;br /&gt;&lt;br /&gt;In the resulting browser window login using your WLS admin account and password:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2FXyR9zI/AAAAAAAABRc/hHXR0QGpSfw/s1600/osb39.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 316px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2FXyR9zI/AAAAAAAABRc/hHXR0QGpSfw/s400/osb39.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544835032135366450&quot; /&gt;&lt;/a&gt;And finally the OSB console will be displayed:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2FoDoJNI/AAAAAAAABRk/nKLNhDJy4eA/s1600/osb40.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TPM2FoDoJNI/AAAAAAAABRk/nKLNhDJy4eA/s400/osb40.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5544835036503090386&quot; /&gt;&lt;/a&gt;Voila!&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Addendum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Coincidentally about 3 minutes after I posted this blog entry, I discovered &lt;a href=&quot;http://www.deltalounge.net/wpress/2010/11/install-osb-next-to-virtualbox-soa-suite-11g-appliance&quot;&gt;Peter Paul&lt;/a&gt; had completed something similar last week.  Doh!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-2403580634962070646?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/XIH4dUIAkBw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1641272&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 07 Dec 2010 23:38:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1641272</guid>
 <comments>http://chrismuir.sys-con.com/node/1641272#feedback</comments>
</item>
<item>
 <title>Creating an ADF Library JAR</title>
 <link>http://chrismuir.sys-con.com/node/1629676</link>
 <description>Projects and the Application itself in Oracle&#039;s JDeveloper 11g are capable of generating different deployment files at design time, including WAR files, EAR files, JAR files and other standard Java EE archive types.  In addition JDev can generate a special JAR type specific to ADF development known as an ADF library.  An ADF library differs from standard JARs in that the ADF library includes additional metadata files and constructs required for ADF application development.&lt;br /&gt;&lt;br /&gt;To create an ADF library JAR you first need to setup an associated ADF library JAR via the project properties.  This is well document in the &lt;a href=&quot;http://download.oracle.com/docs/cd/E14571_01/web.1111/b31974/reusing_components.htm#BEIGHHCG&quot;&gt;Fusion Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;From here there are essentially 2 ways to actually generate the ADF library JAR.  The first is within the IDE via the project right-click deploy options, and applicable to programmers developing in their JDev IDE.&lt;br /&gt;&lt;br /&gt;The other option particularly important to build environments is the ojdeploy utility.  This tool can be called via the command line or an Ant script, and is necessary for generating ADF library JAR files with the required metadata files and other ADF constructs. &lt;br /&gt;&lt;br /&gt;In specifically considering the ant script option for ojdeploy, JDev will create a basic Ant script for building your applications via the New Gallery -&gt; Ant -&gt; Buildfile from Project option.  In the dialog that displays selecting the &quot;Include Packaging Tasks (uses ojdeploy)&quot; checkbox ensures the generated Ant script includes an ojdeploy target:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TOymjkqw3dI/AAAAAAAABMk/djF7ES-x8s4/s1600/pic01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 180px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TOymjkqw3dI/AAAAAAAABMk/djF7ES-x8s4/s400/pic01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5542988371454909906&quot; /&gt;&lt;/a&gt;The resulting Ant file will look something like this:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;&lt;br /&gt;&amp;lt;project name=&quot;ViewController&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;&lt;br /&gt;  &amp;lt;property file=&quot;build.properties&quot;/&gt;&lt;br /&gt;  &amp;lt;path&gt;....snipped....&amp;lt;/path&gt;&lt;br /&gt;  &amp;lt;target name=&quot;init&quot;&gt;&lt;br /&gt;    &amp;lt;tstamp/&gt;&lt;br /&gt;    &amp;lt;mkdir dir=&quot;${output.dir}&quot;/&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;  &amp;lt;target name=&quot;all&quot; description=&quot;Build the project&quot; depends=&quot;deploy,compile,copy&quot;/&gt;&lt;br /&gt;  &amp;lt;target name=&quot;clean&quot; description=&quot;Clean the project&quot;&gt;&lt;br /&gt;    &amp;lt;delete includeemptydirs=&quot;true&quot; quiet=&quot;true&quot;&gt;&lt;br /&gt;      &amp;lt;fileset dir=&quot;${output.dir}&quot; includes=&quot;**/*&quot;/&gt;&lt;br /&gt;    &amp;lt;/delete&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;  &amp;lt;target name=&quot;deploy&quot; description=&quot;Deploy JDeveloper profiles&quot; depends=&quot;init,compile&quot;&gt;&lt;br /&gt;    &amp;lt;taskdef name=&quot;ojdeploy&quot; classname=&quot;oracle.jdeveloper.deploy.ant.OJDeployAntTask&quot; uri=&quot;oraclelib:OJDeployAntTask&quot;&lt;br /&gt;             classpath=&quot;${oracle.jdeveloper.ant.library}&quot;/&gt;&lt;br /&gt;    &amp;lt;ora:ojdeploy xmlns:ora=&quot;oraclelib:OJDeployAntTask&quot; executable=&quot;${oracle.jdeveloper.ojdeploy.path}&quot;&lt;br /&gt;                  ora:buildscript=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml&quot;&lt;br /&gt;                  ora:statuslog=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml&quot;&gt;&lt;br /&gt;      &amp;lt;ora:deploy&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;workspace&quot; value=&quot;${oracle.jdeveloper.workspace.path}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;project&quot; value=&quot;${oracle.jdeveloper.project.name}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;profile&quot; value=&quot;${oracle.jdeveloper.deploy.profile.name}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;nocompile&quot; value=&quot;true&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;outputfile&quot; value=&quot;${oracle.jdeveloper.deploy.outputfile}&quot;/&gt;&lt;br /&gt;      &amp;lt;/ora:deploy&gt;&lt;br /&gt;    &amp;lt;/ora:ojdeploy&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;  &amp;lt;target name=&quot;compile&quot; description=&quot;Compile Java source files&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;    &amp;lt;javac destdir=&quot;${output.dir}&quot; classpathref=&quot;classpath&quot; debug=&quot;${javac.debug}&quot; nowarn=&quot;${javac.nowarn}&quot;&lt;br /&gt;           deprecation=&quot;${javac.deprecation}&quot; encoding=&quot;UTF-8&quot; source=&quot;1.6&quot; target=&quot;1.6&quot;&gt;&lt;br /&gt;      &amp;lt;src path=&quot;src&quot;/&gt;&lt;br /&gt;    &amp;lt;/javac&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;  &amp;lt;target name=&quot;copy&quot; description=&quot;Copy files to output directory&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;    &amp;lt;patternset id=&quot;copy.patterns&quot;&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.gif&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.jpg&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.jpeg&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.png&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.properties&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.xml&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.ejx&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.xcfg&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.cpx&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.dcx&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.sva&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.wsdl&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.ini&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.tld&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.tag&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.xlf&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.xsl&quot;/&gt;&lt;br /&gt;      &amp;lt;include name=&quot;**/*.xsd&quot;/&gt;&lt;br /&gt;    &amp;lt;/patternset&gt;&lt;br /&gt;    &amp;lt;copy todir=&quot;${output.dir}&quot;&gt;&lt;br /&gt;      &amp;lt;fileset dir=&quot;src&quot;&gt;&lt;br /&gt;        &amp;lt;patternset refid=&quot;copy.patterns&quot;/&gt;&lt;br /&gt;      &amp;lt;/fileset&gt;&lt;br /&gt;    &amp;lt;/copy&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;&amp;lt;/project&gt;&lt;/pre&gt;In particular notice the Ant targets: init, clean, deploy, compile and copy.  Note within the deploy target a call to the ojdeploy utility.  &lt;br /&gt;&lt;br /&gt;Now you&#039;d think with these 5 targets generated by JDeveloper that they are all co-related and have dependencies.  You can even see the deploy-ojdeploy target has dependencies on the init and compile targets.  Unfortunately this is misleading.&lt;br /&gt;&lt;br /&gt;The ojdeploy utility written by Oracle is in fact capable of doing all the other targets&#039; tasks.  The utility takes care of creating/initializing the destination directories, it cleans and compiles the specified application or project, and it takes care of copying all class files.  In fact if you leave the other targets in the Ant script this can interfere with the operation of the ojdeploy utility and you should in fact remove them.  Instead you should have something like this:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;&lt;br /&gt;&amp;lt;project name=&quot;ViewController&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;&lt;br /&gt;  &amp;lt;property file=&quot;build.properties&quot;/&gt;&lt;br /&gt;  &amp;lt;path&gt;....snipped....&lt;/path&gt;&lt;br /&gt;  &amp;lt;target name=&quot;deploy&quot; description=&quot;Deploy JDeveloper profiles&quot; depends=&quot;init,compile&quot;&gt;&lt;br /&gt;    &amp;lt;taskdef name=&quot;ojdeploy&quot; classname=&quot;oracle.jdeveloper.deploy.ant.OJDeployAntTask&quot; uri=&quot;oraclelib:OJDeployAntTask&quot;&lt;br /&gt;             classpath=&quot;${oracle.jdeveloper.ant.library}&quot;/&gt;&lt;br /&gt;    &amp;lt;ora:ojdeploy xmlns:ora=&quot;oraclelib:OJDeployAntTask&quot; executable=&quot;${oracle.jdeveloper.ojdeploy.path}&quot;&lt;br /&gt;                  ora:buildscript=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml&quot;&lt;br /&gt;                  ora:statuslog=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml&quot;&gt;&lt;br /&gt;      &amp;lt;ora:deploy&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;workspace&quot; value=&quot;${oracle.jdeveloper.workspace.path}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;project&quot; value=&quot;${oracle.jdeveloper.project.name}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;profile&quot; value=&quot;${oracle.jdeveloper.deploy.profile.name}&quot;/&gt;&lt;br /&gt;        &amp;lt;ora:parameter name=&quot;outputfile&quot; value=&quot;${oracle.jdeveloper.deploy.outputfile}&quot;/&gt;&lt;br /&gt;      &amp;lt;/ora:deploy&gt;&lt;br /&gt;    &amp;lt;/ora:ojdeploy&gt;&lt;br /&gt;  &amp;lt;/target&gt;&lt;br /&gt;&amp;lt;/project&gt;&lt;/pre&gt;If you&#039;ve looked very carefully, you might have noticed I removed the nocompile option for ojdeploy.  Bizarrely this boolean option takes three forms: true, false, and, the one you need to use to ensure the correct ADF constructs (such as task-flow-registry.xml) are added to the end ADF library JAR, is remove the nocompile option completely.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;(This is bug 9000629 – closed by Support, not considered a bug, but confusing and not intuitive by design)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the Windows platform you need to be careful that any paths you include in the ojdeploy target within the Ant script (either directly or indirectly via a properties file) exactly match the case of the Windows file system, otherwise similar issues can occur.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;(Another bug 10028816 – confirmed bug – fixed 11.1.1.4.0 – patch available for 11.1.1.2.0)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Finally there&#039;s also a bug in the ojdeploy workspace option that it can&#039;t support the Ant script ${user.dir} property.  This isn&#039;t applicable to the example above but I thought worth documenting.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;(Bug 10028879 – confirmed bug – fixed 11.1.1.4.0 – patch available for 11.1.1.2.0)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Entirely separately to generating ADF libraries, if you wish to use the ojdeploy utility to create an EAR via the workspace, you do this by dropping the project option leaving the workspace, profile and outputfile options.  If you do this under JDev 11.1.1.2.0 specifically you&#039;ll see the error message &quot;Missing &amp;lt;workspace&gt;, &amp;lt;project&gt; or &amp;lt;profile&gt; parameter in &amp;lt;deploy&gt; element&quot;, caused by a bug in the ojdeploy utility, of which there is a patch available.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;(Bug 9135159 – confirmed bug – fixed 11.1.1.3.0 – patch available for 11.1.1.2.0)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Addendum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All the above documented via JDev 11.1.1.2.0.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-7837030473878732527?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/EXnBTHoiwH4&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1629676&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 29 Nov 2010 23:12:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1629676</guid>
 <comments>http://chrismuir.sys-con.com/node/1629676#feedback</comments>
</item>
<item>
 <title>JDeveloper REST Web Services presentation available</title>
 <link>http://chrismuir.sys-con.com/node/1625788</link>
 <description>For those who attended the AUSOUG&#039;10 Perth conference, my presentation &lt;a href=&quot;http://www.sagecomputing.com.au/papers_presentations/AUSOUG10-RestWebServices.ppt&quot;&gt;JDeveloper 11g&#039;s REST web services&lt;/a&gt; is now available for download.&lt;br /&gt;&lt;br /&gt;Thanks to all the members who voted for this session, I was well chuffed when it received 2nd best presentation at the conference.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-7590466582093348626?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/3FmRhkgXul8&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1625788&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 23 Nov 2010 17:02:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1625788</guid>
 <comments>http://chrismuir.sys-con.com/node/1625788#feedback</comments>
</item>
<item>
 <title>Hudson Job SVN &quot;Malformed URL&quot; error</title>
 <link>http://chrismuir.sys-con.com/node/1614524</link>
 <description>A blog post documenting something we configured incorrectly using Hudson, maybe useful to others.&lt;br /&gt;&lt;br /&gt;Via Hudson we build a Java EE application using Ant.  The associated Hudson job first checks out the code from SVN.  During the SVN check out phase of the job we&#039;d see the following reported in the job console output:&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;Started by user cmuir&lt;br /&gt;Checking out a fresh workspace because there&#039;s no workspace at C:\java\hudson\Hudson1372\build&lt;br /&gt;Checking out &lt;a href=&quot;https://acme.com/svn/VisualSVNRepo/ADFTaskFlows/REA/trunk&quot; title=&quot;https://acme.com/svn/VisualSVNRepo/ADFTaskFlows/REA/trunk&quot;&gt;https://acme.com/svn/VisualSVNRepo/ADFTaskFlows/REA/trunk&lt;/a&gt;&lt;br /&gt;A         Build&lt;br /&gt;A         Build\Build.jpr&lt;br /&gt;A         Build\rea.build.properties&lt;br /&gt;A         Build\rea.hudson.properties&lt;br /&gt;A         Build\build.xml&lt;br /&gt;A         Model&lt;br /&gt;... snip ...&lt;br /&gt;A         ViewController\src\acme\rea\taskflow\view\beans\pageFlow&lt;br /&gt;A         ViewController\src\acme\rea\taChecking out &lt;br /&gt;ERROR: Failed to check out &lt;br /&gt;org.tmatesoft.svn.core.SVNException: svn: Malformed URL &#039;&#039;&lt;br /&gt; at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)&lt;br /&gt; at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)&lt;br /&gt; at org.tmatesoft.svn.core.SVNURL.&lt;init&gt;(SVNURL.java:221)&lt;br /&gt; at org.tmatesoft.svn.core.SVNURL.parseURIEncoded(SVNURL.java:125)&lt;br /&gt; at hudson.scm.SubversionSCM$ModuleLocation.getSVNURL(SubversionSCM.java:2116)&lt;br /&gt; at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:742)&lt;br /&gt; at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:660)&lt;br /&gt; at hudson.FilePath.act(FilePath.java:753)&lt;br /&gt; at hudson.FilePath.act(FilePath.java:735)&lt;br /&gt; at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:653)&lt;br /&gt; at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:601)&lt;br /&gt; at hudson.model.AbstractProject.checkout(AbstractProject.java:1046)&lt;br /&gt; at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:479)&lt;br /&gt; at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:411)&lt;br /&gt; at hudson.model.Run.run(Run.java:1248)&lt;br /&gt; at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)&lt;br /&gt; at hudson.model.ResourceController.execute(ResourceController.java:88)&lt;br /&gt; at hudson.model.Executor.run(Executor.java:129)&lt;br /&gt;skflow\view\beans\pageFlow\pageFlow&lt;br /&gt;A         ViewController\src\acme\rea\taskflow\view\beans\pageFlow\AuditEvent.java&lt;br /&gt;... snip ...&lt;br /&gt;At revision 3642&lt;br /&gt;Sending e-mails to: &lt;a href=&quot;mailto:chris.muir@acme.com&quot;&gt;chris.muir@acme.com&lt;/a&gt;&lt;br /&gt;Finished: FAILURE&lt;br /&gt;&lt;/pre&gt;In particular note the error:&lt;br /&gt;&lt;br /&gt;ERROR: Failed to check out &lt;br /&gt;org.tmatesoft.svn.core.SVNException: svn: Malformed URL &#039;&#039;&lt;br /&gt;&lt;br /&gt;From a bit of research we discovered the problem in our specific case was an error in the Hudson job configuration (Hudson console -&gt; Login -&gt; (select specific job) -&gt; Configure).  Under the Source Code Management section we&#039;d accidentally created two SVN locations, the 2nd one being blank:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TLZS3CA4ALI/AAAAAAAABMc/hyvapkULl1A/s1600/hudson1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TLZS3CA4ALI/AAAAAAAABMc/hyvapkULl1A/s400/hudson1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527696698030686386&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Essentially this second blank entry was causing the error above, where the Malformed &quot;empty&quot; URL &#039;&#039; is the empty SVN location.  Simply removing this location from the job configuration solves the issue.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Addendum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hudson 1.372&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-4517193997502321808?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/yjkEWTP-oH4&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1614524&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 15 Nov 2010 21:11:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1614524</guid>
 <comments>http://chrismuir.sys-con.com/node/1614524#feedback</comments>
</item>
<item>
 <title>JDev: Programmatically Capturing Task Flow Parameters</title>
 <link>http://chrismuir.sys-con.com/node/1606250</link>
 <description>We recently had the requirement to log all incoming and outgoing parameters from Bounded Task Flows (BTF) for JDeveloper 11g. Via the kind assistance of Simon Lessard and other OTN Forum helpers (of whom I&#039;m very grateful) we were able to come up with the following solution. I share it here for others to benefit from Simon&#039;s advice.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1606250&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 08 Nov 2010 22:42:00 EST</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1606250</guid>
 <comments>http://chrismuir.sys-con.com/node/1606250#feedback</comments>
</item>
<item>
 <title>ADF UI Shell: Supporting global hotkeys for the activity tabs</title>
 <link>http://chrismuir.sys-con.com/node/1598267</link>
 <description>We recently had the requirement to provide our users global hotkeys to switch between tabs within the ADF UI Shell (a.k.a. Dynamic Tab Shell) in JDev 11g.  Luckily I caught a presentation at Open World this year where &lt;a href=&quot;http://thepeninsulasedge.com/frank_nimphius/&quot;&gt;Frank Nimphius&lt;/a&gt; showed off support for creating global hotkeys in ADF applications.  Frank was kind enough to give me his source code allowing me to modify it to suit the ADF UI Shell specifically.  The following code shows the general technique for getting global hotkeys workings, as well as specific code to suit the ADF UI Shell implementation.  The following code was built and tested under JDev 11.1.1.2.0.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;ADF UI Shell Extension – global hotkeys&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Readers familiar with the current incarnation of the ADF UI Shell will know it has the ability to spawn 1 to 15 &quot;activity&quot; tabs displaying whatever the programmer chooses.  This provides an ideal framework for users to spawn multiple bounded task flows (BTFs) and work on several data sets all within the one browser window.&lt;br /&gt;&lt;br /&gt;Our users have taken to the UI Shell and have been asking for extensions ever since.  Of particular note they wanted the ability to open a set of activity tabs, and then flip between them using keyboard shortcuts rather than mouse clicks.&lt;br /&gt;&lt;br /&gt;Frank&#039;s solution to the rescue.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution requires 3 working parts:&lt;br /&gt;&lt;br /&gt;a) JavaScript&lt;br /&gt;b) ViewScoped Managed Bean&lt;br /&gt;c) Changes to the ADF UI Shell derived page to support the hotkeys to call &quot;a&quot; and &quot;b&quot;&lt;br /&gt;&lt;br /&gt;The following code shows the general technique.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;JavaScript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;js&quot;&gt;var keyRegistry = new Array();&lt;br /&gt;&lt;br /&gt;keyRegistry[0] = &quot;alt 1&quot;;&lt;br /&gt;keyRegistry[1] = &quot;alt 2&quot;;&lt;br /&gt;keyRegistry[2] = &quot;alt 3&quot;;&lt;br /&gt;keyRegistry[3] = &quot;alt 4&quot;;&lt;br /&gt;keyRegistry[4] = &quot;alt 5&quot;;&lt;br /&gt;keyRegistry[5] = &quot;alt 6&quot;;&lt;br /&gt;keyRegistry[6] = &quot;alt 7&quot;;&lt;br /&gt;keyRegistry[7] = &quot;alt 8&quot;;&lt;br /&gt;keyRegistry[8] = &quot;alt 9&quot;;&lt;br /&gt;keyRegistry[9] = &quot;alt 0&quot;;&lt;br /&gt;&lt;br /&gt;function registerKeyBoardHandler(serverListener, afdocument) {&lt;br /&gt;&lt;br /&gt;  _serverListener = serverListener;&lt;br /&gt;  var document = AdfPage.PAGE.findComponentByAbsoluteId(afdocument);&lt;br /&gt;  _document = document;&lt;br /&gt;  &lt;br /&gt;  for (var i = keyRegistry.length - 1; i &gt;= 0; i--) {&lt;br /&gt;    var keyStroke = AdfKeyStroke.getKeyStrokeFromMarshalledString(keyRegistry[i]);     &lt;br /&gt;    AdfRichUIPeer.registerKeyStroke(document, keyStroke, callBack);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function callBack(keyCode) {&lt;br /&gt;  var activeComponentClientId = AdfPage.PAGE.getActiveComponentId();&lt;br /&gt;      &lt;br /&gt;  // Send the marshalled key code to the server listener for the developer&lt;br /&gt;  // To handle the function key in a managed bean method      &lt;br /&gt;  var marshalledKeyCode = keyCode.toMarshalledString();&lt;br /&gt;&lt;br /&gt;  // {AdfUIComponent} component Component to queue the custom event on&lt;br /&gt;  // {String} name of serverListener&lt;br /&gt;  // {Object} params a set of parameters to include on the event.&lt;br /&gt;  // {Boolean} immediate whether the custom event is &quot;immediate&quot; - &lt;br /&gt;  //   which will cause it to be delivered during Apply Request&lt;br /&gt;  //   Values on the server, or not immediate, in which &lt;br /&gt;  //   case it will be delivered during Invoke Application.&lt;br /&gt;          &lt;br /&gt;  // Note that if one of the keyboard functions is to create ADF &lt;br /&gt;  // bound rows, immediate must be set to false. There is no&lt;br /&gt;  // option yet for the ClientEvent to be queued for later - &lt;br /&gt;  // InvokeApplication - on the server. &lt;br /&gt;  AdfCustomEvent.queue(_document, &lt;br /&gt;    _serverListener, {keycode:marshalledKeyCode, &lt;br /&gt;    activeComponentClientId:activeComponentClientId}, false); &lt;br /&gt; &lt;br /&gt;  // indicate to the client that the key was handled and that there &lt;br /&gt;  // is no need to pass the event to the browser to handle it&lt;br /&gt;  return true;&lt;br /&gt;}&lt;/pre&gt;You&#039;ll note the hotkey mapping only goes upto 10 (1 to 9 plus zero).  The UI Shell does support 15 tabs, but I couldn&#039;t think of a nice key combination beyond the 10th.... that can be left up to you.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;ViewScoped Managed Bean&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.faces.component.UIComponent;&lt;br /&gt;import javax.faces.context.FacesContext;&lt;br /&gt;import javax.faces.event.PhaseEvent;&lt;br /&gt;import javax.faces.event.PhaseId;&lt;br /&gt;&lt;br /&gt;import oracle.adf.view.rich.render.ClientEvent;&lt;br /&gt;&lt;br /&gt;import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;&lt;br /&gt;import org.apache.myfaces.trinidad.util.Service;&lt;br /&gt;&lt;br /&gt;import waosr.ui.pattern.dynamicShell.TabContext;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class KeyboardHandler {&lt;br /&gt;&lt;br /&gt;  public void registerKeyboardMapping(PhaseEvent phaseEvent) {&lt;br /&gt;    if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE) {&lt;br /&gt;&lt;br /&gt;      FacesContext facesContext = FacesContext.getCurrentInstance();&lt;br /&gt;      ExtendedRenderKitService extRenderKitService =&lt;br /&gt;        Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);&lt;br /&gt;      List&lt;UIComponent&gt; childComponents = facesContext.getViewRoot().getChildren();&lt;br /&gt;      //First child component in an ADF Faces page - and the only child - is af:document&lt;br /&gt;      //Thus no need to parse the child components and check for their component family&lt;br /&gt;      //type&lt;br /&gt;      String id = ((UIComponent)childComponents.get(0)).getClientId(facesContext);&lt;br /&gt;&lt;br /&gt;      StringBuffer script = new StringBuffer();&lt;br /&gt;      script.append(&quot;window.registerKeyBoardHandler(&#039;keyboardToServerNotify&#039;,&#039;&quot; + id + &quot;&#039;)&quot;);&lt;br /&gt;      extRenderKitService.addScript(facesContext, script.toString());&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void handleKeyboardEvent(ClientEvent clientEvent) {&lt;br /&gt;&lt;br /&gt;    String keyCode = (String)clientEvent.getParameters().get(&quot;keycode&quot;);&lt;br /&gt;&lt;br /&gt;    // The alt+&lt;number&gt; keyboard combination opens the relating ADF UI Shell tab if open&lt;br /&gt;    if (keyCode.equalsIgnoreCase(&quot;alt 1&quot;) || keyCode.equalsIgnoreCase(&quot;alt 2&quot;) || keyCode.equalsIgnoreCase(&quot;alt 3&quot;) ||&lt;br /&gt;        keyCode.equalsIgnoreCase(&quot;alt 4&quot;) || keyCode.equalsIgnoreCase(&quot;alt 5&quot;) || keyCode.equalsIgnoreCase(&quot;alt 6&quot;) ||&lt;br /&gt;        keyCode.equalsIgnoreCase(&quot;alt 7&quot;) || keyCode.equalsIgnoreCase(&quot;alt 8&quot;) || keyCode.equalsIgnoreCase(&quot;alt 9&quot;)) {&lt;br /&gt;&lt;br /&gt;      String keyIndexStr = keyCode.substring(keyCode.length() - 1, keyCode.length());&lt;br /&gt;      int keyIndex = Integer.parseInt(keyIndexStr);&lt;br /&gt;      TabContext.getCurrentInstance().setSelectedTabIndex(keyIndex - 1);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;Of specific importance the handleKeyboardEvent() method makes use of the ADF UI Shell TabContext class to set the current activity-tab according to the hotkey pressed.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;ADF UI Shell page&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;?xml version=&#039;1.0&#039; encoding=&#039;UTF-8&#039;?&gt;&lt;br /&gt;&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.1&quot; xmlns:f=&quot;http://java.sun.com/jsf/core&quot;&lt;br /&gt;          xmlns:h=&quot;http://java.sun.com/jsf/html&quot; xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt;&lt;br /&gt;  &lt;jsp:directive.page contentType=&quot;text/html;charset=UTF-8&quot;/&gt;&lt;br /&gt;  &lt;f:view beforePhase=&quot;#{viewScope.keyboardHandler.registerKeyboardMapping}&quot;&gt;&lt;br /&gt;    &lt;af:document id=&quot;d1&quot;&gt;&lt;br /&gt;      &lt;af:form id=&quot;f1&quot;&gt;&lt;br /&gt;      &lt;af:resource type=&quot;javascript&quot; source=&quot;js/Keyboard.js&quot;/&gt;&lt;br /&gt;      &lt;af:serverListener type=&quot;keyboardToServerNotify&quot;&lt;br /&gt;                         method=&quot;#{viewScope.keyboardHandler.handleKeyboardEvent}&quot;/&gt;      &lt;br /&gt;        &lt;af:pageTemplate viewId=&quot;/oracle/ui/pattern/dynamicShell/dynamicTabShell.jspx&quot;&lt;br /&gt;                         value=&quot;#{bindings.pageTemplateBinding}&quot; id=&quot;pt1&quot;&gt;&lt;br /&gt;        &lt;/af:pageTemplate&gt;&lt;br /&gt;      &lt;/af:form&gt;&lt;br /&gt;    &lt;/af:document&gt;&lt;br /&gt;  &lt;/f:view&gt;&lt;br /&gt;&lt;/jsp:root&gt;&lt;/pre&gt;Note:&lt;br /&gt;&lt;br /&gt;a) The beforePhase property in the view tag&lt;br /&gt;b) The loading of the JavaScript via the resource tag&lt;br /&gt;c) The serverlistener that calls the bean methods&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;How This Works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Before the page is rendered, JavaScript is added to call the registerKeyBoardHandler method in the attached JavaScript library when the page is rendered&lt;br /&gt;2) The JavaScript method registers (but does not invoke) for the defined keys a server side event&lt;br /&gt;3) On the page rendering, if the user clicks one of the keys, the interaction of the JavaScript server side event *and* the serverListener in the page calls the bean handleKeyboardEvent method&lt;br /&gt;4) Finally the method calls the ADF UI Shell TabContext class to switch tabs based on the hotkey number&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Caveat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Frank notes some minor cross browser compatibility issues and certain hotkey combinations not working.  Rather than highlighting the specific problems in this release, as this solution is reliant on JavaScript the ever unreliable-pain-in-the-butt-that-it-is-across-different-browser-versions, readers are highly recommended to do their own cross-browser testing.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-2120090978899811314?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/XjXyTzjeJ4Y&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1598267&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 03 Nov 2010 03:47:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1598267</guid>
 <comments>http://chrismuir.sys-con.com/node/1598267#feedback</comments>
</item>
<item>
 <title>AUSOUG&#039;10 Perth conference - REST web services with JDev</title>
 <link>http://chrismuir.sys-con.com/node/1591986</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.ausoug.org.au/2020/images/banner.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 765px; height: 108px;&quot; src=&quot;http://www.ausoug.org.au/2020/images/banner.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;It&#039;s that time of the year again when the &lt;a href=&quot;http://www.ausoug.org.au/2020/&quot;&gt;Perth&lt;/a&gt; Australian Oracle User Group (AUSOUG) conference comes around.  This conference is guaranteed to be only 0.005% as large as Oracle Open World, way more personable though, with better lunches, involves less walking &amp; definitely is less tiring.  Coffee is better too.&lt;br /&gt;&lt;br /&gt;This year I&#039;ll be selling Oracle wares with the following double slot presentation:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;A change is as good as a REST: JDeveloper 11g&#039;s REST web services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;23rd November - &quot;Studio 2&quot; - 11am-12:45&lt;br /&gt;&lt;br /&gt;Abstract: SOAP based web services can seem a hard slog to develop with their contract first design requirements, and over engineered specification that includes everything plus the kitchen sink. REST based web services provide light relief for quick web service development where the constraints of SOAP web services feel extreme for some short sharp development. Luckily Oracle&#039;s JDeveloper provides support for both styles, and in this presentation Chris Muir will demonstrate a short and sweet demonstration to getting REST web services up and running, using JDeveloper&#039;s JAX-RS support.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I look forward to seeing you there.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-5349452021730132446?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/mqACtKDqqEc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1591986&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sat, 30 Oct 2010 02:11:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1591986</guid>
 <comments>http://chrismuir.sys-con.com/node/1591986#feedback</comments>
</item>
<item>
 <title>Closing Applications (Correctly) in JDeveloper</title>
 <link>http://chrismuir.sys-con.com/node/1584664</link>
 <description>The following documents a somewhat small issue we&#039;re having with JDeveloper 11.1.1.2.0.  At this time I&#039;m unable to lodge an SR with Oracle Support as we don&#039;t understand the circumstances under which it occurs, thus we can&#039;t build the usual simple &quot;Hello World&quot; test case that Support so thrives on.  However as we&#039;ve identified the symptoms of the problem and the associated workaround I&#039;ll publish them here for others to benefit (including my team) so we don&#039;t hit the issue again.&lt;br /&gt;&lt;br /&gt;Note this issue is only verified under JDev 11.1.1.2.0.  I have no knowledge if the issue can be replicated in other JDev versions as this stage.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Issue Symptoms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From time to time after checking out an application from SVN inside JDeveloper:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TLZR7mhvYOI/AAAAAAAABL0/9Tnj9B1TpHI/s1600/pic1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 370px; height: 400px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TLZR7mhvYOI/AAAAAAAABL0/9Tnj9B1TpHI/s400/pic1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527695677040058594&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TLZR712fspI/AAAAAAAABL8/Oy2DVaHYsjo/s1600/pic2.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 117px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TLZR712fspI/AAAAAAAABL8/Oy2DVaHYsjo/s400/pic2.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527695681153643154&quot; /&gt;&lt;/a&gt;&lt;br /&gt;....we&#039;d discover JDev has incidentally modified one of the project files.  In the following example the ViewController project is italicized meaning it has been modified:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TLZR8GQwq6I/AAAAAAAABME/4kC3M_vnp6w/s1600/pic4.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 333px; height: 256px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TLZR8GQwq6I/AAAAAAAABME/4kC3M_vnp6w/s400/pic4.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527695685558774690&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Pressing &quot;Save all&quot; and then comparing the modified file against the previous revision reveals that the ViewController project has reverted back to the default settings, losing all the changes from the previous ViewController revision:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TLZR9AJJ2JI/AAAAAAAABMM/QiDLvDtqDKI/s1600/pic5.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TLZR9AJJ2JI/AAAAAAAABMM/QiDLvDtqDKI/s400/pic5.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527695701096126610&quot; /&gt;&lt;/a&gt;&lt;br /&gt;With the ViewController modified, the project can no longer compile (because among other things it&#039;s lost the attached libraries), and the change is effectively destructive.  Whatever you do, don&#039;t check the ViewController project file back into SVN as it&#039;s just plain wrong.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Workaround #1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you&#039;ve arrived at this point where a project has been automatically modified by JDeveloper when checked out of SVN, the workaround in this situation is to Revert the project file back to the previous revision.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;A Known Unknown Bug&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the example above I&#039;ve identified the issue with a ViewController project in an ADF application.  However note this problem isn&#039;t specific to any project type (e.g. Model, ViewController, whatever).  We&#039;ve experienced this issue across different projects in different applications from time to time.  The converse of this issue is there&#039;s been a whole lot of projects this issue doesn&#039;t occur for too (i.e. in the above example, the Model project wasn&#039;t incidentally modified too), so the problem has something to do with the specific project configuration where the error occurs.  Unfortunately we&#039;re unsure what that specific configuration is.  However once the problem is detected it is consistently replicable on the problematic project at hand.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Bug Preconditions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While we haven&#039;t been able to work out what configuration in the project files causes the bug, we are aware of a set of steps that do lead up to the bug.&lt;br /&gt;&lt;br /&gt;From a day by day basis our programmers will have an application open in JDeveloper, synced with an SVN repository:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TLZR9j2dbLI/AAAAAAAABMU/gu0SqFqCYEU/s1600/pic6.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 328px; height: 214px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TLZR9j2dbLI/AAAAAAAABMU/gu0SqFqCYEU/s400/pic6.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5527695710681394354&quot; /&gt;&lt;/a&gt;&lt;br /&gt;From time to time the programmer makes a decision that rather than syncing each individual file change coming from the SVN repository into the application, it&#039;s just easier to delete the local working copy of the application and check out a whole brand new copy.  To do this the developer:&lt;br /&gt;&lt;br /&gt;a) Closes JDeveloper&lt;br /&gt;b) Identifies the working copy application directory on the filesystem&lt;br /&gt;c) Deletes it&lt;br /&gt;d) Opens JDeveloper&lt;br /&gt;e) Checks out the same application from the SVN Repository into the *same* directory that the previous working copy was checked out&lt;br /&gt;&lt;br /&gt;It&#039;s at this point we see the issue described, but as mentioned, not for all application projects, just some projects, sometimes.  However once this problem occurs, repeating steps &quot;a&quot; to &quot;e&quot; from above the issue is consistently reproducible.&lt;br /&gt;&lt;br /&gt;From what we can see for step &quot;e&quot; is if we check out to any other directory, the problem isn&#039;t replicated.&lt;br /&gt;&lt;br /&gt;What we found odd about this issue is if another developer on another machine checks out the same application, the said problematic project file wouldn&#039;t be automatically modified by JDeveloper.  Yet this gave us the spark of an idea of what&#039;s going wrong and how to avoid it in the first place.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Workaround #2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You&#039;ll note in the &quot;a&quot; to &quot;e&quot; description above, the developer closes JDev, then deletes the application from the file system, then re-opens JDev.  What we&#039;re not giving the JDev IDE here is a chance to recognize that one of the applications it had opened has been removed completely from the file system.&lt;br /&gt;&lt;br /&gt;The IDE seems to be partially smart in that the application is removed from the application poplist at the top of the Application Navigator when we reopen JDeveloper.  Yet if we then proceed to check out the same application as described in &quot;a&quot; to &quot;e&quot; we hit the described problem.&lt;br /&gt;&lt;br /&gt;A workaround to the problem is before closing the JDev IDE, via the Application menu selecting Close, to close the selected application.  If this option is done first the end problem is not seen.  The conclusion is this gives JDev a chance to tidy up it&#039;s internal state about which applications and projects are open, and somehow this avoids the bug we&#039;re experiencing.&lt;br /&gt;&lt;br /&gt;Arguably the IDE should be able to handle this situation regardless.  The fact that the bug is destructive to the project configuration is a major concern, especially if a junior programmer doesn&#039;t understand what&#039;s happening and checks in the changed project file regardless, but in the end following the workaround steps here avoid the issue in the first place.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-8258875132980102094?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/q8p0AdoRIsc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1584664&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 25 Oct 2010 20:44:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1584664</guid>
 <comments>http://chrismuir.sys-con.com/node/1584664#feedback</comments>
</item>
<item>
 <title>Can&#039;t we all just get along? JDeveloper vs Apple QuickTime</title>
 <link>http://chrismuir.sys-con.com/node/1579218</link>
 <description>Every once in a while on running an application via JDev, usually just before I&#039;m about to present (argh!), the integrated WLS doesn&#039;t start, displaying the following error message:&lt;br /&gt;&lt;br /&gt;*** Using port 7101 ***&lt;br /&gt;C:\Users\Chris\AppData\Roaming\JDeveloper\system11.1.1.2.36.55.36\DefaultDomain\bin\startWebLogic.cmd&lt;br /&gt;[waiting for the server to complete its initialization...]&lt;br /&gt;\QuickTime\QTSystem\QTJava.zip was unexpected at this time.&lt;br /&gt;Process exited.&lt;br /&gt;&lt;br /&gt;This error occurs because under Windows, anytime I update Apple&#039;s iTunes on my PC, which in turn more often than not installs a new version of Apple QuickTime, the QuickTime installer adds the following entry to the CLASSPATH environment variable:&lt;br /&gt;&lt;br /&gt;CLASSPATH=.;C:\Program Files (x86)\QuickTime\QTSystem\QTJava.zip&lt;br /&gt;&lt;br /&gt;It can be fixed by removing the entry, and restarting JDev.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-5349509137778560988?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/3ivOWmGeg9k&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1579218&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 20 Oct 2010 00:12:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1579218</guid>
 <comments>http://chrismuir.sys-con.com/node/1579218#feedback</comments>
</item>
<item>
 <title>ADF BC - A Passivation Issue</title>
 <link>http://chrismuir.sys-con.com/node/1566557</link>
 <description>A recommended ADF development best practice from Oracle is to check your applications are &lt;a href=&quot;http://download.oracle.com/docs/cd/E14571_01/web.1111/b31974/bcstatemgmt.htm#CHDGAIFA&quot;&gt;Activation Safe&lt;/a&gt;.  In recent testing of an ADF 11g application we discovered the following scenario where our application failed Activation Safe testing, documented for others to read-but-not-experience-first-hand.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Problem Scope&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Consider an application displaying employee details.  The first screen contains a table of employees, and on selecting a specific row, the 2nd screen shows the details of the selected employee.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/THNrGsoteZI/AAAAAAAABJM/-oTPr7GlLtY/s1600/pic1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 224px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/THNrGsoteZI/AAAAAAAABJM/-oTPr7GlLtY/s400/pic1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5508864532009548178&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Note in the screen shots, selecting employee ID 106 in the table, displays employee ID 106 in the form screen.  Essentially the expected behaviour.&lt;br /&gt;&lt;br /&gt;In this example from the ADF BC point of view the employees data is backed by a Read Only View Object (VO) based on the employees table from Oracle&#039;s HR schema.  By default the employees VO contains the following attributes.  Note the PK employee ID:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/THNrHFAWdpI/AAAAAAAABJU/hnf5kKW68Zc/s1600/pic2.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 253px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/THNrHFAWdpI/AAAAAAAABJU/hnf5kKW68Zc/s400/pic2.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5508864538551154322&quot; /&gt;&lt;/a&gt;&lt;br /&gt;By chance if we disable the PK and run the application, it performs in the same way as described in the first picture above on the developer&#039;s PC.  Selecting employee ID 106 in the table results in the same record 106 shown in the second page.&lt;br /&gt;&lt;br /&gt;Interestingly in the JDev console, as we select the employee in the table, the following message is displayed:&lt;br /&gt;&lt;br /&gt;&amp;lt;CurrencyRowKeySet&gt;&amp;lt;_computeCurrentRowKey&gt; ADFv: Rowkey does not have any primary key attributes. Rowkey: oracle.jbo.Key[], table: oracle.jbo.server.ViewObjectImpl@e48114.&lt;br /&gt;&lt;br /&gt;Yet as stated the application works correctly.  Can we ignore this error?&lt;br /&gt;&lt;br /&gt;Activation Safe testing teases out the problem in more detail.  Activation Safe testing requires us to right click the Application Module -&gt; then select Configurations -&gt; AppModuleLocal -&gt; Pooling and Scalability, and then *disable* the Enable Application Module property:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/THNrHqDetyI/AAAAAAAABJc/gX-y7_qNI9E/s1600/pic3.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 366px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/THNrHqDetyI/AAAAAAAABJc/gX-y7_qNI9E/s400/pic3.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5508864548496389922&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On re-running our application we see the following behaviour:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/THNrIBXSs6I/AAAAAAAABJk/qWZ7iOz4JlI/s1600/pic4.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 133px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/THNrIBXSs6I/AAAAAAAABJk/qWZ7iOz4JlI/s400/pic4.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5508864554753504162&quot; /&gt;&lt;/a&gt;&lt;br /&gt;...that is on selecting employee ID 105, and navigating to the next page, oddly the record shown is employee ID 100.  Selecting the back button, on returning to the table page, it still shows employee ID 100 as the selected record regardless of our original selection.&lt;br /&gt;&lt;br /&gt;On looking at the JDev console window when selecting employee ID 105, we see that the log message has expanded:&lt;br /&gt;&lt;br /&gt;&amp;lt;CurrencyRowKeySet&gt;&amp;lt;_computeCurrentRowKey&gt; ADFv: Rowkey does not have any primary key attributes. Rowkey: oracle.jbo.Key[], table: oracle.jbo.server.ViewObjectImpl@9ddef9.&lt;br /&gt;&amp;lt;FacesCtrlHierBinding$FacesModel&gt;&amp;lt;makeCurrent&gt; ADFv: No row found for rowKey: [oracle.jbo.Key[]].&lt;br /&gt;&lt;br /&gt;If you turn on the &lt;a href=&quot;http://download.oracle.com/docs/cd/E14571_01/web.1111/b31974/bcqueryresults.htm#CHDBBEEB&quot;&gt;-Djbo.debugoutput=console&lt;/a&gt; option when running the program the problem is revealed in more detail:&lt;br /&gt;&lt;br /&gt;&lt;JUCtrlHierNodeBinding&gt;&lt;convertRowsToNodes&gt; [978] Warning! Binding:noCtrl_oracle_adfinternal_view_faces_ model_binding_FacesCtrlHierNodeBinding_1 requires key attributes to be able to locate nodes in the hierarchy.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From identifying this problem the natural conclusion is in order to build an Activation Safe application, amongst other issues your View Objects require a primary key.  Typically this isn&#039;t an issue as most VOs are based on EOs, where the IDE enforces each EO has at least one primary key attribute that is shared to the VO.  But in the case of Read Only VOs not based on an EO, it&#039;s fairly easy to create a VO without a PK attribute.  In the simple example from this blog, of course the employees table has a PK attribute, but, if we&#039;re building a customised VO based around some complex query, in particular if we use the expert-mode VO option, no PK is defined by default.  Thus our application becomes Activation unsafe.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Addendum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tested under JDev 11.1.1.2.0 build 5536.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-2825355493368120100?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/Fy4phdRSYzU&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1566557&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 12 Oct 2010 04:38:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1566557</guid>
 <comments>http://chrismuir.sys-con.com/node/1566557#feedback</comments>
</item>
<item>
 <title>REST Web Services in Oracle&#039;s JDeveloper  in 10 easy steps</title>
 <link>http://chrismuir.sys-con.com/node/1555634</link>
 <description>I&#039;m currently writing a REST Web Service presentation for the Australian Oracle User Group, and thought it would be useful to document in 10 quick steps how to enable REST Web Services in Oracle&#039;s JDeveloper using the Jersey implementation of JAX-RS (JSR311). This is documented in Oracle&#039;s online documentation, but that&#039;s never stopped me writing a blog entry before in my usual succinct manner.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1555634&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sat, 02 Oct 2010 03:30:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1555634</guid>
 <comments>http://chrismuir.sys-con.com/node/1555634#feedback</comments>
</item>
<item>
 <title>Master-Child BTF Chaperone – A Contextual Event Alternative</title>
 <link>http://chrismuir.sys-con.com/node/1518967</link>
 <description>Inter Bounded Task Flows (BTF) communications are aided in JDeveloper 11g by the use of contextual events, a BTF publish-subscribe mechanism for passing data between BTFs. Yet in some situations contextual events may be the equivalent of &quot;using a sledge hammer to crack a nut&quot;, where developers try and use them everywhere when there are alternative techniques available that may work just as well.
This blog documents a technique for allowing a master ADF application utilising the ADF UI Shell to provide services to a child BTF, including passing data backwards and forwards, without the use of contextual events. While the blog demonstrates a solution within context of the ADF UI Shell, the overall technique should be useful in other ADF solutions.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1518967&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 01 Sep 2010 08:00:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1518967</guid>
 <comments>http://chrismuir.sys-con.com/node/1518967#feedback</comments>
</item>
<item>
 <title>New OTN article: Adapting Oracle Application Development Framework and Subversion to Your Enterprise&#039;s Needs</title>
 <link>http://chrismuir.sys-con.com/node/1514985</link>
 <description>I&#039;m happy to say a long labour has finally born a series of articles on OTN entitled &lt;a href=&quot;http://www.oracle.com/technetwork/articles/adf/adf-and-svn-168151.html&quot;&gt;Adapting Oracle Application Development Framework and Subversion to Your Enterprise&#039;s Needs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This article series goes beyond simply explaining how to use SVN with Oracle JDeveloper 11g. It is intended to give development teams, managers, and change-control officers a heads-up on the complete end-to-end process of building, extending, and maintaining Oracle ADF applications through typical enterprise Development, Test, and Production environments.&lt;br /&gt;&lt;br /&gt;Happy reading.&lt;br /&gt;&lt;br /&gt;And to think when I originally started that &quot;article&quot; I thought I could keep it under 2000 words.  Sheesh!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-3896502965757963950?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/cyLOjlf5XUM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1514985&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 30 Aug 2010 20:37:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1514985</guid>
 <comments>http://chrismuir.sys-con.com/node/1514985#feedback</comments>
</item>
<item>
 <title>Update: ADF EMG Oracle Open World 2010 Unconference Sessions</title>
 <link>http://chrismuir.sys-con.com/node/1506582</link>
 <description>I teased in a previous &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2010/07/adf-emg-at-oow10-must-attend-event.html&quot;&gt;post&lt;/a&gt; that I&#039;d reserve publishing details about the &lt;a href=&quot;http://groups.google.com/group/adf-methodology&quot;&gt;ADF EMG&lt;/a&gt; Oracle Open World 2010 Unconference sessions till later.  Well later is now, and I&#039;m (you guessed it) excited to announce we have another full schedule at the Unconference.  Read below for more details:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Where and when?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Location:&lt;/span&gt; Hotel Parc 55, 3rd Floor, Mason Room&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Map:&lt;/span&gt; &lt;a href=&quot;http://www.parc55hotel.com/map-and-directions&quot;&gt;http://www.parc55hotel.com/map-and-directions&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Date/time:&lt;/span&gt; Wednesday 22nd Sept 10:00-12:00&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Duration:&lt;/span&gt; 120min&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Topics and Speakers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Oracle ADF 11g and Oracle WebCenter 11g Production Demo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Andrejus Baranovskis - Red Samurai Consulting&lt;br /&gt;&lt;br /&gt;During his session Andrejus will demonstrate two production systems, the first a retail system, and the second for the education sector.  Both systems are based on a standard Oracle development architecture - utilising ADF BC, ADF Task Flows, ADF Libraries and Oracle&#039;s ADF UI Shell.  The second system in addition implements Oracle WebCenter Services - Composer, Discussions, Document Management and RSS feeds, providing a Web 2.0 platform.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;ADF BC 10g and ADF Faces 10g to ADF BC 11g and Trinidad, Live!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;John Flack – Information Engineer Synectics for Management Decisions, Inc.&lt;br /&gt;&lt;br /&gt;John will run a live lets-get-down-and-dirty demonstration of migrating a small ADF BC 10g/ADF Faces 10g application to ADF BC 11g and Apache MyFaces Trinidad.  This will include steps to make the migration easier, the migration wizard, and how to clean up the application after migration, as well some differences between ADF Faces 10g and Trinidad.  John will also show some steps needed which aren&#039;t documented, from some hard-earned real-life experience.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Demonstration of UW-Madison&#039;s Scholarship Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Todd Hill &amp; Ed O&#039;Connor-Giles – Development Services Specialist and Technical Leader at the University of Wisconsin&lt;br /&gt;&lt;br /&gt;University of Wisconsin-Madison automates management, evaluation,  and awarding of scholarships -- and the online application experience for students -- with an application built on Oracle ADF. In this session Todd and Ed from the university will demonstrate the application and their technical approach, discuss the many real-world technical challenges faced, and lessons learned in the course of the project.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Integrating 3rd party tools/frameworks into ADF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gert Leenders - Product Manager at Axi Nv&lt;br /&gt;&lt;br /&gt;Gert will discuss their latest ADF project resulting in a real Java technology mash-up showing how ADF can be integrated with several different product.  The core remains ADF but for the management of the business processes his team integrated JBoss jBPM, JBoss Drools as a business rule engine, and last but not least Alfresco &amp; UCM as a content repository through the use of CMIS.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;ADF - How much do you really need to know?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sten Vesterli&lt;br /&gt;&lt;br /&gt;How much knowledge is enough? You could spend months or even years learning to master all aspects of ADF Business Components and ADF Faces, but you already know that you don&#039;t need to know everything. This presentations proposes a set of ADF skill levels and a way to classify application complexity - and a way to map these, so you know what skill levels you need in order to build a given application.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Don&#039;t forget...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don&#039;t forget that the ADF EMG also has an &lt;a href=&quot;http://one-size-doesnt-fit-all.blogspot.com/2010/07/adf-emg-at-oow10-must-attend-event.html&quot;&gt;on-schedule session&lt;/a&gt; on Sunday 19th:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Session ID&lt;/span&gt;: S313445&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Location:&lt;/span&gt; Moscone West, Level 3, Room 3012&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Date/time:&lt;/span&gt; Sunday 19th Sept 14:00-15:00&lt;br /&gt;&lt;br /&gt;...with the following well respected ADF and JSF speakers:&lt;br /&gt;&lt;br /&gt;• Frank Nimphius&lt;br /&gt;• Kito Mann&lt;br /&gt;• Aino Andriessen&lt;br /&gt;• Sten Vesterli&lt;br /&gt;&lt;br /&gt;We look forward to seeing you in San Francisco!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-3520757061207311723?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/-1cwMdvbjow&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1506582&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sun, 22 Aug 2010 05:20:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1506582</guid>
 <comments>http://chrismuir.sys-con.com/node/1506582#feedback</comments>
</item>
<item>
 <title>Installing JDeveloper 11g v11.1.1.2.0 under Windows</title>
 <link>http://chrismuir.sys-con.com/node/1499794</link>
 <description>To save me time in the future, rather than having to write it again and again for clients, this blog entry documents how to install JDeveloper 11g Studio Edition v11.1.1.2.0 build 5536 under Windows.  I&#039;ll admit it&#039;s not the most exciting blog post, for sure Oracle&#039;s already done it (without my witty dialogue of course), and hey, it&#039;s not even the latest release, but sometimes we just gotta-do-documentation-for-documentation&#039;s-sake.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Software&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The JDeveloper software can be obtained from &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html&quot;&gt;here&lt;/a&gt; ... then selecting the Downloads tab -&gt; Archived Downloads -&gt; Oracle JDeveloper 11g 11.1.1.2.0 -&gt; Accept License Agreement -&gt; jdevstudio11112install.exe (that constitutes the Studio Edition for Windows including JDK 6.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Prerequisites&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Disable virus scanners - to make your life easier, disable any virus scanners during the installation as this will slow the install process down if the virus scanner scans each Java archive.  This has from experience been a particular problem with McAfee&#039;s products, and I recommend an alternative virus scanner.&lt;br /&gt;&lt;br /&gt;Administrative access – you&#039;ll require privileges to install software onto the local PC.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Installation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) On the local Windows PC execute the jdevstudio11112.install.exe.  This will display the Oracle Installer Welcome dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aMMJbCI/AAAAAAAABGc/ekJ1kqApCPs/s1600/jdevinstall01.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aMMJbCI/AAAAAAAABGc/ekJ1kqApCPs/s400/jdevinstall01.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921474269637666&quot; /&gt;&lt;/a&gt;2) Selecting Next presents the Choose Middleware Home Directory dialog where you can select an existing Fusion Middleware Home directory or create a new one.   It&#039;s recommended you always install each JDeveloper installation in it&#039;s own directory, so create a new directory either by typing the directory in the text box or using the Browse button.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aXdcp3I/AAAAAAAABGk/0i7IMN9hCGo/s1600/jdevinstall02.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aXdcp3I/AAAAAAAABGk/0i7IMN9hCGo/s400/jdevinstall02.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921477294991218&quot; /&gt;&lt;/a&gt;If you have multiple developers setting up JDeveloper on their local PCs, it&#039;s recommended you standardize the installation directories, and cater for multiple JDeveloper versions.  In the picture above C:\java\jdeveloper\JDev11gBuild5536 reflects a separate directory for JDeveloper 11g v11.1.1.2.0 build 5536.  As alternative a later version JDeveloper 11g v11.1.1.3.0 build 5560 could be installed under C:\java\jdeveloper\JDev11gBuild5560.  Note to avoid cross-platform issues in the future it&#039;s recommended you standardize the capitalization of the directories too.&lt;br /&gt;&lt;br /&gt;3) Selecting Next presents the Choose Install Type dialog, allowing you a choice between installing the full package or customising the install and dropping off components:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aySSeVI/AAAAAAAABGs/GGKgIWnibSw/s1600/jdevinstall03.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2aySSeVI/AAAAAAAABGs/GGKgIWnibSw/s400/jdevinstall03.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921484495944018&quot; /&gt;&lt;/a&gt;As it&#039;s unknown what future parts of JDeveloper will be required for development purposes it&#039;s recommended the Complete installation option is chosen.  If you do choose the Custom option you&#039;ll be presented with the Choose Products and Components dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj3Gj4gzOI/AAAAAAAABI8/CSbD334VqUo/s1600/jdevinstall21.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj3Gj4gzOI/AAAAAAAABI8/CSbD334VqUo/s400/jdevinstall21.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922236543978722&quot; /&gt;&lt;/a&gt;.....where you need to make you&#039;re own informed choices.&lt;br /&gt;&lt;br /&gt;4) Next presents the Confirm Product Installation Directories dialog.  Of note are the base Middleware Home Directory, and the two separate directories for the actual JDeveloper software and the separate integrated WebLogic Server:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj2bOUqiSI/AAAAAAAABG0/Ou0kCMr6Fms/s1600/jdevinstall04.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj2bOUqiSI/AAAAAAAABG0/Ou0kCMr6Fms/s400/jdevinstall04.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921492022102306&quot; /&gt;&lt;/a&gt;5) The Choose Shortcut Location dialog displayed next gives you options to create the JDeveloper Windows group either for the current user or all users on the local PC.  As multiple developers may use the same PC, giving access to all users may be the preferred option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2bSfAHyI/AAAAAAAABG8/lvfwxj2GYiY/s1600/jdevinstall05.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2bSfAHyI/AAAAAAAABG8/lvfwxj2GYiY/s400/jdevinstall05.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921493139201826&quot; /&gt;&lt;/a&gt;If you do choose to create the JDeveloper Windows group in all users accounts, assuming you have administrative rights on the local PC for installing JDeveloper, install at the end of this process that the installed JDeveloper files can also be run by other users on the same PC.&lt;br /&gt;&lt;br /&gt;6) The Installation Summary dialog on selecting Next displays what will be installed, how much disk space will be consumed: &lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2nGRNWQI/AAAAAAAABHE/D39Xz9yiWhY/s1600/jdevinstall06.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2nGRNWQI/AAAAAAAABHE/D39Xz9yiWhY/s400/jdevinstall06.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921696018553090&quot; /&gt;&lt;/a&gt;Select Next starts the installation process:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2nklai1I/AAAAAAAABHM/MsDBY2xg8k4/s1600/jdevinstall07.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2nklai1I/AAAAAAAABHM/MsDBY2xg8k4/s400/jdevinstall07.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921704156367698&quot; /&gt;&lt;/a&gt;7) On successful completion the Installation Complete dialog will show:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2nqgWb6I/AAAAAAAABHU/14QPOZcIe-E/s1600/jdevinstall08.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 286px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2nqgWb6I/AAAAAAAABHU/14QPOZcIe-E/s400/jdevinstall08.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921705745739682&quot; /&gt;&lt;/a&gt;Leaving the Run Quickstart checkbox checked and selecting the Done button will close the installer and open the Quickstart program (explained in the next section).  We&#039;ll assume you uncheck the checkbox and start JDeveloper separately below.&lt;br /&gt;&lt;br /&gt;Your JDeveloper installation is now complete.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;What was Installed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Post installation JDeveloper will have installed the following:&lt;br /&gt;&lt;br /&gt;1) Under the specified installation directory the JDeveloper and integrated WebLogic Server files will exist:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj3Ay0c_cI/AAAAAAAABIs/R0kqyhodIzg/s1600/jdevinstall19.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 166px; height: 400px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj3Ay0c_cI/AAAAAAAABIs/R0kqyhodIzg/s400/jdevinstall19.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922137474268610&quot; /&gt;&lt;/a&gt;2) A new directory C:\bea will have been created if this is your first Fusion Middleware install with the file beahomelist.  This text file when open reveals the installation home directory for each product installed.&lt;br /&gt;&lt;br /&gt;3) Within the Windows Start menu a new group Oracle Fusion Middleware 11.1.1.2.0 will exist:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj3BAFED0I/AAAAAAAABI0/ES2CLD8aTaE/s1600/jdevinstall20.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 307px; height: 400px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj3BAFED0I/AAAAAAAABI0/ES2CLD8aTaE/s400/jdevinstall20.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922141033598786&quot; /&gt;&lt;/a&gt;4) When you run JDeveloper for the first time it will create two sets of files under the Windows user directories for the current user.  Where these are found depends on which version of Windows you&#039;re using.  Older versions including Windows XP stores the files under:&lt;br /&gt;&lt;br /&gt;a) C:\Documents and Settings\&amp;lt;username&gt;\Application Data\JDeveloper\&lt;br /&gt;&lt;br /&gt;...in that directory you&#039;ll notice a subdirectory like &quot;system11.1.1.2.36.55.36&quot; where the system directory numbering scheme references the version of JDeveloper and build number (e.g. version 11.1.1.2.0 and build 5536 from the example above) you&#039;ve installed.  Multiple versions of JDeveloper will see additional system directories created here.&lt;br /&gt;&lt;br /&gt;b) C:\Documents and Settings\&amp;lt;username&gt;\Oracle\oradiag_&lt;username&gt;&lt;br /&gt;&lt;br /&gt;....I&#039;m not entirely sure what this directory is used for presumably capturing diagnostic information.  I believe it&#039;s enabled by selecting the XXXX option in the following section.&lt;br /&gt;&lt;br /&gt;If you&#039;re using a modern version of Windows the likely location for these files are:&lt;br /&gt;&lt;br /&gt;a) C:\Users\&amp;lt;username&gt;\AppData\Roaming\JDeveloper&lt;br /&gt;b) C:\Users\&amp;lt;username&gt;\Oracle&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Running JDeveloper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can open JDeveloper via the Windows group Oracle Fusion Middleware 11.1.1.2.0 – JDeveloper Studio 11.1.1.2.0 option.  The first dialog you&#039;ll see is the loading window:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj2y0CcZSI/AAAAAAAABHs/_ox7PD0eMLI/s1600/jdevinstall11.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 254px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj2y0CcZSI/AAAAAAAABHs/_ox7PD0eMLI/s400/jdevinstall11.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921897283216674&quot; /&gt;&lt;/a&gt;At certain points during the load JDeveloper will prompt you for more information, including:&lt;br /&gt;&lt;br /&gt;1) The Select Role dialog will display:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2oV5f4PI/AAAAAAAABHk/ljWQQLOqVe0/s1600/jdevinstall10.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 360px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj2oV5f4PI/AAAAAAAABHk/ljWQQLOqVe0/s400/jdevinstall10.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921717393940722&quot; /&gt;&lt;/a&gt;This allows you to select different developer modes for the IDE which influence which features run.  As typically it&#039;s unknown what the developer will be doing in thee future, selecting the Default Role option and unselecting the Always prompt for role selection on startup checkbox are recommended.&lt;br /&gt;&lt;br /&gt;If you wish to turn this dialog back on at a later date, it&#039;s preference is accessible via the JDeveloper menu option Tools -&gt; Preferences -&gt; Roles, then selecting the Always prompt for role selection on startup checkbox.&lt;br /&gt;&lt;br /&gt;2) The first time you run a newly installed JDeveloper version, if you have previous versions of JDeveloper installed on the same machine, the installer will prompt you to migrate the user&#039;s settings from the previous JDeveloper install into the new JDeveloper install:&lt;br /&gt;&lt;br /&gt;todo: need a screenshot of this dialog&lt;br /&gt;&lt;br /&gt;3) On the IDE opening for the first time it will prompt you to associate certain file types under Windows with the IDE:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj2zJvShmI/AAAAAAAABH0/pS86h6gGiBU/s1600/jdevinstall12.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 326px; height: 173px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj2zJvShmI/AAAAAAAABH0/pS86h6gGiBU/s400/jdevinstall12.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921903108458082&quot; /&gt;&lt;/a&gt;This is a personal preference left up to the reader.&lt;br /&gt;&lt;br /&gt;4) On the IDE opening for the first time it will prompt you to report back IDE errors and crashes to Oracle Corporation:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj2zkMlYhI/AAAAAAAABH8/OW0A86hTz6Y/s1600/jdevinstall13.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 185px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj2zkMlYhI/AAAAAAAABH8/OW0A86hTz6Y/s400/jdevinstall13.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921910210650642&quot; /&gt;&lt;/a&gt;Assuming Oracle is actually gathering and using these statistics, this can be useful for improving the quality of the IDE in the future.  However it may be against your organization&#039;s security policy to enable this.  In addition if JDeveloper has connectivity problems in reaching Oracle&#039;s website this could also slow JDeveloper down.&lt;br /&gt;&lt;br /&gt;5) On the IDE opening for the first time it will display a Tip of the Day:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2zzUCpRI/AAAAAAAABIE/mtA_tJ7E4i0/s1600/jdevinstall14.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 309px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj2zzUCpRI/AAAAAAAABIE/mtA_tJ7E4i0/s400/jdevinstall14.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921914268460306&quot; /&gt;&lt;/a&gt;Enabling or disabling this is a personal preference left up to the reader.&lt;br /&gt;&lt;br /&gt;JDeveloper is now running for the first time.&lt;br /&gt;&lt;br /&gt;After sometime you might see the following Check for Updates green popup in the bottom right of the IDE:&lt;br /&gt;&lt;br /&gt;todo: need picture&lt;br /&gt;&lt;br /&gt;JDeveloper periodically scans external plug in servers to see if there are updates available to various parts of the JDeveloper install.  Blindly accepting the choices provided can result in developers having inconsistent installations, and code that will work on one developer&#039;s PC but not anothers as the wrong updates are installed.  Thought needs to be given on standardizing the patches installed and if the update feature should be used at all.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Priming the Integrated WebLogic Server (WLS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To speed up further development in JDeveloper it&#039;s useful to run and stop the integrated WebLogic Server (WLS) such that it is initialized for the first time.  To do this:&lt;br /&gt;&lt;br /&gt;1) Select the Run -&gt; Start Server Instance (IntegratedWebLogicServer) option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj20a7u0CI/AAAAAAAABIM/kagbl0CC6-U/s1600/jdevinstall15.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 316px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TGj20a7u0CI/AAAAAAAABIM/kagbl0CC6-U/s400/jdevinstall15.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505921924903915554&quot; /&gt;&lt;/a&gt;2) As a result in the Log window under the Running: IntegratedWebLogicServer child tab, you&#039;ll see the WLS server initialize and start for the first time:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj3AKVJ4aI/AAAAAAAABIU/XT_-U9H9zI4/s1600/jdevinstall16.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 391px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGj3AKVJ4aI/AAAAAAAABIU/XT_-U9H9zI4/s400/jdevinstall16.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922126605574562&quot; /&gt;&lt;/a&gt;Of particular note you&#039;re looking for the &amp;lt;Server started in RUNNING mode&amp;gt; message that shows a successful initialization.&lt;br /&gt;&lt;br /&gt;3) To stop the WLS server, in the Log window select the red box icon, then the IntegratedWebLogicServer option:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj3AU-FeGI/AAAAAAAABIc/Z2vFh-uoz9s/s1600/jdevinstall17.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 307px;&quot; src=&quot;http://1.bp.blogspot.com/_5hhNK2aXwp8/TGj3AU-FeGI/AAAAAAAABIc/Z2vFh-uoz9s/s400/jdevinstall17.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922129461606498&quot; /&gt;&lt;/a&gt;4) In the resulting Log window under the Running: IntegratedWebLogicServer child tab, you&#039;ll the WLS messages as it shuts down:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj3AhLiOLI/AAAAAAAABIk/8bKh5rcXd_g/s1600/jdevinstall18.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 392px;&quot; src=&quot;http://3.bp.blogspot.com/_5hhNK2aXwp8/TGj3AhLiOLI/AAAAAAAABIk/8bKh5rcXd_g/s400/jdevinstall18.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5505922132739242162&quot; /&gt;&lt;/a&gt;This completes the initialization of the integrated WebLogic Server.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-5597184528992739595?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/pbp7Kq6MVq8&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1499794&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 16 Aug 2010 04:23:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1499794</guid>
 <comments>http://chrismuir.sys-con.com/node/1499794#feedback</comments>
</item>
<item>
 <title>A new EMG chapter - SOA-BPM EMG</title>
 <link>http://chrismuir.sys-con.com/node/1498721</link>
 <description>Frequent readers of this blog will be familiar with the &lt;a href=&quot;http://groups.google.com/group/adf-methodology&quot;&gt;ADF EMG&lt;/a&gt;, a place for ADF enthusiasts to discuss ideas in the ADF space beyond the technical issues posted on the OTN Forums.  In March this year the EMG moderators were happy to announce the opening of a new EMG chapter, the &lt;a href=&quot;http://groups.google.com/group/obiee-enterprise-methodology&quot;&gt;OBIEE EMG&lt;/a&gt;.  We&#039;re now....&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGPmVmJokeI/AAAAAAAABGU/vWfUQva0tjY/s1600/soabpmemg.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 97px;&quot; src=&quot;http://4.bp.blogspot.com/_5hhNK2aXwp8/TGPmVmJokeI/AAAAAAAABGU/vWfUQva0tjY/s400/soabpmemg.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5504496428269474274&quot; /&gt;&lt;/a&gt;.... excited to announce that a 3rd EMG chapter has opened initiated by Lonneke Dikmans and her team of volunteers, entitled the &lt;a href=&quot;http://groups.google.com/group/soa-emg?lnk=&quot;&gt;SOA-BPM EMG&lt;/a&gt;.  You guessed it, this is the place to go to discuss concepts around SOA and BPM offerings from Oracle, including issues around design, methodology, architecture and much more.&lt;br /&gt;&lt;br /&gt;I encourage anybody interested to join the SOA-BPM EMG today.&lt;br /&gt;&lt;br /&gt;I wish Lonneke and her team good luck in setting up this new group.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-4632823225194858115?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/elzvhzQ0Nys&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1498721&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 12 Aug 2010 08:07:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1498721</guid>
 <comments>http://chrismuir.sys-con.com/node/1498721#feedback</comments>
</item>
<item>
 <title>JDev 11g: Programmatic Contextual Events</title>
 <link>http://chrismuir.sys-con.com/node/1497222</link>
 <description>This post is yet another Contextual Event blog description with a slight programmatic twist. It was inspired by Lucas Jellema&#039;s OTN forum post  on how to raise programmatic Contextual Events, and in addition uses techniques as demonstrated by Pino and Frank described below.
Readers might be interested in a thread on the ADF EMG about the design of Contextual Events in the ADF framework, and the idea of Implicit Contextual Events - The Rise and Rise of Contextual Events (or the birth of Implicit Contextual Events).
In that ADF EMG thread I allude to a near &quot;million blogs&quot; that already describe Contextual Events as supporting collateral for Oracle&#039;s documentation. If you&#039;re interested in other posts check out Pino Jeddah&#039;s or Frank Nimphius&#039;s screencasts.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1497222&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sun, 08 Aug 2010 01:51:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1497222</guid>
 <comments>http://chrismuir.sys-con.com/node/1497222#feedback</comments>
</item>
<item>
 <title>JDev Contextual Events: PayLoad, Payload, ah, Pay Load</title>
 <link>http://chrismuir.sys-con.com/node/1487638</link>
 <description>Within the contextual event framework, effectively there is a &quot;producer&quot; task flow and a &quot;consumer&quot; task flow. The producer publishes a contextual event, and the consumer subscribes to the contextual event. It&#039;s all rather handily described in Section 28.7.1 of the Fusion Guide How to Create Contextual Events Declaratively

The publisher can pass a data payload (payLoad, PayLoad, um, pay load?) to the consumer. The publisher users an EL expression to extract data from their local bindings to do this, maybe something like #{bindings.employeeNo.inputValue}, which would be familiar to ADF programmers. The consumer however needs to use an EL expression #{payLoad} to capture the data from the published event.&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1487638&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 06 Aug 2010 14:45:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1487638</guid>
 <comments>http://chrismuir.sys-con.com/node/1487638#feedback</comments>
</item>
<item>
 <title>Perth Oracle Fusion Boardroom Briefings</title>
 <link>http://chrismuir.sys-con.com/node/1489216</link>
 <description>...Here goes, hopefully I&#039;ve a few Perth readers... If you do live in Perth and know somebody who would be interested in the following events, please forward them this post...&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://www.regonow.com/oracle/design/images/4peoplesitting.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 473px; height: 126px;&quot; src=&quot;https://www.regonow.com/oracle/design/images/4peoplesitting.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Penny Cookson and I are happy to announce we&#039;ll be presenting at a series of presentations coming out of Oracle&#039;s Perth offices entitled &lt;a href=&quot;http://sites.google.com/site/fusionboardroombriefingswa/&quot;&gt;Fusion Boardroom Briefings&lt;/a&gt;.  These briefings are open to everyone and provide a good opportunity to learn from presentation-by-presentation a wide array of Fusion topics, issues and solutions.&lt;br /&gt;&lt;br /&gt;As readers who are familiar with &lt;a href=&quot;http://www.sagecomputing.com.au&quot;&gt;SAGE Computing Services&lt;/a&gt; already know, Penny and I take great effort to present Oracle technologies warts and all, to give people a serious handle on both the opportunities and challenges in adopting Oracle&#039;s technologies.  The briefings therefore present a unique IT event series that don&#039;t shy away from the gritty details, but strive to give you all the details so you&#039;re well armed to make your Oracle IT projects succeed.&lt;br /&gt;&lt;br /&gt;My first presentation 3pm Thursday 12th of August &quot;SOA Lite: A taste of SOA with a Smidgen of Web Services&quot; is one of my favourite presentations talking about the ins and outs of using web services in your organisation, from my own personal IT experience.&lt;br /&gt;&lt;br /&gt;Abstract: Attempting to gorge yourself on the five-course SOA meal may result in a stomach ache and a bill you can least afford at the moment. Instead, a quick and easy recipe with some simple ingredients of Web services will give your systems that little taste of SOA you so crave. Chris will describe why Web services may be a better fit for you than SOA, qualities of contemporary Web services, what skills to focus on when starting out with Web services, and a few hints and tips from the Web service trenches.&lt;br /&gt;&lt;br /&gt;Given the presentation will finish at 4:15pm, if anybody would like to hang around and ask questions I welcome the chance for an informal chat.  My favourite part of presenting is the questions I get at the end where I get a better idea of what other real IT practitioners are doing out there, namely you.&lt;br /&gt;&lt;br /&gt;You can register for the event &lt;a href=&quot;https://spreadsheets.google.com/viewform?formkey=dEJ4UU9NSGJCbDZxbDZrZUJlMFNqR3c6MA&quot;&gt;here&lt;/a&gt;, along with a number of other events.&lt;br /&gt;&lt;br /&gt;On the registration page note some of the other sessions you can vote for in the future.  Of particular note is &quot;A Path to the Future for Dinosaur Nerds: JDeveloper ADF - A Mind Map for Forms Developers&quot; which is Penny&#039;s first presentation, followed by another one of mine &quot;Oracle JDeveloper 11g JAX-WS Web Services: As easy as 1-2-3: XSD, WSDL, Generate!&quot;  If you&#039;re keen to see these topics please don&#039;t forget to vote.&lt;br /&gt;&lt;br /&gt;Penny and I look forward to seeing you at these events soon.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-6000367052432087523?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/maxES6hokgc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1489216&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 04 Aug 2010 07:20:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1489216</guid>
 <comments>http://chrismuir.sys-con.com/node/1489216#feedback</comments>
</item>
<item>
 <title>ADF EMG at OOW&#039;10 - a must attend event</title>
 <link>http://chrismuir.sys-con.com/node/1485637</link>
 <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://groups.google.com/group/adf-methodology/web/adfemg.gif?hl=en&amp;display=thumb&amp;width=96&amp;height=96&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 96px; height: 47px;&quot; src=&quot;http://groups.google.com/group/adf-methodology/web/adfemg.gif?hl=en&amp;display=thumb&amp;width=96&amp;height=96&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;The ADF Enterprise Methodology Group (&lt;a href=&quot;http://groups.google.com/group/adf-methodology?hl=en&quot;&gt;ADF EMG&lt;/a&gt;) is happy to announce we&#039;ve more sessions lined up at &lt;a href=&quot;http://www.oracle.com/openworld&quot;&gt;Oracle Open World&lt;/a&gt; 2010.  As many readers will know, the ADF EMG is where ADF users get down and dirty in discussing their FMW experiences.  &lt;br /&gt;&lt;br /&gt;This year we have 3 sessions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;(Official on-schedule slot) S313445 - ADF Enterprise Methodology&lt;br /&gt;Group - Sunday, September 19, 14:00-15:00 | Moscone West L3, Rm 3012&lt;/li&gt;&lt;li&gt;(2 x &lt;a href=&quot;http://wikis.sun.com/display/JavaOne/Unconferences+at+JavaOne+and+Oracle+Develop+2010&quot;&gt;Unconference&lt;/a&gt; slots) - Wednesday, September 22nd, 10:00-12:00 | Hotel Parc 55, Ashbury Room &lt;/li&gt;&lt;/ul&gt;Yeah, you say, but so what, who will be talking?  Well how about the following presenters to tickle your fancy?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://thepeninsulasedge.com/frank_nimphius/&quot;&gt;Frank Nimphius&lt;/a&gt;, well known as one of the top JDev Product Managers presenting on ADF-Security-or-Bust&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.java.net/blogs/kito75/&quot;&gt;Kito Mann&lt;/a&gt;, a key JSF contributor presenting on JSF2.0&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://andrejusb.blogspot.com/&quot;&gt;Andrejus Baranovskis&lt;/a&gt; one of the ADF communities leading bloggers and presenters demoing a new ADF production system&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://technology.amis.nl/blog/author/aino&quot;&gt;Aino Andriessen&lt;/a&gt; of the we-only-hire-geniuses-mold from Amis on the ultimate smackdown, Automated vs Manual Builds&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.vesterli.com/&quot;&gt;Sten Vesterli&lt;/a&gt;, ODTUG&#039;s 2009 best speaker, giving us some facts and myths about ADF Tuning&lt;/li&gt;&lt;/ul&gt;There&#039;s more to come, but I&#039;m keeping Mum to save something to publish later :-)&lt;br /&gt;&lt;br /&gt;The success of the ADF EMG is driven by you, the reader showing interest and attending.  Help our volunteers to help you: We hope to see you there.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-4243618819795966974?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/qQd1nzPtMPw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1485637&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 27 Jul 2010 10:14:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1485637</guid>
 <comments>http://chrismuir.sys-con.com/node/1485637#feedback</comments>
</item>
<item>
 <title>JDev – Ant build file tweak required for ojdeploy option</title>
 <link>http://chrismuir.sys-con.com/node/1468058</link>
 <description>JDeveloper assists developers in generating a preconfigured Ant build script for each project within a JDeveloper application.  Of particular interest in JDeveloper 11g an option is included to generate entries for &lt;a href=&quot;http://blogs.oracle.com/smuenchadf/2009/11/online_help_for_ojdeploy_utili.html&quot;&gt;ojdeploy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The options to do this are invoked by a right click on the project at hand, New -&gt; All Technologies -&gt; General -&gt; Ant -&gt; Buidfile form Project.  This will present the following dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TEPx0Z6jEeI/AAAAAAAABD0/xgaKgiqJstA/s1600/ant1.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 218px;&quot; src=&quot;http://2.bp.blogspot.com/_5hhNK2aXwp8/TEPx0Z6jEeI/AAAAAAAABD0/xgaKgiqJstA/s400/ant1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5495501852934083042&quot; /&gt;&lt;/a&gt;&lt;br /&gt;...including selecting the option &quot;Include Packaging Tasks (uses ojdeploy)&quot;.&lt;br /&gt;&lt;br /&gt;Within the generated build.xml script the result of this checkbox is the additional Ant target &quot;deploy&quot;, as demonstrated in the following code sample:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;br /&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1252&quot; ?&gt;&lt;br /&gt;&lt;project name=&quot;Model&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;&lt;br /&gt;  &lt;property file=&quot;build.properties&quot;/&gt;&lt;br /&gt;  &lt;SNIPPED-OUT-VERBOSE-LIBRARY-OPTIONS/&gt;&lt;br /&gt;  &lt;target name=&quot;init&quot;&gt;&lt;br /&gt;    &lt;tstamp/&gt;&lt;br /&gt;    &lt;mkdir dir=&quot;${output.dir}&quot;/&gt;&lt;br /&gt;  &lt;/target&gt;&lt;br /&gt;  &lt;target name=&quot;all&quot; description=&quot;Build the project&quot; depends=&quot;deploy,compile,copy&quot;/&gt;&lt;br /&gt;  &lt;target name=&quot;clean&quot; description=&quot;Clean the project&quot;&gt;&lt;br /&gt;    &lt;delete includeemptydirs=&quot;true&quot; quiet=&quot;true&quot;&gt;&lt;br /&gt;      &lt;fileset dir=&quot;${output.dir}&quot; includes=&quot;**/*&quot;/&gt;&lt;br /&gt;    &lt;/delete&gt;&lt;br /&gt;  &lt;/target&gt;&lt;br /&gt;  &lt;target name=&quot;deploy&quot; description=&quot;Deploy JDeveloper profiles&quot; depends=&quot;init,compile&quot;&gt;&lt;br /&gt;    &lt;taskdef name=&quot;ojdeploy&quot; classname=&quot;oracle.jdeveloper.deploy.ant.OJDeployAntTask&quot; uri=&quot;oraclelib:OJDeployAntTask&quot;&lt;br /&gt;             classpath=&quot;${oracle.jdeveloper.ant.library}&quot;/&gt;&lt;br /&gt;    &lt;ora:ojdeploy xmlns:ora=&quot;oraclelib:OJDeployAntTask&quot; executable=&quot;${oracle.jdeveloper.ojdeploy.path}&quot;&lt;br /&gt;                  ora:buildscript=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml&quot;&lt;br /&gt;                  ora:statuslog=&quot;${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml&quot;&gt;&lt;br /&gt;      &lt;ora:deploy&gt;&lt;br /&gt;        &lt;ora:parameter name=&quot;workspace&quot; value=&quot;${oracle.jdeveloper.workspace.path}&quot;/&gt;&lt;br /&gt;        &lt;ora:parameter name=&quot;project&quot; value=&quot;${oracle.jdeveloper.project.name}&quot;/&gt;&lt;br /&gt;        &lt;ora:parameter name=&quot;profile&quot; value=&quot;${oracle.jdeveloper.deploy.profile.name}&quot;/&gt;&lt;br /&gt;        &lt;ora:parameter name=&quot;nocompile&quot; value=&quot;true&quot;/&gt;&lt;br /&gt;        &lt;ora:parameter name=&quot;outputfile&quot; value=&quot;${oracle.jdeveloper.deploy.outputfile}&quot;/&gt;&lt;br /&gt;      &lt;/ora:deploy&gt;&lt;br /&gt;    &lt;/ora:ojdeploy&gt;&lt;br /&gt;  &lt;/target&gt;&lt;br /&gt;  &lt;target name=&quot;compile&quot; description=&quot;Compile Java source files&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;    &lt;javac destdir=&quot;${output.dir}&quot; classpathref=&quot;classpath&quot; debug=&quot;${javac.debug}&quot; nowarn=&quot;${javac.nowarn}&quot;&lt;br /&gt;           deprecation=&quot;${javac.deprecation}&quot; encoding=&quot;Cp1252&quot; source=&quot;1.6&quot; target=&quot;1.6&quot;&gt;&lt;br /&gt;      &lt;src path=&quot;src&quot;/&gt;&lt;br /&gt;    &lt;/javac&gt;&lt;br /&gt;  &lt;/target&gt;&lt;br /&gt;  &lt;target name=&quot;copy&quot; description=&quot;Copy files to output directory&quot; depends=&quot;init&quot;&gt;&lt;br /&gt;    &lt;patternset id=&quot;copy.patterns&quot;&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.gif&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.jpg&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.jpeg&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.png&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.properties&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.xml&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.ejx&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.xcfg&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.cpx&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.dcx&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.sva&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.wsdl&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.ini&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.tld&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.tag&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.xlf&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.xsl&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.xsd&quot;&gt;&lt;/include&gt;&lt;br /&gt;      &lt;include name=&quot;**/*.jpx&quot;&gt;&lt;/include&gt;&lt;br /&gt;    &lt;/patternset&gt;&lt;br /&gt;    &lt;copy todir=&quot;${output.dir}&quot;&gt;&lt;br /&gt;      &lt;fileset dir=&quot;src&quot;&gt;&lt;br /&gt;        &lt;patternset refid=&quot;copy.patterns&quot;/&gt;&lt;br /&gt;      &lt;/fileset&gt;&lt;br /&gt;    &lt;/copy&gt;&lt;br /&gt;  &lt;/target&gt;&lt;br /&gt;&lt;/project&gt;&lt;/pre&gt;(Oops, there appears to be a bug in the SyntaxHighlighter viewer above in that it&#039;s displaying lots of close tags at line 63, just ignore them).&lt;br /&gt;&lt;br /&gt;However there&#039;s an issue in the generated build.xml script with the ojdeploy option.  The injected &quot;deploy&quot; target is not just dependent on the &quot;init&quot; and &quot;compile&quot; targets, but is also dependent on the output of the &quot;copy&quot; target below.   As such modify the &quot;deploy&quot; target to as follows:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;&lt;br /&gt;&lt;target name=&quot;deploy&quot; description=&quot;Deploy JDeveloper profiles&quot; depends=&quot;init,compile,copy&quot;&gt;&lt;/pre&gt;If you don&#039;t include this dependency, when ojdeploy generates a resulting JAR, WAR or EAR, it can fail to include all the file types listed under the &quot;copy&quot; target including XML files and more.  As an example where this would be a problem, is if you&#039;re deploying a Common ADF Model library via the generated build.xml script with the ojdeploy option, while the resulting Java archive will include the compiled dot-class files, the XML files that constitute the Business Components would be missing in the end product making it unusable.&lt;br /&gt;&lt;br /&gt;Verified under JDeveloper 11.1.1.2.0 build 5536 and JDeveloper 11.1.1.3.0 build 5660.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&#039;1&#039; height=&#039;1&#039; src=&#039;https://blogger.googleusercontent.com/tracker/38586079-1545098444320177492?l=one-size-doesnt-fit-all.blogspot.com&#039; alt=&#039;&#039; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/OneSizeDoesntFitAll/~4/fnfAMa8v0Lc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://chrismuir.sys-con.com/node/1468058&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 19 Jul 2010 02:32:00 EDT</pubDate>
 <guid isPermaLink="true">http://chrismuir.sys-con.com/node/1468058</guid>
 <comments>http://chrismuir.sys-con.com/node/1468058#feedback</comments>
</item>
</channel>
</rss>

