[jbpm-commits] JBoss JBPM SVN: r5109 - in jbpm4/trunk/modules: pvm/src/main/java/org/jbpm/pvm/internal/cmd and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Jun 25 04:23:18 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-06-25 04:23:17 -0400 (Thu, 25 Jun 2009)
New Revision: 5109

Modified:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SuspendDeploymentCmd.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessDefinitionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeployerManager.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/deploy/SuspendDeploymentTest.java
Log:
JBPM-2355 fixed handling of suspended deployments

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/repository/JpdlDeployer.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -62,6 +62,8 @@
         if ((processDefinition != null) && (processDefinition.getName() != null)) {
           String processDefinitionName = processDefinition.getName();
           
+          processDefinition.setSuspended(deployment.isSuspended());
+          
           String imageResourceName = resourceName.substring(0, resourceName.lastIndexOf(".jpdl.xml"))+".png";
           if (deployment.getResourceNames().contains(imageResourceName)) {
             processDefinition.setImageResourceName(imageResourceName);

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SuspendDeploymentCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SuspendDeploymentCmd.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SuspendDeploymentCmd.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -21,9 +21,11 @@
  */
 package org.jbpm.pvm.internal.cmd;
 
-import org.hibernate.Session;
+import org.jbpm.api.JbpmException;
 import org.jbpm.pvm.internal.env.Environment;
 import org.jbpm.pvm.internal.repository.DeploymentImpl;
+import org.jbpm.pvm.internal.repository.RepositoryCache;
+import org.jbpm.pvm.internal.session.DbSession;
 
 
 /**
@@ -40,9 +42,20 @@
   }
 
   public Object execute(Environment environment) throws Exception {
-    Session session = environment.get(Session.class);
-    DeploymentImpl deployment = (DeploymentImpl) session.load(DeploymentImpl.class, deploymentDbid);
+    DbSession dbSession = environment.get(DbSession.class);
+    DeploymentImpl deployment = (DeploymentImpl) dbSession.get(DeploymentImpl.class, deploymentDbid);
+    if (deployment==null) {
+      throw new JbpmException("deployment "+deploymentDbid+" doesn't exist");
+    }
     deployment.suspend();
+    
+    // removing deployment from the cache
+    // next time it's used, it will be redeployed
+    // at that time, the suspended property will be propagated to the 
+    // process definitions
+    RepositoryCache repositoryCache = environment.get(RepositoryCache.class);
+    repositoryCache.remove(deploymentDbid);
+    
     return null;
   }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -406,6 +406,9 @@
 
   public void signal(String signal, Map<String, ?> parameters) {
     checkActive();
+    if (getProcessDefinition().isSuspended()) {
+      throw new JbpmException("process definition "+getProcessDefinition().getId()+" is suspended");
+    }
     propagation = Propagation.EXPLICIT;
     if (getActivity()!=null) {
       performAtomicOperation(new Signal(signal, parameters));

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessDefinitionImpl.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ProcessDefinitionImpl.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -26,6 +26,7 @@
 import java.util.Map;
 
 import org.jbpm.api.Execution;
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.model.OpenProcessDefinition;
 import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.client.ClientProcessDefinition;
@@ -65,6 +66,9 @@
   /** ref to the deployment */
   protected long deploymentDbid;
   
+  /** propagated from deployment to process definition during deploy */
+  protected boolean isSuspended = false;
+  
   /** the activity which is executed when the process starts */
   protected ActivityImpl initial;
   
@@ -88,6 +92,10 @@
   }
 
   public ClientProcessInstance createProcessInstance(String key, Execution superProcessExecution) {
+    if (isSuspended) {
+      throw new JbpmException("process definition "+id+" is suspended");
+    }
+    
     ExecutionImpl processInstance = newProcessInstance();
     log.debug("creating new execution for process '"+name+"'");
     if (superProcessExecution!=null) {
@@ -198,4 +206,10 @@
   public void setImageResourceName(String imageResourceName) {
     this.imageResourceName = imageResourceName;
   }
+  public boolean isSuspended() {
+    return isSuspended;
+  }
+  public void setSuspended(boolean isSuspended) {
+    this.isSuspended = isSuspended;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeployerManager.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeployerManager.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeployerManager.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -21,19 +21,38 @@
  */
 package org.jbpm.pvm.internal.repository;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.jbpm.api.JbpmException;
+import org.jbpm.api.Problem;
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.env.Environment;
 
+
 /**
  * @author Tom Baeyens
  */
 public class DeployerManager {
   
+  private static Log log = Log.getLog(DeployerManager.class.getName());
+  
   List<Deployer> deployers;
   
   public void deploy(DeploymentImpl deployment) {
+    deployment.setProblems(new ArrayList<Problem>());
+
     for (Deployer deployer: deployers) {
       deployer.deploy(deployment);
     }
+    
+    if (deployment.hasErrors()) {
+      JbpmException jbpmException = deployment.getJbpmException();
+      log.info("errors during deployment of "+deployment+": "+jbpmException.getMessage());
+      throw  jbpmException;
+    }
+    
+    RepositoryCache repositoryCache = Environment.getFromCurrent(RepositoryCache.class);
+    repositoryCache.set(deployment.getDbid(), deployment.getObjects());
   }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -248,22 +248,28 @@
     if (isSuspended()) {
       throw new JbpmException("deployment is already suspended");
     }
-    RepositorySessionImpl repositorySession = Environment.getFromCurrent(RepositorySessionImpl.class, false);
-    if (repositorySession!=null) {
-      repositorySession.cascadeDeploymentSuspend(this);
-    }
+    
     state = Deployment.STATE_SUSPENDED;
+
+    RepositorySessionImpl repositorySession = Environment.getFromCurrent(RepositorySessionImpl.class);
+    repositorySession.cascadeDeploymentSuspend(this);
+
+    RepositoryCache repositoryCache = Environment.getFromCurrent(RepositoryCache.class);
+    repositoryCache.remove(dbid);
   }
 
   public void resume() {
     if (!isSuspended()) {
       throw new JbpmException("deployment is not suspended");
     }
-    RepositorySessionImpl repositorySession = Environment.getFromCurrent(RepositorySessionImpl.class, false);
-    if (repositorySession!=null) {
-      repositorySession.cascadeDeploymentResume(this);
-    }
-    state = Deployment.STATE_ACTIVE; 
+    
+    state = Deployment.STATE_ACTIVE;
+    
+    RepositorySessionImpl repositorySession = Environment.getFromCurrent(RepositorySessionImpl.class);
+    repositorySession.cascadeDeploymentResume(this);
+    
+    RepositoryCache repositoryCache = Environment.getFromCurrent(RepositoryCache.class);
+    repositoryCache.remove(dbid);
   }
   
   public boolean isSuspended() {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/RepositorySessionImpl.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -21,15 +21,14 @@
  */
 package org.jbpm.pvm.internal.repository;
 
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
 import org.hibernate.Query;
 import org.hibernate.Session;
-import org.jbpm.api.NewDeployment;
 import org.jbpm.api.JbpmException;
+import org.jbpm.api.NewDeployment;
 import org.jbpm.api.Problem;
 import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessDefinitionQuery;
@@ -52,20 +51,11 @@
 
   public long deploy(NewDeployment deployment) {
     DeploymentImpl deploymentImpl = (DeploymentImpl) deployment;
+    
     session.save(deploymentImpl);
     
-    deploymentImpl.setProblems(new ArrayList<Problem>());
-
     deployerManager.deploy(deploymentImpl);
 
-    if (deploymentImpl.hasErrors()) {
-      JbpmException jbpmException = deploymentImpl.getJbpmException();
-      log.info("errors during deployment of "+deployment+": "+jbpmException.getMessage());
-      throw  jbpmException;
-    } else {
-      repositoryCache.set(deploymentImpl.getDbid(), deploymentImpl.getObjects());
-    }
-
     return deploymentImpl.getDbid();
   }
   
@@ -111,8 +101,6 @@
         execution.resume();
       }
     }
-
-    deploy(deployment);
   }
 
   public DeploymentImpl getDeployment(long deploymentDbid) {
@@ -127,10 +115,7 @@
     } else {
       log.trace("loading deployment "+deploymentDbid+" from db");
       DeploymentImpl deployment = (DeploymentImpl) session.load(DeploymentImpl.class, deploymentDbid);
-      if (deployment.isSuspended()) {
-        throw new JbpmException("deployment "+deploymentDbid+" is suspended");
-      }
-      deploy(deployment);
+      deployerManager.deploy(deployment);
       object = repositoryCache.get(deploymentDbid, objectName);
       if (object==null) {
         throw new JbpmException("deployment "+deploymentDbid+" doesn't contain object "+objectName);

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/deploy/SuspendDeploymentTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/deploy/SuspendDeploymentTest.java	2009-06-25 05:42:54 UTC (rev 5108)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/deploy/SuspendDeploymentTest.java	2009-06-25 08:23:17 UTC (rev 5109)
@@ -134,6 +134,49 @@
     assertEquals(6, processInstances.size());
   }
 
+  public void testQuerySuspendDeployments() {
+    deployJpdlXmlString(
+      "<process name='claim'>" +
+      "  <start>" +
+      "    <transition to='c' />" +
+      "  </start>" +
+      "  <state name='c' />" +
+      "</process>"
+    );
+
+    long deploymentHireDbid = deployJpdlXmlString(
+      "<process name='hire'>" +
+      "  <start>" +
+      "    <transition to='h' />" +
+      "  </start>" +
+      "  <state name='h' />" +
+      "</process>"
+    );
+
+    long deploymentFireDbid = deployJpdlXmlString(
+      "<process name='fire'>" +
+      "  <start>" +
+      "    <transition to='f' />" +
+      "  </start>" +
+      "  <state name='f' />" +
+      "</process>"
+    );
+    
+    repositoryService.suspendDeployment(deploymentHireDbid);
+    repositoryService.suspendDeployment(deploymentFireDbid);
+
+    List<ProcessDefinition> processDefinitions = repositoryService
+      .createProcessDefinitionQuery()
+      .suspended()
+      .list();
+    
+    Set<String> expectedProcessNames = new HashSet<String>();
+    expectedProcessNames.add("hire");
+    expectedProcessNames.add("fire");
+
+    assertEquals(expectedProcessNames, getProcessDefinitionNames(processDefinitions));
+  }
+
   int countProcessInstancesFor(List<ProcessInstance> processInstances, String processDefinitionKey) {
     int count = 0;
     for (Execution processInstance: processInstances) {




More information about the jbpm-commits mailing list