[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