[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