You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2009/12/09 03:01:42 UTC
svn commit: r888674 -
/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
Author: midon
Date: Wed Dec 9 02:01:40 2009
New Revision: 888674
URL: http://svn.apache.org/viewvc?rev=888674&view=rev
Log:
ODE-700: retire any previous versions of package. Thanks to Oleg Zenzin
Modified:
ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
Modified: ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java?rev=888674&r1=888673&r2=888674&view=diff
==============================================================================
--- ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java (original)
+++ ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java Wed Dec 9 02:01:40 2009
@@ -29,6 +29,8 @@
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.sql.DataSource;
import javax.xml.namespace.QName;
@@ -39,18 +41,12 @@
import org.apache.ode.bpel.extension.ExtensionValidator;
import org.apache.ode.bpel.dd.DeployDocument;
import org.apache.ode.bpel.dd.TDeployment;
-import org.apache.ode.bpel.iapi.ContextException;
-import org.apache.ode.bpel.iapi.ProcessConf;
-import org.apache.ode.bpel.iapi.ProcessState;
-import org.apache.ode.bpel.iapi.ProcessStore;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
-import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.bpel.iapi.*;
+import org.apache.ode.il.config.OdeConfigProperties;
import org.apache.ode.store.DeploymentUnitDir.CBPInfo;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.msg.MessageBundle;
-import org.apache.ode.il.config.OdeConfigProperties;
import org.hsqldb.jdbc.jdbcDataSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -81,6 +77,8 @@
private final CopyOnWriteArrayList<ProcessStoreListener> _listeners = new CopyOnWriteArrayList<ProcessStoreListener>();
+ private static final String VERSION_REGEXP = "([-\\Q.\\E](\\d)+)?";
+
private Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
private Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
@@ -209,14 +207,11 @@
du.setVersion(version);
+ retirePreviousPackageVersions(du);
+
for (TDeployment.Process processDD : dd.getDeploy().getProcessList()) {
QName pid = toPid(processDD.getName(), version);
- // Retires older version if we can find one
- DeploymentUnitDir oldDU = findOldDU(du.getName());
- if (oldDU != null)
- setRetiredPackage(oldDU.getName(), true);
-
if (_processes.containsKey(pid)) {
String errmsg = __msgs.msgDeployFailDuplicatePID(processDD.getName(), du.getName());
__log.error(errmsg);
@@ -311,6 +306,34 @@
return deployed;
}
+ /**
+ * Retire all the other versions of the same DU:
+ * first take the DU name and insert version regexp,
+ * than try to match the this string against names of already deployed DUs.
+ * For instance if we are deploying DU "AbsenceRequest-2/AbsenceRequest.ode" and
+ * there's already version 2 than regexp
+ * "AbsenceRequest([-\\.](\d)+)?/AbsenceRequest.ode" will be matched against
+ * "AbsenceRequest-2/AbsenceRequest.ode" and setRetirePackage() will be called accordingly.
+ */
+ private void retirePreviousPackageVersions(DeploymentUnitDir du) {
+ //retire all the other versions of the same DU
+ String[] nameParts = du.getName().split("/");
+ nameParts[0] += VERSION_REGEXP;
+ 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]);
+ }
+
+ Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+ for (String deployedDUname : _deploymentUnits.keySet()) {
+ Matcher matcher = duNamePattern.matcher(deployedDUname);
+ if (matcher.matches()) {
+ setRetiredPackage(deployedDUname, true);
+ }
+ }
+ }
+
public Collection<QName> undeploy(final File dir) {
try {
exec(new Callable<Collection<QName>>() {