Repository: ode
Updated Branches:
  refs/heads/master e76025908 -> d86b18081


ODE-1020: Fixed deactivation of process services for retiring processes.


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/d86b1808
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/d86b1808
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/d86b1808

Branch: refs/heads/master
Commit: d86b18081baf149b3bc6762964122c93642165cb
Parents: e760259
Author: sathwik <[email protected]>
Authored: Fri Nov 14 18:50:20 2014 +0530
Committer: sathwik <[email protected]>
Committed: Fri Nov 14 18:50:20 2014 +0530

----------------------------------------------------------------------
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 38 +++++++++++++++-----
 .../org/apache/ode/bpel/engine/BpelProcess.java | 29 +++++++--------
 2 files changed, 41 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/d86b1808/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git 
a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java 
b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index f2177cd..19bf53e 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -285,19 +285,39 @@ public class BpelEngineImpl implements BpelEngine {
             if (__log.isDebugEnabled())
                 __log.debug("Deactivating process " + p.getPID());
 
-            Iterator<List<BpelProcess>> serviceIter = 
_serviceMap.values().iterator();
-            while (serviceIter.hasNext()) {
-                Iterator<BpelProcess> entryProcesses = 
serviceIter.next().iterator();
-                while (entryProcesses.hasNext()) {
-                    BpelProcess entryProcess = entryProcesses.next();
-                    if (entryProcess.getPID().equals(process)) {
-                        entryProcesses.remove();
+            boolean deactivate = true;
+            Iterator<Endpoint> endpointItr = p.getServiceNames().iterator();
+
+            ProcessState state = null;
+
+            while(endpointItr.hasNext()){
+                Endpoint endPoint = endpointItr.next();
+                List<BpelProcess> processList = 
_serviceMap.get(endPoint.serviceName);
+
+                Iterator<BpelProcess> processListItr = processList.iterator();
+
+                while(processListItr.hasNext()){
+                    BpelProcess entryProcess = processListItr.next();
+                    state = entryProcess.getConf().getState();
+                    // Don't deactivate process services if there is another 
process in Active/Retired state and
+                    // associated with the same service name
+                    if( (ProcessState.ACTIVE.equals(state) || 
ProcessState.RETIRED.equals(state)) &&
+                        !(entryProcess.getPID().equals(p.getPID()))) {
+
+                        deactivate = false;
+                    } else {
+                        if(entryProcess.getPID().equals(process)) {
+                            processListItr.remove();
+                        }
                     }
                 }
             }
 
-            // unregister the services provided by the process
-            p.deactivate();
+            if(deactivate){
+                // unregister the services provided by the process
+                p.deactivate();
+            }
+
             // release the resources held by this process
             p.dehydrate();
             // update the process footprints list

http://git-wip-us.apache.org/repos/asf/ode/blob/d86b1808/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
----------------------------------------------------------------------
diff --git 
a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java 
b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
index 7ab5d1e..55da99d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
@@ -632,27 +632,22 @@ public class BpelProcess {
     }
 
     void deactivate() {
-        // the BindingContext contains only the endpoints for the latest 
process version
-        if 
(org.apache.ode.bpel.iapi.ProcessState.ACTIVE.equals(_pconf.getState())) {
-            // Deactivate all the my-role endpoints.
-            for (Endpoint endpoint : _myEprs.keySet()) {
-                // Deactivate the EPR only if there are no more references
-                // to this endpoint from any (active) BPEL process.
-                if (isShareable(endpoint)) {
-                    if(__log.isDebugEnabled()) __log.debug("deactivating 
shared endpoint " + endpoint+ " for pid "+ _pid);
-                    if (!_sharedEps.decrementReferenceCount(endpoint)) {
-                        
_engine._contexts.bindingContext.deactivateMyRoleEndpoint(endpoint);
-                        _sharedEps.removeEndpoint(endpoint);
-                    }
-                } else {
-                    if(__log.isDebugEnabled()) __log.debug("deactivating 
non-shared endpoint " + endpoint + " for pid "+ _pid);
+        // Deactivate all the my-role endpoints.
+        for (Endpoint endpoint : _myEprs.keySet()) {
+            // Deactivate the EPR only if there are no more references
+            // to this endpoint from any (active) BPEL process.
+            if (isShareable(endpoint)) {
+                if(__log.isDebugEnabled()) __log.debug("deactivating shared 
endpoint " + endpoint+ " for pid "+ _pid);
+                if (!_sharedEps.decrementReferenceCount(endpoint)) {
                     
_engine._contexts.bindingContext.deactivateMyRoleEndpoint(endpoint);
+                    _sharedEps.removeEndpoint(endpoint);
                 }
+            } else {
+                if(__log.isDebugEnabled()) __log.debug("deactivating 
non-shared endpoint " + endpoint + " for pid "+ _pid);
+                
_engine._contexts.bindingContext.deactivateMyRoleEndpoint(endpoint);
             }
-            // TODO Deactivate all the partner-role channels
-        } else {
-            if(__log.isDebugEnabled()) __log.debug("pid "+_pid+" is not 
ACTIVE, no endpoints to deactivate");
         }
+        // TODO Deactivate all the partner-role channels
     }
 
     private boolean isShareable(Endpoint endpoint) {

Reply via email to