[jbpm-commits] JBoss JBPM SVN: r6741 - in jbpm4/trunk/modules: pvm/src/main/java/org/jbpm/pvm/internal/util and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Oct 5 05:27:03 EDT 2010
Author: rebody
Date: 2010-10-05 05:27:02 -0400 (Tue, 05 Oct 2010)
New Revision: 6741
Added:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/variables/DeploymentSerializeTest.java
jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/test/variables/DeploymentSerializeTest.jpdl.xml
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentObjectInputStream.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
Log:
JBPM-2929 fixed deployment classloader class cast issue.
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentObjectInputStream.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentObjectInputStream.java 2010-10-05 08:42:00 UTC (rev 6740)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentObjectInputStream.java 2010-10-05 09:27:02 UTC (rev 6741)
@@ -52,8 +52,7 @@
catch (ClassNotFoundException e) {
// trying to get it from deployment
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
- ClassLoader deploymentClassLoader =
- new DeploymentClassLoader(contextClassLoader, deploymentId);
+ ClassLoader deploymentClassLoader = ReflectUtil.getDeploymentClassLoader(deploymentId, contextClassLoader);
return Class.forName(desc.getName(), false, deploymentClassLoader);
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java 2010-10-05 08:42:00 UTC (rev 6740)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java 2010-10-05 09:27:02 UTC (rev 6741)
@@ -393,16 +393,20 @@
Thread currentThread = Thread.currentThread();
ClassLoader original = currentThread.getContextClassLoader();
+ DeploymentClassLoader deploymentClassLoader = getDeploymentClassLoader(deploymentId, original);
+ currentThread.setContextClassLoader(deploymentClassLoader);
+
+ return original;
+ }
+
+ public static DeploymentClassLoader getDeploymentClassLoader(String deploymentId, ClassLoader original) {
RepositoryCache repositoryCache = EnvironmentImpl.getFromCurrent(RepositoryCache.class);
DeploymentClassLoader deploymentClassLoader = repositoryCache.getDeploymentClassLoader(deploymentId, original);
if (deploymentClassLoader == null) {
deploymentClassLoader = new DeploymentClassLoader(original, deploymentId);
repositoryCache.setDeploymentClassLoader(deploymentId, original, deploymentClassLoader);
}
-
- currentThread.setContextClassLoader(deploymentClassLoader);
-
- return original;
+ return deploymentClassLoader;
}
public static void uninstallDeploymentClassLoader(ClassLoader original) {
Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/variables/DeploymentSerializeTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/variables/DeploymentSerializeTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/variables/DeploymentSerializeTest.java 2010-10-05 09:27:02 UTC (rev 6741)
@@ -0,0 +1,156 @@
+package org.jbpm.test.variables;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.List;
+
+import org.codehaus.janino.DebuggingInformation;
+import org.codehaus.janino.util.StringPattern;
+import org.codehaus.janino.util.enumerator.EnumeratorSet;
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.task.Task;
+import org.jbpm.test.JbpmTestCase;
+
+public class DeploymentSerializeTest extends JbpmTestCase {
+ private File targetDir;
+ private String deploymentId;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ this.targetDir = new File("target/generated/org/jbpm/test/variables");
+
+ generateClasses();
+
+ this.deploymentId = repositoryService.createDeployment()
+ .addResourceFromClasspath("org/jbpm/test/variables/DeploymentSerializeTest.jpdl.xml")
+ .addResourceFromInputStream("org/jbpm/test/variables/DeploymentSerializeBean.class", new FileInputStream(new File(targetDir, "DeploymentSerializeBean.class")))
+ .addResourceFromInputStream("org/jbpm/test/variables/DeploymentSerializeCustom1.class", new FileInputStream(new File(targetDir, "DeploymentSerializeCustom1.class")))
+ .addResourceFromInputStream("org/jbpm/test/variables/DeploymentSerializeCustom2.class", new FileInputStream(new File(targetDir, "DeploymentSerializeCustom2.class")))
+ .deploy();
+ }
+
+ protected void tearDown() throws Exception {
+ repositoryService.deleteDeploymentCascade(deploymentId);
+ super.tearDown();
+ }
+
+ public void testDeploymentVariableSerialization() {
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("DeploymentSerializeTest");
+ String processInstanceId = processInstance.getId();
+
+ List<Task> tasks = taskService.findPersonalTasks("alex");
+ assertTrue(tasks.size() == 1);
+ Task task = tasks.get(0);
+
+ assertNotNull(taskService.getVariable(task.getId(), "bean"));
+ assertNotNull(executionService.getVariable(processInstanceId, "bean"));
+ assertEquals(executionService.getVariable(processInstanceId, "bean").toString(), "DeploymentSerializeBean[value=42]");
+
+ taskService.completeTask(task.getId());
+ }
+
+ private void generateClasses() {
+ try {
+ if (!targetDir.exists()) {
+ targetDir.mkdirs();
+ }
+
+ File[] sourceFiles = {
+ writeFile(targetDir, "DeploymentSerializeBean.java", getBeanSource()),
+ writeFile(targetDir, "DeploymentSerializeCustom1.java", getCustom1Source()),
+ writeFile(targetDir, "DeploymentSerializeCustom2.java", getCustom2Source()),
+ };
+
+ compileClasses(sourceFiles);
+ }
+ catch (Exception e) {
+ log.error("Error while creating additional resources", e);
+ }
+ }
+
+ /**
+ * This method is used to generate classes that will be used within a process but should not be
+ * on class path while executing process but retrieved from db.
+ *
+ * Uses Janinio to compile the sources.
+ */
+ private void compileClasses(File[] sourceFiles) throws Exception {
+ log.debug("Inside compileClasses method");
+
+ File destinationDirectory = org.codehaus.janino.Compiler.NO_DESTINATION_DIRECTORY;
+ File[] optionalSourcePath = null;
+ File[] classPath = { new File("."), new File("../api/target/classes") };
+ File[] optionalExtDirs = null;
+ File[] optionalBootClassPath = null;
+ String optionalCharacterEncoding = null;
+ boolean verbose = false;
+ EnumeratorSet debuggingInformation = DebuggingInformation.DEFAULT_DEBUGGING_INFORMATION;
+ StringPattern[] warningHandlePatterns = org.codehaus.janino.Compiler.DEFAULT_WARNING_HANDLE_PATTERNS;
+ boolean rebuild = false;
+
+ log.debug("About to run Janinio compiler");
+
+ org.codehaus.janino.Compiler javac = new org.codehaus.janino.Compiler(optionalSourcePath, classPath, optionalExtDirs, optionalBootClassPath,
+ destinationDirectory, optionalCharacterEncoding, verbose, debuggingInformation, warningHandlePatterns, rebuild);
+ javac.compile(sourceFiles);
+
+ log.debug("Class compiled successfully");
+ }
+
+ private File writeFile(File directory, String filename, String content) throws Exception {
+ File sourceFile = new File(directory, filename);
+ FileWriter writer = new FileWriter(sourceFile);
+ writer.write(content);
+ writer.close();
+
+ log.debug("Source file '" + filename + "' created in '" + directory.getAbsolutePath() + "'");
+
+ return sourceFile;
+ }
+
+ private String getBeanSource() {
+ StringBuffer source = new StringBuffer();
+ source.append("package org.jbpm.test.variables;\n");
+ source.append("import java.io.Serializable;\n");
+ source.append("public class DeploymentSerializeBean implements Serializable {\n");
+ source.append(" private int value;\n");
+ source.append(" public int getValue() { return value; }\n");
+ source.append(" public void setValue(int value) { this.value = value; }\n");
+ source.append(" public String toString() { return \"DeploymentSerializeBean[value=\" + value + \"]\"; }\n");
+ source.append("}\n");
+ return source.toString();
+ }
+
+ private String getCustom1Source() {
+ StringBuffer source = new StringBuffer();
+ source.append("package org.jbpm.test.variables;\n");
+ source.append("import org.jbpm.api.activity.ActivityBehaviour;\n");
+ source.append("import org.jbpm.api.activity.ActivityExecution;\n");
+ source.append("public class DeploymentSerializeCustom1 implements ActivityBehaviour {\n");
+ source.append(" public void execute(ActivityExecution execution) throws Exception {\n");
+ source.append(" DeploymentSerializeBean bean = new DeploymentSerializeBean();\n");
+ source.append(" bean.setValue(42);\n");
+ source.append(" execution.setVariable(\"bean\", bean);\n");
+ source.append(" }\n");
+ source.append("}\n");
+ return source.toString();
+ }
+
+ private String getCustom2Source() {
+ StringBuffer source = new StringBuffer();
+ source.append("package org.jbpm.test.variables;\n");
+ source.append("import org.jbpm.api.activity.ActivityBehaviour;\n");
+ source.append("import org.jbpm.api.activity.ActivityExecution;\n");
+ source.append("public class DeploymentSerializeCustom2 implements ActivityBehaviour {\n");
+ source.append(" public void execute(ActivityExecution execution) throws Exception {\n");
+ source.append(" DeploymentSerializeBean bean = (DeploymentSerializeBean)execution.getVariable(\"bean\");\n");
+ source.append(" if (bean.getValue() != 42) {\n");
+ source.append(" throw new Exception(\"Value must be 42!\");\n");
+ source.append(" }\n");
+ source.append(" }\n");
+ source.append("}\n");
+ return source.toString();
+ }
+}
Added: jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/test/variables/DeploymentSerializeTest.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/test/variables/DeploymentSerializeTest.jpdl.xml (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/test/variables/DeploymentSerializeTest.jpdl.xml 2010-10-05 09:27:02 UTC (rev 6741)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<process name="DeploymentSerializeTest" xmlns="http://jbpm.org/4.4/jpdl">
+ <start name="start1">
+ <transition to="custom1"/>
+ </start>
+ <custom name="custom1" class="org.jbpm.test.variables.DeploymentSerializeCustom1">
+ <transition to="task1"/>
+ </custom>
+ <task name="task1" assignee="alex">
+ <transition to="custom2"/>
+ </task>
+ <custom name="custom2" class="org.jbpm.test.variables.DeploymentSerializeCustom2">
+ <transition to="end1"/>
+ </custom>
+ <end name="end1"/>
+</process>
More information about the jbpm-commits
mailing list