Our experience

After working with BPEL for some time, we can honestly say that it's a pretty decent standard to work with as long as you don't make things to complicated. Once you start using the more advanced features of BPEL, then it's really not getting any easier.

At the moment we still have to do some research on the Active Webflow BPEL editor. This is a graphical editor that should make the creation of a BPEL process a lot more simple. Once that research is done, we might even put that information on this web page.

Preferred engine

From our experiences with several engines, we can really advice the ActiveBPEL engine because of it's simplicity and decent support. When making your own process we think it's a good idea to read as much information on the subject as possible, because the more you know the easier it seems to gets.

Client systems

On the subject of integration with ERP and CRM systems it's really just waiting for those companies to start supporting BPEL. This support is not good at the moment. When you are developing a commercial product that uses BPEL, we think it's a good idea to already look at the 2.0 specification of BPEL. There are going to be some changes that you maybe already implement right now and not wait till the day the specification is made final.

Client software

Because we didn't find any decent support in ERP systems we have build a simple client to invoke our own BPEL process. This client is a very simple Java program that requires JBoss 4.0.1+, Ant and JWSDP 1.5. In the code example below the program code of this client is shown. The bold parts of the code should be changed in accordance to your situation.

import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

import javax.xml.namespace.QName;

import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.Call;

public class WsClient
{
  private static String invokeWS() throws Exception
  {
    Service service;
    String namespace = "<namespace location>";
    //In out case: "http://net.luminis.bpel"

    URL url = new URL("<wsdl location>");
    //Our location: "http://localhost:8080/active-bpel/services/ProofOfConcept?wsdl"

    QName qname = new QName(namespace, "<service name>");

    ServiceFactory factory = ServiceFactory.newInstance();
    service = factory.createService(url, qname);

    QName operation = new QName(namespace, "<operation>");
    QName port = new QName(namespace, "<port name>");

    Call call = service.createCall(port, <operation>);

    return (String) call.invoke(new Object[] { "<argument>" } );
  }

  public static void main(String[] args) throws Exception
  {
    try {
      System.out.println("Invoke: " + invokeWS() );

    } catch (Exception e) {
      System.out.println("An error has occured!");
      System.out.println(e);
    }
  }
}

To build this code with Ant you can use the build file shown below. You need to change several paths that are made bold.

<?xml version="1.0"?>

<project name="Web Service Client" default="all" basedir=".">

  <property name="java.home" value="<Java location>"/>
  <!-- In our case this is "/usr/java/j2sdk1.4.2_08" -->

  <property name="jboss.home" value="<JBoss location>"/>
  <!-- In our case this is "/opt/jboss-4.0.1sp1" -->

  <property name="jwsdp.home" value="<JWSDP location>"/>
  <!-- In our case this is "/home/berryv/software/jwsdp-1.5" -->

  <target name="init">
    <property name="dirs.base" value="${basedir}"/>
    <property name="classdir" value="${dirs.base}/build"/>
    <property name="src" value="${dirs.base}/src"/>

    <property name="deploydir" value="${jboss.home}/server/default/deploy"/>

    <property name="build.reports.dir" value="${dirs.base}/build/reports" />
  </target>

  <path id="compile.classpath">
    <fileset dir="${jboss.home}/client" includes="*.jar"/>

    <fileset dir="${jwsdp.home}/jaxb/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/jaxp/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/jaxr/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/jaxrpc/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/jstl/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/jwsdp-shared/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/saaj/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/sjsxp/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/xmldsig/lib" includes="*.jar"/>
    <fileset dir="${jwsdp.home}/xws-security/lib" includes="*.jar"/>

    <fileset dir="${java.home}/lib" includes="*.jar" />
  </path>

  <target name="all" depends="init,build,run-client"/>

  <target name="build" depends="init">
    <javac srcdir="${src}" destdir="${classdir}" debug="true"
           includes="**/*.java" classpathref="compile.classpath"/>
  </target>

  <target name="run-client" depends="init,build">
    <java classname="org.luminis.WsClient">
      <classpath>
        <pathelement path="${classdir}"/>
        <pathelement path="${classdir}/org/luminis"/>
        <path refid="compile.classpath"/>
      </classpath>
    </java>
  </target>
</project>

Go back to the main page