This morning at JavaOne 2008, Oracle officially announced the availability of the Technology Preview of its 11g Fusion Middleware stack. With the production release of Fusion Middleware 11g only months away (but how many months, no one can officially comment on, only that it will be in this calendar year), developers and architects can now start playing with most of the features that will be in the production release of the software. Go to http://www.oracle.com/technology/software/products/jdev/htdocs/soft11tp.html to download the software. The download contains the JDeveloper 11g IDE with built in support for Web Development with Oracle ADF and the OC4J container as well as many other technologies and frameworks, as well as the Oracle 11g SOA Suite – including the Mediator and BPEL Service Engines, the Complex Event Processor and the BAM Server, the Rules Engine and Human Workflow Service – and the 11g release of Oracle WebCenter. Note that for the latter parts, you will have to have an account on Oracle’s MetaLink support in order to get instructions to unlock the software in those areas.
At this point, the Preview comes with a simplified version of the infrastructure, which means for example that there is no stand alone Enterprise Manager yet, no support for the User Messaging infrastructure in the Application Server – for communicating via email, VOIP, SMS and IM -, no Services support in WebCenter (no Wiki and Blog service for example), only intermediate support for WebServices Manager and a transitional SOA Console. Whether or not the MDS – Meta Data Services – is available is not yet entirely clear.
Yesterday I was in a “round table conference” with among others Duncan Mills, leading the development on JDeveloper and ADF. He briefed us on the Technology Preview and the upcoming keynote session that he then quickly went on to rehearse for.
Duncan explained the Technology Preview process. While it is by no means the nightly builds you can get from many open source projects, for a company such as Oracle it is a huge step forward to release TPs on 3-4 month schedule and get code to developers to try out and provide feedback on long before that code is going to be shipped for real. He also told us that a lot of feedback on earlier TPs for JDeveloper 11g have resulted in improvements in the product as it is today. As of last Friday when the TP4 was announced with little noise, 1400 downloads had taken place. With the OTN TechBlast informing 120.000 developers of the availability of the preview this number is expected to increase rapidly during this week.
TP4 is more or less feature complete on the JDeveloper 11g side of things. So between now and the mythical release date, only small functional improvements are to be expected, in addition to many fixes and ironing out of issues. TP4 should demonstrate a clear performance improvement over previous TPs, both in the design time and the run time. As Duncan stated: we have met most Performance KPIs.
ADF BC Business
Duncan mentioned a brand new feature called Business
logic groups. These allow you to encapsulate and reuse a set of related
control hints, default values, and validation logic. It is maintained separate from the base entity in its own file, and can be enabled dynamically based on context values of the current row. This is useful, for example, for an HR application that defines many locale-specific validations (like national identifier or tax law checks) that are maintained by a dedicated team for each locale. The business logic group eases maintenance by storing these validations in separate files, and optimizes performance by loading them only when they are needed.
He called it ‘ a mini rule engine’ that you can use to determine conditionally – depending on data values – what should be the validation rules to apply and what are the currently applicable values for UI Hints and what is for example the set of allowable values for a certain attribute.
Rich Faces, Trinidad and Alternative UI and mixing JSF libraries
On the demo grounds, Oracle staff were demonstrating very interesting example of UI built with the JDeveloper 11g Technology Preview – and sometimes one or two features only available in later (as of yet internal) builds. Katia Obradovic demonstrated an enhanced version of the GanttChart demo she had made available to me some months ago and then also showed a new Hierarchy component that is not yet available in TP4. This component can be used for displaying data such as the organization structure in a clear and attractive way. One more example of the still expanding set of components available in the 11g rich faces collection.
Duncan was very clear in his response to the question if JDeveloper was going to support UI technologies such as Flex, Silverlight or even JavaFX in addition to or instead of JSF: that is not going to happen. JSF is the primary UI technology for Fusion Applications and therefore for JDeveloper.
When asked about the ability to mix ADF 11g Rich Faces with other JSF libraries such as JBoss Rich Faces or jMaki, Duncan referred to the OpenAJAX initiative where vendors of AJAX based components and frameworks try to work out a common approach that should allow multiple libraries and components to work together. This sounded very much like a longer term strategy: for the short term, we should not expect various JSF implementations to work together very well. Duncan suggested tongue in cheek that given the completeness of the component set in ADF 11g Rich Faces there could hardly be a need for using additional libraries… At the same time he could not confirm that a ‘revolver’ widget would make it into the product.
Enhanced AJAX model in Rich Faces: auto ppr
ADF Faces 10.1.3 and even its predecessor, UIX, has built-in, declarative AJAX support. Using autoSubmit=”true” to specify an element that upon change will trigger an AJAX request cycle and partialTriggers=”id_causing_refresh” to specify which elements need a refresh during AJAX cycles initiated by an element listed in the partialTriggers attribute, developers can set up auto-refresh in a fairly simple way. In addition to this, developers can programmatically indicate on the server -during a PPR cycle – that certain client elements need to be refreshed (using code such as: RequestContext adfContext = RequestContext.getCurrentInstance();
In 11g there is the notion of Active Data Service, where using a Server to Client push mechanism allows us to have the client updated from the server . The PPR or AJAX cycle is not initiated on the browser but on the server. ADS allows
you to bind certain Oracle ADF Faces components to an active datasource
using the Oracle ADF model layer or managed beans. Components including
the table, the tree, and all types of graphs and charts can support the
ADSâ€”meaning that they update in near real time as the changes come in,
in the underlying datasource.
To use the ADS, you need to
have a data store that publishes events when data is changed, and you
need to create business services that react to those events as well as
the associated data controls to represent those services. An
alternative way of leveraging the ADS capabilities of our components is
by using a managed bean for the value attribute and having the bean
implement the ActiveDataModel interface.
Duncan told us that the AJAX capabilities have even been extended beyond this with something he called ‘auto PPR': during Ajax round trips (PPR requests initiated on the server), instead of having to explicitly indicate which client components need to be updated as is currently required using the partialTriggers attribute or the addPartialTarget() operation, the ADF framework itself will make sure that all Client Components whose underlying model value has changed will be refreshed. So with this auto ppr feature enabled, if for some reason – which could even be a polled refresh – a PPR request is initiated on the client, any relevant changes in the underlying model are automatically pushed to the client and lead to refresh of the involved components. For the moment this will only work for values based on ADF Business Component based data bindings. And I am not sure whether only values are updated, or if this auto ppr will kick in for any attribute – including label, style etc, – bound to a changing ADF Model based element.
End to End Database to Client Refresh
The Oracle 11g Database has an interesting feature called Continuous Query Notification (also see Oracle 11g Database Application Developer’s Guide or 11g JDBC Driver ocumentation on JDBC driver and ). This functionality allows an application to regiester a certain query and instruct the database to send a notification whenever the result of the query changes – as a result of DML operations. It’s like creating a DML trigger on a query result set. ADF Business Components can take advantage of this feature by requesting a notification to be sent whenever its underlying data set has changed, presumably in order to the refresh the data cached in the Business Component. This effectively allows us to have the RDBMS push changes to the middle tier! I do not yet know what it takes to set this up for any particular Entity Object or (read only) View Object, but it should be very simple and declarative.
With the auto ppr discussed before and/or the Active Data Service, this allows us to set up the end to end scenario where a DML operation in the database in two automatic steps leads to an update of data visible on the web page. Duncan will show this in the keynote.