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:24 UTC

[27/50] ode git commit: added some docs on migration code. a little beautify

added some docs on migration code. a little beautify


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

Branch: refs/heads/ODE-912
Commit: a04b2e90462b67994ed15753c16ecfa672b6d0fb
Parents: a499545
Author: fangzhen <fa...@gmail.com>
Authored: Wed Jul 30 13:02:30 2014 +0800
Committer: fangzhen <fa...@gmail.com>
Committed: Wed Jul 30 13:02:30 2014 +0800

----------------------------------------------------------------------
 .../ode/bpel/compiler_2_0/GoodCompileTest.java  |   4 +-
 .../ode/bpel/compiler_2_0/MigrationTest.java    |   9 +-
 .../org/apache/ode/bpel/obj/ExtensibleImpl.java |   6 -
 .../bpel/obj/migrate/AbstractObjectVisitor.java |  20 ++-
 .../ode/bpel/obj/migrate/EqualityVisitor.java   |  19 +-
 .../ode/bpel/obj/migrate/OModelVisitor.java     |   8 -
 .../ode/bpel/obj/migrate/ObjectTraverser.java   | 175 +++++++++++++++++++
 .../ode/bpel/obj/migrate/ObjectVisitor.java     |  20 ++-
 .../apache/ode/bpel/obj/migrate/OmOld2new.java  |  22 ++-
 .../ode/bpel/obj/migrate/TraverseObject.java    | 166 ------------------
 .../ode/bpel/obj/migrate/DeepEqualityTest.java  |   8 +-
 bpel-nobj/src/test/resources/log4j.properties   |   2 +-
 12 files changed, 251 insertions(+), 208 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
index 10195f3..9f44e55 100644
--- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
+++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java
@@ -30,7 +30,7 @@ import org.apache.ode.bpel.compiler.api.CompileListener;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.migrate.EqualityVisitor;
 import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
-import org.apache.ode.bpel.obj.migrate.TraverseObject;
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
 import org.apache.ode.bpel.obj.serde.OmDeserializer;
 import org.apache.ode.bpel.obj.serde.OmSerdeFactory;
 import org.junit.Assert;
@@ -56,7 +56,7 @@ public class GoodCompileTest extends AbstractCompileTestCase implements
 					.createOmDeserializer(new FileInputStream(cbpPath));
 			OProcess desered = deserializer.deserialize();
 
-			TraverseObject traverse = new TraverseObject();
+			ObjectTraverser traverse = new ObjectTraverser();
 			EqualityVisitor visitor = new EqualityVisitor(desered);
 			visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor));
 			traverse.accept(visitor);

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 2971d6b..e8cbc95 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
@@ -14,12 +14,15 @@ import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.migrate.EqualityVisitor;
 import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
 import org.apache.ode.bpel.obj.migrate.OmOld2new;
-import org.apache.ode.bpel.obj.migrate.TraverseObject;
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
 import org.junit.Assert;
 
 public class MigrationTest extends GoodCompileTest{
     private static final Log __log = LogFactory.getLog(MigrationTest.class);
 
+    /**
+     * compare compiled OProcess with migrated ones.
+     */
     public void runTest(String bpel) throws Exception {
         try {
             Class testClass = getClass();
@@ -35,12 +38,12 @@ public class MigrationTest extends GoodCompileTest{
     		__log.debug("compiled new OProcess " + nu.getFieldContainer());
     		org.apache.ode.bpel.o.OProcess old = new Serializer(new FileInputStream(oldCbpFile)).readOProcess();
     		OmOld2new mig = new OmOld2new();
-    		TraverseObject mtraverse = new TraverseObject();
+    		ObjectTraverser mtraverse = new ObjectTraverser();
     		mtraverse.accept(mig);
     		OProcess migrated = (OProcess) mtraverse.traverseObject(old);
     		__log.debug("migrated new OProcess " + migrated.getFieldContainer());
     		
-    		TraverseObject traverse = new TraverseObject();
+    		ObjectTraverser traverse = new ObjectTraverser();
     		EqualityVisitor visitor = new EqualityVisitor(nu);
     		visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor));
     		traverse.accept(visitor);

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/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 98ae216..489d6d2 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
@@ -7,8 +7,6 @@ import java.io.Serializable;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import org.apache.ode.bpel.obj.migrate.OModelVisitor;
-
 import com.fasterxml.jackson.annotation.JsonIdentityInfo;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.ObjectIdGenerators;
@@ -51,10 +49,6 @@ public class ExtensibleImpl  implements Extensible<Object>, Serializable{
 		return fieldContainer.remove(fieldName);
 	}
 	
-	public void accept(OModelVisitor visitor){
-		visitor.visitExtensibleImpl(this);
-	}
-	
 	@JsonIgnore
 	public int getClassVersion() {
 		Object o = fieldContainer.get(CLASS_VERSION);

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
index 5a8ce53..968aeeb 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
@@ -6,12 +6,11 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.ode.bpel.obj.migrate.TraverseObject.HandleTable;
-
+import org.apache.ode.bpel.obj.migrate.ObjectTraverser.HandleTable;
 
 public abstract class AbstractObjectVisitor implements ObjectVisitor{
 	protected ReplaceTable rtab = new ReplaceTable(1000, 0.8f);
-	protected TraverseObject traverse;
+	protected ObjectTraverser traverse;
 	protected Map<Class, ObjectVisitor>  visitors = new HashMap<Class, ObjectVisitor>();
 	
 	@Override
@@ -23,7 +22,7 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{
 	}
 	
 	@Override
-	public TraverseObject getTraverse(){
+	public ObjectTraverser getTraverse(){
 		return traverse;
 	}
 	@Override
@@ -48,6 +47,12 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{
 		rtab.assign(obj, n);
 		return n;
 	}
+	
+	/**
+	 * determine if obj is collections that order doesn't matter.
+	 * @param obj
+	 * @return
+	 */
 	protected boolean isSet(Object obj) {
 		return obj instanceof Set;
 	}
@@ -56,6 +61,11 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{
 		return old.getClass().isArray();
 	}
 
+	/**
+	 * determine if obj is collections that order does matter.
+	 * @param obj
+	 * @return
+	 */
 	protected boolean isCollection(Object old) {
 		return (old instanceof Collection) && !isSet(old);
 	}
@@ -64,7 +74,7 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{
 		return old instanceof Map;
 	}
 	@Override
-	public void setTraverse(TraverseObject traverseObject) {
+	public void setTraverse(ObjectTraverser traverseObject) {
 		this.traverse = traverseObject;		
 	}
 	

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
index bfcbd15..9e419ba 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
@@ -14,16 +14,25 @@ import java.util.Stack;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+/**
+ * compare two object for equality. default strategy:
+ * for collections and maps, compare their contents
+ * for POJO, 
+ * 		if any custom equality comparator can handle it, then use it;
+ * 		if it has an equals() method defined, use it.
+ * 		or compare their non-transient accessible fields by reflection.
+ * @author fangzhen
+ *
+ */
 public class EqualityVisitor extends AbstractObjectVisitor{
-	private static final Log __log = LogFactory.getLog(TraverseObject.class);
+	private static final Log __log = LogFactory.getLog(ObjectTraverser.class);
     private List<EqualityComparator> comparators = new LinkedList<EqualityComparator>();
+    /**stack that holds current visit path */
     private Stack<String> st = new Stack<String>();
-    
+    /**object that compared to */
     protected Object other;
     public boolean logFalseThrough = false;
-    public EqualityVisitor(){
-    	
-    }
+
 	public EqualityVisitor(Object other){
 		this.other = other;
 		st.push(":" + other.getClass().getSimpleName());

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java
deleted file mode 100644
index a780837..0000000
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OModelVisitor.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.apache.ode.bpel.obj.migrate;
-
-import org.apache.ode.bpel.obj.ExtensibleImpl;
-
-public interface OModelVisitor {
-
-	void visitExtensibleImpl(ExtensibleImpl extensibleImpl);
-}

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
new file mode 100644
index 0000000..6e48c59
--- /dev/null
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectTraverser.java
@@ -0,0 +1,175 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.util.Arrays;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Traverse an Object with help of an {@link ObjectVisitor}, taking into consideration of cyclic references.
+ * 
+ */
+public class ObjectTraverser{
+    private static final Log __log = LogFactory.getLog(ObjectTraverser.class);
+
+    private HandleTable htab = new HandleTable(1000, 0.8f);
+	private ObjectVisitor visitor;
+	
+	public HandleTable getHtab() {
+		return htab;
+	}
+
+	public void accept(ObjectVisitor visitor){
+		this.visitor = visitor;
+		visitor.setTraverse(this);
+	}
+	public Object traverseObject(Object obj){
+		return traverseObject(obj, true);
+	}
+	
+	/**
+	 * 
+	 * @param obj current object
+	 * @param assign should we record this visit. Usually, this should be true to avoid infinite loop of cyclic reference. 
+	 * Sometime set to false when we need visit an object more than once.
+	 * @return anything the visitor returns.
+	 */
+	public Object traverseObject(Object obj, boolean assign){
+		__log.debug("current object " + obj);
+		if (obj == null) return null;
+		if (htab.lookup(obj) != -1){
+			return visitor.visited(obj);
+		}
+		if (assign) htab.assign(obj);
+		Object n;
+		n = visitor.visit(obj);
+		return n;
+	}
+	
+	/**
+	* Stole from openjdk ObjectOutputStream
+    * Lightweight identity hash table which maps objects to integer handles,
+    * assigned in ascending order.
+    */
+   public static class HandleTable {
+
+       /* number of mappings in table/next available handle */
+       private int size;
+       /* size threshold determining when to expand hash spine */
+       private int threshold;
+       /* factor for computing size threshold */
+       private final float loadFactor;
+       /* maps hash value -> candidate handle value */
+       private int[] spine;
+       /* maps handle value -> next candidate handle value */
+       private int[] next;
+       /* maps handle value -> associated object */
+       private Object[] objs;
+
+       /**
+        * Creates new HandleTable with given capacity and load factor.
+        */
+       HandleTable(int initialCapacity, float loadFactor) {
+           this.loadFactor = loadFactor;
+           spine = new int[initialCapacity];
+           next = new int[initialCapacity];
+           objs = new Object[initialCapacity];
+           threshold = (int) (initialCapacity * loadFactor);
+           clear();
+       }
+
+       /**
+        * Assigns next available handle to given object, and returns handle
+        * value.  Handles are assigned in ascending order starting at 0.
+        */
+       int assign(Object obj) {
+           if (size >= next.length) {
+               growEntries();
+           }
+           if (size >= threshold) {
+               growSpine();
+           }
+           insert(obj, size);
+           return size++;
+       }
+
+       /**
+        * Looks up and returns handle associated with given object, or -1 if
+        * no mapping found.
+        */
+       int lookup(Object obj) {
+           if (size == 0) {
+               return -1;
+           }
+           int index = hash(obj) % spine.length;
+           for (int i = spine[index]; i >= 0; i = next[i]) {
+               if (objs[i] == obj) {
+                   return i;
+               }
+           }
+           return -1;
+       }
+
+       /**
+        * Resets table to its initial (empty) state.
+        */
+       void clear() {
+           Arrays.fill(spine, -1);
+           Arrays.fill(objs, 0, size, null);
+           size = 0;
+       }
+
+       /**
+        * Returns the number of mappings currently in table.
+        */
+       int size() {
+           return size;
+       }
+
+       /**
+        * Inserts mapping object -> handle mapping into table.  Assumes table
+        * is large enough to accommodate new mapping.
+        */
+       private void insert(Object obj, int handle) {
+           int index = hash(obj) % spine.length;
+           objs[handle] = obj;
+           next[handle] = spine[index];
+           spine[index] = handle;
+       }
+
+       /**
+        * Expands the hash "spine" -- equivalent to increasing the number of
+        * buckets in a conventional hash table.
+        */
+       private void growSpine() {
+           spine = new int[(spine.length << 1) + 1];
+           threshold = (int) (spine.length * loadFactor);
+           Arrays.fill(spine, -1);
+           for (int i = 0; i < size; i++) {
+               insert(objs[i], i);
+           }
+       }
+
+       /**
+        * Increases hash table capacity by lengthening entry arrays.
+        */
+       private void growEntries() {
+           int newLength = (next.length << 1) + 1;
+           int[] newNext = new int[newLength];
+           System.arraycopy(next, 0, newNext, 0, size);
+           next = newNext;
+
+           Object[] newObjs = new Object[newLength];
+           System.arraycopy(objs, 0, newObjs, 0, size);
+           objs = newObjs;
+       }
+
+       /**
+        * Returns hash value for given object.
+        */
+       private int hash(Object obj) {
+           return System.identityHashCode(obj) & 0x7FFFFFFF;
+       }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
index 972697f..fd18807 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
@@ -1,14 +1,24 @@
 package org.apache.ode.bpel.obj.migrate;
 
+/**
+ * Object visitor used when traverse an object.
+ * @author fangzhen
+ *
+ */
 public interface ObjectVisitor {
-
+	/**
+	 * Operation if obj has been visited before 
+	 * @return we may need to return new object corresponding to the visiting object.
+	 */
 	Object visited(Object obj);
 
+	/**
+	 * Operation when obj is first visited or its former wasn't recorded.
+	 * @return we may need to return new object corresponding to the visiting object.
+	 */
 	Object visit(Object obj);
 
-	void setTraverse(TraverseObject traverseObject);
-
+	void setTraverse(ObjectTraverser traverseObject);
 	void addCustomVisitor(Class cls, ObjectVisitor visitor);
-
-	TraverseObject getTraverse();
+	ObjectTraverser getTraverse();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
index 432e2df..418c2af 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
@@ -16,6 +16,11 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.obj.ExtensibleImpl;
 
+/**
+ * Migrate from old Omodel classes to new ones.
+ * @author fangzhen
+ *
+ */
 public class OmOld2new extends AbstractObjectVisitor{
     private static final Log __log = LogFactory.getLog(OmOld2new.class);
     
@@ -30,6 +35,13 @@ public class OmOld2new extends AbstractObjectVisitor{
 	public Object visit(Object obj){
 		__log.debug("migrating object: " + obj.getClass() + "@" + System.identityHashCode(obj));
 		Object n;
+		/*
+		 * we use two category of visitXXX methods here. The first  visitXXX(Object) 
+		 * return corresponding new object instance without fulfilling its contents, 
+		 * which avoids recursively call. And then assign the new object. then fill contents.
+		 * other wise, on cyclic reference case, the object re-visited but hasn't prepared yet.
+		 * However, this workaround assumes that the new object is mutable, which is true in our case.
+		 */
 		if (isMap(obj)){
 			n = visitMap(obj);
 		}else if (isCollection(obj)){
@@ -61,7 +73,8 @@ public class OmOld2new extends AbstractObjectVisitor{
 
 	private boolean isOmodelBean(Object old){
 		Class<?> cls = old.getClass();
-		if (beanPkgMap.containsKey(cls.getPackage().getName()) && !cls.getSimpleName().equals("Serializer")){
+		if (beanPkgMap.containsKey(cls.getPackage().getName()) &&
+				!cls.getSimpleName().equals("Serializer")){
 			return true;
 		}
 		return false;
@@ -158,7 +171,8 @@ public class OmOld2new extends AbstractObjectVisitor{
 					fieldMap.put(fname, null);
 				}
 			} catch (Exception e) {
-				RuntimeException rte = new RuntimeException("Error when try to construct corresponding new Omodel class from old one:"
+				RuntimeException rte = new RuntimeException(
+						"Error when try to construct corresponding new Omodel class from old one:"
 						+old.getClass() + "; Failed on field:" + f.getName());
 				rte.initCause(e);
 				throw rte;
@@ -188,7 +202,9 @@ public class OmOld2new extends AbstractObjectVisitor{
 			cons.setAccessible(true);
 			return cons.newInstance();
 		} catch (Exception e) {
-			RuntimeException rte = new RuntimeException("Error when try to initiate corresponding new Omodel class of old one:"+old.getClass());
+			RuntimeException rte = new RuntimeException(
+					"Error when try to initiate corresponding new Omodel class of old one:"
+							+ old.getClass());
 			rte.initCause(e);
 			throw rte;
 		}

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
deleted file mode 100644
index 260ce92..0000000
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.apache.ode.bpel.obj.migrate;
-
-import java.util.Arrays;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-public class TraverseObject{
-    private static final Log __log = LogFactory.getLog(TraverseObject.class);
-
-    private HandleTable htab = new HandleTable(1000, 0.8f);
-	private ObjectVisitor visitor;
-	
-	public HandleTable getHtab() {
-		return htab;
-	}
-
-	public TraverseObject(){
-	}
-	public void accept(ObjectVisitor visitor){
-		this.visitor = visitor;
-		visitor.setTraverse(this);
-	}
-	public Object traverseObject(Object obj){
-		return traverseObject(obj, true);
-	}
-	public Object traverseObject(Object obj, boolean assign){
-		__log.debug("current object " + obj);
-		if (obj == null) return null;
-		if (htab.lookup(obj) != -1){
-			return visitor.visited(obj);
-		}
-		if (assign) htab.assign(obj);
-		Object n;
-		n = visitor.visit(obj);
-		return n;
-	}
-	
-	/**
-	* Stole from openjdk OOS
-    * Lightweight identity hash table which maps objects to integer handles,
-    * assigned in ascending order.
-    */
-   public static class HandleTable {
-
-       /* number of mappings in table/next available handle */
-       private int size;
-       /* size threshold determining when to expand hash spine */
-       private int threshold;
-       /* factor for computing size threshold */
-       private final float loadFactor;
-       /* maps hash value -> candidate handle value */
-       private int[] spine;
-       /* maps handle value -> next candidate handle value */
-       private int[] next;
-       /* maps handle value -> associated object */
-       private Object[] objs;
-
-       /**
-        * Creates new HandleTable with given capacity and load factor.
-        */
-       HandleTable(int initialCapacity, float loadFactor) {
-           this.loadFactor = loadFactor;
-           spine = new int[initialCapacity];
-           next = new int[initialCapacity];
-           objs = new Object[initialCapacity];
-           threshold = (int) (initialCapacity * loadFactor);
-           clear();
-       }
-
-       /**
-        * Assigns next available handle to given object, and returns handle
-        * value.  Handles are assigned in ascending order starting at 0.
-        */
-       int assign(Object obj) {
-           if (size >= next.length) {
-               growEntries();
-           }
-           if (size >= threshold) {
-               growSpine();
-           }
-           insert(obj, size);
-           return size++;
-       }
-
-       /**
-        * Looks up and returns handle associated with given object, or -1 if
-        * no mapping found.
-        */
-       int lookup(Object obj) {
-           if (size == 0) {
-               return -1;
-           }
-           int index = hash(obj) % spine.length;
-           for (int i = spine[index]; i >= 0; i = next[i]) {
-               if (objs[i] == obj) {
-                   return i;
-               }
-           }
-           return -1;
-       }
-
-       /**
-        * Resets table to its initial (empty) state.
-        */
-       void clear() {
-           Arrays.fill(spine, -1);
-           Arrays.fill(objs, 0, size, null);
-           size = 0;
-       }
-
-       /**
-        * Returns the number of mappings currently in table.
-        */
-       int size() {
-           return size;
-       }
-
-       /**
-        * Inserts mapping object -> handle mapping into table.  Assumes table
-        * is large enough to accommodate new mapping.
-        */
-       private void insert(Object obj, int handle) {
-           int index = hash(obj) % spine.length;
-           objs[handle] = obj;
-           next[handle] = spine[index];
-           spine[index] = handle;
-       }
-
-       /**
-        * Expands the hash "spine" -- equivalent to increasing the number of
-        * buckets in a conventional hash table.
-        */
-       private void growSpine() {
-           spine = new int[(spine.length << 1) + 1];
-           threshold = (int) (spine.length * loadFactor);
-           Arrays.fill(spine, -1);
-           for (int i = 0; i < size; i++) {
-               insert(objs[i], i);
-           }
-       }
-
-       /**
-        * Increases hash table capacity by lengthening entry arrays.
-        */
-       private void growEntries() {
-           int newLength = (next.length << 1) + 1;
-           int[] newNext = new int[newLength];
-           System.arraycopy(next, 0, newNext, 0, size);
-           next = newNext;
-
-           Object[] newObjs = new Object[newLength];
-           System.arraycopy(objs, 0, newObjs, 0, size);
-           objs = newObjs;
-       }
-
-       /**
-        * Returns hash value for given object.
-        */
-       private int hash(Object obj) {
-           return System.identityHashCode(obj) & 0x7FFFFFFF;
-       }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
index 4509ed1..2b8bad6 100644
--- a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
+++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
@@ -24,7 +24,7 @@ public class DeepEqualityTest {
 		List<String> ls2 = new ArrayList<String>();
 		ls2.add("Hello");
 		ls2.add("world");
-		TraverseObject traverse = new TraverseObject();
+		ObjectTraverser traverse = new ObjectTraverser();
 		EqualityVisitor visitor = new EqualityVisitor(ls2);
 		traverse.accept(visitor);
 		assertEquals(Boolean.TRUE, traverse.traverseObject(ls1));
@@ -43,7 +43,7 @@ public class DeepEqualityTest {
 		s2.add("world");
 		s2.add("hello");
 		
-		TraverseObject traverse = new TraverseObject();
+		ObjectTraverser traverse = new ObjectTraverser();
 		EqualityVisitor visitor = new EqualityVisitor(s2);
 		traverse.accept(visitor);
 		assertEquals(Boolean.TRUE, traverse.traverseObject(s1));
@@ -60,7 +60,7 @@ public class DeepEqualityTest {
 		m2.put("item1", "string1");
 		m2.put("item2", new ArrayList());
 
-		TraverseObject traverse = new TraverseObject();
+		ObjectTraverser traverse = new ObjectTraverser();
 		EqualityVisitor visitor = new EqualityVisitor(m2);
 		traverse.accept(visitor);
 		assertEquals(Boolean.TRUE, traverse.traverseObject(m1));
@@ -83,7 +83,7 @@ public class DeepEqualityTest {
 		DebugInfo d2 = new DebugInfo("/a/path", 0, 1, m2);
 		m2.put("cylic", d2);
 
-		TraverseObject traverse = new TraverseObject();
+		ObjectTraverser traverse = new ObjectTraverser();
 		EqualityVisitor visitor = new EqualityVisitor(d2);
 		visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor));
 		traverse.accept(visitor);

http://git-wip-us.apache.org/repos/asf/ode/blob/a04b2e90/bpel-nobj/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/test/resources/log4j.properties b/bpel-nobj/src/test/resources/log4j.properties
index 2b02abc..f50576a 100644
--- a/bpel-nobj/src/test/resources/log4j.properties
+++ b/bpel-nobj/src/test/resources/log4j.properties
@@ -1,4 +1,4 @@
-log4j.rootLogger=DEBUG, file, stdout
+log4j.rootLogger=DEBUG, file
 
 # Console appender
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender