Posts tagged jdeveloper

SOA Suite File Adapter Pre and Post processing using Valves and Pipelines

A quick note on the notion of valves and pipelines that can be configured in File (and FTP) Adapter Services and References (inbound and outbound) to perform file pre- and post processing on the files before they enter the composite application proper as XML or after they have left the composite application, turned from XML to their native format and before they are written out to file.

Valves can easily be created – in a way that reminds me of Servlet Filters – and the pipeline that can be configured with a chain of valves is also quite similar to a filter chain. A valve is custom Java Class that implements one or two specific interfaces. This class is packaged in a JAR file that is added to the classpath of the SOA Suite: the valve becomes part of the generic SOA Suite infrastructure, to be used potentially by multiple composite applications – not necessarily by just a single composite. Note however that use of a valve is configured in the File Adapter binding in every composite application that wants to leverage it.

Valves can be used for several operations. Some examples on the inbound end are:

  • filter files: only let through files or lines that are relevant
  • split files: let through structured data and write to grid or temp storage the associated attachments
  • pre-transform: convert binary (Word, PDF) to plain text or JSON to XML or CSV
  • security/validation: perform check on contents and decide whether to let through or not
  • throttle: slow down processing or wait for a toke to become available
  • decrypt, correct/enrich or unzip files
  • archive files in a more specific way than the file system copy currently supported by the file adapter

For outbound post-processing, a similar list could be composed.

Currently valves are not supported by JMS or Database Adapter – only for file and ftp. I have an inkling that this may change in the fairly near future, though this is only guesswork.

Note: it feels to me that some of the things valves can do regarding file and ftp adapter bindings, we can do through custom web service policies for web service and http binding – message pre- and post processing for inbound and outbound bindings respectively.

Read the rest of this entry »

ADF Gold Nuggets – from Oracle Open World’s ADF Enterprise Methodology Group Super Sunday

Sunday 2nd of October 2011 saw, in the prelude to the Oracle Open World conference, the ADF Enterprise Methodology Group’s Super Sunday. Six valuable presentations on planning, designing, building and improving ADF applications by experienced ADF specialists. In front of an audience of over 150.

Interest in ADF seems higher than ever – with an increasing number of organizations starting with BPM, WebCenter or/and ADF proper – and many of them interested in having their approach confirmed as well as finding new and better ways to address certain challenges.

I presented the ADF Gold Nuggets presentations – on valuable yet often unknown or underestimated features and functions in ADF. Going from very small, single property features to large areas and event architectural concepts, I took the audience on a somewhat strange ride – that most seemed to enjoy though. I have put my slides on Slideshare, accessible below.

Running XQuery from Java applications using the XQJ API and the Oracle XDK implementation

While preparing for the new SOA for Java Professionals training program at AMIS, I was recently working on a section discussing XQuery and more specifically the ability to use XQuery from Java as an alternative to JAXB binding to POJOs on the one hand and DOM based XPath searches on the other.

The XQJ API for XQuery support from Java is relatively new and unknown. Implementations of the API are not yet part of Java 6 SE (I am not sure about Java 7) and the number of resources on the internet is still limited.

This article shows the steps for running a simple Java program for inspecting an RSS feed and printing titles for RSS items that concern Java. It also shows how to configure a Java application in JDeveloper 11g using the Oracle XDK implementation of XQJ.

Read the rest of this entry »

ADF 11g R2 : ADF Business Components UI Categories and Dynamic Forms (and some new IDE features)

ADF 11gR2 has some very nice UI Hints features. Some were already available in previous releases. In this post I will describe the effect of the UI Categories. On the go, I will also point out some other new features. To see how this works, I created simple ADF Business Components from tables (That is, only the employees table from the HR schema). Read the rest of this entry »

Hands-on: Synchronize your database from a webservice with JAX-WS and ADF Business Components

This step-by-step starter hands-on provides an example how to make a JAX-WS webservice proxy in JDeveloper, and save retrieved data from this webservice in a batch-job to your own database with ADF Business Components.
Duration: 60 minutes.

For this hands-on example, imagine that your company wants to expand internationally and that reliable, up to date country information is absolutely critical. Recently there were some changes in the number of countries and there might be in the future. Since 1990, 33 new countries have been created. A few months ago the world welcomed a new country (South-Sudan) and yet we don’t know what will happen in Libya (maybe it will be separated in West and East-Libya?). Your company wants to weekly synchronise its internal countries database table with up-to-date country information from a recognised country-monitoring institution that delivers up-to-date country information by a webservice.

Part 1 – Create the country webservice client with JAX-WS

We are going to create a webservice client proxy for a country webservice available on: Read the rest of this entry »

Oracle Diagnostics Logging (ODL) for application development

Logging is a very important aspect of application development as it offers run-time access to the behaviour and data of the application. It’s important for debugging purposes but also to investigate exception situations on production. The Java developer has a choice between logging frameworks but Log4J is probably the most used one. The usage is quite simple: grab a Logger, e.g. private static Logger log = Logger.getLogger(MyBean.class);, and then use that logger to log the actual message at the required level, log.debug(“This is a debug message”);. To print the logmessages, the Log4J is configured externally with a properties file that defines the location (e.g. console, file, database etc.) and the format of the logmessages. Other logging frameworks, like Java Util Logging, are used in a similar way. It’s actually a good practice to not use Log4J directly, but to use a wrapping or facade framework, that allows switching of the actual logging implementation itself. In the past that would have been Apache Commons Logging (ACL), but now SLF4J is commonly used because it doesn’t have the classloader issues of ACL and it provides some nice message formatting (and performance) features like log.debug(“{} says: This is a debug message”, user.getName());. By the way, the logging usage of Log4J is similar to SLF4J so you can easily switch by only replacing the imports statements. Read the rest of this entry »

Change the JDeveloper system directory

De system directory is where JDeveloper stores the user specific settings, configurations and also (for 11g) the default domain of the embedded weblogic server. It uses the JDEV_USER_HOME environment variable to dettermine the location. If it’s not set is uses a default directory, for 11g on windows XP that’s <user dir>\Application Data\JDeveloper\systemXXX (XXX stands for the exact IDE version, e.g. system11.1.1.3.37.56.60 for 11gPS2, 11.1.1.3.0) and for 10g that’s <JDev install dir>\jdev\system (no version included). Note that the Application Data directory contains a space. And although this doesn’t prevent JDeveloper and the embedded weblogic from proper functioning, it may sometimes leads to an issue, e.g. that diagnostics (adrs) cannot create an image.

To change this directory, just add the JDEV_USER_HOME environment variable and set it to the required directory, that must not contain a space in the name and when you restart JDeveloper it will use that directory. However, you’ll notice that JDeveloper will now consider itself an almost new installation, without your custom configuration and no default weblogic domain but with installed extensions. It should be able to copy the old systemXXX directory to the new location but didn’t work with me and upgrade settings from a previous version didn’t work too. So you have to do the configuration again, but luckily the weblogic default domain is created automatically with the first deployment.

Be aware that when you have multiple 10g installations you should not set the environment variable because 10g doesn’t add a version number to the system directory and you’ll end up with one directory for all the 10g installations which I’m sure will cause serious problems. In this case you should can change the directory per 11g installation by setting the ide.user.dir property (use forward slashes) in the <middleware install dir>\jdeveloper\jdev\bin\jdev.boot file or add it to the startup script with -J-Dide.user.dir=<some directory>.

Manage JDeveloper external libraries

Although JDeveloper provides loads of libraries out-of-the-box, you often need other libraries in your application. You can easily add these libraries via the project properties. This provides two options: ‘Add Library’ and ‘Add Jar / Directory’. We normally us the Add Library option because it allows to include the JavaDoc and the source code. However make sure that you check the ‘Deployed by Default’ checkbox or else the library will not be included on the classpath and the application will fail with a java.lang.ClassNotFoundException. By the way, we never use Tools -> Manage Libraries because we only use project libraries and never the user or system libraries, because they introduce local dependencies that need to be maintained at every workstation seperately.

add-jdev-ibrary

ADF 11g: Debugging Task Flows embedded from ADF Libraries using source code jars

We have been struggling quite a bit with a good approach for modularizing our ADF web applications through the use of (stand alone) Task Flows that are developed in independent projects and assembled into a single Web Application from ADF Libraries. In theory, this is a very structured, decoupled way of developing potentially complex ADF Web Applications – while allowing for reuse. The contextual events mechanism in combination with the task flow input parameters allow definition of a clear interface through which to reuse the task flow. So all seems well.

However, when you try to put this theoretical bliss into actual practice, there are some limitations that you run into. One of the tricky issues we had to deal with is: how can we debug our web application when part of the source of the application is reused from ADF Libraries? How can we put breakpoints in the sources that are part of the ADF Library?

On closer inspection, there seems to be a relatively easy way for doing this – using an additional library definition in JDeveloper that refers to the sources that form the foundation of the ADF Library.

Let’s take a quick look at how this would work:

Read the rest of this entry »

Subversion – branching, merging and reintegration

Subversion is a great source control system. One of the great features is it’s branching and merging support. Although many developers avoid it, branching is very powerful and useful and should not be something to be afraid off but something to be familiar with. And for the stable and controlled development is it almost a necessity to master it.

In general we can identify two types of branches: product and feature branches.

  • The product branch is normally to support maintenance on a released version while development of the next version continues.
  • A feature branch is normally a temporary branch to work on a (complex) change without interfering with the stability of the main development line (trunk) and in the end is incorporated back into the main line again.

Now, while you can work on isolation on the feature branch, there will come a time that you’ll have to integrate (merge) the changes with the trunk. And although subversion does provide extensive merge support, this might get messy with big changes. So it’s a real good idea to keep the feature branch in sync with the trunk and have the changes in the trunk regularly applied to the feature branch too. Actually, this is not so complicated as it might seem, especially when using modern tools like TortoiseSVN or IDE’s.

Read the rest of this entry »