[jbpm-commits] JBoss JBPM SVN: r7048 - in jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src: main/java/org/jbpm/context/exe/converter and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Nov 15 09:59:02 EST 2011


Author: mputz
Date: 2011-11-15 09:59:02 -0500 (Tue, 15 Nov 2011)
New Revision: 7048

Modified:
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteArray.java
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/converter/SerializableToByteArrayConverter.java
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/bytes/ByteArrayDbTest.java
   jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/context/exe/MySerializableClass.java
Log:
SOA-3589: Backport changes to ByteArray / ByteBlock update handling (r7044, r7045, r7046) to jBPM 3.2.10

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteArray.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteArray.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteArray.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -66,6 +66,18 @@
     this.name = other.name;
   }
 
+  public void update(ByteArray value) {
+    List otherByteBlocks = (value != null ? value.getByteBlocks() : null);
+    // Different than constructor:
+    // 1. clear to empty list. 
+    this.byteBlocks.clear();
+    if (otherByteBlocks != null) {
+      // 2. use addAll in order to work as much as possible with JPA/ORM 
+      this.byteBlocks.addAll(otherByteBlocks);
+    }
+    this.name = (value != null ? value.name : null );
+  }
+  
   public byte[] getBytes() {
     return ByteBlockChopper.glueChopsBackTogether(byteBlocks);
   }
@@ -108,4 +120,6 @@
   public List getByteBlocks() {
     return byteBlocks;
   }
+
+
 }

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -59,7 +59,8 @@
       }
       else if (byteCount > 0) {
         if (log.isTraceEnabled()) log.trace("no need to chop " + byteCount + " bytes");
-        bytes = Collections.singletonList(byteArray);
+        bytes = new ArrayList(1);
+        bytes.add(byteArray);
       }
     }
     return bytes;
@@ -79,6 +80,8 @@
       int blockCount = byteBlocks.size();
       switch (blockCount) {
       case 0:
+        // NPE's are never nice
+        byteArray = new byte [0];
         break;
       case 1:
         byteArray = (byte[]) byteBlocks.get(0);

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/converter/SerializableToByteArrayConverter.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/converter/SerializableToByteArrayConverter.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/converter/SerializableToByteArrayConverter.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -78,17 +78,22 @@
 
   public Object revert(Object o, final ProcessDefinition processDefinition) {
     ByteArray byteArray = (ByteArray) o;
-    InputStream memoryStream = new ByteArrayInputStream(byteArray.getBytes());
-    try {
-      ObjectInputStream objectStream = new CustomLoaderObjectInputStream(memoryStream,
-        JbpmConfiguration.getProcessClassLoader(processDefinition));
-      return objectStream.readObject();
+    if( byteArray.getBytes().length > 0 ) { 
+      InputStream memoryStream = new ByteArrayInputStream(byteArray.getBytes());
+      try {
+        ObjectInputStream objectStream = new CustomLoaderObjectInputStream(memoryStream,
+          JbpmConfiguration.getProcessClassLoader(processDefinition));
+        return objectStream.readObject();
+      }
+      catch (IOException e) {
+        throw new JbpmException("failed to deserialize object", e);
+      }
+      catch (ClassNotFoundException e) {
+        throw new JbpmException("serialized class not found", e);
+      }
     }
-    catch (IOException e) {
-      throw new JbpmException("failed to deserialize object", e);
+    else { 
+      return null;
     }
-    catch (ClassNotFoundException e) {
-      throw new JbpmException("serialized class not found", e);
-    }
   }
 }

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -21,6 +21,7 @@
  */
 package org.jbpm.context.exe.variableinstance;
 
+import org.hibernate.LockMode;
 import org.hibernate.Session;
 import org.jbpm.JbpmContext;
 import org.jbpm.bytes.ByteArray;
@@ -45,15 +46,26 @@
     if (token != null) {
       token.addLog(new ByteArrayUpdateLog(this, this.value, (ByteArray) value));
     }
-    // delete old value, otherwise it will be unreachable
     if (this.value != null) {
       JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+      ByteArray valueToUpdate = null;
       if (jbpmContext != null) {
         Session session = jbpmContext.getSession();
-        if (session != null) session.delete(this.value);
+        if (session != null) { 
+          valueToUpdate = (ByteArray) session.get(ByteArray.class, new Long(this.value.getId()), LockMode.UPGRADE);
+          if( valueToUpdate != null ) { 
+            valueToUpdate.update((ByteArray) value);
+          }
+        }
       }
+     
+      // if for some reason, this.value is NOT in the (hibernate) session, update it anyway. 
+      if( valueToUpdate == null ) { 
+        this.value.update((ByteArray) value);
+      }
     }
-    // set new value
-    this.value = (ByteArray) value;
+    else { 
+      this.value = (ByteArray) value;
+    }
   }
 }

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/bytes/ByteArrayDbTest.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/bytes/ByteArrayDbTest.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/bytes/ByteArrayDbTest.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -49,7 +49,7 @@
     newTransaction();
     ByteArray retrievedByteArray = (ByteArray) session.load(ByteArray.class, new Long(
         byteArray.getId()));
-    assertNull(retrievedByteArray.getBytes());
+    assertTrue(retrievedByteArray.getBytes().length == 0);
 
     session.delete(retrievedByteArray);
   }
@@ -91,7 +91,7 @@
     newTransaction();
     ByteArray retrievedByteArray = (ByteArray) session.load(ByteArray.class, new Long(
         byteArray.getId()));
-    assertNull(retrievedByteArray.getBytes());
+    assertTrue(retrievedByteArray.getBytes().length == 0);
 
     session.delete(retrievedByteArray);
   }

Modified: jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/context/exe/MySerializableClass.java
===================================================================
--- jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/context/exe/MySerializableClass.java	2011-11-15 14:23:46 UTC (rev 7047)
+++ jbpm3/tags/jbpm-3.2.10_SOA-3030_SOA-3589/core/src/test/java/org/jbpm/context/exe/MySerializableClass.java	2011-11-15 14:59:02 UTC (rev 7048)
@@ -28,7 +28,7 @@
   private static final long serialVersionUID = 1L;
   int member;
 
-  MySerializableClass(int member) {
+  public MySerializableClass(int member) {
     this.member = member;
   }
 



More information about the jbpm-commits mailing list