### Eclipse Workspace Patch 1.0 #P ode Index: bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java =================================================================== --- bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java (revision 654) +++ bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java (working copy) @@ -73,7 +73,7 @@ private Map _processes = new HashMap(); - private Map _deploymentUnits = new HashMap(); + protected Map _deploymentUnits = new HashMap(); /** Guards access to the _processes and _deploymentUnits */ private final ReadWriteLock _rw = new ReentrantReadWriteLock(); @@ -326,7 +326,7 @@ * "AbsenceRequest([-\\.](\d)+)?/AbsenceRequest.ode" will be matched against * "AbsenceRequest-2/AbsenceRequest.ode" and setRetirePackage() will be called accordingly. */ - private void retirePreviousPackageVersions(DeploymentUnitDir du) { + protected void retirePreviousPackageVersions(DeploymentUnitDir du) { //retire all the other versions of the same DU String[] nameParts = du.getName().split("/"); /* Replace the version number (if any) with regexp to match any version number */ @@ -424,6 +424,23 @@ } finally { _rw.readLock().unlock(); } + + if (ProcessState.ACTIVE.equals(state)) { + // this version is being activated: check if another version of this + // process type is already active and if so, retire it. + Iterator processesIter = _processes.values().iterator();; + while (processesIter.hasNext()) { + ProcessConfImpl other_pconf = processesIter.next(); + QName other_pid = other_pconf.getProcessId(); + __log.debug("other pid " + other_pid + " vs this pid " + pid); + if (ProcessState.ACTIVE.equals(other_pconf.getState()) && + pconf.getType().equals(other_pconf.getType()) && + !pid.equals(other_pid)) + { + setState(other_pconf.getProcessId(),ProcessState.RETIRED); + } + } + } final DeploymentUnitDir dudir = pconf.getDeploymentUnit(); Index: bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java =================================================================== --- bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java (revision 654) +++ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java (working copy) @@ -317,7 +317,8 @@ List processes = _serviceMap.get(e.serviceName); if (processes == null) { processes = new ArrayList(); - _serviceMap.put(e.serviceName, processes); + if (process.getConf().getState() == ProcessState.ACTIVE) + _serviceMap.put(e.serviceName, processes); } // Remove any older version of the process from the list Iterator processesIter = processes.iterator(); @@ -339,7 +340,8 @@ } } - processes.add(process); + if (process.getConf().getState() == ProcessState.ACTIVE) + processes.add(process); } process.activate(this); } #P bpel Index: runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java =================================================================== --- runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java (revision 654) +++ runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java (working copy) @@ -569,7 +569,8 @@ case ACTVIATED: // bounce the process _bpelServer.unregister(pse.pid); - if (pconf != null) { + if (pconf != null && ProcessState.ACTIVE.equals(pconf.getState())) { + // only re-register if this process is still active _bpelServer.register(pconf); } else { __log.debug("slighly odd: recevied event " + @@ -582,7 +583,8 @@ // remove the process _bpelServer.unregister(pse.pid); // bounce the process if necessary - if (instantiated) { + if (instantiated && pconf!=null && ProcessState.ACTIVE.equals(pconf.getState())) { + // only re-register if this process is still active if (pconf != null) { _bpelServer.register(pconf); } else { Index: runtime/engine/src/main/java/org/apache/ode/store/RiftSawProcessStore.java =================================================================== --- runtime/engine/src/main/java/org/apache/ode/store/RiftSawProcessStore.java (revision 654) +++ runtime/engine/src/main/java/org/apache/ode/store/RiftSawProcessStore.java (working copy) @@ -19,7 +19,11 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.naming.InitialContext; import javax.sql.DataSource; @@ -28,12 +32,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ode.bpel.compiler.api.CompilationException; +import org.apache.ode.bpel.engine.BpelProcess; //import org.apache.ode.bpel.extension.ExtensionValidator; import org.apache.ode.bpel.iapi.ContextException; import org.apache.ode.bpel.iapi.EndpointReferenceContext; import org.apache.ode.bpel.iapi.ProcessState; import org.apache.ode.bpel.iapi.ProcessStoreEvent; import org.apache.ode.il.config.OdeConfigProperties; +import org.apache.ode.store.ProcessStoreImpl.Callable; import org.jboss.soa.bpel.deployer.BPELDeployer; import org.jboss.soa.bpel.deployer.BPELDeploymentUnit; @@ -87,6 +93,21 @@ } */ + protected void retirePreviousPackageVersions(DeploymentUnitDir du) { + //retire all the other versions of the same DU + // Riftsaw deployment units are slightly different + String name = du.getName(); + name = name.replaceAll("-(\\d)+\\.jar", "-(\\\\d)+\\\\.jar"); + + Pattern duNamePattern = Pattern.compile(name); + for (String deployedDUname : _deploymentUnits.keySet()) { + Matcher matcher = duNamePattern.matcher(deployedDUname); + if (matcher.matches()) { + setRetiredPackage(deployedDUname, true); + } + } + } + public class DeployScheduler extends Thread { public DeployScheduler() {