Create a Custom ADF Component

During UKOUG Tech14 in Liverpool, Wilfred and I had a presentation about how to create your own Custom ADF Component. Since we were busy on preparing the presentation there were no blogs about these beforehand.
I thought it would be nice to give a small recap, for anyone interested in going into creating Custom ADF Components.

In our sample application we created an ADF Component called ‘multi select’ which offers the user the ability to show a list of items and the ability to add items, delete items and select an item. The result is the component within the red line:

During our presentation, we had an overview of the components involved in creating a custom ADF component. The overview looked as followed:

The slide deck on slideshare will take you through these components, the responsibilities and the code involved in creating this component. We have added comments to the code in the slides, so you are able to follow this without our voice over. The server side classes are all Java classes as where the client side is all JavaScript. The Skin is created in a css file using the ADF skin style.

At the end of the slide deck there is a slide with links to several documentation, we advise you to keep links to these documents close by you while starting to code your component. As you will see, we link to documentation from the ADF release 11.1.2.4 while we have build our component in ADF 12.1.3. This is because Chapter 31 ‘Creating Custom ADF Faces Components’ is not available in the 12c Documentation.
Last but not least, all our effort is available on a github repository, both the Custom ADF Component we have created as well as an example of a consuming ViewController project using this multiSelect component.

Resources:
- Presentation: http://www.slideshare.net/ROlrichs/adf-component-tech14
- GitHub Repository: https://github.com/wvanderdeijl/adfcomponent

JDeveloper Debugging Tips (Watchpoints & Beep)

In a previous blog post I talked about scoping breakpoints for debugging purposes, next to scoping breakpoints JDeveloper has more interesting debugging features to offer.

I created a simple example to show both the watchpoint as well as the beep functionality. To illustrate this, I created a page with an inputText and a button, both bound to a backingBean. 

This  is the jsf code:
 
      
      
 
The code from the bean is also pretty straight forward:
   private String value = "value";

    public void setValue(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void changeValue(ActionEvent actionEvent) {
        value += "!";
    }

Now imagine that I want to halt execution everytime the bean field value changes. I can simply right-click the field and choose ‘Toggle Watchpoint’:

This will show a nice sunglass instead of a breakpoint in the line gutter:


I also want to be informed when the getter of the value is called, however, I do not have the need to be redirected to JDeveloper and press F9 again to continue. I just want a signal that we have been inside the getValue() method, in this case a beeping sound.
To do this, you place a breakpoint in the getter, right-click on it and go to ‘Edit Breakpoint’.

Go to the Actions tab, in here unselect the ‘Halt Execution’ option and select the ‘Beep’ option. You will hear a beep when the breakpoint is reached, but it will not force you into JDeveloper.


If you run the page, you will hear a Beep whenever the getter is called, so you recieve a signal of this action. Whenever the field value is changed, it will take me into JDeveloper and halt the execution, this means it will halt execution in the method when I press the button on the screen, while there is no explicit breakpoint at this point in the code:

You can also see the old and new value in the log window:


OOW14 summary: Oracle ADF

Being an ADF developer, off course a lot of my focus and attention went to the ADF related sessions. I left OOW with a mixed feeling about the ADF sessions. On the downside I felt there was not a lot of attention for ADF during the OOW conference. You see ADF or ADF related features during almost all the presentations, whether it is the Cloud, SOA Suite and Service Bus or MAF, but not a lot on ADF itself. Then again this might be a good thing, meaning the framework being more stable and reliable.
However, the upside of the conference for me personally still is the User Group session on the Sunday, thanks to the ODTUG user group and the ADF EMG community there was a whole Sunday full of nice ADF presentation, I enjoyed all of them, a great day!

ALTA UI
One of the key ADF features at Open World was the release of the new ALTA UI, which can be viewed upon as a Simplified UI 2.0, if you want (also see my blog about the UX event). It is not just a skin, but a way of creating ADF applications. Follow the patterns, use the building blocks and create not only a functional, but also a good looking application with a good user experience.

Diagrams for ADF
A presentation done by Duncan Mill and Jairam Ramanathan about the new DVT component to create diagrams in ADF. This is not just a ready to use DVT, that can work for you in some situations. This is actually a framework you can use to create the exact diagram you need for your use case at that time. This will result in a SVG in the HTML output, which means there is native browser support and the user can actually use default functionality like zooming & panning.
Duncan wrote a series containing over 10 articles, which included the necessary steps on how to get yourself familiar with the diagrams and how to use this. A leap forward in the visualization tools within ADF, maybe we will get to see more of this in the framework?
 
High Availability and ADF
Jobinesh had a great session on High Availability (HA) support within ADF. If you want to run ADF on HA, the framework does not do all the work for you, you have to help it a little bit.
Look up his presentation to read up on how to ensure the correct working of failover and data replication, but also for some great code guidelines on how to program MBeans, TaskFlows and more within a HA environment. There is no need for me to repeat all these steps he worked out for you so well.

DVT within ADF
In this session the Data Visualization Tools (DVT) team showed some cool new features from the current (12.1.3) as well as the upcoming release. They are not ADF only, because almost all of them are also available within the MAF framework. The layout and animation of all the DVTs are now responsive and there has been a great performance improvement in all of them. Within the thematic map it is now possible to provide your custom map.
In the upcoming release the there will be a nice cool feature to mashup DVTs. Meaning you can switch between different DVTs without losing the state/context of the data.

Maven support
Since the release of ADF 12c, there is now support in JDeveloper for Maven. Which can be of great use in your Continuous Integration and/or Continuous Deployment process. JDeveloper understands how to work with the pom file and everything you need to do to get started with maven and your project you can do from within JDeveloper.

ADF EMG XML Data Control
Last but not least some shameless self plug. If you do anything with XML within ADF, whether it is just to show data on an UI or to manipulate it. Make sure you have a look at the XML Data Control. The 1.0 version is out and it can saves you lots of time , headaches and lines of code in Java.

Available online resources



OOW14 summary: Oracle Service Bus

Since I am fairly new to the Oracle Service Bus I gathered a lot of information about this product. Most of it is not shocking and has been mentioned already, but this gave me a nice summarized overview of what 12c has to offer in comparing to 11g.

JDeveloper
Since the 12.1.3 release, you don’t need eclipse anymore to create your service bus projects. Just as for the SOA Suite you can do everything from JDeveloper. When creating a service bus project, you will get an sboverview file in your project. This file describes the entire application assembly of proxy services, business services, pipelines, and split-joins. There is one overview file for each Service Bus project.

Debugger
Not only are the Service Bus projects within JDeveloper, they also run on the Integrated WebLogic server. This way it becomes easier to debug the service bus. You can just place breakpoints in your source files and choose the debug command. A breakpoint marks a point in a pipeline or split-join where message processing pauses. This lets you examine the values of some or all of the message variables.

EM FMW Control Console
With the move of the service bus towards JDeveloper, it is now also integrated into the Enterprise Manager Fusion Middleware Control Console as we know it from the SOA Suite. However, there still is the sbconsole as we know it. The layout of the sbconsole has been moved towards the Oracle standard, with that the functionality as you know it from 11g might be displayed a bit different but it is all still there.

Rest/json support
The Service Bus now supports the use of REST service. Meaning you can create rest enabled endpoint with the service bus. However, the Service Bus only provides a virtualization layer to support REST, which means that only proxy and business services are REST-based. These REST services invoke, or are invoked by, a WSDL-based pipeline or split-join. REST proxy services convert the REST native payload to SOAP before invoking a pipeline or split-join, while REST business services invoked by a pipeline or split-join convert the payload from SOAP to REST. The internal interface is WSDL-based, while the external business and proxy services expose REST endpoints.
Read more in the Service Bus documentation.

Pipeline templates
You can create pipeline templates. These templates  are living entities, when creating a new pipeline you can base these on the template. When creating these new pipeline you can decide whether you want it to be linked or unlinked.
If you decide to link the template to your pipeline this means that when the template changes, these changes will be rolled out to the linked pipelines and these will be updated. If you decide to unlink a template, the template will be used as a starting point to create the pipeline, but it will not be updated anymore if the template changes.

Xpath/xquery support
Where you might be used to xpath in the SOA Suite and xquery in the Service bus. With the release of 12.1.3 you can now use both xpath and xquery in the Service Bus as well as the SOA Suite.

Tracing
You can now trace an instance going through both the service bus and the soa suite back and forth. The first service that your instance hits will generate an ecid, this ecid will be used throughout the whole instance. This also works if your SOA Suite and Service bus run on a different domain.

Splitted Pipeline & Proxy Service
You can have a generic pipeline to multiple proxies, this way you can have multiple interfaces, for example to support both an xml and a json interface, but use the same generic pipeline.

Upcoming New Feature
There were a few demos of new features coming in the next release (12.2).
From 12.2 there will be a native end to end support for json, meaning the service bus will no longer translate the json to xml internally. Next to that, there will be a JavaScript action available which you can use in the pipeline to manipulate data. With the help of EX4 this JavaScript expression builder will also be available to manipulate xml, meaning that JavaScript will be a powerful tool within the Service Bus.

Available online resources


What I learned at Oracle Open World 2014

Oracle Open World was once again very inspiring, last week I’ve been summarizing my own notes. I decided to share them with the world, if not only for me to find them back in my own blog archive in the (near) future.

As you might have guessed, there was a lot going on about the cloud. So much, it was almost confusing. The most interesting clouds that stayed with me after OOW14 where:
  • The Integration Cloud Service (ICS).
  • The Java Cloud Services (JCS) in combination with the Developer Cloud Service (DCS).
  • Mobile Cloud Service (MAX).

However, since I am not really working with any cloud related product, my main focus was on the on-premise Oracle FMW stack. So if you want to know more about the cloud, there are plenty of other, better blogs to tell you more about these details.

SOA Suite Upgrade to 12c
First of all, very impressive, you can smoothly upgrade from 11g to 12c. There is an extensive upgrade manual that you can follow, to upgrade from your 11g to the new 12.1.3. release. If you follow the step by step guide, the upgrade will even work if you have running instances on your production environment.
This upgrade has been proven to work on multiple customer cases.

API Management
Oracle will be announcing two new product which will help you with your API management, this features will be on top of the Oracle Service Bus. There are two sides of this product, which are actually separated products. One is to help out with your catalog of services, which are you running on the service bus. This information can be harvested from the bus and will be available in a catalog.
The second product is to help you with managing the consumers of your services. Your consumers must explicitly subscribe to your service in order to get an API key. They must use this API key in the http header when they call the service in order to get a result. Using this feature you get a complete overview of the consumers calling your service.

Oracle Stream Explorer
Oracle Stream Explorer (OSX) is a tool that can help you with getting information out of Oracle Event Processing (OEP). OSX can help you transforming lots of data into information. Stream Explorer can not only listen to edn, but also get input from csv files, database tables and other sources. It is a standalone product that helps you manipulate streams of data (events). Once the data is transformed into information, Stream Explorer can publish this again, for example to a JMS queue.
You can build a custom ADF UI to present this information or you can use Oracle Business Activity Monitoring (BAM).

Mobile Application Framework
The Oracle Mobile Application Framework (MAF) 2.0 is out and it starts to become a really mature product, one of the key things is the new release cycle for MAF. They intend to release every 2 months from now on.
One of the most named down sides of MAF is that it still runs on Java 4. However, not in the upcoming, but the release after that (meaning early next year), MAF will be upgraded to use Java 8. If you ever doubted on starting to investigate on MAF, now might be a good time.
The skills for a ADF developer are pretty transferable, MAF does not use JSF and does not have the ADF lifecycle as we know it from his big brother, but we do have java, taskflows, data controls and the binding layer.

Mobile Cloud Service 
In the session ‘Next-Generation Application Development’, Chris Tonas said “The cloud is not just a deployment platform anymore”. Chris announced the coming of the Mobile Cloud Service (MCS), which is coming soon.
In a fifteen minute demonstration Chris showed how you can create an online mobile application, using the  Mobile Application Accelerator (MAX) for Mobile Cloud Service. An application based on reusable MAF components you can deploy to either Android or iOS devices.

Service Bus & ADF
For both Service Bus & ADF I gathered so much info that I decided to create two separated blogs for these subject.

Online available resources


ADF EMG XML Data Control version 1.0.0

Today at Oracle Open World, we (Wilfred and myself) officially announced the 1.0.0 version of the ADF EMG XML Data Control. Check out the presentation on slideshare if you missed it.

You can get this extension through the JDeveloper Help -> Check for Updates menu. Make sure you select the 'Open Source and Partner Extensions' checkbox:


There you should see the 'ADF EMG Data Control' extension:


A brief description for those who were not at our OOW Sunday Session:
The XML Data Control is an ADF Data Control that is used by developers to create data bindings in ADF Faces pages, just like the ADF BC Data Control and the POJO Data Control. The data exposed through this data control can be any XML source – from a BPM Human Task, from a SOAP or REST WebService, from a static XML document or a custom Java Class that produces an XML document from anywhere.

Read more on this project on our public wiki.

If you’re interested in following or contributing to this open source project, make sure you bookmark the following links:


The ADF EMG XML Data Control Extension is available for both JDeveloper 11gR1 and JDeverloper 12c.


ADF EMG Audit Rules moved to Atlassian

For those contributing and using the ADF EMG Audit Rules extension, this is now moved to the Atlassian Suite. Here we have better integration and more modern tools than on java.net.
Big thanks to Wilfred for helping me out with the conversion.

Make sure to save/bookmark the following links:
- Bitbucket
- Confluence / wiki
- Jira
- Bamboo

The old svn repository on java.net is deleted and you can now use git to connect to the repository on bitbucket. If you’re new to git I advise SourceTree from Atlassian as tool.