Escribiendo un Scheduler para Oracle BPEL PM 11g

Antes de la versión 11.1.1.3 de Oracle BPEL PM no había forma de configurar de manera no-programática un Scheduler que arrancara cada cierto tiempo un Composite/BPEL process.
De manera que si tienen una instalación de Oracle SOA Suite 11g (11.1.1.1 ó 11.1.1.2), y requieren de una Scheduler, este ejemplo les puede ser de ayuda.
Lo primero que hay que hacer es un Proxy client del Web Service en cuestión. Esto lo pueden hacer fácilmente utilizando Oracle JDeveloper:
image
El siguiente extracto de código te servirá para arrancar el Scheduler. Date cuenta que se utiliza un Timer que viene ya en Weblogic: TimerManager
public static void main(String[] args) {
  try {
      InitialContext ic = new InitialContext();
      TimerManager tm =
          (TimerManager)ic.lookup("env/tm/TimerManager"); //java:comp/env/tm/TimerManager
      //Aquí cambias la cantidad de segundos, en este caso 60.!!!!!!
      tm.scheduleAtFixedRate(new TestTimerListener(), 0, 60 * 1000);
      System.out.println("<h4>El proceso se ha iniciado. Cada 60 segundos se reiniciará.</h4>");
  } catch (NamingException ne) {
      ne.printStackTrace();
      System.out.println("<h4>Ha habido una falla en el Timer Scheduler!</h4>");
  }
}
La clase TestTimerListener hará uso de nuestro Proxy creado en pasos anteriores:
public class TestTimerListener implements TimerListener {
    @WebServiceRef
    private static Movimientoarchivosbpel_client_ep movimientoArchivos_client_ep;
    public void timerExpired(Timer timer) {
        System.out.println("inside timerExpired()");
        try {
            System.out.println("Starting schedule bpel, " + new java.util.Date());
            movimientoArchivos_client_ep = new Movimientoarchivosbpel_client_ep();
            //bpelprocess2_client_ep = new Bpelprocess2_client_ep();
            MovimientoArchivosBPEL movimientoArchivosBPEL = movimientoArchivos_client_ep.getMovimientoArchivosBPEL_pt();
          // Datos propios del Web Service
            String myOutput = movimientoArchivosBPEL.process("2");           
            System.out.println("Finishing schedule bpel, response is : " + myOutput);
            System.out.println("exiting timerExpired()");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Con esto el Composite se estará ejecutando cada 60 segundos.
Si requieres mas detalle, por favor contáctanos.