Archive for the ‘OpenDeploy’ Category

An updated version of my CV can be found at

I am a Java developer and TeamSite & LiveSite J2EE CMS specialist. I rely on around 15 years IT industry experience to deliver projects and functionality that make your applications and websites engage with your customers.

I have successfully held contract positions at several leading IT consultancy firm on large implementations for: a large Spanish Media group, a leading mobile phone manufacturer’s global website and a leading investment bank in the city of London.

I used to teach all Autonomy/Interwoven TeamSite and LiveSite courses for 2 years when working at Interwoven and I am maintaining a blog about their products now. I have been a project manager and web application developer in the IT industry for large scale Web Content Management Systems for several years. I am always looking for new and exciting opportunities.



The deployment task expects a success link and a failure link.

Their names follow a convention as follows:

  • the success link’s name must be the name of the deployment task concatenated with ” Success”.
  • the failure link’s name must be the name of the deployment task concatenated with ” Failure”.

When creating a workflow deployment task, you can specify the following Task Variables:

ClassName: (optional)com.interwoven.ui.teamsite.workflow.task.urltask.DeployURLExternalTask. a deployment task is only a URLExternalTask with additional variables.

odDeploymentName: (required)The name of the deployment file to use, without the .xml extension.

odDeploymentInst: (optional)The suffix to uniqely differentiate the deployments. Allows concurrent deployments. I normally set this to a script variable as “_$IW_USER_” + new Date().getTime();

Additional values may be set for odHost, odPort but they have default values for the current environment. You only set these up when you’ve change the defaults.

Deployment specific variables (normally set with a -k on the command line) can also be set in the OD Variables field, or in the normal task variables by prefixing their name with “odSubst_”.

Sometimes, you want to change things in another task before you get to that task. for example, to set the name of the instance of a deployment task.

First, you have to be able to find the other task. For this, you need its name and add call the following method:

 * find a task by name in a workflow job
 * @param job the job to get the task from. use task.getWorkflow() from the current task
 * @param taskName the name of the task to find in the workflow
 * @return the task object found, or null if an exception occured or the task was not found in the workflow
 public static CSTask getWorkflowTask(CSWorkflow job, String taskName) {
 CSTask taskFound = null;
 try {
 for (CSTask task : job.getTasks()) {
 if (task.getName().equals(taskName)) {
 taskFound = task;
 } catch (CSException ex) {
 Logger.getLogger(TaskUtil.class.getName()).log(Level.SEVERE, null, ex);
 return (taskFound);

Then, you can add the follwoing code to update the variable of the target task:

public static void setTargetTaskVariable(CSExternalTask task, String targetTaskVariableValue) throws CSException {
 String targetWorkflowTask = task.getVariable("targetWorkflowTask");
 String targetTaskVariableNameToSet = task.getVariable("targetTaskVariableNameToSet");
 CSTask workflowTargetTask = TaskUtil.getWorkflowTask(task.getWorkflow(), targetWorkflowTask);

 if (workflowTargetTask != null && targetTaskVariableNameToSet != null && targetTaskVariableValue != null) {
 //System.out.println("open deploy task found. Updating variable.");
 workflowTargetTask.setVariable(targetTaskVariableNameToSet, targetTaskVariableValue);
 System.out.println("Setting variable: " + targetTaskVariableNameToSet + "=" + targetTaskVariableValue);
 } else {
 if (workflowTargetTask == null) {
 System.err.println("Target task not found.");

 } else if (targetTaskVariableNameToSet == null) {
 System.err.println("Target task variable name not set.");

 } else if (targetTaskVariableValue == null) {
 System.err.println("Target task variable value not set.");



Add a couple of task variable to the updating task, namely

  • targetWorkflowTask
  • targetTaskVariableNameToSet

Your class must calculate the value of the variable to set and update the variable whose name was passed to the workflow, in the specified task. I have used this to set the instance name of the deployment to the job id of the workflow, making them unique.

It takes a VERY COMPLETE PERSON indeed to be an Interwoven developer and administrator. The product is so large that if you want to do it all, then you have to know it all.

The front end…

Most uf us use TeamSite as a WCM platform so we need to know how to craft a finished product. That means that the whole “front-end” stack needs to be acquired: HTML (preferably XMLTM), CSS and JavaScript at the minimum. Also, the HTTP protocol should be understood as well as the underlying principles of web page document delivery and structure of a web server.

Then there’s the delivery plaform. Since TeamSite itself is a de-coupled environment, you need to know at least one Web Server. The list is huge but only one suffices. IIS, Apache if you do mostly static pages, plus TomCat, WebSphere and a few others if you do dynamic delivery. That means you also need to know a scripting language such as ASP, JSP, PHP, Perl and CGI… If you also use SitePublisher with LiveSite (and note that SitePublisher does NOT need LiveSite), then you need to know about J2EE and the J2EE WebContainer that will do the delivery on your environment. Dy default, that means TomCat.

The back end…

The TeamSite Web application needs to be configured and used. It’s a web application and a big one that runs in a J2EE environment. So you ned to be well versed in J2EE, the WebContainer that delivers the TeamSite Content Center Web Application and how to configure or extend all of it. Here come XML, XSL, Perl, JavaScript and Java (you may also include Springs and Struts frameworks), HTTP proxying and Samba. If you want to go secure, SSL and encryption need to be added to that stack.

Once you know all that…

… then you’re ready to learn TeamSite, SitePublisher, LiveSite, OpenDeploy and MetaTagger.