JBoss JBPM SVN: r2134 - in jbpm3/trunk/modules: enterprise/scripts and 17 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2008-09-05 20:28:41 -0400 (Fri, 05 Sep 2008)
New Revision: 2134
Added:
jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/test/EventCallback.java
Modified:
jbpm3/trunk/modules/enterprise/pom.xml
jbpm3/trunk/modules/enterprise/scripts/assembly-test-dependencies.xml
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/LocalTimerEntity.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/TimerEntityBean.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerService.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EntitySchedulerService.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/ExecuteTimerCommand.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/LocalTimerService.java
jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/TimerServiceBean.java
jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/ejb-jar.xml
jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/jbosscmp-jdbc.xml
jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerTest.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/db/JobSession.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/graph/node/Join.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/Timer.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/LockMonitorThread.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/jpdl/el/parser/ELParserTokenManager.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/msg/db/DbMessageService.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/SchedulerService.java
jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/db/DbSchedulerService.java
jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/mail/TaskMailTest.java
jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/scheduler/exe/SchedulerTest.java
jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/svc/ServicesTest.java
Log:
[JBPM-1708] rewrote EjbSchedulerTest in terms of monitors instead of sleeping
ensured that timer cancelations would not result in stale state or entity not found exceptions
made improvements to the timer beans and the job objects while trying to figure out why they failed, until realizing the problem described in JBPM-1717
Modified: jbpm3/trunk/modules/enterprise/pom.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/pom.xml 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/pom.xml 2008-09-06 00:28:41 UTC (rev 2134)
@@ -169,9 +169,7 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
- <!-- https://jira.jboss.org/jira/browse/JBPM-1708 -->
- <exclude>org/jbpm/scheduler/ejbtimer/EjbSchedulerTest.java</exclude>
- <!-- https://jira.jboss.org/jira/browse/JBPM-1709 -->
+ <!-- https://jira.jboss.org/jira/browse/JBPM-1717 -->
<exclude>org/jbpm/msg/jms/AsyncProcessingTest.java</exclude>
</excludes>
</configuration>
Modified: jbpm3/trunk/modules/enterprise/scripts/assembly-test-dependencies.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/scripts/assembly-test-dependencies.xml 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/scripts/assembly-test-dependencies.xml 2008-09-06 00:28:41 UTC (rev 2134)
@@ -13,12 +13,12 @@
<outputDirectory>/</outputDirectory>
<useStrictFiltering>true</useStrictFiltering>
<includes>
- <include>*:aspectjrt:jar</include>
- <include>*:cactus.integration.shared.api:jar</include>
- <include>*:cactus.core.framework.wrapper.javaEE.14</include>
- <include>*:cactus.core.framework.javaEE.13-14</include>
- <include>*:cactus.core.framework.javaEE.12-13-14</include>
- <include>*:junit:jar</include>
+ <include>aspectj:aspectjrt:jar</include>
+ <include>org.apache.cactus:cactus.integration.shared.api</include>
+ <include>org.apache.cactus:cactus.core.framework.wrapper.javaEE.14</include>
+ <include>org.apache.cactus:cactus.core.framework.javaEE.13-14</include>
+ <include>org.apache.cactus:cactus.core.framework.javaEE.12-13-14</include>
+ <include>junit:junit</include>
</includes>
<unpack>false</unpack>
<scope>test</scope>
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/LocalTimerEntity.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/LocalTimerEntity.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/LocalTimerEntity.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -4,15 +4,16 @@
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
+import org.jbpm.job.Timer;
public interface LocalTimerEntity extends EJBLocalObject {
- public void cancelTimer();
+ public void createTimer(Timer timer);
- public void createTimer(org.jbpm.job.Timer timer);
+ public void cancelTimer(Timer timer);
public void cancelTimersByName(String timerName, Token token);
- public void deleteTimersForProcessInstance(ProcessInstance processInstance);
+ public void cancelTimersForProcessInstance(ProcessInstance processInstance);
}
\ No newline at end of file
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/ExecuteJobCommand.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -1,5 +1,8 @@
package org.jbpm.ejb.impl;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmContext;
@@ -9,10 +12,10 @@
public class ExecuteJobCommand implements Command {
+ private final long jobId;
+
private static final long serialVersionUID = 1L;
-
- long jobId;
-
+
public ExecuteJobCommand(long jobId) {
this.jobId = jobId;
}
@@ -20,11 +23,19 @@
public Object execute(JbpmContext jbpmContext) throws Exception {
JobSession jobSession = jbpmContext.getJobSession();
Job job = jobSession.loadJob(jobId);
- log.debug("executing job "+jobId);
- if (job.execute(jbpmContext)) {
- log.debug("deleting job "+jobId);
- jobSession.deleteJob(job);
+ job.setLockOwner(getClass().getName()); // prevent others from removing job
+ log.debug("executing " + job);
+ try {
+ if (job.execute(jbpmContext)) {
+ jobSession.deleteJob(job);
+ }
}
+ catch (Exception e) {
+ log.debug("exception while executing " + job, e);
+ StringWriter memoryWriter = new StringWriter();
+ e.printStackTrace(new PrintWriter(memoryWriter));
+ job.setException(memoryWriter.toString());
+ }
return job;
}
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/TimerEntityBean.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/TimerEntityBean.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/ejb/impl/TimerEntityBean.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -74,6 +74,10 @@
public abstract void setProcessInstanceId(Long processInstanceId);
+ public abstract char getDiscriminator();
+
+ public abstract void setDiscriminator(char discriminator);
+
public void ejbActivate() {
try {
Context initial = new InitialContext();
@@ -122,56 +126,70 @@
public void ejbPostCreate() {}
public void ejbTimeout(javax.ejb.Timer ejbTimer) {
- log.debug("ejb timer " + ejbTimer + " fires");
+ log.debug(ejbTimer + " fired");
TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
Timer timer = (Timer) commandService.execute(new ExecuteTimerCommand(timerInfo.getTimerId()));
// if the timer has repeat
- if(timer != null && timer.getRepeat() != null) {
+ if (timer.getRepeat() != null) {
// create a new timer
- log.debug("scheduling timer for repeat at " + timer.getDueDate());
+ log.debug("scheduling timer for repeat on " + timer.getDueDate());
createTimer(timer);
}
}
public void createTimer(org.jbpm.job.Timer timer) {
- log.debug("Creating timer " + timer + " in the ejb timer service");
TimerService timerService = entityContext.getTimerService();
- timerService.createTimer(timer.getDueDate(), new TimerInfo(timer));
+ javax.ejb.Timer ejbTimer = timerService.createTimer(timer.getDueDate(), new TimerInfo(timer));
+ log.debug("created " + ejbTimer);
}
- public void cancelTimer() {
- log.debug("Cancelling timer: " + this.getName());
+ public void cancelTimer(org.jbpm.job.Timer timer) {
+ long timerId = timer.getId();
Collection timers = entityContext.getTimerService().getTimers();
+ log.debug("retrieved " + timers.size() + " ejb timer(s) by id " + timerId);
+
+ int count = 0;
for (Iterator i = timers.iterator(); i.hasNext();) {
javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
- ejbTimer.cancel();
+ TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
+ if (timerInfo.getTimerId() == timerId) {
+ ejbTimer.cancel();
+ ++count;
+ }
}
+ log.debug("canceled " + count + " ejb timer(s) by id " + timerId);
}
public void cancelTimersByName(String timerName, Token token) {
- log.debug("cancelling timers with name " + timerName
- + " from the ejb timer service");
Collection timers = entityContext.getTimerService().getTimers();
+ log.debug("retrieved " + timers.size() + " ejb timer(s) by name '" + timerName + "' for " + token);
+
+ int count = 0;
for (Iterator i = timers.iterator(); i.hasNext();) {
javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
- if(timerInfo.matchesName(timerName, token)) {
+ if (timerInfo.matchesName(timerName, token)) {
ejbTimer.cancel();
+ ++count;
}
}
+ log.debug("canceled " + count + " ejb timer(s) by name '" + timerName + "' for " + token);
}
- public void deleteTimersForProcessInstance(ProcessInstance processInstance) {
- log.debug("deleting timers for process instance " + processInstance
- + " from the ejb timer service");
+ public void cancelTimersForProcessInstance(ProcessInstance processInstance) {
Collection timers = entityContext.getTimerService().getTimers();
+ log.debug("retrieved " + timers.size() + " timer(s) for " + processInstance);
+
+ int count = 0;
for (Iterator i = timers.iterator(); i.hasNext();) {
javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
- if(timerInfo.matchesProcessInstance(processInstance)) {
+ if (timerInfo.matchesProcessInstance(processInstance)) {
ejbTimer.cancel();
+ ++count;
}
}
+ log.debug("canceled " + count + " ejb timer(s) for " + processInstance);
}
}
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerService.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -42,22 +42,28 @@
}
public void createTimer(Timer timer) {
- log.debug("creating timer "+timer);
+ log.debug("creating " + timer);
jobSession.saveJob(timer);
session.flush();
timerService.createTimer(timer);
}
+ public void deleteTimer(Timer timer) {
+ log.debug("deleting " + timer);
+ timerService.cancelTimer(timer);
+ jobSession.deleteJob(timer);
+ }
+
public void deleteTimersByName(String timerName, Token token) {
- log.debug("deleting timers by name "+timerName);
- jobSession.cancelTimersByName(timerName, token);
+ log.debug("deleting timers by name '" + timerName + "' for " + token);
timerService.cancelTimersByName(timerName, token);
+ jobSession.deleteTimersByName(timerName, token);
}
public void deleteTimersByProcessInstance(ProcessInstance processInstance) {
- log.debug("deleting timers for process instance "+processInstance);
+ log.debug("deleting timers for " + processInstance);
+ timerService.cancelTimersForProcessInstance(processInstance);
jobSession.deleteJobsForProcessInstance(processInstance);
- timerService.deleteTimersForProcessInstance(processInstance);
}
public void close() {
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EntitySchedulerService.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EntitySchedulerService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/EntitySchedulerService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -38,7 +38,7 @@
}
public void createTimer(Timer timer) {
- log.debug("creating timer " + timer);
+ log.debug("creating " + timer);
jobSession.saveJob(timer);
session.flush();
try {
@@ -46,42 +46,54 @@
timerEntity.createTimer(timer);
}
catch (FinderException e) {
- log.error("failed to retrieve entity for timer " + timer, e);
+ log.error("failed to retrieve entity for " + timer, e);
}
}
- public void deleteTimersByName(String timerName, Token token) {
- log.debug("deleting timers by name " + timerName);
- Collection timerEntities = null;
+ public void deleteTimer(Timer timer) {
+ log.debug("deleting " + timer);
+ try {
+ LocalTimerEntity timerEntity = timerEntityHome.findByPrimaryKey(new Long(timer.getId()));
+ timerEntity.cancelTimer(timer);
+ }
+ catch (FinderException e) {
+ log.error("failed to retrieve entity for " + timer, e);
+ }
+ jobSession.deleteJob(timer);
+ }
+
+ public void deleteTimersByName(String timerName, Token token) {
try {
+ Collection timerEntities;
if(timerName == null || timerName.equals("")) {
timerEntities = timerEntityHome.findByTokenId(new Long(token.getId()));
}
else {
timerEntities = timerEntityHome.findByTokenIdAndName(new Long(token.getId()), timerName);
}
+ log.debug("found " + timerEntities.size() + " timer entities by name '" + timerName + "' for " + token);
for (Iterator i = timerEntities.iterator(); i.hasNext();) {
LocalTimerEntity timerEntity = (LocalTimerEntity) i.next();
timerEntity.cancelTimersByName(timerName, token);
}
}
catch (FinderException e) {
- log.error("failed to retrieve timer entities for name " + timerName + " and token " + token, e);
+ log.error("failed to retrieve timer entities by name '" + timerName + "' for " + token, e);
}
- jobSession.cancelTimersByName(timerName, token);
+ jobSession.deleteTimersByName(timerName, token);
}
public void deleteTimersByProcessInstance(ProcessInstance processInstance) {
- log.debug("deleting timers for process instance " + processInstance);
try {
Collection timerEntities = timerEntityHome.findByProcessInstanceId(new Long(processInstance.getId()));
+ log.debug("found " + timerEntities.size() + " timer entities for " + processInstance);
for (Iterator i = timerEntities.iterator(); i.hasNext();) {
LocalTimerEntity timerEntity = (LocalTimerEntity) i.next();
- timerEntity.deleteTimersForProcessInstance(processInstance);
+ timerEntity.cancelTimersForProcessInstance(processInstance);
}
}
catch (FinderException e) {
- log.error("failed to retrieve timer entities for process instance " + processInstance, e);
+ log.error("failed to retrieve timer entities for " + processInstance, e);
}
jobSession.deleteJobsForProcessInstance(processInstance);
}
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/ExecuteTimerCommand.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/ExecuteTimerCommand.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/ExecuteTimerCommand.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -1,17 +1,20 @@
package org.jbpm.scheduler.ejbtimer;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jbpm.JbpmContext;
import org.jbpm.command.Command;
import org.jbpm.db.JobSession;
-import org.jbpm.job.Job;
+import org.jbpm.job.Timer;
public class ExecuteTimerCommand implements Command {
+ private final long timerId;
+
private static final long serialVersionUID = 1L;
-
- final long timerId;
public ExecuteTimerCommand(long timerId) {
this.timerId = timerId;
@@ -19,18 +22,22 @@
public Object execute(JbpmContext jbpmContext) throws Exception {
JobSession jobSession = jbpmContext.getJobSession();
- Job timer = jobSession.getJob(timerId);
- if (timer!=null) {
- log.debug("executing timer "+timerId);
+ Timer timer = jobSession.loadTimer(timerId);
+ timer.setLockOwner(getClass().getName()); // prevent others from removing timer
+ log.debug("executing " + timer);
+ try {
if (timer.execute(jbpmContext)) {
- log.debug("deleting timer "+timerId);
- jobSession.deleteJob(timer);
+ jbpmContext.getServices().getSchedulerService().deleteTimer(timer);
}
- } else {
- log.info("timer "+timerId+" was deleted, cannot execute it");
}
+ catch (Exception e) {
+ log.debug("exception while executing " + timer, e);
+ StringWriter memoryWriter = new StringWriter();
+ e.printStackTrace(new PrintWriter(memoryWriter));
+ timer.setException(memoryWriter.toString());
+ }
return timer;
}
- private static Log log = LogFactory.getLog(ExecuteTimerCommand.class);
+ private static final Log log = LogFactory.getLog(ExecuteTimerCommand.class);
}
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/LocalTimerService.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/LocalTimerService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/LocalTimerService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -32,7 +32,8 @@
public interface LocalTimerService extends javax.ejb.EJBLocalObject {
void createTimer(Timer timer);
+ void cancelTimer(Timer timer);
void cancelTimersByName(String timerName, Token token);
- void deleteTimersForProcessInstance(ProcessInstance processInstance);
+ void cancelTimersForProcessInstance(ProcessInstance processInstance);
}
Modified: jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/TimerServiceBean.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/TimerServiceBean.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/java/org/jbpm/scheduler/ejbtimer/TimerServiceBean.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -23,6 +23,7 @@
import java.io.Serializable;
import java.rmi.RemoteException;
+import java.util.Collection;
import java.util.Iterator;
import javax.ejb.EJBException;
@@ -58,54 +59,78 @@
public void ejbCreate() {
}
- public void createTimer(Timer timer) {
+ public void createTimer(org.jbpm.job.Timer timer) {
TimerService timerService = sessionContext.getTimerService();
- log.debug("creating timer "+timer+" in the ejb timer service");
- timerService.createTimer(timer.getDueDate(), new TimerInfo(timer));
+ javax.ejb.Timer ejbTimer = timerService.createTimer(timer.getDueDate(), new TimerInfo(timer));
+ log.debug("created " + ejbTimer);
}
+ public void cancelTimer(org.jbpm.job.Timer timer) {
+ // TODO make the scanning of timers for cancellation optional by only deleting the timerjobs in the db.
+ // of course, the corresponding ejb timer notifications have to be ignored.
+
+ long timerId = timer.getId();
+ Collection timers = sessionContext.getTimerService().getTimers();
+ log.debug("examining " + timers.size() + " ejb timer(s) by id " + timerId);
+
+ int count = 0;
+ for (Iterator i = timers.iterator(); i.hasNext();) {
+ javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
+ if (ejbTimer.getInfo() instanceof TimerInfo) {
+ TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
+ if (timerId == timerInfo.getTimerId()) {
+ ejbTimer.cancel();
+ ++count;
+ }
+ }
+ }
+ log.debug("canceled " + count + " ejb timer(s) by id " + timerId);
+ }
+
public void cancelTimersByName(String timerName, Token token) {
-
// TODO make the scanning of timers for cancellation optional by only deleting the timerjobs in the db.
// of course, the corresponding ejb timer notifications have to be ignored.
- log.debug("cancelling timers with name "+timerName+" from the ejb timer service");
+ Collection timers = sessionContext.getTimerService().getTimers();
+ log.debug("examining " + timers.size() + " ejb timer(s) by name '" + timerName + "' for " + token);
- TimerService timerService = sessionContext.getTimerService();
- Iterator iter = timerService.getTimers().iterator();
- while (iter.hasNext()) {
- javax.ejb.Timer ejbTimer = (javax.ejb.Timer) iter.next();
+ int count = 0;
+ for (Iterator i = timers.iterator(); i.hasNext();) {
+ javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
if (ejbTimer.getInfo() instanceof TimerInfo) {
TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
if (timerInfo.matchesName(timerName, token)) {
ejbTimer.cancel();
+ ++count;
}
}
}
+ log.debug("canceled " + count + " ejb timer(s) by name '" + timerName + "' for " + token);
}
- public void deleteTimersForProcessInstance(ProcessInstance processInstance) {
-
+ public void cancelTimersForProcessInstance(ProcessInstance processInstance) {
// TODO make the scanning of timers for cancellation optional by only deleting the timerjobs in the db.
// of course, the corresponding ejb timer notifications have to be ignored.
+
+ Collection timers = sessionContext.getTimerService().getTimers();
+ log.debug("examining " + timers.size() + " timer(s) for " + processInstance);
- log.debug("deleting timers for process instance "+processInstance+" from the ejb timer service");
-
- TimerService timerService = sessionContext.getTimerService();
- Iterator iter = timerService.getTimers().iterator();
- while (iter.hasNext()) {
- javax.ejb.Timer ejbTimer = (javax.ejb.Timer) iter.next();
+ int count = 0;
+ for (Iterator i = timers.iterator(); i.hasNext();) {
+ javax.ejb.Timer ejbTimer = (javax.ejb.Timer) i.next();
if (ejbTimer.getInfo() instanceof TimerInfo) {
TimerInfo timerInfo = (TimerInfo) ejbTimer.getInfo();
if (timerInfo.matchesProcessInstance(processInstance)) {
ejbTimer.cancel();
+ ++count;
}
}
}
+ log.debug("canceled " + count + " ejb timer(s) for " + processInstance);
}
public void ejbTimeout(javax.ejb.Timer ejbTimer) {
- log.debug("ejb timer "+ejbTimer+" fires");
+ log.debug(ejbTimer + " fired");
String localCommandServiceJndiName = "java:comp/env/ejb/LocalCommandServiceBean";
try {
Context initial = new InitialContext();
@@ -146,6 +171,6 @@
}
public void ejbRemove() throws EJBException, RemoteException {
}
-
+
private static Log log = LogFactory.getLog(TimerServiceBean.class);
}
Modified: jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/ejb-jar.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/ejb-jar.xml 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/ejb-jar.xml 2008-09-06 00:28:41 UTC (rev 2134)
@@ -213,6 +213,9 @@
<cmp-field>
<field-name>processInstanceId</field-name>
</cmp-field>
+ <cmp-field>
+ <field-name>discriminator</field-name>
+ </cmp-field>
<primkey-field>timerId</primkey-field>
<ejb-local-ref>
<description>
@@ -235,7 +238,7 @@
<ejb-ql><![CDATA[
select object(obj)
from TimerEntityBean obj
- where obj.tokenId = ?1
+ where obj.tokenId = ?1 and obj.discriminator = 84
]]></ejb-ql>
</query>
<query>
@@ -250,7 +253,7 @@
<ejb-ql><![CDATA[
select object(obj)
from TimerEntityBean obj
- where obj.tokenId = ?1 and obj.name = ?2
+ where obj.tokenId = ?1 and obj.name = ?2 and obj.discriminator = 84
]]></ejb-ql>
</query>
<query>
@@ -264,7 +267,7 @@
<ejb-ql><![CDATA[
select object(obj)
from TimerEntityBean obj
- where obj.processInstanceId = ?1
+ where obj.processInstanceId = ?1 and obj.discriminator = 84
]]></ejb-ql>
</query>
</entity>
Modified: jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/jbosscmp-jdbc.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/jbosscmp-jdbc.xml 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/main/resources/META-INF/jbosscmp-jdbc.xml 2008-09-06 00:28:41 UTC (rev 2134)
@@ -31,6 +31,10 @@
<field-name>processInstanceId</field-name>
<column-name>PROCESSINSTANCE_</column-name>
</cmp-field>
+ <cmp-field>
+ <field-name>discriminator</field-name>
+ <column-name>CLASS_</column-name>
+ </cmp-field>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>
\ No newline at end of file
Added: jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/test/EventCallback.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/test/EventCallback.java (rev 0)
+++ jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/test/EventCallback.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -0,0 +1,111 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.enterprise.test;
+
+import java.io.Serializable;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jbpm.JbpmContext;
+import org.jbpm.graph.def.Event;
+
+public class EventCallback implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ private static final Log log = LogFactory.getLog(EventCallback.class);
+
+ public void processStart() {
+ registerNotification(Event.EVENTTYPE_PROCESS_START);
+ }
+
+ public void processEnd() {
+ registerNotification(Event.EVENTTYPE_PROCESS_END);
+ }
+
+ public void nodeEnter() {
+ registerNotification(Event.EVENTTYPE_NODE_ENTER);
+ }
+
+ public void nodeLeave() {
+ registerNotification(Event.EVENTTYPE_NODE_LEAVE);
+ }
+
+ public void taskCreate() {
+ registerNotification(Event.EVENTTYPE_TASK_CREATE);
+ }
+
+ public void taskEnd() {
+ registerNotification(Event.EVENTTYPE_TASK_END);
+ }
+
+ public void timerCreate() {
+ registerNotification(Event.EVENTTYPE_TIMER_CREATE);
+ }
+
+ public void timer() {
+ registerNotification(Event.EVENTTYPE_TIMER);
+ }
+
+ private static void registerNotification(final String event) {
+ Synchronization notification = new Synchronization() {
+
+ public void beforeCompletion() {}
+
+ public void afterCompletion(int status) {
+ if (status == Status.STATUS_COMMITTED) {
+ log.info("notifying " + event);
+ synchronized (event) {
+ event.notify();
+ }
+ }
+ }
+
+ };
+ JbpmContext.getCurrentJbpmContext()
+ .getSession()
+ .getTransaction()
+ .registerSynchronization(notification);
+ }
+
+ public static void waitForEvent(String event) {
+ waitForEvent(event, 10000);
+ }
+
+ public static void waitForEvent(String event, long timeout) {
+ synchronized (event) {
+ try {
+ long startTime = System.currentTimeMillis();
+ event.wait(timeout);
+ if (System.currentTimeMillis() - startTime >= timeout) {
+ log.warn("event '" + event + "' took longer than " + timeout + " ms to occur");
+ }
+ }
+ catch (InterruptedException e) {
+ // reassert interruption
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerTest.java
===================================================================
--- jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerTest.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/enterprise/src/test/java/org/jbpm/scheduler/ejbtimer/EjbSchedulerTest.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -21,11 +21,17 @@
*/
package org.jbpm.scheduler.ejbtimer;
+import java.util.Collections;
+
+import javax.naming.Context;
import javax.naming.InitialContext;
import junit.framework.Test;
import org.apache.cactus.ServletTestCase;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import org.jbpm.IntegrationTestSetup;
import org.jbpm.JbpmContext;
import org.jbpm.command.Command;
@@ -33,252 +39,277 @@
import org.jbpm.command.StartProcessInstanceCommand;
import org.jbpm.ejb.LocalCommandService;
import org.jbpm.ejb.LocalCommandServiceHome;
-import org.jbpm.enterprise.test.ActionRecorder;
+import org.jbpm.enterprise.test.EventCallback;
import org.jbpm.enterprise.test.GetCurrentTime;
-import org.jbpm.enterprise.test.Recorder;
+import org.jbpm.graph.def.Event;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class EjbSchedulerTest extends ServletTestCase {
-
+
private LocalCommandService commandService;
private static LocalCommandServiceHome commandServiceHome;
+ private static final Log log = LogFactory.getLog(EjbSchedulerTest.class);
+
public static Test suite() throws Exception {
- return new IntegrationTestSetup(EjbSchedulerTest.class, "enterprise-test.war, enterprise-test.jar");
+ return new IntegrationTestSetup(EjbSchedulerTest.class,
+ "enterprise-test.war, enterprise-test.jar");
}
-
+
protected void setUp() throws Exception {
if (commandServiceHome == null) {
- InitialContext initialContext = new InitialContext();
- commandServiceHome = (LocalCommandServiceHome) initialContext.lookup("java:comp/env/ejb/CommandServiceBean");
+ Context initialContext = new InitialContext();
+ try {
+ commandServiceHome = (LocalCommandServiceHome) initialContext.lookup("java:comp/env/ejb/CommandServiceBean");
+ }
+ finally {
+ initialContext.close();
+ }
}
commandService = commandServiceHome.create();
+ log.info("### " + getName() + " started ###");
}
protected void tearDown() throws Exception {
+ log.info("### " + getName() + " done ###");
commandService = null;
}
public void testScheduleFuture() throws Exception {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='timer included'>" +
- " <start-state>" +
- " <transition to='a' />" +
- " </start-state>" +
- " <state name='a'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- launchProcess("timer included");
- assertEquals(0, Recorder.executions);
- Thread.sleep(500);
- assertEquals(0, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
+ deployProcess("<process-definition name='future'>"
+ + " <event type='process-end'>"
+ + " <action expression='#{eventCallback.processEnd}'/>"
+ + " </event>"
+ + " <start-state name='start'>"
+ + " <transition to='a' />"
+ + " </start-state>"
+ + " <state name='a'>"
+ + " <timer duedate='1 second' transition='timeout' />"
+ + " <transition name='timeout' to='end' />"
+ + " </state>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ long processId = launchProcess("future").getId();
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
+ assertTrue(isProcessFinished(processId));
}
public void testSchedulePast() throws Exception {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='timer included'>" +
- " <start-state>" +
- " <transition to='a'>" +
- " <action class='" + GetCurrentTime.class.getName() + "'>" +
- " <variable>now</variable>" +
- " </action>" +
- " </transition>" +
- " </start-state>" +
- " <state name='a'>" +
- " <timer duedate='#{now} - 1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- launchProcess("timer included");
- assertEquals(0, Recorder.executions);
- Thread.sleep(500);
- assertEquals(1, Recorder.executions);
+ deployProcess("<process-definition name='past'>"
+ + " <event type='process-end'>"
+ + " <action expression='#{eventCallback.processEnd}'/>"
+ + " </event>"
+ + " <start-state name='start'>"
+ + " <transition to='a'>"
+ + " <action class='"
+ + GetCurrentTime.class.getName()
+ + "'>"
+ + " <variable>now</variable>"
+ + " </action>"
+ + " </transition>"
+ + " </start-state>"
+ + " <state name='a'>"
+ + " <timer duedate='#{now} - 10 seconds' transition='timeout' />"
+ + " <transition name='timeout' to='end' />"
+ + " </state>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ long processId = launchProcess("past").getId();
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
+ assertTrue(isProcessFinished(processId));
}
public void testScheduleRepeat() throws Exception {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='repeat included'>" +
- " <start-state>" +
- " <transition to='a' />" +
- " </start-state>" +
- " <state name='a'>" +
- " <timer duedate='1 second' repeat='2 seconds'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- long tokenId = launchProcess("repeat included").getRootToken().getId();
- assertEquals(0, Recorder.executions);
- Thread.sleep(500);
- assertEquals(0, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(2, Recorder.executions);
- cancelTimer("a", tokenId);
+ deployProcess("<process-definition name='repeat'>"
+ + " <event type='timer'>"
+ + " <action expression='#{eventCallback.timer}'/>"
+ + " </event>"
+ + " <start-state name='start'>"
+ + " <transition to='a' />"
+ + " </start-state>"
+ + " <state name='a'>"
+ + " <timer duedate='1 second' repeat='1 second' />"
+ + " <transition to='end' />"
+ + " </state>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ long processId = launchProcess("repeat").getId();
+ for (int i = 0; i < 3; i++) {
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
+ assertEquals("a", getProcessState(processId));
+ }
+ signalProcess(processId);
+ assertTrue(isProcessFinished(processId));
}
public void testCancel() throws Exception {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='repeat included'>" +
- " <start-state>" +
- " <transition to='a' />" +
- " </start-state>" +
- " <state name='a'>" +
- " <timer duedate='1 second' repeat='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- long tokenId = launchProcess("repeat included").getRootToken().getId();
- assertEquals(0, Recorder.executions);
- Thread.sleep(500);
- assertEquals(0, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
- cancelTimer("a", tokenId);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(1, Recorder.executions);
+ deployProcess("<process-definition name='cancel'>"
+ + " <event type='timer'>"
+ + " <action expression='#{eventCallback.timer}'/>"
+ + " </event>"
+ + " <start-state name='start'>"
+ + " <transition to='a' />"
+ + " </start-state>"
+ + " <state name='a'>"
+ + " <timer duedate='1 second' repeat='1 second' />"
+ + " <transition to='end' />"
+ + " </state>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ ProcessInstance process = launchProcess("cancel");
+ long processId = process.getId();
+ // first expiration
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
+ assertEquals("a", getProcessState(processId));
+ // repeated expiration
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
+ assertEquals("a", getProcessState(processId));
+ cancelTimer("a", process.getRootToken().getId());
+ // no more expirations
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER, 2000);
+ signalProcess(processId);
+ assertTrue(isProcessFinished(processId));
}
public void testScheduleMultiple() throws Exception {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='timers included'>" +
- " <start-state>" +
- " <transition to='a' />" +
- " </start-state>" +
- " <state name='a'>" +
- " <timer duedate='500 milliseconds' transition='next'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " <transition name='next' to='b' />" +
- " </state>" +
- " <state name='b'>" +
- " <timer duedate='500 milliseconds' transition='next'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " <transition name='next' to='c' />" +
- " </state>" +
- " <state name='c'>" +
- " <timer duedate='500 milliseconds' transition='next'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " <transition name='next' to='d' />" +
- " </state>" +
- " <state name='d'>" +
- " <timer duedate='500 milliseconds' transition='next'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " <transition name='next' to='e' />" +
- " </state>" +
- " <state name='e'>" +
- " <timer duedate='500 milliseconds'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- launchProcess("timers included");
- assertEquals(0, Recorder.executions);
- Thread.sleep(250);
- assertEquals(0, Recorder.executions);
- for (int i = 1; i <= 5; i++) {
- Thread.sleep(500);
- assertEquals(i, Recorder.executions);
+ deployProcess("<process-definition name='multiple'>"
+ + " <event type='process-end'>"
+ + " <action expression='#{eventCallback.processEnd}'/>"
+ + " </event>"
+ + " <event type='timer'>"
+ + " <action expression='#{eventCallback.timer}'/>"
+ + " </event>"
+ + " <start-state>"
+ + " <transition to='a' />"
+ + " </start-state>"
+ + " <state name='a'>"
+ + " <timer duedate='500 milliseconds' transition='next' />"
+ + " <transition name='next' to='b' />"
+ + " </state>"
+ + " <state name='b'>"
+ + " <timer duedate='500 milliseconds' transition='next' />"
+ + " <transition name='next' to='c' />"
+ + " </state>"
+ + " <state name='c'>"
+ + " <timer duedate='500 milliseconds' transition='next' />"
+ + " <transition name='next' to='d' />"
+ + " </state>"
+ + " <state name='d'>"
+ + " <timer duedate='500 milliseconds' transition='next' />"
+ + " <transition name='next' to='e' />"
+ + " </state>"
+ + " <state name='e'>"
+ + " <timer duedate='500 milliseconds' transition='next' />"
+ + " <transition name='next' to='end' />"
+ + " </state>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ long processId = launchProcess("multiple").getId();
+ char state = 'b';
+ for (int i = 0; i < 4; i++) {
+ EventCallback.waitForEvent(Event.EVENTTYPE_TIMER);
+ assertEquals(Character.toString(state++), getProcessState(processId));
}
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
+ assertTrue(isProcessFinished(processId));
}
public void testScheduleConcurrent() throws InterruptedException {
- Recorder.resetCollections();
- deployProcess(
- "<process-definition name='timers included'>" +
- " <start-state>" +
- " <transition to='f' />" +
- " </start-state>" +
- " <fork name='f'>" +
- " <transition name='a' to='a' />" +
- " <transition name='b' to='b' />" +
- " <transition name='c' to='c' />" +
- " <transition name='d' to='d' />" +
- " <transition name='e' to='e' />" +
- " </fork>" +
- " <state name='a'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- " <state name='b'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- " <state name='c'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- " <state name='d'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- " <state name='e'>" +
- " <timer duedate='1 second'>" +
- " <action class='" + ActionRecorder.class.getName() + "' />" +
- " </timer>" +
- " </state>" +
- "</process-definition>");
- launchProcess("timers included");
- assertEquals(0, Recorder.executions);
- Thread.sleep(500);
- assertEquals(0, Recorder.executions);
- Thread.sleep(1000);
- assertEquals(5, Recorder.executions);
+ deployProcess("<process-definition name='concurrent'>"
+ + " <event type='process-end'>"
+ + " <action expression='#{eventCallback.processEnd}'/>"
+ + " </event>"
+ + " <start-state>"
+ + " <transition to='f' />"
+ + " </start-state>"
+ + " <fork name='f'>"
+ + " <transition name='a' to='a' />"
+ + " <transition name='b' to='b' />"
+ + " <transition name='c' to='c' />"
+ + " <transition name='d' to='d' />"
+ + " <transition name='e' to='e' />"
+ + " </fork>"
+ + " <state name='a'>"
+ + " <timer duedate='0.25 seconds' transition='timeout' />"
+ + " <transition name='timeout' to='j' />"
+ + " </state>"
+ + " <state name='b'>"
+ + " <timer duedate='0.5 seconds' transition='timeout' />"
+ + " <transition name='timeout' to='j' />"
+ + " </state>"
+ + " <state name='c'>"
+ + " <timer duedate='0.75 seconds' transition='timeout' />"
+ + " <transition name='timeout' to='j' />"
+ + " </state>"
+ + " <state name='d'>"
+ + " <timer duedate='1 second' transition='timeout' />"
+ + " <transition name='timeout' to='j' />"
+ + " </state>"
+ + " <state name='e'>"
+ + " <timer duedate='1.25 second' transition='timeout' />"
+ + " <transition name='timeout' to='j' />"
+ + " </state>"
+ + " <join name='j'>"
+ + " <transition to='end' />"
+ + " </join>"
+ + " <end-state name='end' />"
+ + "</process-definition>");
+ long processId = launchProcess("concurrent").getId();
+ EventCallback.waitForEvent(Event.EVENTTYPE_PROCESS_END);
+ assertTrue(isProcessFinished(processId));
}
protected ProcessDefinition deployProcess(String xml) {
return (ProcessDefinition) commandService.execute(new DeployProcessCommand(xml));
}
-
+
protected ProcessInstance launchProcess(final String processName) {
StartProcessInstanceCommand command = new StartProcessInstanceCommand();
command.setProcessName(processName);
+ command.setVariables(Collections.singletonMap("eventCallback", new EventCallback()));
return (ProcessInstance) commandService.execute(command);
}
- protected void cancelTimer(String timerName, long tokenId) {
- commandService.execute(new CancelTimerCommand(timerName, tokenId));
+ protected void signalProcess(final long processId) {
+ commandService.execute(new Command() {
+ private static final long serialVersionUID = 1L;
+ public Object execute(JbpmContext jbpmContext) throws Exception {
+ jbpmContext.loadProcessInstanceForUpdate(processId).signal();
+ return null;
+ }
+ });
}
- protected static class CancelTimerCommand implements Command {
- final String timerName;
- final long tokenId;
- private static final long serialVersionUID = 1L;
- public CancelTimerCommand(String timerName, long tokenId) {
- this.timerName = timerName;
- this.tokenId = tokenId;
- }
- public Object execute(JbpmContext jbpmContext) throws Exception {
- Token token = jbpmContext.loadToken(tokenId);
- jbpmContext.getJobSession().cancelTimersByName(timerName, token);
- return null;
- }
+ protected String getProcessState(final long processId) {
+ return (String) commandService.execute(new Command() {
+ private static final long serialVersionUID = 1L;
+ public Object execute(JbpmContext jbpmContext) throws Exception {
+ return jbpmContext.loadProcessInstance(processId).getRootToken().getNode().getName();
+ }
+ });
}
+
+ protected boolean isProcessFinished(final long processId) {
+ Boolean isFinished = (Boolean) commandService.execute(new Command() {
+ private static final long serialVersionUID = 1L;
+ public Object execute(JbpmContext jbpmContext) throws Exception {
+ return jbpmContext.loadProcessInstance(processId).hasEnded();
+ }
+ });
+ return isFinished.booleanValue();
+ }
+
+ protected void cancelTimer(final String timerName, final long tokenId) {
+ commandService.execute(new Command() {
+ private static final long serialVersionUID = 1L;
+ public Object execute(JbpmContext jbpmContext) throws Exception {
+ Token token = jbpmContext.loadToken(tokenId);
+ jbpmContext.getServices().getSchedulerService().deleteTimersByName(timerName, token);
+ return null;
+ }
+ });
+ }
}
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/db/JobSession.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/db/JobSession.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/db/JobSession.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -2,12 +2,10 @@
import java.util.Collection;
import java.util.Date;
-import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.jbpm.JbpmContext;
@@ -90,21 +88,14 @@
if (job instanceof Timer) {
Timer timer = (Timer) job;
Action action = timer.getAction();
- if ( (action!=null)
- && (! session.contains(action))
- ) {
- log.debug("cascading timer save to timer action");
+ if (action != null && !session.contains(action)) {
+ log.debug("cascading timer save to action");
session.save(action);
}
}
}
- public void reattachUnmodifiedJob(Job job) {
- session.lock(job, LockMode.NONE);
- }
-
public void deleteJob(Job job) {
- log.debug("deleting "+job);
session.delete(job);
}
@@ -117,6 +108,14 @@
}
}
+ public Timer loadTimer(long timerId) {
+ try {
+ return (Timer) session.load(Timer.class, new Long(timerId));
+ } catch (Exception e) {
+ log.error(e);
+ throw new JbpmException("couldn't load timer " + timerId, e);
+ }
+ }
public Job getJob(long jobId) {
try {
@@ -151,17 +150,17 @@
}
}
- public void cancelTimersByName(String name, Token token) {
+ public void deleteTimersByName(String name, Token token) {
try {
- log.debug("canceling timers by name " + name + " for " + token);
+ log.debug("deleting timers by name '" + name + "' for " + token);
Query query = session.getNamedQuery("JobSession.deleteTimersByName");
query.setString("name", name);
query.setParameter("token", token);
int entityCount = query.executeUpdate();
- log.debug(entityCount+" timers by name " + name + " for " + token + " were deleted");
+ log.debug(entityCount + " timers by name '" + name + "' for " + token + " were deleted");
} catch (Exception e) {
log.error(e);
- throw new JbpmException("couldn't cancel timers by name '"+name+"' for '"+token+"'", e);
+ throw new JbpmException("couldn't delete timers by name '" + name + "' for " + token, e);
}
}
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/graph/node/Join.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/graph/node/Join.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/graph/node/Join.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -112,7 +112,8 @@
lockMode = LockMode.parse(parentLockMode);
}
log.debug("forcing version increment on parent token "+parentToken);
- session.flush();
+ // TODO why is a flush needed?!
+ // session.flush();
session.lock(parentToken, lockMode);
}
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/Timer.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/Timer.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/Timer.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -103,10 +103,8 @@
}
public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("timer");
- if ( (name!=null) || (dueDate!=null)) {
-
+ StringBuffer buffer = new StringBuffer("Timer");
+ if (name != null || dueDate != null) {
buffer.append("(");
if (name!=null) {
buffer.append(name).append(",");
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutor.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutor.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -2,6 +2,7 @@
import java.io.Serializable;
import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -35,19 +36,20 @@
Map monitoredJobIds = Collections.synchronizedMap(new HashMap());
boolean isStarted = false;
-
+
+ private static String hostName;
+
public synchronized void start() {
if (! isStarted) {
log.debug("starting thread group '"+name+"'...");
for (int i=0; i<nbrOfThreads; i++) {
startThread();
}
+ lockMonitorThread = new LockMonitorThread(jbpmConfiguration, lockMonitorInterval, maxLockTime, lockBufferTime);
isStarted = true;
} else {
log.debug("ignoring start: thread group '"+name+"' is already started'");
}
-
- lockMonitorThread = new LockMonitorThread(jbpmConfiguration, lockMonitorInterval, maxLockTime, lockBufferTime);
}
/**
@@ -65,6 +67,7 @@
for (int i=0; i<nbrOfThreads; i++) {
stoppedThreads.add(stopThread());
}
+ lockMonitorThread.deactivate();
isStarted = false;
} else {
log.debug("ignoring stop: thread group '"+name+"' not started");
@@ -78,6 +81,7 @@
Thread thread = (Thread) iter.next();
thread.join();
}
+ lockMonitorThread.join();
}
protected synchronized void startThread() {
@@ -99,12 +103,15 @@
return name + ":" + getHostName() + ":" + index;
}
- private String getHostName() {
- try {
- return InetAddress.getLocalHost().getHostAddress();
- } catch (Exception e) {
- return "unknown";
+ private static String getHostName() {
+ if (hostName == null) {
+ try {
+ hostName = InetAddress.getLocalHost().getHostAddress();
+ } catch (UnknownHostException e) {
+ hostName = "127.0.0.1";
+ }
}
+ return hostName;
}
protected synchronized Thread stopThread() {
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -13,6 +13,7 @@
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.JobSession;
+import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.job.Job;
import org.jbpm.persistence.JbpmPersistenceException;
import org.jbpm.svc.Services;
@@ -97,7 +98,7 @@
Collection acquiredJobs;
synchronized (jobExecutor) {
log.debug("acquiring jobs for execution...");
- Collection jobsToLock = Collections.EMPTY_LIST;
+ List jobsToLock = Collections.EMPTY_LIST;
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
JobSession jobSession = jbpmContext.getJobSession();
@@ -106,12 +107,13 @@
Job job = jobSession.getFirstAcquirableJob(lockOwner);
if (job!=null) {
if (job.isExclusive()) {
- log.debug("exclusive acquirable job found ("+job+"). querying for other exclusive jobs to lock them all in one tx...");
- List otherExclusiveJobs = jobSession.findExclusiveJobs(lockOwner, job.getProcessInstance());
- jobsToLock = otherExclusiveJobs;
- log.debug("trying to obtain a process-instance exclusive locks for '"+otherExclusiveJobs+"'");
+ log.debug("found exclusive " + job);
+ ProcessInstance processInstance = job.getProcessInstance();
+ log.debug("finding other exclusive jobs for " + processInstance);
+ jobsToLock = jobSession.findExclusiveJobs(lockOwner, processInstance);
+ log.debug("trying to obtain exclusive locks on " + jobsToLock + " for " + processInstance);
} else {
- log.debug("trying to obtain a lock for '"+job+"'");
+ log.debug("trying to obtain lock on " + job);
jobsToLock = Collections.singletonList(job);
}
@@ -124,7 +126,7 @@
}
// HACKY HACK : this is a workaround for a hibernate problem that is fixed in hibernate 3.2.1
- // TODO is this still needed?
+ // TODO remove this hack already?
// if (job instanceof Timer) {
// Hibernate.initialize(((Timer)job).getGraphElement());
// }
@@ -158,15 +160,15 @@
job = jobSession.loadJob(job.getId());
try {
- log.debug("executing job "+job);
+ log.debug("executing " + job);
if (job.execute(jbpmContext)) {
jobSession.deleteJob(job);
}
} catch (Exception e) {
- log.debug("exception while executing '"+job+"'", e);
- StringWriter sw = new StringWriter();
- e.printStackTrace(new PrintWriter(sw));
- job.setException(sw.toString());
+ log.debug("exception while executing " + job, e);
+ StringWriter memoryWriter = new StringWriter();
+ e.printStackTrace(new PrintWriter(memoryWriter));
+ job.setException(memoryWriter.toString());
job.setRetries(job.getRetries()-1);
}
@@ -230,7 +232,8 @@
}
/**
- * Signals this thread to stop running. Execution should cease shortly afterwards.
+ * Indicates that this thread should stop running.
+ * Execution will cease shortly afterwards.
*/
public void deactivate() {
if (isActive) {
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/LockMonitorThread.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/LockMonitorThread.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/job/executor/LockMonitorThread.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -83,9 +83,24 @@
}
}
+ /**
+ * @deprecated As of jBPM 3.2.3, replaced by {@link #deactivate()}
+ */
public void setActive(boolean isActive) {
- this.isActive = isActive;
+ if (isActive == false)
+ deactivate();
}
+ /**
+ * Indicates that this thread should stop running.
+ * Execution will cease shortly afterwards.
+ */
+ public void deactivate() {
+ if (isActive) {
+ isActive = false;
+ interrupt();
+ }
+ }
+
private static Log log = LogFactory.getLog(LockMonitorThread.class);
}
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/jpdl/el/parser/ELParserTokenManager.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/jpdl/el/parser/ELParserTokenManager.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/jpdl/el/parser/ELParserTokenManager.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -121,7 +121,7 @@
if (curChar < 64)
{
long l = 1L << curChar;
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
@@ -160,7 +160,7 @@
else if (curChar < 128)
{
long l = 1L << (curChar & 077);
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
@@ -188,7 +188,7 @@
long l1 = 1L << (hiByte & 077);
int i2 = (curChar & 0xff) >> 6;
long l2 = 1L << (curChar & 077);
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
@@ -541,7 +541,7 @@
if (curChar < 64)
{
long l = 1L << curChar;
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
@@ -710,7 +710,7 @@
else if (curChar < 128)
{
long l = 1L << (curChar & 077);
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
@@ -790,7 +790,7 @@
long l1 = 1L << (hiByte & 077);
int i2 = (curChar & 0xff) >> 6;
long l2 = 1L << (curChar & 077);
- MatchLoop: do
+ do
{
switch(jjstateSet[--i])
{
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/msg/db/DbMessageService.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/msg/db/DbMessageService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/msg/db/DbMessageService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -21,11 +21,8 @@
*/
package org.jbpm.msg.db;
-import java.util.Collection;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.db.JobSession;
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/SchedulerService.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/SchedulerService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/SchedulerService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -21,17 +21,15 @@
*/
package org.jbpm.scheduler;
-import java.io.Serializable;
-
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.job.Timer;
import org.jbpm.svc.Service;
-public interface SchedulerService extends Service, Serializable {
+public interface SchedulerService extends Service {
void createTimer(Timer timer);
+ void deleteTimer(Timer timer);
void deleteTimersByName(String timerName, Token token);
void deleteTimersByProcessInstance(ProcessInstance processInstance);
- void close();
}
Modified: jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/db/DbSchedulerService.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/db/DbSchedulerService.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/main/java/org/jbpm/scheduler/db/DbSchedulerService.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -56,14 +56,15 @@
hasProducedJobs = true;
}
+ public void deleteTimer(Timer timer) {
+ jobSession.deleteJob(timer);
+ }
+
public void deleteTimersByName(String timerName, Token token) {
- jobSession.cancelTimersByName(timerName, token);
+ jobSession.deleteTimersByName(timerName, token);
}
public void deleteTimersByProcessInstance(ProcessInstance processInstance) {
- if (processInstance==null) {
- throw new JbpmException("couldn't cancel timers for null process instance");
- }
jobSession.deleteJobsForProcessInstance(processInstance);
}
Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/mail/TaskMailTest.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/mail/TaskMailTest.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/mail/TaskMailTest.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -84,7 +84,7 @@
assertTrue(-1!=email.getBody().indexOf("http://localhost:8080/jbpm/home?taskId=0"));
}
- public static class TestSchedulerService implements SchedulerService, Service, ServiceFactory {
+ public static class TestSchedulerService implements SchedulerService, ServiceFactory {
private static final long serialVersionUID = 1L;
List createdTimers = new ArrayList();
@@ -93,11 +93,12 @@
public void createTimer(Timer timer) {
createdTimers.add(timer);
}
-
+ public void deleteTimer(Timer timer) {
+ cancelledTimers.add(timer.getName());
+ }
public void deleteTimersByName(String timerName, Token token) {
cancelledTimers.add(timerName);
}
-
public void deleteTimersByProcessInstance(ProcessInstance processInstance) {
}
public Service openService() {
@@ -105,6 +106,7 @@
}
public void close() {
}
+
}
public void testTaskInstanceReminder() throws Exception {
Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/scheduler/exe/SchedulerTest.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/scheduler/exe/SchedulerTest.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/scheduler/exe/SchedulerTest.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -59,6 +59,9 @@
public void createTimer(Timer timer) {
createdTimers.add(timer);
}
+ public void deleteTimer(Timer timer) {
+ cancelledTimersByName.add(new Object[]{timer.getName(), timer.getToken()});
+ }
public void deleteTimersByName(String timerName, Token token) {
cancelledTimersByName.add(new Object[]{timerName, token});
}
Modified: jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/svc/ServicesTest.java
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/svc/ServicesTest.java 2008-09-05 16:51:08 UTC (rev 2133)
+++ jbpm3/trunk/modules/jpdl/core/src/test/java/org/jbpm/svc/ServicesTest.java 2008-09-06 00:28:41 UTC (rev 2134)
@@ -20,6 +20,7 @@
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.svc;
+
import java.security.AccessControlException;
import java.security.Permission;
import java.util.HashMap;
@@ -27,7 +28,6 @@
import junit.framework.TestCase;
-import org.hibernate.SessionFactory;
import org.jbpm.db.ContextSession;
import org.jbpm.db.GraphSession;
import org.jbpm.db.JobSession;
@@ -160,7 +160,6 @@
public void setLoggingSession(LoggingSession loggingSession) {}
public void setJobSession(JobSession jobSession) {}
public void setTaskMgmtSession(TaskMgmtSession taskMgmtSession) {}
- public void setSessionFactory(SessionFactory sessionFactory) {}
};
serviceFactories.put("persistence", new TestGivenServiceFactory(service));
Services services = new Services(serviceFactories);
@@ -171,6 +170,7 @@
SchedulerService schedulerService = new SchedulerService() {
private static final long serialVersionUID = 1L;
public void createTimer(Timer timer) {}
+ public void deleteTimer(Timer timer) {}
public void deleteTimersByName(String timerName, Token token) {}
public void deleteTimersByProcessInstance(ProcessInstance processInstance) {}
public void close() {}
17 years, 7 months
JBoss JBPM SVN: r2133 - in jbpm3/trunk/modules: jpdl/userguide and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-05 12:51:08 -0400 (Fri, 05 Sep 2008)
New Revision: 2133
Modified:
jbpm3/trunk/modules/distribution/src/main/resources/installer/install-definition.xml
jbpm3/trunk/modules/jpdl/userguide/pom.xml
Log:
userguide docbook
Modified: jbpm3/trunk/modules/distribution/src/main/resources/installer/install-definition.xml
===================================================================
--- jbpm3/trunk/modules/distribution/src/main/resources/installer/install-definition.xml 2008-09-05 16:49:44 UTC (rev 2132)
+++ jbpm3/trunk/modules/distribution/src/main/resources/installer/install-definition.xml 2008-09-05 16:51:08 UTC (rev 2133)
@@ -104,12 +104,14 @@
<!-- JBoss-4.2.2 -->
<pack name="Download JBoss-4.2.2" required="no" parent="Optional Downloads" preselected="no">
<description>Download and Install JBoss-4.2.2</description>
+ <!-- http://jira.codehaus.org/browse/IZPACK-158 -->
<file src="@{resources.dir}/installer/download-helper.xml" targetdir="$INSTALL_PATH/Uninstaller"/>
</pack>
<!-- Eclipse-3.4.0 -->
<pack name="Download Eclipse-3.4.0" required="no" parent="Optional Downloads" preselected="no">
<description>Download and Install Eclipse-3.4.0</description>
+ <!-- http://jira.codehaus.org/browse/IZPACK-158 -->
<file src="@{resources.dir}/installer/download-helper.xml" targetdir="$INSTALL_PATH/tmp"/>
</pack>
Modified: jbpm3/trunk/modules/jpdl/userguide/pom.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/userguide/pom.xml 2008-09-05 16:49:44 UTC (rev 2132)
+++ jbpm3/trunk/modules/jpdl/userguide/pom.xml 2008-09-05 16:51:08 UTC (rev 2133)
@@ -1,30 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- ====================================================================== -->
-<!-- -->
-<!-- JBoss, the OpenSource J2EE webOS -->
-<!-- -->
-<!-- Distributable under LGPL license. -->
-<!-- See terms of license at http://www.gnu.org. -->
-<!-- -->
-<!-- ====================================================================== -->
+ <!-- ====================================================================== -->
+ <!-- -->
+ <!-- JBoss, the OpenSource J2EE webOS -->
+ <!-- -->
+ <!-- Distributable under LGPL license. -->
+ <!-- See terms of license at http://www.gnu.org. -->
+ <!-- -->
+ <!-- ====================================================================== -->
-<!-- $Id$ -->
+ <!-- $Id$ -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
-
+
<name>JBoss jBPM - jPDL Userguide</name>
<groupId>org.jboss.jbpm</groupId>
<artifactId>jbpm-jpdl-userguide</artifactId>
<packaging>pom</packaging>
-
+
<!-- Parent -->
<parent>
<groupId>org.jboss.jbpm</groupId>
<artifactId>jbpm-jpdl</artifactId>
<version>3.3.0-SNAPSHOT</version>
</parent>
-
+
+ <!-- Plugins -->
+ <build>
+ <plugins>
+ <!--
+ <plugin> Maven JDocbook Plugin http://www.jboss.org/maven-jdocbook-plugin <groupId>org.jboss.maven.plugins</groupId>
+ <artifactId>maven-jdocbook-plugin</artifactId> <extensions>true</extensions> <configuration>
+ <sourceDocumentName>en/master.xml</sourceDocumentName> <formats> <format> <formatName>html</formatName> </format> <!- - Include the
+ userguide in the deploy artefacts https://jira.jboss.org/jira/browse/JBPM-1299 <format> <formatName>pdf</formatName> </format> - ->
+ </formats> </configuration> </plugin>
+ -->
+ <plugin>
+ <groupId>org.jboss.maven.plugins</groupId>
+ <artifactId>maven-jdocbook-plugin</artifactId>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>generate</goal>
+ <goal>bundle</goal>
+ </goals>
+ <configuration>
+ <sourceDocumentName>en/master.xml</sourceDocumentName>
+ <formats>
+ <format>
+ <formatName>html</formatName>
+ </format>
+ </formats>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
17 years, 7 months
JBoss JBPM SVN: r2132 - jbpm3/trunk/modules/jpdl/userguide/src/main.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-05 12:49:44 -0400 (Fri, 05 Sep 2008)
New Revision: 2132
Added:
jbpm3/trunk/modules/jpdl/userguide/src/main/docbook/
Removed:
jbpm3/trunk/modules/jpdl/userguide/src/main/doocbook/
Log:
doocbook to docbook
Copied: jbpm3/trunk/modules/jpdl/userguide/src/main/docbook (from rev 2131, jbpm3/trunk/modules/jpdl/userguide/src/main/doocbook)
17 years, 7 months
JBoss JBPM SVN: r2130 - jbpm3/trunk/modules/jpdl/core/src/main/resources/org/jbpm/db.
by do-not-reply@jboss.org
Author: mputz
Date: 2008-09-05 11:03:08 -0400 (Fri, 05 Sep 2008)
New Revision: 2130
Modified:
jbpm3/trunk/modules/jpdl/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
Log:
Fix for JBPM-1712: Error in named query: GraphSession.findTokensForProcessInNode: Invalid path: node.name
Modified: jbpm3/trunk/modules/jpdl/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-09-05 09:48:08 UTC (rev 2129)
+++ jbpm3/trunk/modules/jpdl/core/src/main/resources/org/jbpm/db/hibernate.queries.hbm.xml 2008-09-05 15:03:08 UTC (rev 2130)
@@ -141,7 +141,7 @@
select token
from org.jbpm.graph.exe.Token token
where token.processInstance.processDefinition.name = :processDefinitionName
- and node.name = :nodeName
+ and token.node.name = :nodeName
]]>
</query>
17 years, 7 months
JBoss JBPM SVN: r2129 - in jbpm4/pvm/trunk/modules/core/src: main/java/org/jbpm/pvm/internal/svc and 4 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-09-05 05:48:08 -0400 (Fri, 05 Sep 2008)
New Revision: 2129
Removed:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/ActivityInstanceCmd.java
Modified:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionCmd.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindProcessDefinitionCmd.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/GetVariablesCmd.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/SetVariablesCmd.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/StartExecutionCmd.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandExecutionService.java
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandProcessService.java
jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/pvm.cache.xml
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/basicfeatures/BasicExecutionFlowDbTest.java
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/db/model/ProcessCacheDbTest.java
jbpm4/pvm/trunk/modules/core/src/test/resources/logging.properties
Log:
cleaned up obsolete dbid stuff from the commands and services
Deleted: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/ActivityInstanceCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/ActivityInstanceCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/ActivityInstanceCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -1,50 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.pvm.internal.cmd;
-
-import java.util.Map;
-
-import org.jbpm.pvm.Execution;
-import org.jbpm.pvm.env.Environment;
-
-
-/**
- * @author Tom Baeyens
- */
-public class ActivityInstanceCmd extends AbstractCommand<Execution> {
-
- private static final long serialVersionUID = 1L;
-
- protected long activityInstanceDbid;
- protected String signalName;
- protected Map<String, Object> parameters;
-
- public ActivityInstanceCmd(long activityInstanceDbid, String signalName, Map<String, Object> parameters) {
- this.activityInstanceDbid = activityInstanceDbid;
- this.signalName = signalName;
- this.parameters = parameters;
- }
-
- public Execution execute(Environment environment) throws Exception {
- return null;
- }
-}
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindExecutionCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -22,6 +22,7 @@
package org.jbpm.pvm.internal.cmd;
import org.jbpm.pvm.Execution;
+import org.jbpm.pvm.PvmException;
import org.jbpm.pvm.env.Environment;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.session.PvmDbSession;
@@ -34,22 +35,25 @@
private static final long serialVersionUID = 1L;
- protected long executionDbid;
protected String executionId;
protected String processDefinitionName;
protected String executionKey;
public FindExecutionCmd(String processDefinitionName, String executionKey) {
+ if (processDefinitionName==null) {
+ throw new PvmException("processDefinitionName is null");
+ }
this.processDefinitionName = processDefinitionName;
+ if (executionKey==null) {
+ throw new PvmException("executionKey is null");
+ }
this.executionKey = executionKey;
}
- // TODO: REMOVE
- public FindExecutionCmd(long executionDbid) {
- this.executionDbid = executionDbid;
- }
-
public FindExecutionCmd(String executionId) {
+ if (executionId==null) {
+ throw new PvmException("executionId is null");
+ }
this.executionId = executionId;
}
@@ -57,10 +61,7 @@
PvmDbSession pvmDbSession = environment.get(PvmDbSession.class);
if (executionId!=null) {
return pvmDbSession.findExecutionById(executionId);
- } else if (processDefinitionName!=null && executionKey!=null){
- return pvmDbSession.findExecutionByKey(processDefinitionName, executionKey);
- }
- return pvmDbSession.get(ExecutionImpl.class, executionDbid);
+ }
+ return pvmDbSession.findExecutionByKey(processDefinitionName, executionKey);
}
-
}
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindProcessDefinitionCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindProcessDefinitionCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/FindProcessDefinitionCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.cmd;
+import org.jbpm.pvm.PvmException;
import org.jbpm.pvm.env.Environment;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.model.OpenProcessDefinition;
@@ -34,25 +35,19 @@
private static final long serialVersionUID = 1L;
- protected long processDefinitionDbid;
protected String processDefinitionName;
protected int processDefinitionVersion;
public FindProcessDefinitionCmd(String processDefinitionName, int processDefinitionVersion) {
+ if (processDefinitionName==null) {
+ throw new PvmException("processDefinitionName is null");
+ }
this.processDefinitionName = processDefinitionName;
this.processDefinitionVersion = processDefinitionVersion;
}
- public FindProcessDefinitionCmd(long processDefinitionDbid) {
- this.processDefinitionDbid = processDefinitionDbid;
- }
-
public OpenProcessDefinition execute(Environment environment) throws Exception {
PvmDbSession pvmDbSession = environment.get(PvmDbSession.class);
- if (processDefinitionName!=null) {
- return pvmDbSession.findProcessDefinitionByName(processDefinitionName, processDefinitionVersion);
- } else {
- return pvmDbSession.get(ProcessDefinitionImpl.class, processDefinitionDbid);
- }
+ return pvmDbSession.findProcessDefinitionByName(processDefinitionName, processDefinitionVersion);
}
}
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/GetVariablesCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/GetVariablesCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/GetVariablesCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -25,9 +25,9 @@
import java.util.List;
import java.util.Map;
+import org.jbpm.pvm.PvmException;
import org.jbpm.pvm.client.ClientExecution;
import org.jbpm.pvm.env.Environment;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.session.PvmDbSession;
/**
@@ -37,31 +37,25 @@
private static final long serialVersionUID = 1L;
- protected long executionDbid = -1;
protected String executionId;
protected List<String> variableNames;
- public GetVariablesCmd(long executionDbid, List<String> variableNames) {
- this.executionDbid = executionDbid;
- this.variableNames = variableNames;
- }
-
public GetVariablesCmd(String executionId, List<String> variableNames) {
+ if (executionId==null) {
+ throw new PvmException("executionId is null");
+ }
this.executionId = executionId;
+ if (variableNames==null) {
+ throw new PvmException("variableNames is null");
+ }
this.variableNames = variableNames;
}
public Map<String, Object> execute(Environment environment) throws Exception {
PvmDbSession pvmDbSession = environment.get(PvmDbSession.class);
- ClientExecution execution = null;
+ ClientExecution execution = pvmDbSession.findExecutionById(executionId);
- if (executionId!=null) {
- execution = pvmDbSession.findExecutionById(executionId);
- } else {
- execution = pvmDbSession.get(ExecutionImpl.class, executionDbid);
- }
-
Map<String, Object> variables = new HashMap<String, Object>();
for (String variableName : variableNames) {
Object value = execution.getVariable(variableName);
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/SetVariablesCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/SetVariablesCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/SetVariablesCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -22,6 +22,7 @@
package org.jbpm.pvm.internal.cmd;
import org.jbpm.pvm.Execution;
+import org.jbpm.pvm.PvmException;
import org.jbpm.pvm.client.ClientExecution;
import org.jbpm.pvm.env.Environment;
@@ -33,48 +34,27 @@
private static final long serialVersionUID = 1L;
- protected long executionDbid;
protected String executionId = null;
- public SetVariablesCmd() {
- }
-
- // TODO: REMOVE
- public SetVariablesCmd(long executionDbid) {
- this.executionDbid = executionDbid;
- }
-
- // TODO: REMOVE
- public SetVariablesCmd(long executionDbid, String key, Object variable) {
- this.executionDbid = executionDbid;
- addVariable(key, variable);
- }
-
public SetVariablesCmd(String executionId) {
+ if (executionId==null) {
+ throw new PvmException("executionId is null");
+ }
this.executionId = executionId;
}
public SetVariablesCmd(String executionId, String key, Object variable) {
- this.executionId = executionId;
+ this(executionId);
addVariable(key, variable);
}
public Execution execute(Environment environment) throws Exception {
- ClientExecution execution = null;
- if (executionId!=null) {
- execution = getExecution(environment, executionId);
- } else {
- execution = getExecution(environment, executionDbid);
- }
-
+ ClientExecution execution = getExecution(environment, executionId);
execution.setVariables(variables);
return execution;
}
- public long getExecutionId() {
- return executionDbid;
+ public String getExecutionId() {
+ return executionId;
}
- public void setExecutionId(long executionId) {
- this.executionDbid = executionId;
- }
}
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/StartExecutionCmd.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/StartExecutionCmd.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/StartExecutionCmd.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -28,7 +28,6 @@
import org.jbpm.pvm.client.ClientProcessDefinition;
import org.jbpm.pvm.client.ClientProcessInstance;
import org.jbpm.pvm.env.Environment;
-import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.session.PvmDbSession;
/**
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandExecutionService.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandExecutionService.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandExecutionService.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -22,13 +22,11 @@
package org.jbpm.pvm.internal.svc;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.pvm.Execution;
import org.jbpm.pvm.ExecutionService;
-import org.jbpm.pvm.internal.cmd.ActivityInstanceCmd;
import org.jbpm.pvm.internal.cmd.CommandService;
import org.jbpm.pvm.internal.cmd.FindExecutionCmd;
import org.jbpm.pvm.internal.cmd.GetVariablesCmd;
@@ -127,26 +125,6 @@
return commandService.execute(new SignalCmd(processDefinitionName, executionKey, null, parameters));
}
- public Execution signalActivityInstance(long activityInstanceDbid) {
- return commandService.execute(new ActivityInstanceCmd(activityInstanceDbid, null, null));
- }
-
- public Execution signalActivityInstance(long activityInstanceDbid, String signalName) {
- return commandService.execute(new ActivityInstanceCmd(activityInstanceDbid, signalName, null));
- }
-
- public Execution signalActivityInstance(long activityInstanceDbid, String signalName, Map<String, Object> parameters) {
- return commandService.execute(new ActivityInstanceCmd(activityInstanceDbid, signalName, parameters));
- }
-
- public Execution signalActivityInstance(long activityInstanceDbid, Map<String, Object> parameters) {
- return commandService.execute(new ActivityInstanceCmd(activityInstanceDbid, null, parameters));
- }
-
- public Execution findExecution(long executionDbid) {
- return commandService.execute(new FindExecutionCmd(executionDbid));
- }
-
public Execution findExecution(String processDefinitionName, String key) {
return commandService.execute(new FindExecutionCmd(processDefinitionName, key));
}
@@ -155,26 +133,6 @@
return commandService.execute(new FindExecutionCmd(executionId));
}
- // TODO: REMOVE
- public Map<String, Object> getVariables(long executionDbid, List<String> variableNames) {
- return commandService.execute(new GetVariablesCmd(executionDbid, variableNames));
- }
-
- // TODO: REMOVE
- public Execution setVariable(long executionDbid, String name, Object value) {
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put(name, value);
- return setVariables(executionDbid, variables);
- }
-
- // TODO: REMOVE
- public Execution setVariables(long executionDbid, Map<String, Object> variables) {
- SetVariablesCmd cmd = new SetVariablesCmd(executionDbid);
- cmd.setVariables(variables);
- return commandService.execute(cmd);
- }
-
-
public Object getVariable(String executionId, String variableName) {
List<String> variableNames = new ArrayList<String>();
variableNames.add(variableName);
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandProcessService.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandProcessService.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/svc/CommandProcessService.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -68,10 +68,6 @@
return (List)commandService.execute(new FindProcessDefinitionsCmd(processDefinitionName));
}
- public ProcessDefinition findProcessDefinition(long processDefinitionDbid) {
- return commandService.execute(new FindProcessDefinitionCmd(processDefinitionDbid));
- }
-
public CommandService getCommandService() {
return commandService;
}
Modified: jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/pvm.cache.xml
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/pvm.cache.xml 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/pvm.cache.xml 2008-09-05 09:48:08 UTC (rev 2129)
@@ -8,6 +8,7 @@
<class-cache class="org.jbpm.pvm.internal.model.ObjectReference" />
<class-cache class="org.jbpm.pvm.internal.model.VariableDefinitionImpl" />
<class-cache class="org.jbpm.pvm.internal.model.TimerDefinitionImpl" />
+ <class-cache class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.exceptionHandlers" />
<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.events" />
@@ -30,5 +31,8 @@
<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.listenerReferences" />
<collection-cache collection="org.jbpm.pvm.internal.model.ExceptionHandlerImpl.eventListenerReferences" />
-
+
+ <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.argDescriptors" />
+ <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.operations" />
+
</hibernate-cache>
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/basicfeatures/BasicExecutionFlowDbTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/basicfeatures/BasicExecutionFlowDbTest.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/basicfeatures/BasicExecutionFlowDbTest.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -77,7 +77,9 @@
Deployment deployment = new Deployment(processDefinition);
processService.deploy(deployment);
-
+
+ executionService.startExecution("myProcess:1", "zero");
+
Execution processInstance = executionService.startExecution("myProcess:1", "one");
List<String> expectedEvents = new ArrayList<String>();
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/db/model/ProcessCacheDbTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/db/model/ProcessCacheDbTest.java 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/db/model/ProcessCacheDbTest.java 2008-09-05 09:48:08 UTC (rev 2129)
@@ -31,8 +31,7 @@
* @author Guillaume Porcher
*
*/
-public class ProcessCacheDbTest extends EnvironmentDbTestCase
-{
+public class ProcessCacheDbTest extends EnvironmentDbTestCase {
/**
* Defines a simple process: only nodes.
Modified: jbpm4/pvm/trunk/modules/core/src/test/resources/logging.properties
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/resources/logging.properties 2008-09-05 09:46:46 UTC (rev 2128)
+++ jbpm4/pvm/trunk/modules/core/src/test/resources/logging.properties 2008-09-05 09:48:08 UTC (rev 2129)
@@ -22,7 +22,7 @@
org.hibernate.cfg.HbmBinder.level=SEVERE
org.hibernate.cfg.SettingsFactory.level=SEVERE
# org.hibernate.level=FINE
-# org.hibernate.SQL.level=FINEST
+org.hibernate.SQL.level=FINEST
# org.hibernate.type.level=FINEST
# org.hibernate.tool.hbm2ddl.SchemaExport.level=FINEST
# org.hibernate.transaction.level=FINEST
17 years, 7 months
JBoss JBPM SVN: r2127 - in jbpm3/trunk: modules/enterprise and 9 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-05 05:18:05 -0400 (Fri, 05 Sep 2008)
New Revision: 2127
Added:
jbpm3/trunk/modules/jpdl/simulation/src/test/resources/
jbpm3/trunk/modules/jpdl/simulation/src/test/resources/log4j.xml
Modified:
jbpm3/trunk/modules/enterprise/pom.xml
jbpm3/trunk/modules/jpdl/core/pom.xml
jbpm3/trunk/modules/jpdl/identity/pom.xml
jbpm3/trunk/modules/jpdl/integration/.classpath
jbpm3/trunk/modules/jpdl/simulation/.classpath
jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/bam/BamSimulationProposal.java
jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/def/JbpmSimulationModel.java
jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/report/InMemoryOutput.java
jbpm3/trunk/pom.xml
Log:
enable simulation tests
Modified: jbpm3/trunk/modules/enterprise/pom.xml
===================================================================
--- jbpm3/trunk/modules/enterprise/pom.xml 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/enterprise/pom.xml 2008-09-05 09:18:05 UTC (rev 2127)
@@ -86,16 +86,6 @@
</exclusion>
</exclusions>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<!-- Plugins -->
Modified: jbpm3/trunk/modules/jpdl/core/pom.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/core/pom.xml 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/core/pom.xml 2008-09-05 09:18:05 UTC (rev 2127)
@@ -84,11 +84,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
Modified: jbpm3/trunk/modules/jpdl/identity/pom.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/identity/pom.xml 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/identity/pom.xml 2008-09-05 09:18:05 UTC (rev 2127)
@@ -49,16 +49,6 @@
<version>${version}</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<!-- Plugins -->
Modified: jbpm3/trunk/modules/jpdl/integration/.classpath
===================================================================
--- jbpm3/trunk/modules/jpdl/integration/.classpath 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/integration/.classpath 2008-09-05 09:18:05 UTC (rev 2127)
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
Modified: jbpm3/trunk/modules/jpdl/simulation/.classpath
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/.classpath 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/simulation/.classpath 2008-09-05 09:18:05 UTC (rev 2127)
@@ -3,6 +3,7 @@
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
Modified: jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/bam/BamSimulationProposal.java
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/bam/BamSimulationProposal.java 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/bam/BamSimulationProposal.java 2008-09-05 09:18:05 UTC (rev 2127)
@@ -3,31 +3,31 @@
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jbpm.sim.def.JbpmSimulationScenario;
/**
- * contains statistics about the history of a process
- * (like processing times of tasks, outgoing
- * probabilities of decisions, ....)
+ * contains statistics about the history of a process (like processing times of tasks, outgoing probabilities of decisions, ....)
*
- * can be used to generate a XML scenario configuration or directly
- * a <code>JbpmSimulationScenario</code> object.
+ * can be used to generate a XML scenario configuration or directly a <code>JbpmSimulationScenario</code> object.
*
* @author bernd.ruecker(a)camunda.com
*/
-public class BamSimulationProposal {
-
+public class BamSimulationProposal
+{
+ private static final Log log = LogFactory.getLog(BamSimulationProposal.class);
+
private String processName;
-
+
private int processVersion;
-
+
private String[] swimlanes;
/**
@@ -38,62 +38,71 @@
private ArrayList decisionProposals = new ArrayList();
private ArrayList taskProposals = new ArrayList();
-
+
private ElementStatistics processStatistics;
-
- public BamSimulationProposal() {
- }
- public BamSimulationProposal(String processName, int processVersion) {
+ public BamSimulationProposal()
+ {
+ }
+
+ public BamSimulationProposal(String processName, int processVersion)
+ {
this.processName = processName;
this.processVersion = processVersion;
}
-
+
/**
* TODO: implement
*/
- public JbpmSimulationScenario getScenario() {
+ public JbpmSimulationScenario getScenario()
+ {
return null;
}
-
+
/**
* create a new scenario with this process as only process
+ *
* @return
*/
- public Element createScenarioConfigurationXml() {
+ public Element createScenarioConfigurationXml()
+ {
Element result = org.dom4j.DocumentFactory.getInstance().createElement("scenario");
result.addAttribute("name", "status_quo");
-
+
addProcessToScenarioXml(result);
-
return result;
}
-
+
/**
* adds this process to the already given scenario (as XML)
+ *
* @param scenario
*/
- public void addProcessToScenarioXml(Element scenario) {
+ public void addProcessToScenarioXml(Element scenario)
+ {
Element simProcess = scenario.addElement("sim-process");
// set default path for process
simProcess.addAttribute("path", "/" + getProcessName() + "/processdefinition.xml");
-
+
// set start distribution
String startEventDistName = addErlangDistributionElement(scenario, getProcessStatistics());
simProcess.addElement("process-overwrite").addAttribute("start-distribution", startEventDistName);
-
+
// retrieve already existing swimlanes of the scenario
- HashSet alreadyAddedSwimlanes = new HashSet();
+ HashSet alreadyAddedSwimlanes = new HashSet();
Iterator iter = scenario.elementIterator("resource-pool");
- while (iter.hasNext()) {
- Element rp = (Element) iter.next();
- alreadyAddedSwimlanes.add( rp.attributeValue("name") );
+ while (iter.hasNext())
+ {
+ Element rp = (Element)iter.next();
+ alreadyAddedSwimlanes.add(rp.attributeValue("name"));
}
-
+
// add resource pools with default size for non existing swimlanes
- for (int i = 0; i < swimlanes.length; i++) {
- if (!alreadyAddedSwimlanes.contains(swimlanes[i])) {
+ for (int i = 0; i < swimlanes.length; i++)
+ {
+ if (!alreadyAddedSwimlanes.contains(swimlanes[i]))
+ {
Element rp = scenario.addElement("resource-pool");
rp.addAttribute("name", swimlanes[i]);
rp.addAttribute("pool-size", "1");
@@ -104,54 +113,58 @@
// loop over states
iter = stateProposals.iterator();
- while (iter.hasNext()) {
- ElementStatistics statistics = (ElementStatistics) iter.next();
-
+ while (iter.hasNext())
+ {
+ ElementStatistics statistics = (ElementStatistics)iter.next();
+
// add distributions with default name
String distName = addNormalDistributionElement(scenario, statistics);
-
+
// add state-overwrite
Element stateElement = simProcess.addElement("state-overwrite");
stateElement.addAttribute("state-name", statistics.getName());
stateElement.addAttribute("time-distribution", distName);
-
+
addLeavingTransitionElements(statistics, stateElement);
}
// loop over decisions
iter = decisionProposals.iterator();
- while (iter.hasNext()) {
- ElementStatistics statistics = (ElementStatistics) iter.next();
-
+ while (iter.hasNext())
+ {
+ ElementStatistics statistics = (ElementStatistics)iter.next();
+
// add decision-overwrite
Element stateElement = simProcess.addElement("decision-overwrite");
stateElement.addAttribute("decision-name", statistics.getName());
-
+
addLeavingTransitionElements(statistics, stateElement);
}
-
+
// loop over tasks
iter = taskProposals.iterator();
- while (iter.hasNext()) {
- ElementStatistics statistics = (ElementStatistics) iter.next();
-
+ while (iter.hasNext())
+ {
+ ElementStatistics statistics = (ElementStatistics)iter.next();
+
// add distributions with default name
String distName = addNormalDistributionElement(scenario, statistics);
-
+
// add task-overwrite
Element stateElement = simProcess.addElement("task-overwrite");
stateElement.addAttribute("task-name", statistics.getName());
stateElement.addAttribute("time-distribution", distName);
-
+
addLeavingTransitionElements(statistics, stateElement);
- }
+ }
}
- private void addLeavingTransitionElements(ElementStatistics statistics,
- Element stateElement) {
+ private void addLeavingTransitionElements(ElementStatistics statistics, Element stateElement)
+ {
// loop over leaving transitions
TransitionProbability[] transitionProbabilities = statistics.getLeavingTransitionProbabilities();
- for (int i = 0; i < transitionProbabilities.length; i++) {
+ for (int i = 0; i < transitionProbabilities.length; i++)
+ {
// add probability
Element transitionElement = stateElement.addElement("transition");
transitionElement.addAttribute("name", transitionProbabilities[i].getTransitionName());
@@ -159,163 +172,187 @@
}
}
- private String addErlangDistributionElement(Element scenario, ElementStatistics stat) {
+ private String addErlangDistributionElement(Element scenario, ElementStatistics stat)
+ {
return addDistributionElement(scenario, stat, "erlang", "real");
}
-
- private String addNormalDistributionElement(Element scenario, ElementStatistics stat) {
+
+ private String addNormalDistributionElement(Element scenario, ElementStatistics stat)
+ {
return addDistributionElement(scenario, stat, "normal", "real");
- }
+ }
- private String addDistributionElement(Element scenario, ElementStatistics stat, String type, String sampleType) {
+ private String addDistributionElement(Element scenario, ElementStatistics stat, String type, String sampleType)
+ {
String name = getProcessName() + "." + stat.getName();
Element dist = scenario.addElement("distribution");
dist.addAttribute("name", name);
- dist.addAttribute("sample-type", sampleType);
+ dist.addAttribute("sample-type", sampleType);
dist.addAttribute("type", type);
- dist.addAttribute("mean", String.valueOf( stat.getDurationAverage() ));
- dist.addAttribute("standardDeviation", String.valueOf( stat.getDurationStddev() ));
+ dist.addAttribute("mean", String.valueOf(stat.getDurationAverage()));
+ dist.addAttribute("standardDeviation", String.valueOf(stat.getDurationStddev()));
return name;
}
-
- public void addStateProposal(ElementStatistics stat) {
+ public void addStateProposal(ElementStatistics stat)
+ {
stateProposals.add(stat);
}
-
- public ElementStatistics[] getStateProposals() {
- return (ElementStatistics[]) stateProposals.toArray(new ElementStatistics[0]);
+
+ public ElementStatistics[] getStateProposals()
+ {
+ return (ElementStatistics[])stateProposals.toArray(new ElementStatistics[0]);
}
- public void addDecisionProposal(ElementStatistics statistics) {
+ public void addDecisionProposal(ElementStatistics statistics)
+ {
decisionProposals.add(statistics);
}
- public ElementStatistics[] getDecisionProposals() {
- return (ElementStatistics[]) decisionProposals.toArray(new ElementStatistics[0] );
+ public ElementStatistics[] getDecisionProposals()
+ {
+ return (ElementStatistics[])decisionProposals.toArray(new ElementStatistics[0]);
}
-
- public void addTaskProposal(ElementStatistics statistics) {
+
+ public void addTaskProposal(ElementStatistics statistics)
+ {
taskProposals.add(statistics);
}
- public ElementStatistics[] getTaskProposals() {
- return (ElementStatistics[]) taskProposals.toArray(new ElementStatistics[0] );
+ public ElementStatistics[] getTaskProposals()
+ {
+ return (ElementStatistics[])taskProposals.toArray(new ElementStatistics[0]);
}
- public static void print(Element scenarioXml) {
- System.out.println(getXmlAsString(scenarioXml));
+ public static void print(Element scenarioXml)
+ {
+ log.debug(getXmlAsString(scenarioXml));
}
-
- public static String getXmlAsString(Element scenarioXml) {
+
+ public static String getXmlAsString(Element scenarioXml)
+ {
StringWriter stringWriter = new StringWriter();
- try {
+ try
+ {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(stringWriter, format);
xmlWriter.write(scenarioXml);
}
- catch (IOException ex) {
+ catch (IOException ex)
+ {
throw new RuntimeException("couldn't write XML to string", ex);
}
return stringWriter.toString();
}
-
+
/**
- * print out result on System.out.println
+ * print out result on log.debug
*
* ONLY FOR TESTING PURPOSES WHEN PLAYING AROUND...
+ *
* @param result
*/
- public static void print(BamSimulationProposal result) {
- System.out.println( "\n\n------ PROCESS " + result.getProcessName() + " / Version: " + result.getProcessVersion() + " ---------" );
- System.out.println( " start event sample count = " + result.getProcessStatistics().getSampleCount() );
- System.out.println( " start event interval min = " + result.getProcessStatistics().getDurationMin() );
- System.out.println( " start event interval max = " + result.getProcessStatistics().getDurationMax() );
- System.out.println( " start event interval avg = " + result.getProcessStatistics().getDurationAverage() );
- System.out.println( " start event interval stddev = " + result.getProcessStatistics().getDurationStddev() );
+ public static void print(BamSimulationProposal result)
+ {
+ log.debug("\n\n------ PROCESS " + result.getProcessName() + " / Version: " + result.getProcessVersion() + " ---------");
+ log.debug(" start event sample count = " + result.getProcessStatistics().getSampleCount());
+ log.debug(" start event interval min = " + result.getProcessStatistics().getDurationMin());
+ log.debug(" start event interval max = " + result.getProcessStatistics().getDurationMax());
+ log.debug(" start event interval avg = " + result.getProcessStatistics().getDurationAverage());
+ log.debug(" start event interval stddev = " + result.getProcessStatistics().getDurationStddev());
-
- System.out.println( "\n------ STATEs ---------" );
+ log.debug("\n------ STATEs ---------");
- for (int i = 0; i < result.getStateProposals().length; i++) {
+ for (int i = 0; i < result.getStateProposals().length; i++)
+ {
ElementStatistics stat = result.getStateProposals()[i];
- System.out.println( stat.getName() + ": " );
- System.out.println( " sample count = " + stat.getSampleCount() );
- System.out.println( " duration min = " + stat.getDurationMin() );
- System.out.println( " duration max = " + stat.getDurationMax() );
- System.out.println( " duration avg = " + stat.getDurationAverage() );
- System.out.println( " duration stddev = " + stat.getDurationStddev() );
-
- for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++) {
- System.out.println( " -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName()
- + ": " + stat.getLeavingTransitionProbabilities()[j].getCount() );
+ log.debug(stat.getName() + ": ");
+ log.debug(" sample count = " + stat.getSampleCount());
+ log.debug(" duration min = " + stat.getDurationMin());
+ log.debug(" duration max = " + stat.getDurationMax());
+ log.debug(" duration avg = " + stat.getDurationAverage());
+ log.debug(" duration stddev = " + stat.getDurationStddev());
+
+ for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++)
+ {
+ log.debug(" -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName() + ": " + stat.getLeavingTransitionProbabilities()[j].getCount());
}
}
- System.out.println( "\n------ DECISIONs ---------" );
- for (int i = 0; i < result.getDecisionProposals().length; i++) {
+ log.debug("\n------ DECISIONs ---------");
+ for (int i = 0; i < result.getDecisionProposals().length; i++)
+ {
ElementStatistics stat = result.getDecisionProposals()[i];
- System.out.println( stat.getName() + ": " );
+ log.debug(stat.getName() + ": ");
- System.out.println( " sample count = " + stat.getSampleCount() );
- System.out.println( " duration min = " + stat.getDurationMin() );
- System.out.println( " duration max = " + stat.getDurationMax() );
- System.out.println( " duration avg = " + stat.getDurationAverage() );
- System.out.println( " duration stddev = " + stat.getDurationStddev() );
+ log.debug(" sample count = " + stat.getSampleCount());
+ log.debug(" duration min = " + stat.getDurationMin());
+ log.debug(" duration max = " + stat.getDurationMax());
+ log.debug(" duration avg = " + stat.getDurationAverage());
+ log.debug(" duration stddev = " + stat.getDurationStddev());
- for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++) {
- System.out.println( " -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName()
- + ": " + stat.getLeavingTransitionProbabilities()[j].getCount() );
+ for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++)
+ {
+ log.debug(" -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName() + ": " + stat.getLeavingTransitionProbabilities()[j].getCount());
}
}
-
- System.out.println( "\n------ TASKs ---------" );
- for (int i = 0; i < result.getTaskProposals().length; i++) {
+ log.debug("\n------ TASKs ---------");
+
+ for (int i = 0; i < result.getTaskProposals().length; i++)
+ {
ElementStatistics stat = result.getTaskProposals()[i];
- System.out.println( stat.getName() + ": " );
- System.out.println( " sample count = " + stat.getSampleCount() );
- System.out.println( " duration min = " + stat.getDurationMin() );
- System.out.println( " duration max = " + stat.getDurationMax() );
- System.out.println( " duration avg = " + stat.getDurationAverage() );
- System.out.println( " duration stddev = " + stat.getDurationStddev() );
-
- for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++) {
- System.out.println( " -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName()
- + ": " + stat.getLeavingTransitionProbabilities()[j].getCount() );
+ log.debug(stat.getName() + ": ");
+ log.debug(" sample count = " + stat.getSampleCount());
+ log.debug(" duration min = " + stat.getDurationMin());
+ log.debug(" duration max = " + stat.getDurationMax());
+ log.debug(" duration avg = " + stat.getDurationAverage());
+ log.debug(" duration stddev = " + stat.getDurationStddev());
+
+ for (int j = 0; j < stat.getLeavingTransitionProbabilities().length; j++)
+ {
+ log.debug(" -> " + stat.getLeavingTransitionProbabilities()[j].getTransitionName() + ": " + stat.getLeavingTransitionProbabilities()[j].getCount());
}
}
}
- public ElementStatistics getProcessStatistics() {
+ public ElementStatistics getProcessStatistics()
+ {
return processStatistics;
}
- public void setProcessStatistics(ElementStatistics processStatistics) {
+ public void setProcessStatistics(ElementStatistics processStatistics)
+ {
this.processStatistics = processStatistics;
}
- public int getProcessVersion() {
+ public int getProcessVersion()
+ {
return processVersion;
}
- public void setProcessVersion(int processVersion) {
+ public void setProcessVersion(int processVersion)
+ {
this.processVersion = processVersion;
}
- public String getProcessName() {
+ public String getProcessName()
+ {
return processName;
}
- public void setProcessName(String processName) {
+ public void setProcessName(String processName)
+ {
this.processName = processName;
}
- public String[] getSwimlanes() {
+ public String[] getSwimlanes()
+ {
return swimlanes;
}
- public void setSwimlanes(String[] swimlanes) {
+ public void setSwimlanes(String[] swimlanes)
+ {
this.swimlanes = swimlanes;
- }
+ }
}
Modified: jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/def/JbpmSimulationModel.java
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/def/JbpmSimulationModel.java 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/def/JbpmSimulationModel.java 2008-09-05 09:18:05 UTC (rev 2127)
@@ -320,10 +320,10 @@
// // and build an observer to it
// Observer plotter = new Observer() {
// public void update(Observable obs, Object value) {
-// System.out.println("YYYYY " +
+// log.debug("YYYYY " +
// availableResourceTimeSeries.getDataValues().toArray().length + " | " +
// availableResourceTimeSeries.getTimeValues().toArray().length);
-// System.out.println("XXXXXXX " + obs + ": " + value);
+// log.debug("XXXXXXX " + obs + ": " + value);
// }
// };
// pool.getAvailableResourceTimeSeries().connectToPlotter(plotter);
Modified: jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/report/InMemoryOutput.java
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/report/InMemoryOutput.java 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/modules/jpdl/simulation/src/main/java/org/jbpm/sim/report/InMemoryOutput.java 2008-09-05 09:18:05 UTC (rev 2127)
@@ -65,7 +65,7 @@
* it observers.
*/
Reportable source = r.getReportable();
-// System.out.println( "SOURCE: " + (source!=null ? source + "[" + source.getClass().getName() + "]" : "NULL"));
+// log.debug( "SOURCE: " + (source!=null ? source + "[" + source.getClass().getName() + "]" : "NULL"));
String scenarioName = getScenarioName(r.getModel().getExperiment());
// if this is not possible, we do not run in a jbpm simulation
Added: jbpm3/trunk/modules/jpdl/simulation/src/test/resources/log4j.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/src/test/resources/log4j.xml (rev 0)
+++ jbpm3/trunk/modules/jpdl/simulation/src/test/resources/log4j.xml 2008-09-05 09:18:05 UTC (rev 2127)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <!-- ================================= -->
+ <!-- Preserve messages in a local file -->
+ <!-- ================================= -->
+
+ <appender name="FILE" class="org.apache.log4j.FileAppender">
+ <param name="File" value="${log4j.output.dir}/test.log"/>
+ <param name="Append" value="false"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c:%L] %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- ============================== -->
+ <!-- Append messages to the console -->
+ <!-- ============================== -->
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out" />
+ <param name="Threshold" value="INFO" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n" />
+ </layout>
+ </appender>
+
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+
+ <category name="org.jbpm">
+ <priority value="DEBUG" />
+ </category>
+
+ <category name="org.hibernate">
+ <priority value="INFO" />
+ </category>
+
+ <!-- hide optimistic locking failures -->
+ <category name="org.hibernate.event.def.AbstractFlushingEventListener">
+ <priority value="FATAL" />
+ </category>
+
+ <!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <!--appender-ref ref="CONSOLE"/-->
+ <appender-ref ref="FILE"/>
+ </root>
+
+</log4j:configuration>
Property changes on: jbpm3/trunk/modules/jpdl/simulation/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: jbpm3/trunk/pom.xml
===================================================================
--- jbpm3/trunk/pom.xml 2008-09-05 08:52:11 UTC (rev 2126)
+++ jbpm3/trunk/pom.xml 2008-09-05 09:18:05 UTC (rev 2127)
@@ -377,6 +377,20 @@
</dependencies>
</dependencyManagement>
+ <!-- Dependencies -->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
<!-- Plugins -->
<build>
<plugins>
17 years, 7 months
JBoss JBPM SVN: r2126 - jbpm3/trunk/modules/jpdl/simulation.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-05 04:52:11 -0400 (Fri, 05 Sep 2008)
New Revision: 2126
Modified:
jbpm3/trunk/modules/jpdl/simulation/pom.xml
Log:
Add log4j config
Modified: jbpm3/trunk/modules/jpdl/simulation/pom.xml
===================================================================
--- jbpm3/trunk/modules/jpdl/simulation/pom.xml 2008-09-05 08:38:37 UTC (rev 2125)
+++ jbpm3/trunk/modules/jpdl/simulation/pom.xml 2008-09-05 08:52:11 UTC (rev 2126)
@@ -73,13 +73,6 @@
<!-- Plugins -->
<build>
<plugins>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <!-- [JBPM-1292] Integrate simulation tests in automated testrun -->
- <skipTests>true</skipTests>
- </configuration>
- </plugin>
</plugins>
</build>
-</project>
\ No newline at end of file
+</project>
17 years, 7 months
JBoss JBPM SVN: r2125 - jbpm3/trunk.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-09-05 04:38:37 -0400 (Fri, 05 Sep 2008)
New Revision: 2125
Modified:
jbpm3/trunk/pom.xml
Log:
sun.facelets.version=1.1.14
Modified: jbpm3/trunk/pom.xml
===================================================================
--- jbpm3/trunk/pom.xml 2008-09-05 06:46:48 UTC (rev 2124)
+++ jbpm3/trunk/pom.xml 2008-09-05 08:38:37 UTC (rev 2125)
@@ -47,7 +47,6 @@
<dom4j.version>1.6.1</dom4j.version>
<drools.version>3.0.4</drools.version>
<dumbster.version>1.6</dumbster.version>
- <facelets.version>1.1.11</facelets.version>
<gwt.version>1.4.62</gwt.version>
<hibernate.version>3.2.6.ga</hibernate.version>
<hibernate.annotations.version>3.3.1.GA</hibernate.annotations.version>
@@ -73,6 +72,7 @@
<poi.version>3.0.2-FINAL</poi.version>
<richfaces.ui.version>3.2.1.GA</richfaces.ui.version>
<slf4j.version>1.5.2</slf4j.version>
+ <sun.facelets.version>1.1.14</sun.facelets.version>
<!-- Database Driver Versions -->
<hsqldb.version>1.8.0.7</hsqldb.version>
@@ -105,7 +105,7 @@
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
- <version>${facelets.version}</version>
+ <version>${sun.facelets.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
17 years, 7 months
JBoss JBPM SVN: r2124 - jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-09-05 02:46:48 -0400 (Fri, 05 Sep 2008)
New Revision: 2124
Added:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/QueryCommand.java
Log:
added QueryCommand
Added: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/QueryCommand.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/QueryCommand.java (rev 0)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/cmd/QueryCommand.java 2008-09-05 06:46:48 UTC (rev 2124)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.cmd;
+
+/** base class for commands that execute scalable queries.
+ *
+ * @author Tom Baeyens
+ */
+public abstract class QueryCommand<T> implements Command<T>{
+
+ private static final long serialVersionUID = 1L;
+
+ protected int firstResult;
+ protected int maxResults;
+
+ public QueryCommand(int firstResult, int maxResults) {
+ this.firstResult = firstResult;
+ this.maxResults = maxResults;
+ }
+}
17 years, 7 months
JBoss JBPM SVN: r2123 - in jbpm4/pvm/trunk: eclipse and 1 other directory.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-09-05 02:46:29 -0400 (Fri, 05 Sep 2008)
New Revision: 2123
Added:
jbpm4/pvm/trunk/eclipse/
jbpm4/pvm/trunk/eclipse/codetemplates.xml
jbpm4/pvm/trunk/eclipse/jbpmprofile.xml
jbpm4/pvm/trunk/eclipse/spaces.for.indentation.jpg
Log:
eclipse prefs
Added: jbpm4/pvm/trunk/eclipse/codetemplates.xml
===================================================================
--- jbpm4/pvm/trunk/eclipse/codetemplates.xml (rev 0)
+++ jbpm4/pvm/trunk/eclipse/codetemplates.xml 2008-09-05 06:46:29 UTC (rev 2123)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?><templates><template autoinsert="true" context="fieldcomment_context" deleted="false" description="Comment for vars" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
+ *
+ */</template><template autoinsert="false" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment"></template><template autoinsert="false" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment"></template><template autoinsert="true" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name="typecomment">/**
+ * @author ${user}
+ *
+ * ${tags}
+ */</template><template autoinsert="true" context="delegatecomment_context" deleted="false" description="Comment for delegate functions" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
+ * ${tags}
+ * ${see_to_target}
+ */</template><template autoinsert="true" context="methodcomment_context" deleted="false" description="Comment for non-overriding function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
+ * ${tags}
+ */</template><template autoinsert="false" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment"></template><template autoinsert="false" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment"></template><template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
+ * @author Tom Baeyens
+ */</template><template autoinsert="true" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
+ * ${tags}
+ */</template><template autoinsert="false" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment"></template><template autoinsert="true" context="overridecomment_context" deleted="false" description="Comment for overriding functions" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name="overridecomment">/* (non-Jsdoc)
+ * ${see_to_overridden}
+ */</template><template autoinsert="false" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment"></template><template autoinsert="true" context="settercomment_context" deleted="false" description="Comment for setter function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name="settercomment">/**
+ * @param ${param} the ${bare_field_name} to set
+ */</template><template autoinsert="true" context="filecomment_context" deleted="false" description="Comment for created JavaScript files" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name="filecomment">/**
+ *
+ */</template><template autoinsert="true" context="gettercomment_context" deleted="false" description="Comment for getter function" enabled="true" id="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
+ * @return the ${bare_field_name}
+ */</template><template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */</template><template autoinsert="false" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment"></template></templates>
\ No newline at end of file
Added: jbpm4/pvm/trunk/eclipse/jbpmprofile.xml
===================================================================
--- jbpm4/pvm/trunk/eclipse/jbpmprofile.xml (rev 0)
+++ jbpm4/pvm/trunk/eclipse/jbpmprofile.xml 2008-09-05 06:46:29 UTC (rev 2123)
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<profiles version="11">
+<profile kind="CodeFormatterProfile" name="jbpm profile" version="11">
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="160"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+</profile>
+</profiles>
Added: jbpm4/pvm/trunk/eclipse/spaces.for.indentation.jpg
===================================================================
(Binary files differ)
Property changes on: jbpm4/pvm/trunk/eclipse/spaces.for.indentation.jpg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
17 years, 7 months