New Continuous Integration tutorial published

No Gravatar

Hot off the press – a new continuous integration tutorial. It’s really not just about continuous integration, though! You’ll find it useful even if you aren’t using a continuous integration server like Hudson. It’s useful if you are doing any part of the scenario it documents: Setting up Team Productivity Center for your team and tasks, checking in source code changes to Subversion while referencing TPC tasks, building JUnit test cases for ADF BC view objects (in a different project than the components themselves), running JUnit tests from Ant tasks (including utilizing the database connection defined in the AM via Ant), setting up a Hudson job to check out from subversion and run the tests automatically, and reporting the build results back to TPC and JDeveloper using the TPC plug-in for Hudson and the Hudson plug-in for TPC. All this and many other pearls of wisdom for testing ADF applications is available here:

Even if you don’t make it all the way through to the end, or if you are only using certain parts of the tutorial, let us know if it was useful to you by visiting the last page of the tutorial where we have a small feedback form. We do really read those comments!

Advanced ADF eCourse, Part Deux

No Gravatar

In February, we published the first in a series of FREE(!) online advanced ADF training:
The response to that course has been overwhelmingly positive as more and more people are moving past the evaluation/prototype stages with ADF and looking for more advanced topics. I’m pleased to relay the good news that the 2nd part of this series has now been published:

This second installment provides you with all you need to know about regions, including best practices for implementing contextual events and other region communication patterns. It also covers the nitty-gritty details of building great looking user interfaces, such as how to work with (not against!) the ADF Faces layout components, how to build page templates and declarative components, and how to skin the application to your organization’s needs. It wraps up with an in-depth look at layout components, and a second helping of additional region considerations if you just can’t get enough.

Like the first installment, the content for this course comes from Product Management. This 2nd eCourse compilation is a bit of a “Swan Song” for Patrice Daux, a long-time JDeveloper and ADF curriculum developer, who is retiring the end of this month. Thanks for your efforts, Patrice, and bon voyage!

Fun with Hudson, Part 1.1

No Gravatar

Earlier I posted that I had used the following zip command in the ‘execute shell’ action for my Hudson build job:

zip -r $WORKSPACE/builds/$JOB_NAME-$BUILD_NUMBER * -x ‘*/.svn/*’ -x ‘*builds/*’

This zips up the content of the exported source, so that I can send it on to team members who need the source of each build but aren’t authorized for the source control system.

That has been working splendidly except that I have some resource issues on the server I’m using for these builds, so I’m occasionally running out of space. I really only need to keep the latest successful build’s zip file, so after a bit of trial and error, I came up with this script for finding older builds and deleting them:

oldbuild=$(($BUILD_NUMBER – 3))
find . -type f -name “*-$” -exec rm -f {} \;

This is using the $BUILD_NUMBER built-in environment variable from Hudson to set a variable named oldbuild to a zip from 3 builds ago, and then finding that file (since I had named the file $JOB_NAME-$BUILD_NUMBER in the zip command) and removing it.

So now Hudson is creating the builds and cleaning up after itself! Hmmm, if only I could get the kitchen to do that for dinner.

Hiring a Curriculum Developer

No Gravatar

If you are an instructional designer with an eye for technologies like ADF, or if you are an ADF enthusiast and excel at creatively producing technical content, then ADF Product Management would like to hear from you. We’re looking for a curriculum developer to join our ADF Curriculum team, which is tasked with ensuring that our customers develop ADF applications successfully by publishing high quality courses, tutorials, demonstrations, and more for both classroom-based and online (OTN) delivery.

Full details of the job post can be found here:
or search for IRC1787711 at

Please contact me if you feel you have the knowledge and desire to help others be successful with ADF.

New ADF Insider on Layouts

No Gravatar

I’ve published an ADF Insider session that helps de-mystify the ADF Faces components and how to work with them (and not against them), when building ADF applications. There’s also some great information on building ADF prototypes. Take a look here:

Fun with Hudson, Part 1

No Gravatar

I’m building a set of samples for our next release of JDeveloper, and in doing so, I found the need for Hudson. Which is good, because after my preparations to present on Hudson at Rocky Mountain Oracle User Group, I’ve become a Hudson addict and am dreaming up all kinds of ways it can improve my life! Really, though, I think Hudson is a pretty cool tool to automate all the tasks that need to happen after a developer checks in a bit of code.

A common use case for Hudson is to checkout a project from subversion (or other repository) and then for ADF applications, use the ojdeploy executable to create a JAR, WAR, or EAR of the project. This is useful for cases where the output of one development team is the EAR file, or if you want to hook in auto deployment and always have a deployed version of the application running.

However, my requirement is that the exported source of the application is the build artifact, not an EAR file. I need to give our documentation writers the source (preferably zipped up) for each new build of the application so that they can see the design-time changes that were made to implement whatever feature I’m demonstrating in the sample. I haven’t given our documentation writers access to our subversion server, so they can’t pull the source from there. They want a zipped workspace that they can download, extract, and start working with right away.

It took a little trial and error, but here’s what I came up with: A build task in Hudson that issues the zip command, ignoring ‘.svn’ and ‘builds’ directories:

zip -r $WORKSPACE/builds/$BUILD_TAG * -x ‘*/.svn/*’ -x ‘*builds/*’

This command zips the current workspace directory * (which on my Hudson slave is something like /home/lmunsing/.hudson/jobs/Summit_ADF/workspace), ignoring all the .svn directories which exist at each level, and ignoring the builds directory that I manually created in the workspace directory to hold the zip files. This means I’m getting a zip that doesn’t contain the .svn directories or their contents, and that doesn’t contain the previous build zips. I tried using the tar command, but that gave me really crazy output in the Hudson console, so I went back to zip. I also tried combining the two exclusions according to the doc by space-separating them, but that just didn’t work. I’d end up with zip that included all the previous build’s zips. I also tried doing an svn export, but of course running that from the shell doesn’t pick up the account privileges that are configured in Hudson, and I didn’t want to include the username and password on the command line. I also used the $BUILD_TAG environment variable to name the zip file.

Here’s what the command looks like in the job console (for the 26th build):

zip -r /home/lmunsing/.hudson/jobs/Summit_ADF/workspace/builds/hudson-Summit_ADF-26 builds Model src SummitADF.jws Summit_Extensions ViewController -x ‘*/.svn/*’ -x ‘*builds/*’

This took enough trial and error to get right and google wasn’t giving me help with this exact sweet spot of “.svn directories exclude hudson zip”, so hopefully this helps someone.

Now I need to modify the automated build email to alert the doc writers when a new build has been created and point them to:


I’ll be using the Hudson Email Extension plug-in for that.

The next stage will be to call this shell script only if the application builds, then only if it builds and some JUnit tests (sanity tests) are successful. For that I’ll use the Hudson Parameterized Trigger plug-in. And of course report all this back to developers using the Team Productivity Center. Such fun!

Changes in ADF Enablement

No Gravatar

Some great developments have come about in the past few weeks. First, we’ve added Chris Muir to our ADF enablement team at Oracle and his experience and expertise with ADF should help us address real-world issues that our customers face. He’s also a really nice guy, so I’m happy to be working with him more formally.

Additionally, I’ll be appearing at fewer conferences as I’m trading airline miles for management tasks. I’ll still be focused on ADF of course, and will be contributing to the ADF enablement effort via online mediums. But now I’ll also be heading up the Java Tools curriculum development team. Our group is responsible for OU courses like these: , as well as distributing collateral via other means like ADF Insider Essentials and the brand new eCourse, Advanced ADF Series Part 1. Dana Singleterry’s given a nice writeup of that eCourse here:

Look for more ADF content coming to you in various formats in 2012. We want to make customers successful with ADF. That means (re)formatting content in a way that makes the most sense for the topic, continuing to foster the Fusion Developer Certification program through in-class and online courseware, and we can always make improvements in making collateral more discoverable. These internal changes in our team are all a means to realize these goals sooner rather than later. It’s an exciting time!

ADF Sessions at Rocky Mountain Oracle User Group (RMOUG)

No Gravatar

In just over a week, I’ll be presenting at the Rocky Mountain Oracle User Group (RMOUG). This is a good-sized conference with lots of great content and many familiar faces. I’ve been busily preparing for the conference as I’m presenting two brand new sessions this year.

The good content actually starts a day early with the OTN Developer Day on Tuesday, February 14.
Bring your own laptop to this FREE, one-day workshop, and leave with a sample application and all the software you need to build applications, including the latest version of JDeveloper and ADF. At last check there’s still a few seats left, so be sure to register and make sure you select the Java track on the event page:

Wednesday starts off at 9:15 with “Understanding the Fusion Development Platform” – if you have any questions about what Fusion Middleware entails, how it fits into Oracle’s plans, or how it can fit into your organization’s plans, this session is for you.

At 10:45 Wednesday I’ll present “Getting the Most Out of Your ADF Application – Integrating ADF with SOA and BPM” – This session shows how ADF is used as a front-end to BPM and SOA applications, and helps you see how to weave together different parts of the Fusion Middleware stack.

Wednesday at 1:15 I’m presenting “How to Build an ADF Application Productively” – this session is great if you are just getting started with ADF or are embarking on a project and need help understanding how to set up your development environment. I’ll show how you can use scripting tools like Ant and Maven to run your source compilation, I’ll address best practices how to set up your source control, and I’ll demonstrate how to use Hudson for continuous integration, so you can really maximize productivity when developing ADF applications.

There are several other ADF sessions to attend as well, including the latest ADF Mobile session by Joe Huang:
“Develop Mobile Apps Smartphones and Tablets: Converging Web and Native Applications”

The full conference schedule is here:″

I always look forward to this trip, it’s about the umpteenth time that I’ve presented at RMOUG and it will be great to catch up with old friends! And of course spend some time in one of my favorite cities. Hope to see you there!

New to ADF? What you need to know…

No Gravatar

If you are evaluating ADF for your organization, or if you are just getting started with ADF, you’ll appreciate this video I’ve published that guides you through all the content on the subject – books, blogs, ADF courses, and papers and tutorials and recordings on OTN. There is a lot of material available and I’ve found myself doing this for developers and managers that are trying to find their way around all the material on OTN. Now I’ve recorded a video that shows you what you should do first and what you can save for later. Happy Viewing!
ADF Collateral Tour

Update: I’ve created a tinyurl to make this even easier to find:

ECSTeam is now a Specialized ADF Partner!

No Gravatar

Congratulations to ECSTeam on their recent designation as a partner specialized in ADF! Some of you have seen Greg Opie co-present with me at Oracle Open World, demonstrating the various applications that his team have built using Oracle ADF. This latest feather in their cap means that the ECSTeam is recognized by Oracle as ADF experts. Congrats to Greg and the rest of your team!