One of the theme songs for this year’s Oracle Open World undoubtedly will be ADF 11g. All by itself (Web 2.0) and as the glue for Enterprise 2.0 (WebCenter) and the foundation for Fusion Applications (ERP 2.0?, of which we hopefully will see the first real modules). And one of the singers of that song is Oracle ACE Steven Davelaar who will present the upcoming JHeadstart 11g release. Yesterday at our Oracle Open World 2008 preview, Steven rehearsed his performance, for some 30 interested attendees. Starting back in 2001, JHeadstart 11g follows on a long tradition of packaging best practices for using ADF, providing structure and catering for application wide consistency in page layout and adding to the already quite impressive productivity of developing ADF applications. ADF 11g is very powerful, especially in terms of visual (client) richness. JHeadstart helps to deal with that power, even if you are not already a very experienced ADF 11g developer. Steven hopes for a release of JHeadstart 11g around one to two months after ADF 11g is released, but cannot make any firm commitments
key themes for ADF 11g are: visual richness, power to the client (many client side operations such as drag & drop and context menu’s, partial page refresh & AJAX, Server Push) and high productivity through declarative development (little code, model based UI hints that for example define List of Values declaratively) and many reusability options (page templates, task flows, declarative components). With choice comes the responsibility to choose. And that may be one of the challenges with ADF 11g (and by the way with most Web 2.0 development frameworks and libraries): how to pick the right set of components that provide for an attractive and productive User Interface that you can keep consistent over all pages in the application. What are appropriate User Interface patterns to apply, what are best practices for developing with ADF?
JHeadstart 11g is positioned to help address those challenges that come with the many options in ADF. It embodies many best practices, provides productivity boosters for repetitive tasks, helps implementing a consistent layout structure across the application and contains run time support for many of the UI patterns such as ‘select multiple records from a list of values to create a set of detail/intersection records’, ‘perform search, review results, edit details for a single record’, ‘create a record through a wizard’ and many more. Getting started with ADF is made much easier through JHeadstart – as at least initially the many choices in ADF are hidden through the more focused declarative application definition editor of JHeadstart. Note however that JHeadstart is still primarily data oriented and not necessarily task or process focused. The common UI patterns are defined largely in terms of data operations and data object dependencies (master detail, table + lookup,..).
One of its fortes is undoubtedly JHeadstart’s capability for Rapid Prototyping – especially when a Data Model is already available. Generating a fully functional application is a piece of cake using JHeadstart. With JHeadstart 11g on top of ADF 11g, this rapid prototype is even more visually pleasing.
Utilities to help implement and enforce best practices
Steven announced the availability in JHeadstart 11g of JHeadstart Utilities (somewhat reminiscent of Headstart Utilities “in the old days”). The utilities are productivity boosters, extensions to the JDeveloper IDE that provide extra support for frequently occurring tasks. Other utilities provide reports that assess the quality of certain aspects of the ADF application. He did not go into detail here, but things like naming conventions, use of appropriate data types, use of task flows etc. come to mind. Steven demonstrated one booster: based on ViewLinks between ViewObjects, this booster created read only ViewObjects for all potential List data providers, used for LOVs and Dropdowns. These objects are added to a shared application module. For each ViewLink, the attribute involved has a model based LOV set up that links it to the corresponding read only ViewObject. This is an example of the implementation of a best practice (read only view objects in separate application module for use as data providers for lists) and the automation of a repetitive task.
Some new features
One hour was really too short for everything Steven had to tell and wanted to demonstrate. He did not really go into many new features – though there are quite a few. Many of these new features are not really courtesy of JHeadstart itself, but of the increased functionality of the ADF Rich Faces components used in the generated JSF pages. Nevertheless, we benefit from them through JHeadstart all the same. Examples include: detachable table (ability to show a table in full screen mode, especially useful when a page contains many pages), context menu (right mouse button menu) with navigation (goto details, goto lookup page) and record manipulation options, non-popup window based List of Values and Date Picker (both use sliding, in page DIVs), new BLAF+ appearance (modern look and feel), table overflow style popup (showing additional record details in a popup – DIV – rather than a detail disclosure) and stacked group or region using the Accordion (in addition to tabs).
Features I had not seen before – but are already published a few weeks ago as part of JHeadstart 10.1.3.3 – :display type Command Button that allows generation of items as Buttons. A button could even activate a call to a PL/SQL procedure or function (properly, through ADF operation binding and client published method on the Application Module). And: Groups not based on a Data Collection (a Control Group!).
One of the most important messages regarding ADF 11g applications is probably the use of Partial Page Refresh. With the current state of the components and the overall framework, full page refresh is only necessary when the user navigates to a new page. However, a single page can contain so much more functionality than before – using for example accordions, detail disclosure, popups, panel splitters – that full page navigation becomes less and less necessary. Using partial refresh to update single elements or containers becomes an even more important mechanism to create responsive, interactive and dynamic UIs. Besides, a partial refresh creates a much smaller load on the client than a full page refresh.
One relatively new component in JHeadstart (released some two months ago in JHeadstart 10.1.3.3) is the Forms2ADF generator. A tool that reads Forms (fmb files), extracts data usage and business logic from them – creating Entity Objects for tables and views used in the forms and View Objects for every Block and Record Group in the selected Forms – and converts its blocks and canvasses to pages, regions and items in JHeadstart application definition meta data. (for me personally this brought back memories: back in 2001/2002 when I was still at Oracle, one of my jobs was the development of the JHeadstart Designer Generator, a tool that read Forms Module definitions from the Oracle Designer Repository and produced similar ADF BC and JHeadstart artefacts. In fact, the very demo application I created for the ODTUG 2002 conference in Las Vegas to demonstrate this tool was the exact same application Steven used for his demonstration yesterday).
The Forms2ADF Generator does not attempt to transform/convert PL/SQL logic – which is frequently meaningless in the context of ADF anyway. However, all PL/SQL from the Forms is documented in the JHeadstart application definition for the developer to assess what to do with it (discard, move to the database, reimplement in backing beans).
I was surprised at the performance of thi
s tool: it handled five medi
um sized forms in just a few seconds, producing a pretty good first shot result that was functional if not visually optimally attractive (true to the form the process started with).
In combination with Wilfred’s OraFormFaces technology, the Forms2ADF generator allows us to almost migrate some Forms and combining them with real Forms that are embedded in the ADF application.
WebLogic in JDeveloper 11g
New to me was the way JDeveloper 11g does no longer use Embedded OC4J as its container for running ADF applications. Instead, the 11g build of last week that Steven was using for his demonstrations was equipped with Oracle WebLogic 10.3. It is not embedded in the way OC4J used to be. Instead, the WebLogic container is started once from within JDeveloper and each time a web application is run, it is automatically deployed through the normal EAR mechanism. Deployment is probably even faster than before as the container does not have to be restarted each time.
JHeadstart blog – on JHeadstart R11 and OOW