Featured Post

Applying Email Validation to a JavaFX TextField Using Binding

This example uses the same controller as in a previous post but adds a use case to support email validation.  A Commons Validator object is ...

Friday, February 4, 2011

User Defined Functions with Talend Open Studio

You can call any Java function from Talend Open Studio, but if you register that function as a Routine, there are several benefits.

Previous posts described using Commons Lang functions in Talend Open Studio.  One of my favorites is isBlank() which looks for whitespace, the empty string, or null.  Several versions of Commons Lang are embedded and ready for use.  Add a tLibraryLoad component with an import command, and functions like isBlank() can be added to expressions and become available in code complete.

Wrapping up the isBlank() function in a Routine involves adding extra information about the function in a comment the Routine implementation's Java class.  This extra information is used in the toolkit to provide inline help for the function which is a benefit when working with a team to promote common use.

This is an example of such a comment.

* isBlank: checks if a string is whitespace, empty, or null
* {talendTypes} String
* {Category} User Defined
* {param} string("notblank") input: The string to be checked
* {example} isBlank("notblank") # true .

The wrapping process is an easy way to add new functionality to Talend without having to program much.  Find the third-party library, and for each function you'd like to expose, create a static method.

The following single-line example wraps the isBlank() function.

public static boolean isBlank(String _s) { return StringUtils.isBlank(_s); }

Here is the sequence of steps for adding the Routine.
  1. In the Repository, expand Code
  2. Right-click on Routines and select Create Routine
  3. Add your code into the generated sample
You may choose to group your user-defined functions in a folder.  This doesn't have any bearing on the package.

I also noticed that I had to add a tLibraryLoad to add the link up the JAR file like commons-lang-2.5.jar to the job.  Otherwise, you'll get a compilation problem using the Routine.

1 comment:

  1. I had a problem running a different job that did not reference my user-defined Routine. I'm investigating. My workaround was to add a tLoadLibrary pointing to the JAR even if the Routine was not used.