Author: jeff.yuchang
Date: 2010-10-28 02:29:00 -0400 (Thu, 28 Oct 2010)
New Revision: 1071
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
branches/ODE/RiftSaw-ODE-trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
Log:
* RIFTSAW-238, deactive endpoints only if it has no previous versions of that deployment
unit.
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java
===================================================================
---
branches/ODE/RiftSaw-ODE-trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java 2010-10-28
06:18:25 UTC (rev 1070)
+++
branches/ODE/RiftSaw-ODE-trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelServer.java 2010-10-28
06:29:00 UTC (rev 1071)
@@ -116,6 +116,8 @@
* @throws BpelEngineException
*/
void unregister(QName pid) throws BpelEngineException;
+
+ void unregister(QName pid, boolean deactivateEndpoints) throws BpelEngineException;
void cleanupProcess(ProcessConf conf) throws BpelEngineException;
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
===================================================================
---
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java 2010-10-28
06:18:25 UTC (rev 1070)
+++
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java 2010-10-28
06:29:00 UTC (rev 1071)
@@ -272,7 +272,11 @@
.getInitialMyRoleEPR(plink) : null,
process.getPartnerRoleChannel(plink));
}
- BpelProcess unregisterProcess(QName process) {
+ public BpelProcess unregister1Process(QName process) {
+ return unregisterProcess(process, true);
+ }
+
+ public BpelProcess unregisterProcess(QName process, boolean needToDeactivate) {
BpelProcess p = _activeProcesses.remove(process);
__log.debug("Unregister process: serviceId=" + process + ",
process=" + p);
if (p != null) {
@@ -289,9 +293,11 @@
}
}
}
-
- // unregister the services provided by the process
- p.deactivate();
+
+ if (needToDeactivate) {
+ // unregister the services provided by the process
+ p.deactivate();
+ }
// release the resources held by this process
p.dehydrate();
// update the process footprints list
@@ -312,18 +318,14 @@
* Register a process with the engine.
* @param process the process to register
*/
- void registerProcess(BpelProcess process) {
+ public void registerProcess(BpelProcess process) {
_activeProcesses.put(process.getPID(), process);
for (Endpoint e : process.getServiceNames()) {
__log.debug("Register process: serviceId=" + e + ",
process=" + process);
List<BpelProcess> processes = _serviceMap.get(e.serviceName);
if (processes == null) {
processes = new ArrayList<BpelProcess>();
- //
https://jira.jboss.org/browse/RIFTSAW-155
- // this is the "incomplete.patch" from
- //
https://issues.apache.org/jira/browse/ODE-697
- if (process.getConf().getState() == ProcessState.ACTIVE)
- _serviceMap.put(e.serviceName, processes);
+ _serviceMap.put(e.serviceName, processes);
}
// Remove any older version of the process from the list
Iterator<BpelProcess> processesIter = processes.iterator();
@@ -338,18 +340,14 @@
process.deactivate();
return;
} else {
- __log.debug("removing cached older version");
- processesIter.remove();
+ __log.debug("deactivating the older version.");
cachedVersion.deactivate();
}
}
}
- //
https://jira.jboss.org/browse/RIFTSAW-155
- // this is the "incomplete.patch" from
- //
https://issues.apache.org/jira/browse/ODE-697
- if (process.getConf().getState() == ProcessState.ACTIVE)
- processes.add(process);
+
+ processes.add(process);
}
process.activate(this);
}
@@ -739,7 +737,7 @@
}
}
faultQName = constants.qnRetiredProcess;
- faultDetail.setTextContent("The process you're trying to
instantiate has been retired.");
+ faultDetail.setTextContent("The process you are trying to
instantiate has been retired. Retired process can not take any new instance
creation.");
break;
case InvalidProcessException.DEFAULT_CAUSE_CODE:
default:
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
===================================================================
---
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java 2010-10-28
06:18:25 UTC (rev 1070)
+++
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java 2010-10-28
06:29:00 UTC (rev 1071)
@@ -627,27 +627,22 @@
}
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) {
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
===================================================================
---
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java 2010-10-28
06:18:25 UTC (rev 1070)
+++
branches/ODE/RiftSaw-ODE-trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java 2010-10-28
06:29:00 UTC (rev 1071)
@@ -347,7 +347,12 @@
return new BpelProcess(conf);
}
+
public void unregister(QName pid) throws BpelEngineException {
+ unregister(pid, true);
+ }
+
+ public void unregister(QName pid, boolean deactiveEndpoints) throws
BpelEngineException {
if (__log.isTraceEnabled())
__log.trace("unregister: " + pid);
@@ -361,7 +366,7 @@
try {
BpelProcess p = null;
if (_engine != null) {
- p = _engine.unregisterProcess(pid);
+ p = _engine.unregisterProcess(pid, deactiveEndpoints);
if (p != null)
{
_registeredProcesses.remove(p);
Modified:
branches/ODE/RiftSaw-ODE-trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
===================================================================
---
branches/ODE/RiftSaw-ODE-trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java 2010-10-28
06:18:25 UTC (rev 1070)
+++
branches/ODE/RiftSaw-ODE-trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java 2010-10-28
06:29:00 UTC (rev 1071)
@@ -326,23 +326,35 @@
// is different from ODE.
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
*/
- nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z",
"");
- nameParts[0] += "([-\\Q.\\E](\\d)+)?";
- StringBuilder duNameRegExp = new StringBuilder(du.getName().length() * 2);
- for (int i = 0, n = nameParts.length; i < n; i++) {
- if (i > 0) duNameRegExp.append("/");
- duNameRegExp.append(nameParts[i]);
+ List<String> deployedDUnames = getPreviousPackageVersions(du.getName());
+
+ for (String deployedDuname : deployedDUnames) {
+ setRetiredPackage(deployedDuname, true);
}
+ }
+
+ public List<String> getPreviousPackageVersions(String duName) {
+ List<String> duNames = new ArrayList<String>();
+
+ String[] nameParts = duName.split("/");
+ /* Replace the version number (if any) with regexp to match any version number
*/
+ nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z",
"");
+ nameParts[0] += "([-\\Q.\\E](\\d)+)?";
+ StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
+ for (int i = 0, n = nameParts.length; i < n; i++) {
+ if (i > 0) duNameRegExp.append("/");
+ duNameRegExp.append(nameParts[i]);
+ }
+
Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
for (String deployedDUname : _deploymentUnits.keySet()) {
Matcher matcher = duNamePattern.matcher(deployedDUname);
if (matcher.matches()) {
- setRetiredPackage(deployedDUname, true);
+ duNames.add(deployedDUname);
}
}
+ return duNames;
}
public Collection<QName> undeploy(final File dir) {
@@ -378,6 +390,7 @@
}
_processes.keySet().removeAll(undeployed);
+
} finally {
_rw.writeLock().unlock();
}