Oracle Forms … alive and kicking

Yesterday Gert Poel, Yves Van Looy and myself organised a Forms Modernization seminar for customers, developers, partners … everyone that was interested.

The seminar was a huge succes and the customers were reassured that Forms is still alive and kicking.

First we discussed the improvements customers want to make to their existing forms applications, why would you want to change. Afterwards we discussed the how, which different scenario’s are applicable when you want to modernize your Forms Application. Most customers are indeed looking to improve their UI, open up the forms application’s services and integrate them within the enterprise, service-enable the existing pl/sql functionalities.

After the theoritical approach we showed some of our succesfull case studies, such as the ZLM Case that’s published on the Forms Modernization URL. These cases showed the customers how to achieve integration of forms with a soa architecture, how to implement a document workflow within forms and how to modernize your UI using LAF, thanks to François Degrelle’s resources.

In other words the first part of the seminar hit the nail on the head ;o)

In the second part we demonstrated the Forms 11g release and discussed the migration path towards 11g. This was very interesting for the customers as well because they were reassured that Forms will be part of the fusion ages. Most of all, Forms is one of the players within Event Driven Architecture using the AQ-mechanisme, thus using the scalability and performance of the Oracle Database.

The attendees’ feedback was great and they were eager to start modernizing … in other words: Forms will no longer be an island within the organisation but will definitly become an important player within the fusion strategy.

I would like to thank the attendees, Gert & Yves for the great experience !

Let’s start modernizing !!!

Oracle Open World – Forms Modernization & Data Integration

From the 21st of September until the 25th 2008, Oracle OpenWorld 2008 wil take place in San Francisco. Oracle OpenWorld 2008 is the world’s largest gathering of Oracle customers, partners, developers, and technology enthusiasts.

Two sessions will be given by iAdvise/O2U at Oracle OpenWorld 2008:

  • O2U is proud to present it’s customer case study: The ZLM Case: New Forms Modernization Case Study using Oracle Forms, Web Services, JDeveloper and ESB (Hans Heremans, Nathalie Roman)

In this case study, we will showcase how you can modernize an existing Forms Application to move towards a SOA Environment. The existing Forms and web application will be sharing web services orchestrated using an Enterprise Service Bus.

In the second presentation we will talk about the data integration aspects in which different approaches and toolings will be discussed.

  • The Next Generation of Business Integration: Making the right choice! (Hans Heremans, Nathalie Roman)

In this presentation a practical overview will be given of the Data Integration and Management requirements that are needed for data integration projects today. Having a look at the different aspects that aren’t addressed in current integration projects and how these can be leveraged using the Oracle Technology Stack. Using Oracle Warehouse Builder, Oracle Data Integrator ODI Suite or SOA Suite, you’re able to address all the needs of today’s Business Integration.

If you’re interested in attending these sessions (forms, webservices, data integration, …) :

  • S298887, “Oracle Forms in an SOA World,” on Tuesday, September 23;
  • S301400, “The Next Generation of Business Integration: Making the Right Choice” on Wednesday, September 24.

I hope to see you all there !

Tips & Tricks from ODTUG

The tips & tricks I’ve learned so far at different ODTUG sessions I’ve attended:

When you’re thinking about moving to fusion middleware:

  • Use a small subset of tools, no big bang approach: ADF + BC + BPEL
  • ADF Faces is still evolving, so you need to consider the rewrite that’s needed when using Faces as your UI
  • Use templates to introduce a common look-and-feel by using af:region-tags which will centralize the layout so you don’t need to go through each page when layout changes
  • Use Enterprise Business Objects, EBO’s, as they are being used in AIA, one common business object that will be the facade-layer between your web layer and model layer
  • Use Grid Control to monitor your fusion-based applications
  • Set up datasources and pooling on the Application Server not on Application Tier
  • Prevent SQL-Injection by using bind variables
  • Use black- and white-lists for defining the security-rules and do’s and donts of your application
  • Don’t define nested roles when defining security in ADF Applications, use flat structures because not all JEE Servers support nested roles

More high-level, pragmatic:

  • Concentrate on business drivers, not on technology: on the ‘what’ not the ‘how’
  • Business Services are your hub, not the database anymore

A great paradigm Basheer Khan uses:

When your moving to a new home you will tap into existing services such as electricity, phone, internet, cable-tv, water, … => this is the same approach that you will be using when moving to SOA. You will tap into existing services.

minoccurs=0; nillable="true not interpreted in Web Services

In one of the previous posts I’ve defined a workaround concerning the nillable attribute being ignored when invoking web services using xsd’s defined in the following manner.

Because in bpel you’re not able to define the xsi:nil-attribute at design time, you need to define this manually.

The xsi:nil=true-attribute is the solution to tell web services that this attribute, if empty, needs to be ignored. In this way serialization and deserialization will work, otherwise you will always run into NullPointerException.

What’s the cause of our problem when talking about bpel [metalink Note:403586.1]:
The XSLT transformer used by BPEL was not originally designed to pass xsi:nil attributes.

What’s the proposed solution [metalink Note:403586.1]:
To transfer xsi:nil values from source and target schemas in a transformation, make use of xsl:choose and xsl:when as shown below:

What you could also do is in the web service proxy wizard, which is generated for a given wsdl-document change the serializer-classes. Though this isn’t really the approach you woudl wan’t to consider because now you’re changing generated code, which will be changed when the wizard is run again.

The following important message is shown in your proxy generated classes that urges you to not change the generated code ;o)

// !DO NOT EDIT THIS FILE!// This source file is generated by Oracle tools//
Contents may be subject to change// For reporting problems, use the following//
Version = Oracle WebServices (, build 070610.1800.23513)

What you can do, on your own responsibility, is to change the literal_serializer classes which were generated for each object used in your webservices payload. You need to change the setNullable-method for each attribute from ‘false’ to ‘true’:

if (
matchQName(elementName, ns1_adresId_QNAME) )
myns2_string__java_lang_String_String_Serializer.setNullable( false );

if (
matchQName(elementName, ns1_adresId_QNAME) )
myns2_string__java_lang_String_String_Serializer.setNullable( true);

Another possibility is to create a Service Request and define an Enhancement Request so this manual tweaking isn’t necessary anymore in the future … that’s what I’m doing as well/

Configure Proxy Authentication for Web Services

The previous week a customer had problems during my bpel course training of 3 days where we weren’t able to design and deploy external web services due to proxy authentication problems.

We were able to create a web service proxy client inside Jdeveloper but when deploying the web service we were always getting the HTTP Proxy Exception 407, meaning problems with username and password authentication.
This was the first time I ran into this issue, and it’s quite cumbersome to get around this one.

Steps to create a web service client for an external web service using proxy authentication:
1. Create a new application and new project
2. Choose to create a new Web Services, from the Business Tier Categorie and choose to create a Java Web Service from WSDL

3. Click ‘OK’ 4. Click ‘Next’, if you don’t want to see this page in the future, check the checkbox ‘skip this page next time’

5. Copy/Paste the following URL inside the WSDL URL, the first field

6. Now press enter. The wsdl document will be fetched and read, and the next step in the wizard will be shown. Define a package name and a root package name for the types that will be generated for this webservice.

7. Go through the next steps and at the last screen you can see which operations are being provided in the web service and which classes will be generated, using the package names you’ve defined earlier.

The different classes are now being generated and you’re ready to deploy this web service to your application server installation.

You can already deploy and run this web-service on your application server by performing the following steps:

1. Create a new Application Server Connection in the ‘Connections’-tab

2. Go back to the Applications Navigator-tab and choose to deploy your web service to this connection:

3. The next screen shown, is the deployment plan-screen where you can make adjustments before deploying the application:

4. In the deployment log window you can follow the different steps which are performed to deploy the web service client on our application server instance:

In the deployment log window you can follow the different steps which are performed to deploy the web service client on our application server instance

After succesfull deployment you can test your web service using Enterprise Manager:

1. Go to WebServices-tab in your Enterprise Manager console:

2.Click on the ‘CountryInfoServiceSoap’, the service we’ve deployed earlier:

3.Click the ‘Test Service’ link to test your service:

4.Click ‘invoke’ in the test window

As you can see the following exception is thrown ‘unexpected null value for literal data’

As you can see the following exception is thrown ‘unexpected null value for literal data’, this is due to proxy authentication failure. OK, this isn’t very clear in the exception message, but let’s configure proxy authentication.

To configure proxy authentication we need to go back to our jdeveloper environment and configure authentication for our web service.

1. Right-click on the web-service proxy client in your ‘Application Navigator’ and choose ‘properties’

2. Go to the Security-categorie in the tree structure and enable global security settings, by checking the checkbox. Only choose the ‘text password’ as authentication options:

3. Authentication: Define the authentication settings, as in the screen below (nonce and creation time aren’t required)

Click OK and deploy the web-service again.

When testing the web service you just need to fill in the ws-security headers, and no exceptions will be thrown anymore:

OOW – Day 4 – The final session – Oracle Enterprise Manager – Custom Application Management

In this session we will have more insight in the different features available in Oracle Enterprise Manager to deploy custom applications.

Key message:

  • Use out-of-the-box models to represent your services
  • Monitor your applications from end-user perspective (pro-active and passive)
  • Monitor your application specific metrics => expose via JMX and Web Services
  • Build reports

What is a custom application?

  • J2EE Applications
  • Applications exposing metadata via JMX or Web Services
  • Oracle Forms Applications
  • Web-based applications (.net, php)

1a. EM Feature: Pro-active monitoring :

In pro-active monitoring you’re tracking the known transactions for your application.

  • Web transactions: intuitive recorder => playback transactions from Beacon (EM agent)
  • Forms transactions: intuitive recorder for Forms 10.1.2, 9.0.4 and 6i applications
  • Generic service tests: to test any protocol-based services

1b. EM Feature: End-user monitoring:

In end-user monitoring you don’t know which transactions will get launched, so you need to listen for them.

Passive end-user monitoring:

  • Watch URL Response times => by domain, region, visitor, web server
  • Forms 10.1.2 => commit, query, runform, callform, newform

2. Service-level dashboard: monitoring of SLA’s

3. Application Diagnostics for Java (AD4J):

An agent running on the application server to diagnose Java Applications.

  • No performance overhead and instrumentation complexity of BCI based tools
  • Transaction tracing capability => java transactions through db sessions and vice versa
  • Oracle, non-Oracle, Java Servers & Standalone Java Applications

4. Infrastructure diagnostics:

  • Historical views and trends
  • Monitoring templates
  • Alerts, notifications

5. Management Plug-in:

Extend Enterprise Manager functionelity for custom components using Management Plug-in.

How to create a management plug-in:

  1. Define metrics to collect and tresholds
  2. Develop metadata file (in XML file) to declare metrics, associate scripts
  3. Validate using ILINT
  4. Package in management plug-in archive (MPA)

How to create management plug-in for Web Services, JMX:

  1. Run CLI (Command Line Utility) JMX or Webservice
  2. Package Management Plug-in Archive

6. Custom Application Monitoring:

  • Out-of-the-box homepage for all custom applications
  • No need to write UI code
  • Provides consolidated view of availability and alerts
  • Reporting available using PL/SQL API

For more information there’s an Oracle By Example available on OTN.

Securing an ESB Service using OWSM

Recently I was organizing a seminar regarding Oracle Soa Suite and the focus lied on Securing web services and integration.

In my demo I wanted to show the different features of BPEL, ESB and OWSM and of course the ease of integration of these different technologies.

The ame was to secure as well existing web services as the ESB services itself which are called inside my bpel processes.

In this way I can call stand-alone BPEL processes, ESB services and web services or integrate these technologies with eachother when required.

The difficulty of this exercise lies in calling secured soap services inside an ESB Service. Using a gateway we can secure the ESB Services and BPEL Processes used throughout the organization. The external webservices we need to integrate with are secured as well, and these security requirements need to be met by the calling service, which in our case is an existing BPEL Process or an ESB Service.

First lets have a look on how to call a secured external webservice, a partnerlink, in a bpel process. The webservice expects user-credentials to be able to call the webservice, these credentials can be added to the secured webservice using by editing the partnerlink.

Go to the partnerlink and click ‘edit’, go to the 3d tab which is the ‘Property’ tab and add the needed parameters to your webservice call. These parameters will define that credentials are added to the header of the web service call and the username and password which are required in this header. The properties you need to add are shown in the printscreen, for each property you need to define the proper values.
Such as for the wsseHeaders property, you need to define ‘credentials’ to state that the header will contain user credentials. This is standard web service security we’re using.

To be able to add these same credentials to the external web service, which is invoked from an ESB Service now, we need to come up with another solution. In the demo the same integration exercise is defined, once integration of external web service with BPEL and once through integration of ESB Routing Service with a SOAP Service. The only difficulty in the ESB Service is, that we can’t add these properties in a declarative way to the ESB Service. Instead we need to work with transformations to be able to add the credentials to the SOAP Service call.
How can we accomplish this, by adding parameters to the xsl-stylesheet which is used to transform the call that’s being made to the SOAP Service.

Have a look at the screenshot below to have a clear view on the needed parameters to add to the SOAP Service using an xsl-stylesheet in the transformation-property of our ESB Routing Service.