You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2015/07/21 22:52:36 UTC

[39/50] ode git commit: added Upgradechecker to confirm if Omodel classes has upgraded to newest; not sure if it works, however

added Upgradechecker to confirm if Omodel classes has upgraded to newest; not sure if it works, however


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

Branch: refs/heads/ODE-912
Commit: bbdf8e453651e795e786a4ebd5e2097537b85356
Parents: 0e5cf5b
Author: fangzhen <fa...@gmail.com>
Authored: Fri Aug 8 23:30:55 2014 +0800
Committer: fangzhen <fa...@gmail.com>
Committed: Fri Aug 8 23:30:55 2014 +0800

----------------------------------------------------------------------
 .../ode/bpel/compiler_2_0/MigrationTest.java    |  7 +++
 .../org/apache/ode/bpel/obj/ExtensibleImpl.java |  2 +-
 .../ode/bpel/obj/migrate/OmUpgradeVisitor.java  |  4 --
 .../ode/bpel/obj/migrate/UpgradeChecker.java    | 47 +++++++++++++++++
 .../apache/ode/bpel/obj/serde/DeSerializer.java | 53 +++++++++++++-------
 5 files changed, 89 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/bbdf8e45/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
index ee27926..43809cf 100644
--- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
+++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
@@ -16,6 +16,7 @@ import org.apache.ode.bpel.obj.migrate.DomElementComparator;
 import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
 import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
 import org.apache.ode.bpel.obj.migrate.OmOld2new;
+import org.apache.ode.bpel.obj.migrate.UpgradeChecker;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -50,6 +51,12 @@ public class MigrationTest extends GoodCompileTest{
     		de.addCustomComparator(new DomElementComparator());
     		boolean res = de.deepEquals(nu, migrated);
        		assertEquals(Boolean.TRUE, res);
+
+       		UpgradeChecker checker = new UpgradeChecker();
+    		ObjectTraverser traverser = new ObjectTraverser();
+    		traverser.accept(checker);
+    		traverser.traverseObject(migrated);
+      		assertEquals(true, checker.isNewest());
      } catch (Exception ex) {
             ex.printStackTrace();
             Assert.fail("Compilation or migration did not succeed.");

http://git-wip-us.apache.org/repos/asf/ode/blob/bbdf8e45/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
index a6f6f68..bec1674 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java
@@ -15,7 +15,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 @JsonIdentityInfo(generator = UniqueStringIdGenerator.class, property = "@id")
 public class ExtensibleImpl  implements Extensible<Object>, Serializable{
 	public static final long serialVersionUID = -1L;
-	protected static final int CURRENT_CLASS_VERSION = 1;
+	public static final int CURRENT_CLASS_VERSION = 1;
 	
 	/** The wrapper wraps fields. Fields can be deleted, added or updated */
 	transient protected Map<String, Object> fieldContainer;

http://git-wip-us.apache.org/repos/asf/ode/blob/bbdf8e45/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
index 75db83c..f0cde52 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmUpgradeVisitor.java
@@ -1,12 +1,8 @@
 package org.apache.ode.bpel.obj.migrate;
 
-import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
 
 import org.apache.ode.bpel.obj.Extensible;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/bbdf8e45/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
new file mode 100644
index 0000000..ef9b93e
--- /dev/null
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/UpgradeChecker.java
@@ -0,0 +1,47 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.obj.ExtensibleImpl;
+
+public class UpgradeChecker extends AbstractObjectVisitor{
+    private static final Log __log = LogFactory.getLog(UpgradeChecker.class);
+
+    private boolean newest = true;
+	@Override
+	public Object visitPojo(Object obj) {
+		if (! (obj instanceof ExtensibleImpl)){
+			return null;
+		}
+		visitExtensible(obj);
+		return null;
+	}
+
+	private void visitExtensible(Object obj) {
+		ExtensibleImpl eobj = (ExtensibleImpl)obj;
+		if (eobj.getClassVersion() != eobj.CURRENT_CLASS_VERSION){
+			newest = false;
+			__log.debug(obj.getClass() + "hasn't upgraded to newest version. current: " 
+					+ eobj.getClassVersion() + ", newest: " + eobj.CURRENT_CLASS_VERSION);
+		}
+		List<Field> fields = MigUtils.getAllFields(obj.getClass());
+		for (Field f : fields){
+			f.setAccessible(true);
+			try {
+				Object value = f.get(obj);
+				if (value != null){
+					traverse.traverseObject(value);
+				}
+			} catch (Exception e){
+				throw new RuntimeException(e);
+			}
+		}
+	}
+
+	public boolean isNewest() {
+		return newest;
+	}
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/bbdf8e45/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
index 59b7a86..a661983 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
@@ -13,23 +13,27 @@ import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.OProcessWrapper;
 import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
 import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
+import org.apache.ode.bpel.obj.migrate.UpgradeChecker;
 import org.apache.ode.bpel.obj.serde.OmSerdeFactory.SerializeFormat;
 
 public class DeSerializer {
 	private OProcessWrapper wrapper = new OProcessWrapper();
 	private InputStream is;
-	public DeSerializer(InputStream is){
+
+	public DeSerializer(InputStream is) {
 		this.is = is;
 		deserializeHeader();
 	}
-	
+
 	public DeSerializer() {
 	}
 
-	public void serialize(OutputStream out, OProcess process){
+	public void serialize(OutputStream out, OProcess process) {
 		serialize(out, process, OmSerdeFactory.FORMAT_SERIALIZED_DEFAULT);
 	}
-	public void serialize(OutputStream out, OProcess process, SerializeFormat format){
+
+	public void serialize(OutputStream out, OProcess process,
+			SerializeFormat format) {
 		wrapper.setCompileTime(System.currentTimeMillis());
 		wrapper.setProcess(process);
 		wrapper.setFormat(format);
@@ -42,49 +46,60 @@ public class DeSerializer {
 			oos.writeObject(wrapper.getType());
 			oos.writeObject(wrapper.getOtherHeaders());
 		} catch (IOException e1) {
-			SerializaionRtException e =  new SerializaionRtException("Error when serialize Headers.");
+			SerializaionRtException e = new SerializaionRtException(
+					"Error when serialize Headers.");
 			e.initCause(e1);
 			throw e;
 		}
 		OmSerdeFactory factory = new OmSerdeFactory();
 		factory.setFormat(format);
-		OmSerializer serializer = factory.createOmSerializer(out, wrapper.getProcess());
+		OmSerializer serializer = factory.createOmSerializer(out,
+				wrapper.getProcess());
 		serializer.serialize();
 	}
-	
-	private void deserializeHeader(){
+
+	private void deserializeHeader() {
 		try {
 			ObjectInputStream ois = new ObjectInputStream(is);
 			wrapper = new OProcessWrapper();
-			wrapper.setMagic((byte[])ois.readObject());
-			wrapper.setFormat((SerializeFormat)ois.readObject());
+			wrapper.setMagic((byte[]) ois.readObject());
+			wrapper.setFormat((SerializeFormat) ois.readObject());
 			wrapper.setCompileTime(ois.readLong());
-			wrapper.setGuid((String)ois.readObject());
-			wrapper.setType((QName)ois.readObject());
+			wrapper.setGuid((String) ois.readObject());
+			wrapper.setType((QName) ois.readObject());
 			wrapper.setOtherHeaders((Map<String, Object>) (ois.readObject()));
 			wrapper.checkValid();
 		} catch (Exception e1) {
-			SerializaionRtException e = new SerializaionRtException("Error when reading Headers during deseriazation");
+			SerializaionRtException e = new SerializaionRtException(
+					"Error when reading Headers during deseriazation");
 			e.initCause(e1);
 			throw e;
 		}
 	}
-	public OProcess deserialize(){
+
+	public OProcess deserialize() {
 		OmSerdeFactory factory = new OmSerdeFactory();
 		factory.setFormat(wrapper.getFormat());
-    	OmDeserializer de = factory.createOmDeserializer(is);
-    	OProcess process = de.deserialize();
+		OmDeserializer de = factory.createOmDeserializer(is);
+		OProcess process = de.deserialize();
 		//upgrade
-		OmUpgradeVisitor upgrader = new OmUpgradeVisitor();
+		UpgradeChecker checker = new UpgradeChecker();
 		ObjectTraverser traverser = new ObjectTraverser();
-		traverser.accept(upgrader);
+		traverser.accept(checker);
 		traverser.traverseObject(process);
+		if (!checker.isNewest()) {
+			OmUpgradeVisitor upgrader = new OmUpgradeVisitor();
+			traverser = new ObjectTraverser();
+			traverser.accept(upgrader);
+			traverser.traverseObject(process);
+		}
 		return process;
 	}
-	
+
 	public OProcessWrapper getWrapper() {
 		return wrapper;
 	}
+
 	public void setWrapper(OProcessWrapper wrapper) {
 		this.wrapper = wrapper;
 	}