JBoss JBPM SVN: r6364 - in jbpm4/trunk/modules: jpdl/src/test/java/org/jbpm/jpdl and 6 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-05-20 22:10:12 -0400 (Thu, 20 May 2010)
New Revision: 6364
Added:
jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/
jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/JbpmTestExtensionsImpl.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/test/JbpmTestExtensionsImpl.java
Removed:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/test/JbpmTestExtensionsImpl.java
Modified:
jbpm4/trunk/modules/jpdl/pom.xml
jbpm4/trunk/modules/pvm/pom.xml
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/Clock.java
jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestExtensions.java
Log:
JBPM-2839: move jbpm-test-base dependency of jbpm-pvm to test scope
disentangle compilation dependency on jbpm-test-base due to JbpmTestExtensions
Modified: jbpm4/trunk/modules/jpdl/pom.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/pom.xml 2010-05-21 00:11:58 UTC (rev 6363)
+++ jbpm4/trunk/modules/jpdl/pom.xml 2010-05-21 02:10:12 UTC (rev 6364)
@@ -64,6 +64,12 @@
<excludes>
<exclude>org/jbpm/test/update/ProcessUpdateTest.java</exclude>
</excludes>
+ <systemProperties>
+ <property>
+ <name>org.jbpm.test.JbpmTestExtensions</name>
+ <value>org.jbpm.jpdl.test.JbpmTestExtensionsImpl</value>
+ </property>
+ </systemProperties>
</configuration>
</plugin>
</plugins>
Added: jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/JbpmTestExtensionsImpl.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/JbpmTestExtensionsImpl.java (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/JbpmTestExtensionsImpl.java 2010-05-21 02:10:12 UTC (rev 6364)
@@ -0,0 +1,43 @@
+/*
+ * 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.jpdl.test;
+
+import java.util.Date;
+
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.test.JbpmTestExtensions;
+
+/**
+ * @author Tom Baeyens
+ */
+public class JbpmTestExtensionsImpl extends JbpmTestExtensions {
+
+ @Override
+ public Date getExplicitTime() {
+ return Clock.getExplicitTime();
+ }
+
+ @Override
+ public void setExplicitTime(Date explicitTime) {
+ Clock.setExplicitTime(explicitTime);
+ }
+}
Property changes on: jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/test/JbpmTestExtensionsImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: jbpm4/trunk/modules/pvm/pom.xml
===================================================================
--- jbpm4/trunk/modules/pvm/pom.xml 2010-05-21 00:11:58 UTC (rev 6363)
+++ jbpm4/trunk/modules/pvm/pom.xml 2010-05-21 02:10:12 UTC (rev 6364)
@@ -182,6 +182,12 @@
<exclude>**/*TestCase.java</exclude>
<exclude>org/jbpm/examples/bpmn/gateway/exclusive/ExclusiveGateway*</exclude>
</excludes>
+ <systemProperties>
+ <property>
+ <name>org.jbpm.test.JbpmTestExtensions</name>
+ <value>org.jbpm.pvm.test.JbpmTestExtensionsImpl</value>
+ </property>
+ </systemProperties>
</configuration>
</plugin>
</plugins>
Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/test/JbpmTestExtensionsImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/test/JbpmTestExtensionsImpl.java 2010-05-21 00:11:58 UTC (rev 6363)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/test/JbpmTestExtensionsImpl.java 2010-05-21 02:10:12 UTC (rev 6364)
@@ -1,42 +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.test;
-
-import java.util.Date;
-
-import org.jbpm.pvm.internal.util.Clock;
-import org.jbpm.test.JbpmTestExtensions;
-
-
-/**
- * @author Tom Baeyens
- */
-public class JbpmTestExtensionsImpl extends JbpmTestExtensions {
-
- public Date getExplicitTime() {
- return Clock.getExplicitTime();
- }
-
- public void setExplicitTime(Date explicitTime) {
- Clock.setExplicitTime(explicitTime);
- }
-}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/Clock.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/Clock.java 2010-05-21 00:11:58 UTC (rev 6363)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/Clock.java 2010-05-21 02:10:12 UTC (rev 6364)
@@ -2,8 +2,12 @@
import java.util.Date;
-public abstract class Clock {
+public class Clock {
+ private Clock() {
+ // prevent instantiation
+ }
+
protected static Date explicitTime = null;
public static Date getTime() {
Copied: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/test/JbpmTestExtensionsImpl.java (from rev 6362, jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/test/JbpmTestExtensionsImpl.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/test/JbpmTestExtensionsImpl.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/test/JbpmTestExtensionsImpl.java 2010-05-21 02:10:12 UTC (rev 6364)
@@ -0,0 +1,43 @@
+/*
+ * 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.test;
+
+import java.util.Date;
+
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.test.JbpmTestExtensions;
+
+/**
+ * @author Tom Baeyens
+ */
+public class JbpmTestExtensionsImpl extends JbpmTestExtensions {
+
+ @Override
+ public Date getExplicitTime() {
+ return Clock.getExplicitTime();
+ }
+
+ @Override
+ public void setExplicitTime(Date explicitTime) {
+ Clock.setExplicitTime(explicitTime);
+ }
+}
Modified: jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestExtensions.java
===================================================================
--- jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestExtensions.java 2010-05-21 00:11:58 UTC (rev 6363)
+++ jbpm4/trunk/modules/test-base/src/main/java/org/jbpm/test/JbpmTestExtensions.java 2010-05-21 02:10:12 UTC (rev 6364)
@@ -25,26 +25,38 @@
import org.jbpm.api.JbpmException;
-
/**
* @author Tom Baeyens
*/
public abstract class JbpmTestExtensions {
-
- protected static JbpmTestExtensions instance = instantiateJbpmTestExtentions();
+ private static final String PROPERTY_NAME = "org.jbpm.test.JbpmTestExtensions";
+ private static final JbpmTestExtensions instance = instantiateJbpmTestExtentions();
+
protected static JbpmTestExtensions instantiateJbpmTestExtentions() {
- ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
- JbpmTestExtensions newInstance;
+ String implClassName = System.getProperty(PROPERTY_NAME);
+ if (implClassName == null) {
+ throw new JbpmException("system property not specified: " + PROPERTY_NAME);
+ }
+
try {
- Class<?> implClass = Class.forName("org.jbpm.pvm.internal.test.JbpmTestExtensionsImpl", true, contextClassLoader);
- newInstance = (JbpmTestExtensions) implClass.newInstance();
- } catch (Exception e) {
- throw new JbpmException("couldn't load jbpm test extensions", e);
+ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ Class<?> implClass = Class.forName(implClassName, false, contextClassLoader);
+ try {
+ return (JbpmTestExtensions) implClass.newInstance();
+ }
+ catch (InstantiationException e) {
+ throw new JbpmException("failed to instantiate " + implClass, e);
+ }
+ catch (IllegalAccessException e) {
+ throw new JbpmException(JbpmTestExtensions.class + " has no access to " + implClass, e);
+ }
}
- return newInstance;
+ catch (ClassNotFoundException e) {
+ throw new JbpmException("could not find class " + implClassName, e);
+ }
}
-
+
public static JbpmTestExtensions getJbpmTestExtensions() {
return instance;
}
13 years, 11 months
JBoss JBPM SVN: r6363 - in jbpm4/trunk/modules: integration/console and 1 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-05-20 20:11:58 -0400 (Thu, 20 May 2010)
New Revision: 6363
Modified:
jbpm4/trunk/modules/api/pom.xml
jbpm4/trunk/modules/integration/console/pom.xml
jbpm4/trunk/modules/test-base/pom.xml
Log:
JBPM-2838: move jboss-j2ee dependency of jbpm-api pom to scope 'provided'
add jboss-j2ee dependency to console-integration and test-base to compensate
Modified: jbpm4/trunk/modules/api/pom.xml
===================================================================
--- jbpm4/trunk/modules/api/pom.xml 2010-05-19 21:56:28 UTC (rev 6362)
+++ jbpm4/trunk/modules/api/pom.xml 2010-05-21 00:11:58 UTC (rev 6363)
@@ -32,6 +32,7 @@
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-j2ee</artifactId>
+ <scope>provided</scope>
</dependency>
</dependencies>
Modified: jbpm4/trunk/modules/integration/console/pom.xml
===================================================================
--- jbpm4/trunk/modules/integration/console/pom.xml 2010-05-19 21:56:28 UTC (rev 6362)
+++ jbpm4/trunk/modules/integration/console/pom.xml 2010-05-21 00:11:58 UTC (rev 6363)
@@ -46,6 +46,11 @@
<version>${javax.jaxb.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.jboss.errai</groupId>
Modified: jbpm4/trunk/modules/test-base/pom.xml
===================================================================
--- jbpm4/trunk/modules/test-base/pom.xml 2010-05-19 21:56:28 UTC (rev 6362)
+++ jbpm4/trunk/modules/test-base/pom.xml 2010-05-21 00:11:58 UTC (rev 6363)
@@ -33,19 +33,24 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-log</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- </dependency>
- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
@@ -79,17 +84,5 @@
<artifactId>cglib-nodep</artifactId>
<version>2.1_3</version>
</dependency>
- <!-- dependency>
- <groupId>apache-oro</groupId>
- <artifactId>jakarta-oro</artifactId>
- <version>2.0.8</version>
- </dependency -->
- </dependencies>
-
- <!-- Plugins -->
- <build>
- <plugins>
- </plugins>
- </build>
-
+ </dependencies>
</project>
\ No newline at end of file
13 years, 11 months
JBoss JBPM SVN: r6362 - in jbpm3/branches/jbpm-3.2-soa/modules/userguide: src/main/docbook and 1 other directories.
by do-not-reply@jboss.org
Author: dlesage
Date: 2010-05-19 17:56:28 -0400 (Wed, 19 May 2010)
New Revision: 6362
Added:
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Author_Group.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Book_Info.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/LGPL_Appendix.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Legal_Notice.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Preface.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Revision_History.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/images/
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.ent
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/publican.cfg
Removed:
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/
Modified:
jbpm3/branches/jbpm-3.2-soa/modules/userguide/pom.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/async.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/calendar.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/configuration.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/context.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/database.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/deployment.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/developers.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/enterprise.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/gettingstarted.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/introduction.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jpdl.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/logging.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/mail.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/modelling.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/persistence.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/pluggable.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/scheduler.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/security.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/simulation.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/taskmgmt.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tdd.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tutorial.xml
Log:
JBPM 2866 - Major restructure
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/pom.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/pom.xml 2010-05-19 18:51:44 UTC (rev 6361)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/pom.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -38,21 +38,61 @@
<plugin>
<groupId>org.jboss.maven.plugins</groupId>
<artifactId>maven-jdocbook-plugin</artifactId>
+ <version>2.2.0</version>
<extensions>true</extensions>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jbossorg-docbook-xslt</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jbpm.jbpm4</groupId>
+ <artifactId>docbook-style</artifactId>
+ <version>1.0.0</version>
+ <type>jdocbook-style</type>
+ </dependency>
+ </dependencies>
+
<configuration>
- <sourceDocumentName>en/master.xml</sourceDocumentName>
+ <options>
+ <xincludeSupported>true</xincludeSupported>
+ <xmlTransformerType>saxon</xmlTransformerType>
+ <!-- needed for uri-resolvers; can be ommitted if using 'current' uri scheme -->
+ <!-- could also locate the docbook dependency and inspect its version... -->
+ <docbookVersion>1.72.0</docbookVersion>
+ <transformerParameters>
+ <property>
+ <name>javax.xml.parsers.DocumentBuilderFactory</name>
+ <value>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</value>
+ </property>
+ <property>
+ <name>javax.xml.parsers.SAXParserFactory</name>
+ <value>org.apache.xerces.jaxp.SAXParserFactoryImpl</value>
+ </property>
+ </transformerParameters>
+
+ </options>
+ <sourceDocumentName>jBPM_jPDL_User_Guide.xml</sourceDocumentName>
<imageResource>
- <directory>${basedir}/src/main/docbook/en</directory>
- <includes>
- <include>**/*.gif</include>
- <include>**/*.jpg</include>
+ <directory>${basedir}/src/main/docbook/en-US/</directory>
+ <includes>
+ <include>images/*</include>
+<!-- <include>**/*.jpg</include> -->
</includes>
- </imageResource>
+ </imageResource>
<formats>
- <format>
- <formatName>html</formatName>
- <finalName>index.html</finalName>
- </format>
+ <format>
+ <formatName>html_single</formatName>
+ <stylesheetResource>classpath:/xslt/org/jboss/xhtml-single.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ </format>
+ <!-- <format>
+ <formatName>html</formatName>
+ <stylesheetResource>classpath:/xslt/org/jboss/xhtml.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ </format> -->
</formats>
</configuration>
</plugin>
Copied: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US (from rev 6357, jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules)
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Author_Group.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Author_Group.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Author_Group.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,17 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<authorgroup>
+ <author>
+ <firstname>Dude</firstname>
+ <surname>McPants</surname>
+ <affiliation>
+ <orgname>Somewhere</orgname>
+ <orgdiv>Someone</orgdiv>
+ </affiliation>
+ <email>Dude.McPants(a)example.com</email>
+ </author>
+</authorgroup>
+
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Book_Info.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Book_Info.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Book_Info.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,33 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<bookinfo id="book-jBPM_jPDL_User_Guide-jBPM_jPDL_User_Guide">
+ <title>jBPM jPDL User Guide</title>
+ <subtitle>A guide to developing with and using jBPM 3</subtitle>
+ <productname>jBPM</productname>
+ <productnumber>3.2.8</productnumber>
+ <edition>1</edition>
+ <pubsnumber>1</pubsnumber> <!-- ignore, needed by redhat pubs system -->
+ <abstract>
+ <para>
+ This is the User Guide for jBPM 3. jBPM is a flexible Business Process Management (BPM) Suite that
+ bridges the gap between non-technical business users and developers by offering both BPM and workflow
+ features.
+ </para>
+ </abstract>
+ <corpauthor>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="Common_Content/images/title_logo.svg" format="SVG" />
+ </imageobject>
+ </inlinemediaobject>
+ </corpauthor>
+
+ <xi:include href="Legal_Notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <!-- <xi:include href="Author_Group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
+
+</bookinfo>
+
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/LGPL_Appendix.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/LGPL_Appendix.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/LGPL_Appendix.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,255 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<!-- this file stolen from http://www.gnu.org/copyleft/lesser.html -->
+
+<appendix id="lgpl">
+ <title>
+ <acronym>GNU</acronym> Lesser General Public License version 3
+ </title>
+ <para>
+ Version 3, 29 June 2007
+ </para>
+ <para>
+ Copyright © 2007 Free Software Foundation, Inc.
+ <ulink url="http://fsf.org/">http://fsf.org/</ulink>
+ </para>
+ <para>
+ Everyone is permitted to copy and distribute verbatim copies of this license
+ document, but changing it is not allowed.
+ </para>
+ <para>
+ This version of the <acronym>GNU</acronym> Lesser General Public License
+ incorporates the terms and conditions of version 3 of the
+ <acronym>GNU</acronym> General Public License, supplemented by the
+ additional permissions listed below.
+ </para>
+ <bridgehead id="AdditionalDefinitions" renderas="sect1">
+ 0. Additional Definitions.
+ </bridgehead>
+ <para>
+ As used herein, “this License” refers to version 3 of the
+ <acronym>GNU</acronym> Lesser General Public License, and the
+ “<acronym>GNU</acronym> <acronym>GPL</acronym>” refers to
+ version 3 of the <acronym>GNU</acronym> General Public License.
+ </para>
+ <para>
+ “The Library” refers to a covered work governed by this License,
+ other than an Application or a Combined Work as defined below.
+ </para>
+ <para>
+ An “Application” is any work that makes use of an interface
+ provided by the Library, but which is not otherwise based on the Library.
+ Defining a subclass of a class defined by the Library is deemed a mode of
+ using an interface provided by the Library.
+ </para>
+ <para>
+ A “Combined Work” is a work produced by combining or linking an
+ Application with the Library. The particular version of the Library with
+ which the Combined Work was made is also called the “Linked
+ Version”.
+ </para>
+ <para>
+ The “Minimal Corresponding Source” for a Combined Work means the
+ Corresponding Source for the Combined Work, excluding any source code for
+ portions of the Combined Work that, considered in isolation, are based on
+ the Application, and not on the Linked Version.
+ </para>
+ <para>
+ The “Corresponding Application Code” for a Combined Work means
+ the object code and/or source code for the Application, including any data
+ and utility programs needed for reproducing the Combined Work from the
+ Application, but excluding the System Libraries of the Combined Work.
+ </para>
+ <bridgehead id="ExceptionSec3" renderas="sect1">
+ 1. Exception to Section 3 of the <acronym>GNU</acronym>
+ <acronym>GPL</acronym>.
+ </bridgehead>
+ <para>
+ You may convey a covered work under sections 3 and 4 of this License without
+ being bound by section 3 of the <acronym>GNU</acronym>
+ <acronym>GPL</acronym>.
+ </para>
+ <bridgehead id="ConveyingModified" renderas="sect1">
+ 2. Conveying Modified Versions.
+ </bridgehead>
+ <para>
+ If you modify a copy of the Library, and, in your modifications, a facility
+ refers to a function or data to be supplied by an Application that uses the
+ facility (other than as an argument passed when the facility is invoked),
+ then you may convey a copy of the modified version:
+ </para>
+ <orderedlist numeration="loweralpha">
+ <listitem>
+ <para>
+ under this License, provided that you make a good faith effort to ensure
+ that, in the event an Application does not supply the function or data,
+ the facility still operates, and performs whatever part of its purpose
+ remains meaningful, or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ under the <acronym>GNU</acronym> <acronym>GPL</acronym>, with none of
+ the additional permissions of this License applicable to that copy.
+ </para>
+ </listitem>
+ </orderedlist>
+ <bridgehead id="ObjectCodeIncorporating" renderas="sect1">
+ 3. Object Code Incorporating Material from Library Header Files.
+ </bridgehead>
+ <para>
+ The object code form of an Application may incorporate material from a
+ header file that is part of the Library. You may convey such object code
+ under terms of your choice, provided that, if the incorporated material is
+ not limited to numerical parameters, data structure layouts and accessors,
+ or small macros, inline functions and templates (ten or fewer lines in
+ length), you do both of the following:
+ </para>
+ <orderedlist numeration="loweralpha">
+ <listitem>
+ <para>
+ Give prominent notice with each copy of the object code that the Library
+ is used in it and that the Library and its use are covered by this
+ License.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Accompany the object code with a copy of the <acronym>GNU</acronym>
+ <acronym>GPL</acronym> and this license document.
+ </para>
+ </listitem>
+ </orderedlist>
+ <bridgehead id="CombinedWorks" renderas="sect1">
+ 4. Combined Works.
+ </bridgehead>
+ <para>
+ You may convey a Combined Work under terms of your choice that, taken
+ together, effectively do not restrict modification of the portions of the
+ Library contained in the Combined Work and reverse engineering for debugging
+ such modifications, if you also do each of the following:
+ </para>
+ <orderedlist numeration="loweralpha">
+ <listitem>
+ <para>
+ Give prominent notice with each copy of the Combined Work that the
+ Library is used in it and that the Library and its use are covered by
+ this License.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Accompany the Combined Work with a copy of the <acronym>GNU</acronym>
+ <acronym>GPL</acronym> and this license document.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ For a Combined Work that displays copyright notices during execution,
+ include the copyright notice for the Library among these notices, as
+ well as a reference directing the user to the copies of the
+ <acronym>GNU</acronym> <acronym>GPL</acronym> and this license document.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Do one of the following:
+ </para>
+ <orderedlist numeration="arabic" role="0">
+ <listitem>
+ <para>
+ Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form suitable
+ for, and under terms that permit, the user to recombine or relink
+ the Application with a modified version of the Linked Version to
+ produce a modified Combined Work, in the manner specified by section
+ 6 of the <acronym>GNU</acronym> <acronym>GPL</acronym> for conveying
+ Corresponding Source.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time a
+ copy of the Library already present on the user’s computer
+ system, and (b) will operate properly with a modified version of the
+ Library that is interface-compatible with the Linked Version.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ <listitem>
+ <para>
+ Provide Installation Information, but only if you would otherwise be
+ required to provide such information under section 6 of the
+ <acronym>GNU</acronym> <acronym>GPL</acronym>, and only to the extent
+ that such information is necessary to install and execute a modified
+ version of the Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If you use
+ option 4d0, the Installation Information must accompany the Minimal
+ Corresponding Source and Corresponding Application Code. If you use
+ option 4d1, you must provide the Installation Information in the manner
+ specified by section 6 of the <acronym>GNU</acronym>
+ <acronym>GPL</acronym> for conveying Corresponding Source.)
+ </para>
+ </listitem>
+ </orderedlist>
+ <bridgehead id="CombinedLibraries" renderas="sect1">
+ 5. Combined Libraries.
+ </bridgehead>
+ <para>
+ You may place library facilities that are a work based on the Library side
+ by side in a single library together with other library facilities that are
+ not Applications and are not covered by this License, and convey such a
+ combined library under terms of your choice, if you do both of the
+ following:
+ </para>
+ <orderedlist numeration="loweralpha">
+ <listitem>
+ <para>
+ Accompany the combined library with a copy of the same work based on the
+ Library, uncombined with any other library facilities, conveyed under
+ the terms of this License.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Give prominent notice with the combined library that part of it is a
+ work based on the Library, and explaining where to find the accompanying
+ uncombined form of the same work.
+ </para>
+ </listitem>
+ </orderedlist>
+ <bridgehead id="RevisedVersions" renderas="sect1">
+ 6. Revised Versions of the <acronym>GNU</acronym> Lesser General Public
+ License.
+ </bridgehead>
+ <para>
+ The Free Software Foundation may publish revised and/or new versions of the
+ <acronym>GNU</acronym> Lesser General Public License from time to time. Such
+ new versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+ </para>
+ <para>
+ Each version is given a distinguishing version number. If the Library as you
+ received it specifies that a certain numbered version of the
+ <acronym>GNU</acronym> Lesser General Public License “or any later
+ version” applies to it, you have the option of following the terms and
+ conditions either of that published version or of any later version
+ published by the Free Software Foundation. If the Library as you received it
+ does not specify a version number of the <acronym>GNU</acronym> Lesser
+ General Public License, you may choose any version of the
+ <acronym>GNU</acronym> Lesser General Public License ever published by the
+ Free Software Foundation.
+ </para>
+ <para>
+ If the Library as you received it specifies that a proxy can decide whether
+ future versions of the <acronym>GNU</acronym> Lesser General Public License
+ shall apply, that proxy’s public statement of acceptance of any
+ version is permanent authorization for you to choose that version for the
+ Library.
+ </para>
+</appendix>
\ No newline at end of file
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Legal_Notice.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Legal_Notice.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Legal_Notice.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+
+<legalnotice lang="en-US">
+ <para>
+ Copyright <trademark class="copyright"></trademark> &YEAR; &HOLDER;.
+ </para>
+
+ <para>
+ jBPM 3 is licensed under the GNU Lesser General Public License (LGPL).
+ A copy of this license is included in the Appendix of this document.
+ <!-- A copy of this license is included in <xref linkend="lgpl" />. -->
+ </para>
+
+</legalnotice>
+
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Preface.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Preface.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Preface.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<preface id="pref-jBPM_jPDL_User_Guide-Preface">
+ <title>Preface</title>
+ <xi:include href="Common_Content/Conventions.xml" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:fallback xmlns:xi="http://www.w3.org/2001/XInclude" />
+ </xi:include>
+
+ <xi:include href="Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:fallback xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="Common_Content/Feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ </xi:fallback>
+ </xi:include>
+
+</preface>
+
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Revision_History.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Revision_History.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/Revision_History.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,27 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<appendix id="appe-jBPM_jPDL_User_Guide-Revision_History">
+ <title>Revision History</title>
+ <simpara>
+ <revhistory>
+ <revision>
+ <revnumber>0</revnumber>
+ <date>Tue May 11 2010</date>
+ <author>
+ <firstname>David</firstname>
+ <surname>Le Sage</surname>
+ <email>dlesage(a)redhat.com</email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Initial creation of book by publican</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ </revhistory>
+ </simpara>
+</appendix>
+
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/async.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/async.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/async.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="asynchronouscontinuations">
<title>Asynchronous continuations</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/calendar.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/calendar.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/calendar.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="businesscalendar">
<title>Business calendar</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/configuration.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/configuration.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/configuration.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="configuration">
<title>Configuration</title>
@@ -93,39 +98,19 @@
<string name="jbpm.mail.smtp.host" value="localhost" />
<string name="jbpm.mail.from.address" value="jbpm@noreply" />
<bean name="jbpm.mail.address.resolver" class="org.jbpm.identity.mail.IdentityAddressResolver" singleton="true" />
-
- <!-- job execution properties -->
- <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor" singleton="true">
- <property name="jbpmConfiguration">
- <ref bean="jbpmConfiguration" />
- </property>
- <property name="name">
- <string value="JbpmJobExecutor" />
- </property>
- <property name="nbrOfThreads">
- <int value="1" />
- </property>
- <property name="idleInterval">
- <!-- 5 seconds -->
- <int value="5000" />
- </property>
- <property name="maxIdleInterval">
- <!-- 1 hour -->
- <int value="3600000" />
- </property>
- <property name="maxLockTime">
- <!-- 10 minutes -->
- <int value="600000" />
- </property>
- <property name="lockMonitorInterval">
- <!-- 1 minute -->
- <int value="60000" />
- </property>
+
+ <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
+ <property name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></property>
+ <property name="name"><string value="JbpmJobExecutor" /></property>
+ <property name="nbrOfThreads"><int value="1" /></property>
+ <property name="retries"><int value="3" /></property>
+ <property name="idleInterval"><int value="5000" /></property>
+ <property name="maxIdleInterval"><int value="3600000" /><!-- 1 hour --></property>
+ <property name="maxLockTime"><int value="600000" /><!-- 10 minutes --></property>
+ <property name="lockMonitorInterval"><int value="60000" /><!-- 1 minute --></property>
+ <property name="lockBufferTime"><int value="5000" /><!-- 5 seconds --></property>
</bean>
- <!-- job retry count -->
- <int name="jbpm.job.retries" value="3" />
-
</jbpm-configuration>]]></programlisting>
<para>In this configuration file you can see 3 parts:
@@ -136,10 +121,10 @@
implementations. The possible configuration options are covered in the chapters
that cover the specific service implementations.
</para></listitem>
- <listitem><para>The second part is a series of references to configuration
+ <listitem><para>The second part are all mappings of references to configuration
resources. These resource references can be updated if you want to customize
one of these configuration files. Typically, you make a copy the default configuration
- which is in the <literal>jbpm-jpdl.jar</literal> and put it somewhere on the classpath.
+ which is in the <literal>jbpm-3.x.jar</literal> and put it somewhere on the classpath.
Then you update the reference in this file and jbpm will use your customized version
of that configuration file.
</para></listitem>
@@ -200,12 +185,12 @@
<section id="customizingfactories">
<title>Customizing factories</title>
<para>A common mistake when customizing factories is to mix the short and the long notation.
- Examples of the short notation can be seen in the default configuration file and above:
+ Examples of the short notation can be seen in the default configuration file and above: E.g.
</para>
- <programlisting> <service name='persistence'
- factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /></programlisting>
+ <programlisting> ...
+ <service name='persistence' factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /></programlisting>
<para>If specific properties on a service need to be specified, the short notation can't be used, but instead,
- the long notation has to be used like this:
+ the long notation has to be used like this: E.g.
</para>
<programlisting> <service name="persistence">
<factory>
@@ -365,6 +350,11 @@
<entry>1</entry>
</row>
<row>
+ <entry>retries</entry>
+ <entry>Number of times the job executor retries a failed job</entry>
+ <entry>3</entry>
+ </row>
+ <row>
<entry>idleInterval</entry>
<entry>Period between checks for new jobs (milliseconds)</entry>
<entry>5 seconds</entry>
@@ -390,18 +380,6 @@
</tbody>
</tgroup>
</table>
-
- <para>In addition to the job executor bean properties, you can indicate the
- number of times a failed job is retried. Set the <literal>jbpm.job.retries</literal>
- configuration entry to the desired value. The default is 3.</para>
- <programlisting><![CDATA[<int name="jbpm.job.retries" value="5" />]]></programlisting>
- <caution><para>Setting the retry count to a low value may cause <ulink
- url="https://jira.jboss.org/browse/JBPM-2787">process instances to get stuck</ulink>,
- whereas a high value causes jobs with unrecoverable exceptions (for instance,
- database connectivity problems) to be unduly reattempted.</para></caution>
- <note><para>Alternate implementations of the message and timer service,
- such as the JCA inflow service included with JBoss ESB, also recognize
- the <literal>jbpm.job.retries</literal> configuration entry.</para></note>
</section>
<section id="objectfactory">
@@ -423,8 +401,11 @@
<double name="salary">100000000.32</double>
<char name="java">j</char>
<null name="dusttodust" />
-</beans></programlisting>
- <programlisting>ObjectFactory of = ObjectFactory.parseXmlFromAbove();
+</beans>
+
+---------------------------------------------------------
+
+ObjectFactory of = ObjectFactory.parseXmlFromAbove();
assertEquals(TaskInstance.class, of.getNewObject("task").getClass());
assertEquals("hello world", of.getNewObject("greeting"));
assertEquals(new Integer(42), of.getNewObject("answer"));
@@ -434,6 +415,7 @@
assertEquals(new Character('j'), of.getNewObject("java"));
assertNull(of.getNewObject("dusttodust"));</programlisting>
+
<para>Also you can configure lists:</para>
<programlisting><beans>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/context.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/context.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/context.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="context">
<title>Context</title>
@@ -29,19 +34,19 @@
<para>
<itemizedlist>
- <listitem><literal>java.lang.String</literal></listitem>
- <listitem><literal>java.lang.Boolean</literal></listitem>
- <listitem><literal>java.lang.Character</literal></listitem>
- <listitem><literal>java.lang.Float</literal></listitem>
- <listitem><literal>java.lang.Double</literal></listitem>
- <listitem><literal>java.lang.Long</literal></listitem>
- <listitem><literal>java.lang.Byte</literal></listitem>
- <listitem><literal>java.lang.Short</literal></listitem>
- <listitem><literal>java.lang.Integer</literal></listitem>
- <listitem><literal>java.util.Date</literal></listitem>
- <listitem><literal>byte[]</literal></listitem>
- <listitem><literal>java.io.Serializable</literal></listitem>
- <listitem><literal>classes that are persistable with hibernate</literal></listitem>
+ <listitem><para><literal>java.lang.String</literal></para></listitem>
+ <listitem><para><literal>java.lang.Boolean</literal></para></listitem>
+ <listitem><para><literal>java.lang.Character</literal></para></listitem>
+ <listitem><para><literal>java.lang.Float</literal></para></listitem>
+ <listitem><para><literal>java.lang.Double</literal></para></listitem>
+ <listitem><para><literal>java.lang.Long</literal></para></listitem>
+ <listitem><para><literal>java.lang.Byte</literal></para></listitem>
+ <listitem><para><literal>java.lang.Short</literal></para></listitem>
+ <listitem><para><literal>java.lang.Integer</literal></para></listitem>
+ <listitem><para><literal>java.util.Date</literal></para></listitem>
+ <listitem><para><literal>byte[]</literal></para></listitem>
+ <listitem><para><literal>java.io.Serializable</literal></para></listitem>
+ <listitem><para><literal>classes that are persistable with hibernate</literal></para></listitem>
</itemizedlist>
</para>
@@ -90,7 +95,7 @@
<title>Variables scopes</title>
<para>Each path of execution (read: token) has its own set of process variables.
Requesting a variable is always done on a token. Process instances have a tree
- of tokens (see <link linkend="graphorientedprogramming">graph oriented programming</link>).
+ of tokens (see graph oriented programming ).
When requesting a variable without specifying a token, the default token is the
root token.
</para>
@@ -130,7 +135,7 @@
<section id="taskinstancevariablescope">
<title>Task instance variable scope</title>
- <para>For more info on task instance variables, see <xref linkend="taskinstancevariables" />.
+ <para>For more info on task instance variables, see the section on Task Instance Variables.
</para>
</section>
</section>
@@ -215,19 +220,19 @@
}</programlisting>
<para>Converters are optional. Converters must be available to
- <link linkend="thejbpmclassloader">the jBPM class loader</link></para>
+ the jBPM class loader</para>
<para>The way that user-java-objects are converted and stored in
variable instances is configured in the file
<literal>org/jbpm/context/exe/jbpm.varmapping.properties</literal>.
To customize this property file, put a modified version in the root of
- the classpath, as explained in <xref linkend="configurationfiles"/>
+ the classpath, as explained in
Each line of the properties file specifies 2 or 3 class-names separated by spaces :
the classname of the user-java-object, optionally the classname of the converter
and the classname of the variable instance. When you refer your custom converters,
- make sure they are in <link linkend="thejbpmclassloader">the jBPM class path</link>.
+ make sure they are in the jBPM class path .
When you refer to your custom variable instances, they also have to be in
- the <link linkend="thejbpmclassloader">the jBPM class path</link> and the hibernate
+ the the jBPM class path and the hibernate
mapping file for <literal>org/jbpm/context/exe/VariableInstance.hbm.xml</literal>
has to be updated to include the custom subclass of VariableInstance.
</para>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/database.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/database.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/database.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,4 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="thejbpmdatabase">
<title>The jBPM Database</title>
@@ -30,7 +34,7 @@
<title>Isolation level</title>
<para>Whatever database that you use, make sure that the isolation level
of the configured JDBC connection is at least READ_COMMITTED, as explained
- in <xref linkend="isolationlevelofthejdbcconnection"/>.
+ in section on the Isolation Level of the JDBC Connection.
</para>
</section>
@@ -267,7 +271,7 @@
<para>For MySQL, the datasource definition would look as follows:</para>
- <programlisting language="xml"><datasources>
+ <programlisting language="XML"><datasources>
<local-tx-datasource>
<jndi-name>JbpmDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/jbpmdb</connection-url>
@@ -313,7 +317,7 @@
using. You can get a list of supported database Dialect types from here
http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configurat...</para>
- <programlisting language="xml"><hibernate-configuration>
+ <programlisting language="XML"><hibernate-configuration>
<session-factory>
<!-- jdbc connection properties -->
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/deployment.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/deployment.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/deployment.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="deployment">
<title>Deployment</title>
@@ -41,7 +46,9 @@
but instead build your object graph programatically.
</para>
- <table frame="topbot" id="minimal.dependencies.table">
+
+ <table>
+ <title>Properties</title>
<tgroup cols="3" rowsep="1" colsep="1">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="2*"/>
@@ -86,7 +93,8 @@
standalone POJO development environment.
</para>
- <table frame="topbot" id="typical.dependencies.table">
+ <table>
+ <title>Typical Dependencies</title>
<tgroup cols="3" rowsep="1" colsep="1">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="2*"/>
@@ -133,7 +141,8 @@
and hence, the script element won't be available.
</para>
- <table frame="topbot" id="optional.dependencies.table">
+ <table>
+ <title>Optional Dependencies</title>
<tgroup cols="3" rowsep="1" colsep="1">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="2*"/>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/developers.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/developers.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/developers.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="developers">
<title>Developers</title>
<para>This chapter describes the build structure of jbpm for developers.</para>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/enterprise.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/enterprise.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/enterprise.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="enterprise">
<title>Java EE Application Server Facilities</title>
@@ -225,9 +230,12 @@
The JTA persistence service factory has the configurable fields described below.
</para>
- <itemizedlist>
+ <variablelist>
- <listitem><literal>isCurrentSessionEnabled</literal>: if <literal>true</literal>, jBPM will
+ <varlistentry>
+ <term>isCurrentSessionEnabled</term>
+
+ <listitem><para>if <literal>true</literal>, jBPM will
use the "current" Hibernate session associated with the ongoing JTA transaction. This is the
default setting. See the Hibernate guide, section <ulink
url="http://www.hibernate.org/hib_docs/v3/reference/en/html/architecture.html#...">
@@ -240,9 +248,14 @@
ensure that jBPM uses the same Hibernate session as other parts of your application. Note,
the Hibernate session can be injected into a stateless session bean via a persistence context,
for example.
- </listitem>
+ </para></listitem>
+ </varlistentry>
- <listitem><literal>isTransactionEnabled</literal>: a <literal>true</literal> value for this
+
+ <varlistentry>
+ <term>isTransactionEnabled</term>
+
+ <listitem><para>a <literal>true</literal> value for this
field means jBPM will begin a transaction through Hibernate's transaction API (section <ulink
url="http://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html#...">
11.2. Database transaction demarcation</ulink> of the Hibernate manual shows the API) upon
@@ -250,27 +263,43 @@
Hibernate session upon <literal>JbpmContext.close()</literal>. This is NOT the desired
behaviour when jBPM is deployed as an ear, hence <literal>isTransactionEnabled</literal> is set
to <literal>false</literal> by default.
- </listitem>
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
- </itemizedlist>
+
+
<para><literal>JmsMessageServiceFactory</literal> leverages the reliable communication
infrastructure exposed through JMS interfaces to deliver asynchronous continuation messages
to the <literal>JobListenerBean</literal>. The JMS message service factory exposes the following
configurable fields.</para>
- <itemizedlist>
- <listitem><literal>connectionFactoryJndiName</literal>: the JNDI name of the JMS connection
+
+ <variablelist>
+
+ <varlistentry>
+ <term>connectionFactoryJndiName</term>
+
+ <listitem><para>the JNDI name of the JMS connection
factory. Defaults to <literal>java:comp/env/jms/JbpmConnectionFactory</literal>.
- </listitem>
+ </para></listitem>
+ </varlistentry>
- <listitem><literal>destinationJndiName</literal>: the JNDI name of the JMS destination where
+ <varlistentry>
+ <term>destinationJndiName</term>
+
+ <listitem><para>the JNDI name of the JMS destination where
job messages are sent. Must match the destination where <literal>JobListenerBean</literal>
receives messages. Defaults to <literal>java:comp/env/jms/JobQueue</literal>.
- </listitem>
+ </para></listitem>
+ </varlistentry>
- <listitem><literal>isCommitEnabled</literal>: tells whether the message service should
+ <varlistentry>
+ <term>isCommitEnabled</term>
+
+ <listitem><para>tells whether the message service should
create a transacted session and either commit or rollback on close. Messages produced by the
JMS message service are never meant to be received before the database transaction commits.
The <ulink url="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS7.html#wp92011">J2EE
@@ -288,21 +317,26 @@
transacted sessions to JTA. Conversely, setting <literal>isCommitEnabled</literal> to
<literal>true</literal> causes the message service to create a transacted session and commit
or rollback according to the <literal>TxService.isRollbackOnly</literal> method.
- </listitem>
+ </para></listitem>
+ </varlistentry>
- </itemizedlist>
+ </variablelist>
<para><literal>EntitySchedulerServiceFactory</literal> builds on the transactional notification
service for timed events provided by the EJB container to schedule business process timers. The
EJB scheduler service factory has the configurable field described below.
</para>
- <itemizedlist>
- <listitem><literal>timerEntityHomeJndiName</literal>: the name of the
+ <variablelist>
+ <varlistentry>
+ <term>timerEntityHomeJndiName</term>
+
+ <listitem><para>the name of the
<literal>TimerEntityBean</literal>'s local home interface in the JNDI initial context.
Defaults to <literal>java:comp/env/ejb/TimerEntityBean</literal>.
- </listitem>
- </itemizedlist>
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
</section>
@@ -541,4 +575,4 @@
</section>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/gettingstarted.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/gettingstarted.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/gettingstarted.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="gettingstarted">
<title>Getting started</title>
@@ -10,7 +15,7 @@
the <ulink url="http://sourceforge.net/project/showfiles.php?group_id=70542&package_i...">jBPM jPDL 3
package on Sourceforge.net</ulink> and download the latest installer.
</para>
- <para id="jbpm-installer-{version}.jar"><emphasis role="bold">The jBPM installer</emphasis>
+ <para><emphasis role="bold">The jBPM installer</emphasis>
creates a runtime installation and it can also download and install the
eclipse designer and a jboss server. You can use jBPM also without application server, but all of
these components are preconfigured to interoperate out-of-the-box to get you started with jBPM quickly.
@@ -40,4 +45,4 @@
</para>
</section>
-</chapter>
\ No newline at end of file
+</chapter>
Copied: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/images (from rev 6357, jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/images)
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/introduction.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/introduction.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/introduction.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="introduction">
<title>Introduction</title>
@@ -31,32 +36,100 @@
<para>The suite is a download that contains all the jBPM components bundled in one easy
download. The download includes:
</para>
- <itemizedlist>
- <listitem><emphasis role="bold">config</emphasis>, configuration files for a standard java environment</listitem>
- <listitem><emphasis role="bold">db</emphasis>, SQL scripts for DB creation and compatibility information</listitem>
- <listitem><emphasis role="bold">designer</emphasis>, the eclipse plugin to author jPDL processes and installation scripts (this is not part of the plain jpdl download) See also <xref linkend="jpdlgraphicalprocessdesigner"/>.</listitem>
- <listitem><emphasis role="bold">doc</emphasis>, userguide and javadocs</listitem>
- <listitem><emphasis role="bold">examples</emphasis></listitem>
- <listitem><emphasis role="bold">lib</emphasis>, libraries on which jbpm depends. For more information on this see <xref linkend="thirdpartylibraries" /></listitem>
- <listitem><emphasis role="bold">server</emphasis>, a preconfigured jboss that contains jbpm inside the console web application (this is not part of the plain jpdl download)</listitem>
- <listitem><emphasis role="bold">src</emphasis>, the jbpm and identity component java sources</listitem>
- </itemizedlist>
+ <variablelist>
+
+ <varlistentry>
+ <term><filename>config</filename></term>
+ <listitem><para>configuration files for a standard java environment</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>db</filename></term>
+ <listitem><para>SQL scripts for DB creation and compatibility information</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>designer</filename></term>
+ <listitem><para>the eclipse plugin to author jPDL processes and installation
+ scripts (this is not part of the plain jpdl download) See also
+ <xref linkend="jpdlgraphicalprocessdesigner"/>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>doc</filename></term>
+ <listitem><para>userguide and javadocs</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><filename>examples</filename></term>
+ <listitem><para>These are examples.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>lib</filename></term>
+ <listitem><para>libraries on which jbpm depends. For more information on
+ this see <xref linkend="thirdpartylibraries" /></para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>server</filename></term>
+ <listitem><para>a preconfigured jboss that contains jbpm inside the console
+ web application (this is not part of the plain jpdl
+ download)</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>src</filename></term>
+ <listitem><para>the jbpm and identity component java sources</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+
+
+
+
<para>The preconfigured JBoss application server has the following components installed :
</para>
- <itemizedlist>
- <listitem>The <emphasis role="bold">web console</emphasis>, packaged as a web archive. That console can be
- used by process participants as well as jBPM administrators.</listitem>
- <listitem>The <emphasis role="bold">job executor</emphasis> enacts timers and asynchronous messages. There is
+
+ <variablelist>
+ <varlistentry><term>The web console</term>
+
+ <listitem><para>packaged as a web archive. That console can be
+ used by process participants as well as jBPM administrators.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry><term>job executor</term>
+
+ <listitem><para>enacts timers and asynchronous messages. There is
a servlet context listener in the console web app that launches the job executor, which
- spawns a thread pool for monitoring and executing timers and asynchronous messages.</listitem>
- <listitem>The <emphasis role="bold">jBPM database</emphasis>, an in-process hypersonic database that
- contains the jBPM tables.</listitem>
- <listitem>One <emphasis role="bold">example process</emphasis> is already deployed into the jBPM database.</listitem>
- <listitem>The <emphasis role="bold">Identity component</emphasis> libraries are part of
+ spawns a thread pool for monitoring and executing timers and asynchronous messages.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry><term>jBPM database</term>
+
+ <listitem><para>an in-process hypersonic database that
+ contains the jBPM tables.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry><term>example process</term>
+
+ <listitem><para>is already deployed into the jBPM database.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry><term>Identity component</term>
+
+ <listitem><para>libraries are part of
the console web application. The tables of the identity component are available in the database (those are the tables
- that start with JBPM_ID_)</listitem>
- </itemizedlist>
+ that start with JBPM_ID_)</para></listitem>
+ </varlistentry>
+ </variablelist>
+
</section>
<section id="jpdlgraphicalprocessdesigner">
@@ -72,8 +145,8 @@
jPDL graphical process designer plugin is also included in
<ulink url="http://www.jboss.org/tools/">JBossTools</ulink>,
<ulink url="http://www.redhat.com/developer_studio/">JBoss Developer Studio</ulink> and
- <ulink url="">the SOA Platform</ulink>.
- .</para>
+ the SOA Platform.
+ </para>
</section>
<section>
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.ent
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.ent (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.ent 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,4 @@
+<!ENTITY PRODUCT "jBPM3">
+<!ENTITY BOOKID "jBPM_jPDL_User_Guide">
+<!ENTITY YEAR "2010">
+<!ENTITY HOLDER "The jBPM Project">
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.xml (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jBPM_jPDL_User_Guide.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,35 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<book>
+ <xi:include href="Book_Info.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+<!-- <xi:include href="Preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
+
+ <xi:include href= "introduction.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="gettingstarted.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="deployment.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="persistence.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="database.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="enterprise.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="modelling.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="context.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="taskmgmt.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="scheduler.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="async.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="calendar.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="mail.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="logging.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="jpdl.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="tdd.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="pluggable.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="LGPL_Appendix.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="Revision_History.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+</book>
+
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jpdl.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/jpdl.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/jpdl.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,9 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
+
<chapter id="jpdl">
<title>jBPM Process Definition Language (JPDL)</title>
@@ -35,13 +41,13 @@
<para>To deploy more process archives at once, use the nested fileset elements.
The file attribute itself is optional. Other attributes of the ant task are:</para>
<itemizedlist>
- <listitem><emphasis role="bold">cfg</emphasis>: cfg is optional, the default value
+ <listitem><para>cfg: cfg is optional, the default value
is 'hibernate.cfg.xml'. The hibernate configuration file that contains the jdbc
- connection properties to the database and the mapping files.</listitem>
- <listitem><emphasis role="bold">properties</emphasis>: properties is optional and
- overwrites *all* hibernate properties as found in the hibernate.cfg.xml</listitem>
- <listitem><emphasis role="bold">createschema</emphasis>: if set to true, the jbpm
- database schema is created before the processes get deployed.</listitem>
+ connection properties to the database and the mapping files.</para></listitem>
+ <listitem><para>properties: properties is optional and
+ overwrites *all* hibernate properties as found in the hibernate.cfg.xml</para></listitem>
+ <listitem><para>createschema: if set to true, the jbpm
+ database schema is created before the processes get deployed.</para></listitem>
</itemizedlist>
<para>Process archives can also be deployed programmatically with the class
<literal>org.jbpm.jpdl.par.ProcessArchiveDeployer</literal> </para>
@@ -72,7 +78,7 @@
in the process archive. When you include your delegation classes in the process
archive (and they are not visible to the jbpm classloader), jBPM will also version
these classes inside the process definition. More information about process classloading
- can be found in <xref linkend="delegation" />
+ can be found in the section on Delegation.
</para>
<para>When a process archive gets deployed, it creates a process definition in
@@ -96,8 +102,8 @@
are harmless, but some other changes have implications far beyond the
expected and desirable.
</para>
- <para>So please consider <link linkend="migratingprocessinstances">migrating
- process instances</link> to a new definition over this approach.
+ <para>So please consider migrating
+ process instances to a new definition over this approach.
</para>
<para>In case you would consider it, these are the points to take into
consideration:
@@ -109,7 +115,7 @@
</para>
<para><emphasis role="bold">The second level cache</emphasis>: A process
definition would need to be removed from the second level cache after
- you've updated an existing process definition. See also <xref linkend="secondlevelcache" />
+ you've updated an existing process definition.
</para>
</section>
@@ -188,13 +194,13 @@
<literal>processdefinition.xml</literal>. 3 pieces of data can be supplied when
specifying a delegation : </para>
<itemizedlist>
- <listitem>1) the class name (required) : the fully qualified class name of the
- delegation class.</listitem>
- <listitem>2) configuration type (optional) : specifies the way to instantiate
+ <listitem><para>1) the class name (required) : the fully qualified class name of the
+ delegation class.</para></listitem>
+ <listitem><para>2) configuration type (optional) : specifies the way to instantiate
and configure the delegation object. By default the default
- constructor is used and the configuration information is ignored.</listitem>
- <listitem>3) configuration (optional) : the configuration of the delegation
- object in the format as required by the configuration type.</listitem>
+ constructor is used and the configuration information is ignored.</para></listitem>
+ <listitem><para>3) configuration (optional) : the configuration of the delegation
+ object in the format as required by the configuration type.</para></listitem>
</itemizedlist>
<para>Next is a description of all the configuration types:</para>
<section id="configtypefield">
@@ -208,17 +214,18 @@
</para>
<para>Supported type conversions:</para>
<itemizedlist>
- <listitem>String doesn't need converting, of course. But it is trimmed.
+ <listitem><para>String doesn't need converting, of course. But it is trimmed.</para>
</listitem>
- <listitem>primitive types such as int, long, float, double, ...
+ <listitem><para>primitive types such as int, long, float, double, ...</para>
</listitem>
- <listitem>and the basic wrapper classes for the primitive types.
+ <listitem><para>and the basic wrapper classes for the primitive types.</para>
</listitem>
- <listitem>lists, sets and collections. In that case each element of the
+ <listitem><para>lists, sets and collections. In that case each element of the
xml-content is consitered as an element of the collection and is parsed, recursively applying the
conversions. If the type of the elements is different from <literal>java.lang.String</literal>
this can be indicated by specifying a type attribute with the fully qualified type name.
For example, following snippet will inject an ArrayList of Strings into field 'numbers':
+ </para></listitem></itemizedlist>
<programlisting><numbers>
<element>one</element>
<element>two</element>
@@ -235,18 +242,19 @@
<entry><key>two</key><value>2</value></entry>
<entry><key>three</key><value>3</value></entry>
</numbers></programlisting>
- </listitem>
- <listitem>maps. In this case, each element of the field-element is expected to have one subelement
+ <itemizedlist>
+ <listitem><para>maps. In this case, each element of the field-element is expected to have one subelement
<literal>key</literal> and one element <literal>value</literal>. The key and element are both
parsed using the conversion rules recursively. Just the same as with collections, a conversion to
- <literal>java.lang.String</literal> is assumed if no <literal>type</literal> attribute is specified.
+ <literal>java.lang.String</literal> is assumed if no <literal>type</literal> attribute is specified.</para>
</listitem>
- <listitem>org.dom4j.Element
+ <listitem><para>org.dom4j.Element</para>
</listitem>
- <listitem>for any other type, the string constructor is used.
+ <listitem><para>for any other type, the string constructor is used.</para>
</listitem>
</itemizedlist>
<para>For example in the following class...</para>
+
<programlisting>public class MyAction implements ActionHandler {
// access specifiers can be private, default, protected or public
private String city;
@@ -288,8 +296,8 @@
expression like e.g. <literal>expression="#{myVar.handler[assignments].assign}"</literal>
</para>
<para>The basics of this expression language can be found
- <ulink url="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html">in the J2EE
- tutorial</ulink>.
+ in the J2EE
+ tutorial (<ulink url="http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html" />).
</para>
<para>The jPDL expression language is similar to the JSF expression language. Meaning that
jPDL EL is based on JSP EL, but it uses <literal>#{...}</literal> notation and that it
@@ -299,16 +307,16 @@
be used as starting variables along with the following implicit objects:
</para>
<itemizedlist>
- <listitem>taskInstance (org.jbpm.taskmgmt.exe.TaskInstance)</listitem>
- <listitem>processInstance (org.jbpm.graph.exe.ProcessInstance)</listitem>
- <listitem>processDefinition (org.jbpm.graph.def.ProcessDefinition)</listitem>
- <listitem>token (org.jbpm.graph.exe.Token)</listitem>
- <listitem>taskMgmtInstance (org.jbpm.taskmgmt.exe.TaskMgmtInstance)</listitem>
- <listitem>contextInstance (org.jbpm.context.exe.ContextInstance)</listitem>
+ <listitem><para>taskInstance (org.jbpm.taskmgmt.exe.TaskInstance)</para></listitem>
+ <listitem><para>processInstance (org.jbpm.graph.exe.ProcessInstance)</para></listitem>
+ <listitem><para>processDefinition (org.jbpm.graph.def.ProcessDefinition)</para></listitem>
+ <listitem><para>token (org.jbpm.graph.exe.Token)</para></listitem>
+ <listitem><para>taskMgmtInstance (org.jbpm.taskmgmt.exe.TaskMgmtInstance)</para></listitem>
+ <listitem><para>contextInstance (org.jbpm.context.exe.ContextInstance)</para></listitem>
</itemizedlist>
<para>This feature becomes really powerfull in a JBoss SEAM environment.
Because of the integration between jBPM and
- <ulink url="http://www.jboss.com/products/seam">JBoss SEAM</ulink>, all of your backed
+ JBoss SEAM (<ulink url="http://www.jboss.com/products/seam" />), all of your backed
beans, EJB's and other <literal>one-kind-of-stuff</literal> becomes available right
inside of your process definition. Thanks Gavin ! Absolutely awsome ! :-)
</para>
@@ -330,16 +338,17 @@
</process-definition></programlisting>
<para>And second, the xerces parser has to be on the classpath.</para>
<para>The jPDL schema can be found in <literal>${jbpm.home}/src/java.jbpm/org/jbpm/jpdl/xml/jpdl-3.2.xsd</literal>
- or at <ulink url="http://jbpm.org/jpdl-3.2.xsd">http://jbpm.org/jpdl-3.2.xsd</ulink>.
+ or at <ulink url="http://jbpm.org/jpdl-3.2.xsd" />.
</para>
</section>
<section id="processdefinition.element">
<title>process-definition</title>
<table id="process.definition.schema">
+ <title>process-definition schema</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -356,56 +365,56 @@
<entry>the name of the process</entry>
</row>
<row>
- <entry><link linkend="swimlane.element">swimlane</link></entry>
+ <entry>swimlane</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the swimlanes used in this process. The swimlanes represent process roles
and they are used for task assignments.</entry>
</row>
<row>
- <entry><link linkend="startstate.element">start-state</link></entry>
+ <entry>start-state</entry>
<entry>element</entry>
<entry>[0..1]</entry>
<entry>the start state of the process. Note that a process without a start-state
is valid, but cannot be executed.</entry>
</row>
<row>
- <entry>{<link linkend="endstate.element">end-state</link>|
- <link linkend="state.element">state</link>|<link linkend="node.element">node</link>|
- <link linkend="tasknode.element">task-node</link>|
- <link linkend="processstate.element">process-state</link>|
- <link linkend="superstate.element">super-state</link>|
- <link linkend="fork.element">fork</link>|<link linkend="join.element">join</link>|
- <link linkend="decision.element">decision</link>}</entry>
+ <entry>{end-state|
+ state|node|
+ task-node
+ process-state
+ super-state|
+ fork|join|
+ decision}</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the nodes of the process definition. Note that a process without nodes is valid,
but cannot be executed.</entry>
</row>
<row>
- <entry><link linkend="event.element">event</link></entry>
+ <entry>event</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the process events that serve as a container for actions</entry>
</row>
<row>
- <entry>{<link linkend="action.element">action</link>|
- <link linkend="script.element">script</link>|
- <link linkend="create.timer.element">create-timer</link>|
- <link linkend="cancel.timer.element">cancel-timer</link>}</entry>
+ <entry>{action|
+ script|
+ create-timer|
+ cancel-timer}</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>global defined actions that can be referenced from events and transitions.
Notice these actions must specify a name in order to be referenced.</entry>
</row>
<row>
- <entry><link linkend="task.element">task</link></entry>
+ <entry>task</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>global defined tasks that can be used in e.g. actions.</entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
@@ -419,9 +428,10 @@
<section id="node.element">
<title>node</title>
<table frame="topbot" id="node.schema">
+ <title>Node Schema</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -432,19 +442,19 @@
</thead>
<tbody>
<row>
- <entry>{<link linkend="action.element">action</link>|
- <link linkend="script.element">script</link>|
- <link linkend="create.timer.element">create-timer</link>|
- <link linkend="cancel.timer.element">cancel-timer</link>}</entry>
+ <entry>{action|
+ script|
+ create-timer|
+ cancel-timer}</entry>
<entry>element</entry>
<entry>1</entry>
<entry>a custom action that represents the behaviour for this node</entry>
</row>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+ <entry>See common node elements</entry>
</row>
</tbody>
</tgroup>
@@ -454,9 +464,10 @@
<section id="common.node.elements">
<title>common node elements</title>
<table frame="topbot" id="common.node.schema">
+ <title>common node elements</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -477,11 +488,11 @@
<entry>attribute</entry>
<entry>{ true | false }, false is the default</entry>
<entry>If set to true, this node will be executed asynchronously.
- See also <xref linkend="asynchronouscontinuations" />
+
</entry>
</row>
<row>
- <entry><link linkend="transition.element">transition</link></entry>
+ <entry>transition</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the leaving transitions. Each transition leaving a
@@ -491,20 +502,20 @@
left without specifying a transition.</entry>
</row>
<row>
- <entry><link linkend="event.element">event</link></entry>
+ <entry>event</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>supported event types: {node-enter|node-leave}</entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
exceptions thrown by delegation classes thrown in this process node.</entry>
</row>
<row>
- <entry><link linkend="timer.element">timer</link></entry>
+ <entry>timer</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>specifies a timer that monitors the duration of an execution in this node.</entry>
@@ -517,9 +528,10 @@
<section id="startstate.element">
<title>start-state</title>
<table frame="topbot" id="start.state.schema">
+ <title>start-state</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -536,26 +548,26 @@
<entry>the name of the node</entry>
</row>
<row>
- <entry><link linkend="task.element">task</link></entry>
+ <entry>task</entry>
<entry>element</entry>
<entry>[0..1]</entry>
- <entry>the task to start a new instance for this process or to capture the process initiator. See <xref linkend="swimlaneinstarttask"/></entry>
+ <entry>the task to start a new instance for this process or to capture the process initiator. </entry>
</row>
<row>
- <entry><link linkend="event.element">event</link></entry>
+ <entry>event</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>supported event types: {node-leave}</entry>
</row>
<row>
- <entry><link linkend="transition.element">transition</link></entry>
+ <entry>transition</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the leaving transitions. Each transition leaving a
node *must* have a distinct name.</entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
@@ -569,9 +581,10 @@
<section id="endstate.element">
<title>end-state</title>
<table frame="topbot" id="end.state.schema">
+ <title>end-state</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -598,13 +611,13 @@
true, then the full process instance is ended.</entry>
</row>
<row>
- <entry><link linkend="event.element">event</link></entry>
+ <entry>event</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>supported event types: {node-enter}</entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
@@ -618,9 +631,10 @@
<section id="state.element">
<title>state</title>
<table frame="topbot" id="state.schema">
+ <title>state</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -631,10 +645,10 @@
</thead>
<tbody>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -644,9 +658,10 @@
<section id="tasknode.element">
<title>task-node</title>
<table frame="topbot" id="task.node.schema">
+ <title>task-node</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -684,16 +699,16 @@
</entry>
</row>
<row>
- <entry><link linkend="task.element">task</link></entry>
+ <entry>task</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the tasks that should be created when execution arrives in this task node.</entry>
</row>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -703,9 +718,10 @@
<section id="processstate.element">
<title>process-state</title>
<table frame="topbot" id="process.state.schema">
+ <title>process-state</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -722,13 +738,13 @@
<entry>Defines the moment a subprocess is resolved. {late|*} defaults to resolving deploytime</entry>
</row>
<row>
- <entry><link linkend="subprocess.element">sub-process</link></entry>
+ <entry>sub-process</entry>
<entry>element</entry>
<entry>1</entry>
<entry>the sub process that is associated with this node</entry>
</row>
<row>
- <entry><link linkend="variable.element">variable</link></entry>
+ <entry>variable</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>specifies how data should be copied from the super process
@@ -736,10 +752,10 @@
super process upon completion of the sub process.</entry>
</row>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -749,9 +765,10 @@
<section id="superstate.element">
<title>super-state</title>
<table frame="topbot" id="super.state.schema">
+ <title>super-state</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -762,24 +779,24 @@
</thead>
<tbody>
<row>
- <entry>{<link linkend="endstate.element">end-state</link>|
- <link linkend="state.element">state</link>|
- <link linkend="node.element">node</link>|
- <link linkend="tasknode.element">task-node</link>|
- <link linkend="processstate.element">process-state</link>|
- <link linkend="superstate.element">super-state</link>|
- <link linkend="fork.element">fork</link>|
- <link linkend="join.element">join</link>|
- <link linkend="decision.element">decision</link>}</entry>
+ <entry>{end-state|
+ state|
+ node|
+ task-node|
+ process-state|
+ super-state|
+ fork|
+ join|
+ decision}</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the nodes of the superstate. superstates can be nested.</entry>
</row>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -789,9 +806,10 @@
<section id="fork.element">
<title>fork</title>
<table frame="topbot" id="fork.schema">
+ <title>fork</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -802,10 +820,10 @@
</thead>
<tbody>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+ <entry>See common node elements</entry>
</row>
</tbody>
</tgroup>
@@ -815,9 +833,10 @@
<section id="join.element">
<title>join</title>
<table frame="topbot" id="join.schema">
+ <title>join</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -828,10 +847,10 @@
</thead>
<tbody>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -841,9 +860,10 @@
<section id="decision.element">
<title>decision</title>
<table frame="topbot" id="decision.schema">
+ <title>decision</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -854,7 +874,7 @@
</thead>
<tbody>
<row>
- <entry><link linkend="handler.element">handler</link></entry>
+ <entry>handler</entry>
<entry>element</entry>
<entry>required, unless conditions are placed in the leaving transitions</entry>
<entry>the fully qualified name of a class that implements the
@@ -870,14 +890,14 @@
<emphasis>default</emphasis> transition is taken. The default transition is
the first unconditional transition if there is one, or else the first
conditional transition. Transitions are considered in document order.
- See <link linkend="condition.element">the condition element</link>
+
</entry>
</row>
<row>
- <entry><link linkend="common.node.elements">common node elements</link></entry>
+ <entry>common node elements</entry>
<entry></entry>
<entry></entry>
- <entry>See <link linkend="common.node.elements">common node elements</link></entry>
+
</row>
</tbody>
</tgroup>
@@ -887,9 +907,10 @@
<section id="event.element">
<title>event</title>
<table frame="topbot" id="event.schema">
+ <title>event</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -907,7 +928,7 @@
on which the event is placed</entry>
</row>
<row>
- <entry>{<link linkend="action.element">action</link>|<link linkend="script.element">script</link>|<link linkend="create.timer.element">create-timer</link>|<link linkend="cancel.timer.element">cancel-timer</link>}</entry>
+ <entry>{action|script|create-timer|cancel-timer}</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the list of actions that should be executed on this event</entry>
@@ -920,9 +941,10 @@
<section id="transition.element">
<title>transition</title>
<table frame="topbot" id="transition.schema">
+ <title>transition</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -943,20 +965,19 @@
<entry>to</entry>
<entry>attribute</entry>
<entry>required</entry>
- <entry>the hierarchical name of the destination node. For more information about hierarchical
- names, see <xref linkend="hierarchicalnames" /></entry>
+ <entry>the hierarchical name of the destination node. </entry>
</row>
<row>
<entry>condition</entry>
<entry>attribute or element text</entry>
<entry>optional</entry>
- <entry>a guard condition <link linkend="expressions">expression</link>. These condition
+ <entry>a guard condition expression. These condition
attributes (or child elements) can be used in decision nodes, or to calculate the
available transitions on a token at runtime.
</entry>
</row>
<row>
- <entry>{<link linkend="action.element">action</link>|<link linkend="script.element">script</link>|<link linkend="create.timer.element">create-timer</link>|<link linkend="cancel.timer.element">cancel-timer</link>}</entry>
+ <entry>{action|script|create-timer|cancel-timer}</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>the actions to be executed upon taking this transition. Note that the
@@ -964,7 +985,7 @@
only one)</entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
@@ -978,9 +999,10 @@
<section id="action.element">
<title>action</title>
<table frame="topbot" id="action.schema">
+ <title>action</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1017,7 +1039,7 @@
<entry>expression</entry>
<entry>attibute</entry>
<entry>either this, a class or a ref-name</entry>
- <entry>A jPDL expression that resolves to a method. See also <xref linkend="expressions" />
+ <entry>A jPDL expression that resolves to a method.
</entry>
</row>
<row>
@@ -1026,14 +1048,14 @@
<entry>optional</entry>
<entry>{yes|no|true|false}. Default is yes|true. If set to false, the action
will only be executed on events that were fired on this action's element.
- for more information, see <xref linkend="eventpropagation"/>
+
</entry>
</row>
<row>
<entry>config-type</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>{<link linkend="configtypefield">field</link>|<link linkend="configtypebean">bean</link>|<link linkend="configtypeconstructor">constructor</link>|<link linkend="configtypeconfigurationproperty">configuration-property</link>}.
+ <entry>{field|bean|constructor|configuration-property}.
Specifies how the action-object should be constructed and how the content of this element should be used as configuration information for that action-object.
</entry>
</row>
@@ -1052,8 +1074,7 @@
<entry>optional</entry>
<entry>the content of the action can be used as configuration information
for your custom action implementations. This allows the creation of reusable
- delegation classes. For more about delegation configuration, see
- <xref linkend="configurationofdelegations"/>.
+ delegation classes.
</entry>
</row>
</tbody>
@@ -1064,9 +1085,10 @@
<section id="script.element">
<title>script</title>
<table frame="topbot" id="script.schema">
+ <title>script</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1090,19 +1112,19 @@
<entry>optional [0..*]</entry>
<entry>{yes|no|true|false}. Default is yes|true. If set to false, the action
will only be executed on events that were fired on this action's element.
- for more information, see <xref linkend="eventpropagation"/>
+
</entry>
</row>
<row>
- <entry><link linkend="expression.element">expression</link></entry>
+ <entry>expression</entry>
<entry>element</entry>
<entry>[0..1]</entry>
- <entry>the beanshell script. If you don't specify <link linkend="variable.element">variable</link>
+ <entry>the beanshell script. If you don't specify variable
elements, you can write the expression as the content
of the script element (omitting the expression element tag).</entry>
</row>
<row>
- <entry><link linkend="variable.element">variable</link></entry>
+ <entry>variable</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>in variable for the script. If no in variables are specified, all the
@@ -1118,9 +1140,10 @@
<section id="expression.element">
<title>expression</title>
<table frame="topbot" id="expression.schema">
+ <title>expression</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1145,9 +1168,10 @@
<section id="variable.element">
<title>variable</title>
<table frame="topbot" id="variable.schema">
+ <title>variable</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1192,9 +1216,10 @@
<section id="handler.element">
<title>handler</title>
<table frame="topbot" id="handler.schema">
+ <title>handler</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1210,7 +1235,7 @@
<entry>either this or a class</entry>
<entry>A jPDL expression. The returned result is transformed to a string with
the toString() method. The resulting string should match one of the leaving
- transitions. See also <xref linkend="expressions" />.
+ transitions.
</entry>
</row>
<row>
@@ -1225,7 +1250,7 @@
<entry>config-type</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>{<link linkend="configtypefield">field</link>|<link linkend="configtypebean">bean</link>|<link linkend="configtypeconstructor">constructor</link>|<link linkend="configtypeconfigurationproperty">configuration-property</link>}.
+ <entry>{field|bean|constructor|configuration-property}.
Specifies how the action-object should be constructed and how the content of this element should be used as configuration information for that action-object.
</entry>
</row>
@@ -1235,8 +1260,7 @@
<entry>optional</entry>
<entry>the content of the handler can be used as configuration information
for your custom handler implementations. This allows the creation of reusable
- delegation classes. For more about delegation configuration, see
- <xref linkend="configurationofdelegations"/>.
+ delegation classes.
</entry>
</row>
</tbody>
@@ -1247,9 +1271,10 @@
<section id="timer.element">
<title>timer</title>
<table frame="topbot" id="timer.schema">
+ <title>timer</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1272,7 +1297,7 @@
<entry>required</entry>
<entry>the duration (optionally expressed in business hours) that specifies
the time period between the creation of the timer and the execution of the timer.
- See <xref linkend="duration" /> for the syntax.</entry>
+ See Duration for the syntax.</entry>
</row>
<row>
<entry>repeat</entry>
@@ -1280,8 +1305,7 @@
<entry>optional</entry>
<entry>{duration | 'yes' | 'true'}after a timer has been executed on the duedate, 'repeat' optionally
specifies duration between repeating timer executions until the node is left.
- If <literal>yes</literal> or <literal>true</literal> is specified, the same duration
- as for the due date is taken for the repeat. See <xref linkend="duration" /> for the
+ If <literal>yes</literal> or <literal>true</literal> is specified, the same duration for the
syntax.</entry>
</row>
<row>
@@ -1304,7 +1328,7 @@
</entry>
</row>
<row>
- <entry>{<link linkend="action.element">action</link>|<link linkend="script.element">script</link>|<link linkend="create.timer.element">create-timer</link>|<link linkend="cancel.timer.element">cancel-timer</link>}</entry>
+ <entry>{action|script|create-timer|cancel-timer}</entry>
<entry>element</entry>
<entry>[0..1]</entry>
<entry>an action that should be executed when this timer fires</entry>
@@ -1317,9 +1341,10 @@
<section id="create.timer.element">
<title>create-timer</title>
<table frame="topbot" id="create.timer.schema">
+ <title>create-timer</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1342,7 +1367,7 @@
<entry>required</entry>
<entry>the duration (optionally expressed in business hours) that specifies the
the time period between the creation of the timer and the execution of the timer.
- See <xref linkend="duration" /> for the syntax.</entry>
+ See Duration for the syntax.</entry>
</row>
<row>
<entry>repeat</entry>
@@ -1351,7 +1376,7 @@
<entry>{duration | 'yes' | 'true'}after a timer has been executed on the duedate, 'repeat' optionally
specifies duration between repeating timer executions until the node is left.
If <literal>yes</literal> of <literal>true</literal> is specified, the same duration
- as for the due date is taken for the repeat. See <xref linkend="duration" /> for the
+ as for the due date is taken for the repeat. See Duration for the
syntax.</entry>
</row>
<row>
@@ -1369,9 +1394,10 @@
<section id="cancel.timer.element">
<title>cancel-timer</title>
<table frame="topbot" id="cancel.timer.schema">
+ <title>cancel-timer</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1395,9 +1421,10 @@
<section id="task.element">
<title>task</title>
<table frame="topbot" id="task.schema">
+ <title>task</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1436,14 +1463,13 @@
<entry>duedate</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>is a duration expressed in absolute or business hours as
- explained in <xref linkend="businesscalendar"/></entry>
+ <entry>is a duration expressed in absolute or business hours</entry>
</row>
<row>
<entry>swimlane</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>reference to a <link linkend="swimlane.element">swimlane</link>. If a swimlane
+ <entry>reference to a swimlane. If a swimlane
is specified on a task, the assignment is ignored.</entry>
</row>
<row>
@@ -1454,14 +1480,14 @@
can be specified for the priority. FYI: (highest=1, lowest=5)</entry>
</row>
<row>
- <entry><link linkend="assignment.element">assignment</link></entry>
+ <entry>assignment</entry>
<entry>element</entry>
<entry>optional</entry>
- <entry>describes a <link linkend="delegation">delegation</link> that will assign
+ <entry>describes a delegation that will assign
the task to an actor when the task is created.</entry>
</row>
<row>
- <entry><link linkend="event.element">event</link></entry>
+ <entry>event</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>supported event types: {task-create|task-start|task-assign|task-end}. Especially
@@ -1469,14 +1495,14 @@
<literal>previousActorId</literal> to the <literal>TaskInstance</literal></entry>
</row>
<row>
- <entry><link linkend="exceptionhandler.element">exception-handler</link></entry>
+ <entry>exception-handler</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>a list of exception handlers that applies to all
exceptions thrown by delegation classes thrown in this process node.</entry>
</row>
<row>
- <entry><link linkend="timer.element">timer</link></entry>
+ <entry>timer</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>specifies a timer that monitors the duration of an execution in this task.
@@ -1487,7 +1513,7 @@
</entry>
</row>
<row>
- <entry><link linkend="controller.element">controller</link></entry>
+ <entry>controller</entry>
<entry>element</entry>
<entry>[0..1]</entry>
<entry>specifies how the process variables are transformed into task
@@ -1503,9 +1529,10 @@
<section id="swimlane.element">
<title>swimlane</title>
<table frame="topbot" id="swimlane.schema">
+ <title>swimlane</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1523,7 +1550,7 @@
<literal>TaskMgmtDefinition</literal></entry>
</row>
<row>
- <entry><link linkend="assignment.element">assignment</link></entry>
+ <entry>assignment</entry>
<entry>element</entry>
<entry>[1..1]</entry>
<entry>specifies a the assignment of this swimlane. the assignment will be performed
@@ -1538,9 +1565,10 @@
<section id="assignment.element">
<title>assignment</title>
<table frame="topbot" id="assignment.schema">
+ <title>assignment</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1555,10 +1583,8 @@
<entry>attribute</entry>
<entry>optional</entry>
<entry>For historical reasons, this attribute expression does <emphasis role="bold">not</emphasis>
- refer to <link linkend="expressions">the jPDL expression</link>, but instead, it is
- an assignment expression for the jBPM identity component. For
- more information on how to write
- jBPM identity component expressions, see <xref linkend="assignmentexpressions" />.
+ refer to the jPDL expression, but instead, it is
+ an assignment expression for the jBPM identity component.
Note that this implementation has a dependency on the jbpm identity component.
</entry>
</row>
@@ -1567,7 +1593,7 @@
<entry>attribute</entry>
<entry>optional</entry>
<entry>An actorId. Can be used in conjunction with pooled-actors. The actor-id
- is resolved as <link linkend="expressions">an expression</link>. So you can refer to
+ is resolved as an expression. So you can refer to
a fixed actorId like this <literal>actor-id="bobthebuilder"</literal>. Or you can refer
to a property or method that returns a String like this:
<literal>actor-id="myVar.actorId"</literal>, which will invoke the getActorId method
@@ -1581,8 +1607,8 @@
<entry>A comma separated list of actorIds. Can be used in conjunction
with actor-id. A fixed set of pooled actors can be specified like this:
<literal>pooled-actors="chicagobulls, pointersisters"</literal>. The
- pooled-actors will be resolved as <link linkend="expressions">an
- expression</link>. So you can also refer to a property or method that has to
+ pooled-actors will be resolved as an
+ expression. So you can also refer to a property or method that has to
return, a String[], a Collection or a comma separated list of pooled actors.
</entry>
</row>
@@ -1597,7 +1623,7 @@
<entry>config-type</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>{<link linkend="configtypefield">field</link>|<link linkend="configtypebean">bean</link>|<link linkend="configtypeconstructor">constructor</link>|<link linkend="configtypeconfigurationproperty">configuration-property</link>}.
+ <entry>{field|bean|constructor|configuration-property}.
Specifies how the assignment-handler-object should be constructed and how the content of this element should be used as configuration information for that assignment-handler-object.
</entry>
</row>
@@ -1607,8 +1633,7 @@
<entry>optional</entry>
<entry>the content of the assignment-element can be used as configuration information
for your AssignmentHandler implementations. This allows the creation of reusable
- delegation classes. for more about delegation configuration, see
- <xref linkend="configurationofdelegations"/>.
+ delegation classes.
</entry>
</row>
</tbody>
@@ -1619,9 +1644,10 @@
<section id="controller.element">
<title>controller</title>
<table frame="topbot" id="controller.schema">
+ <title>controller</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1642,7 +1668,7 @@
<entry>config-type</entry>
<entry>attribute</entry>
<entry>optional</entry>
- <entry>{<link linkend="configtypefield">field</link>|<link linkend="configtypebean">bean</link>|<link linkend="configtypeconstructor">constructor</link>|<link linkend="configtypeconfigurationproperty">configuration-property</link>}.
+ <entry>{field|bean|constructor|configuration-property}.
Specifies how the assignment-handler-object should be constructed and how the content of this element should be used as configuration information for that assignment-handler-object.
</entry>
</row>
@@ -1656,7 +1682,7 @@
must be a list of variable elements.</entry>
</row>
<row>
- <entry><link linkend="variable.element">variable</link></entry>
+ <entry>variable</entry>
<entry>element</entry>
<entry>[0..*]</entry>
<entry>in case no task controller handler is specified by the class
@@ -1671,9 +1697,10 @@
<section id="subprocess.element">
<title>sub-process</title>
<table frame="topbot" id="sub.process.schema">
+ <title>sub-process</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1687,8 +1714,7 @@
<entry>name</entry>
<entry>attribute</entry>
<entry>required</entry>
- <entry>the name of the sub process. Can be an EL expression, as long as it resolves to a String. Powerful especially with late binding in the process-state. To know how you can test
- subprocesses, see <xref linkend="testingsubprocesses" /></entry>
+ <entry>the name of the sub process. Can be an EL expression, as long as it resolves to a String. Powerful especially with late binding in the process-state. </entry>
</row>
<row>
<entry>version</entry>
@@ -1697,7 +1723,7 @@
<entry>the version of the sub process. If no version is
specified, the latest version of the given process as known
while deploying the parent
- <link linkend="processstate.element">process-state</link>
+ process-state
will be taken.</entry>
</row>
<row>
@@ -1705,7 +1731,7 @@
<entry>attribute</entry>
<entry>optional</entry>
<entry>indicates if the version of the sub process should be determined
- when deploying the parent <link linkend="processstate.element">process-state</link>
+ when deploying the parent process-state
(default behavior), or when actually invoking the sub process
(<literal>binding="late"</literal>). When both <literal>version</literal> and
<literal>binding="late"</literal> are given then jBPM will use the version as
@@ -1721,9 +1747,10 @@
<section id="condition.element">
<title>condition</title>
<table frame="topbot" id="condition.schema">
+ <title>condition</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1738,8 +1765,8 @@
<entry>{content} For backwards compatibility, the condition can also be entered with the 'expression'
attribute, but that attribute is deprecated since 3.2</entry>
<entry>required</entry>
- <entry>The contents of the condition element is <link linkend="expressions">a
- jPDL expression</link> that should evaluate to a boolean. A decision takes the
+ <entry>The contents of the condition element is a
+ jPDL expression that should evaluate to a boolean. A decision takes the
first transition (as ordered in the processdefinition.xml) for which the expression
resolves to <literal>true</literal>. If none of the conditions resolve
to true, the default leaving transition (== the first one) will be taken.
@@ -1753,9 +1780,10 @@
<section id="exceptionhandler.element">
<title>exception-handler</title>
<table frame="topbot" id="exception.handler.schema">
+ <title>exception-handler</title>
<tgroup cols="4" rowsep="1" colsep="1">
- <colspec colname="c1" colwidth="1*"/>
- <colspec colname="c2" colwidth="2*"/>
+ <colspec colname="c1" colwidth="1*" />
+ <colspec colname="c2" colwidth="2*" />
<thead>
<row>
<entry align="center">Name</entry>
@@ -1774,7 +1802,7 @@
(<literal>java.lang.Throwable</literal>).</entry>
</row>
<row>
- <entry><link linkend="action.element">action</link></entry>
+ <entry>action</entry>
<entry>element</entry>
<entry>[1..*]</entry>
<entry>a list of actions to be executed when an exception is being handled by this
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/logging.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/logging.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/logging.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="logging">
<title>Logging</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/mail.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/mail.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/mail.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="mail">
<title>Email support</title>
@@ -28,13 +33,12 @@
<para>Each of the fields can contain JSF like expressions. For example:
</para>
<programlisting><mail to='#{initiator}' subject='websale' text='your websale of #{quantity} #{item} was approved' /></programlisting>
- <para>For more information about expressions, see <xref linkend="expressions" />.
- </para>
+
<para>There are two attribute to specify recipients: <literal>actors</literal> and
<literal>to</literal>. The <literal>to</literal> attribute should resolve to a semicolon
separated list of email addresses. The <literal>actors</literal> attribute should resolve to a
semicolon separated list of actorIds. Those actorIds will be resolved to email addresses with by
- means of <link linkend="addressresolving">address resolving</link>.
+ means of address resolving (<xref linkend="addressresolving"/>).
</para>
<programlisting><mail to='admin(a)mycompany.com' subject='urgent' text='the mailserver is down :-)' /></programlisting>
<para>For more about how to specify recipients, see <xref linkend="specifyingmailrecipients" /></para>
@@ -52,7 +56,7 @@
in the process graph.
</para>
<para>The attributes and elements supported by mail nodes are exactly the same as with
- the <link linkend="mailaction">mail actions</link>.
+ the mail actions (<xref linkend="mailaction" />).
</para>
<programlisting><mail-node name="send email" to="#{president}" subject="readmylips" text="nomoretaxes">
<transition to="the next node" />
@@ -95,13 +99,12 @@
<section id="expressionsinmails">
<title>Expressions in mails</title>
<para>The fields <literal>to</literal>, <literal>recipients</literal>, <literal>subject</literal>
- and <literal>text</literal> can contain JSF-like expressions. For more information about expressions,
- see <xref linkend="expressions" />
+ and <literal>text</literal> can contain JSF-like expressions.
</para>
<para>The variables in the expressions can be: swimlanes, process variables, transient variables
beans configured in the jbpm.cfg.xml, ...
</para>
- <para>These expressions can be combined with the <link linkend="addressresolving">address resolving</link>
+ <para>These expressions can be combined with the address resolving (<xref linkend="addressresolving" />)
that is explained later in this chapter. For example, suppose that you have a swimlane called president in
your process, then look at the following mail specification:
</para>
@@ -263,4 +266,4 @@
property, all the processes that were already deployed will still refer to the old mail class name.
But they can be easily updated with one simple update statement to the jbpm database.</para>
</section>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/modelling.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/modelling.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/modelling.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="processmodelling">
<title>Process Modelling</title>
@@ -96,8 +101,8 @@
<section id="nodes">
<title>Nodes</title>
- <para>A process graph is made up of nodes and transitions. For more information about the
- graph and its executional model, refer to <xref linkend="graphorientedprogramming" />.
+ <para>A process graph is made up of nodes and transitions. <!-- For more information about the
+ graph and its executional model, refer to <xref linkend="graphorientedprogramming" />. -->
</para>
<para>Each node has a specific type. The node type determines what will happen when
an execution arrives in the node at runtime. jBPM has a set of preimplemented node types
@@ -111,38 +116,67 @@
few task instances, sending a notification, updating a database,... Secondly, a node
is responsible for propagating the process execution. Basically, each node has the
following options for propagating the process execution:</para>
- <itemizedlist>
- <listitem><emphasis role="bold">1. not propagate the execution.</emphasis> In that
- case the node behaves as a wait state.</listitem>
- <listitem><emphasis role="bold">2. propagate the execution over one of the leaving
- transitions of the node.</emphasis> This means that the token that originally
+ <variablelist>
+ <varlistentry>
+ <term>1. not propagate the execution.</term>
+
+ <listitem><para>In that
+ case the node behaves as a wait state. </para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>2. propagate the execution over one of the leaving
+ transitions of the node.</term>
+
+ <listitem><para>This means that the token that originally
arrived in the node is passed over one of the leaving transitions with the API call
executionContext.leaveNode(String). The node will now act as an automatic node in the
sense it can execute some custom programming logic and then continue process execution
- automatically without waiting.</listitem>
- <listitem><emphasis role="bold">3. create new paths of execution.</emphasis> A node can
+ automatically without waiting. </para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>3. create new paths of execution.</term>
+
+ <listitem><para>A node can
decide to create new tokens. Each new token represents a new path of execution and
each new token can be launched over the node's leaving transitions. A good example of
- this kind of behaviour is the fork node.</listitem>
- <listitem><emphasis role="bold">4. end paths of execution.</emphasis> A node can decide
+ this kind of behaviour is the fork node. </para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>4. end paths of execution.</term>
+
+ <listitem><para>A node can decide
to end a path of execution. That means that the token is ended and the path of execution
- is finished.</listitem>
- <listitem><emphasis role="bold">5. more general, a node can modify the whole runtime
- structure of the process instance.</emphasis> The runtime structure is a process instance
+ is finished. </para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>5. more general, a node can modify the whole runtime
+ structure of the process instance.</term>
+
+ <listitem><para>The runtime structure is a process instance
that contains a tree of tokens. Each token represents a path of execution. A node can
create and end tokens, put each token in a node of the graph and launch tokens over
- transitions.</listitem>
- </itemizedlist>
+ transitions. </para></listitem>
+ </varlistentry>
+ </variablelist>
+
<para>jBPM contains --as any workflow and BPM engine-- a set of preimplemented node types
that have a specific documented configuration and behaviour. But the unique thing about
- jBPM and the <link linkend="graphorientedprogramming">Graph Oriented Programming foundation</link>
+ jBPM and the Graph Oriented Programming foundation.
is that we open up the model for developers. Developers can write their own node behaviour
very easy and use it in a process.
</para>
<para>That is where traditional workflow and BPM systems are
much more closed. They usually supply a fixed set of node types (called the process language).
Their process language is closed and the executional model is hidden in the runtime
- environment. Research of <ulink url="http://www.workflowpatterns.com">workflow patterns</ulink>
+ environment. Research of workflow patterns (<ulink url="http://www.workflowpatterns.com" />)
has shown that any process language is not powerfull enough. We have decided for a simple
model and allow developers to write their own node types. That way the JPDL process language
is open ended.</para>
@@ -217,7 +251,7 @@
<para>The type node serves the situation where you want to write your own code in a node.
The nodetype node expects one subelement action. The action is executed when the execution
arrives in the node. The code you write in the actionhandler can do anything you want but
- it is also <link linkend="noderesponsibilities">responsible for propagating the execution</link>.
+ it is also responsible for propagating the execution (<xref linkend="noderesponsibilities" />.)
</para>
<para>This node can be used if you want to use a JavaAPI to implement some functional logic that
is important for the business analyst. By using a node, the node is visible in the graphical
@@ -259,8 +293,8 @@
that is placed in a node. Actions that are put in an event are executed when the event
fires. Actions on events have no way to influence the flow of control of the process.
It is similar to the observer pattern. On the other hand, an action that is put on a
- <link linkend="nodetypenode">node</link> has the <link linkend="noderesponsibilities">responsibility
- of propagating the execution</link>.</para>
+node (<xref linkend="nodetypenode" />) has the responsibility (<xref linkend="noderesponsibilities"/>)
+ of propagating the execution.</para>
<para>Let's look at an example of an action on an event. Suppose we want to do a database
update on a given transition. The database update is technically vital but it is not important
@@ -303,8 +337,7 @@
<section id="actionconfiguration">
<title>Action configuration</title>
<para>For more information about adding configurations to your custom actions and how
- to specify the configuration in the <literal>processdefinition.xml</literal>,
- see <xref linkend="configurationofdelegations"/>
+ to specify the configuration in the <literal>processdefinition.xml</literal>.
</para>
</section>
@@ -349,11 +382,11 @@
</para>
<itemizedlist>
- <listitem>executionContext</listitem>
- <listitem>token</listitem>
- <listitem>node</listitem>
- <listitem>task</listitem>
- <listitem>taskInstance</listitem>
+ <listitem><para>executionContext</para></listitem>
+ <listitem><para>token</para></listitem>
+ <listitem><para>node</para></listitem>
+ <listitem><para>task</para></listitem>
+ <listitem><para>taskInstance</para></listitem>
</itemizedlist>
<programlisting><process-definition>
@@ -655,11 +688,11 @@
<literal>Node.leave(ExecutionContext,Transition)</literal> again. In summary:</para>
<itemizedlist>
- <listitem>Token.signal(Transition)</listitem>
- <listitem>--> Node.leave(ExecutionContext,Transition)</listitem>
- <listitem>--> Transition.take(ExecutionContext)</listitem>
- <listitem>--> Node.enter(ExecutionContext)</listitem>
- <listitem>--> Node.execute(ExecutionContext)</listitem>
+ <listitem><para>Token.signal(Transition)</para></listitem>
+ <listitem><para>--> Node.leave(ExecutionContext,Transition)</para></listitem>
+ <listitem><para>--> Transition.take(ExecutionContext)</para></listitem>
+ <listitem><para>--> Node.enter(ExecutionContext)</para></listitem>
+ <listitem><para>--> Node.execute(ExecutionContext)</para></listitem>
</itemizedlist>
<para>Note that the complete calculation of the next state, including the invocation
@@ -674,8 +707,7 @@
<section id="transactiondemarcation">
<title>Transaction demarcation</title>
- <para>As explained in <xref linkend="graphexecution" /> and
- <xref linkend="graphorientedprogramming" />, jBPM runs the process in the thread of
+ <para>As explained in <xref linkend="graphexecution" />, jBPM runs the process in the thread of
the client and is by nature synchronous. Meaning that the <literal>token.signal()</literal>
or <literal>taskInstance.end()</literal> will only return when the process has entered a new
wait state.
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/persistence.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/persistence.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/persistence.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="persistence">
<title>Persistence</title>
@@ -21,18 +26,18 @@
</figure>
<para>For more information about the xml representation of process definitions
- and process archives, see <xref linkend="jpdl" />.</para>
-
+ and process archives, see JPDL.</para>
+ <!--
<para>More information on how to deploy a process archive to the database
- can be found in <xref linkend="deployingaprocessarchive" /> </para>
+ can be found in <xref linkend="deployingaprocessarchive" /> </para> -->
<section>
<title>The persistence API</title>
<section id="relationtotheconfigurationframework"><title>Relation to the configuration framework</title>
- <para>The persistence API is an integrated with the <link linkend="configuration">
- configuration framework</link> by exposing some convenience persistence methods
+ <para>The persistence API is an integrated with the
+ configuration framework (<xref linkend="configuration"/>) by exposing some convenience persistence methods
on the JbpmContext. Persistence API operations can therefore be
called inside a jBPM context block like this:
</para>
@@ -62,14 +67,14 @@
<section id="conveniencemethodsonjbpmcontext">
<title>Convenience methods on JbpmContext</title>
- <para>The three most common persistence operations are:
+ <para>The three most common persistence operations are:</para>
<itemizedlist>
- <listitem>Deploying a process</listitem>
- <listitem>Starting a new execution of a process</listitem>
- <listitem>Continuing an execution</listitem>
+ <listitem><para>Deploying a process</para></listitem>
+ <listitem><para>Starting a new execution of a process</para></listitem>
+ <listitem><para>Continuing an execution</para></listitem>
</itemizedlist>
- </para>
+
<para>First deploying a process definition. Typically, this will be done directly
from the graphical process designer or from the deployprocess ant task. But here
you can see how this is done programmatically:
@@ -165,13 +170,13 @@
server like JBoss. The most common scenario is the following:
</para>
<itemizedlist>
- <listitem>Configure a DataSource in your application server
+ <listitem><para>Configure a DataSource in your application server</para>
</listitem>
- <listitem>Configure hibernate to use that data source for its connections
+ <listitem><para>Configure hibernate to use that data source for its connections</para>
</listitem>
- <listitem>Use container managed transactions
+ <listitem><para>Use container managed transactions</para>
</listitem>
- <listitem>Disable transactions in jBPM
+ <listitem><para>Disable transactions in jBPM</para>
</listitem>
</itemizedlist>
@@ -312,8 +317,11 @@
...
</jbpm-context></programlisting>
- <itemizedlist>
- <listitem><emphasis role="bold">isTransactionEnabled</emphasis>: by default, jBPM will
+ <variablelist>
+ <varlistentry><term>isTransactionEnabled</term>
+
+
+ <listitem><para>by default, jBPM will
begin a hibernate transaction when the session is fetched the first time and if the
jbpmContext is closed, the hibernate transaction will be ended. The transaction is then
committed or rolled back depending on wether jbpmContext.setRollbackOnly was called. The
@@ -324,19 +332,28 @@
with the API, which ignores the isTransactionEnabled setting.
For more info about transactions, see
<xref linkend="hibernatetransactions" />.
- </listitem>
- <listitem><emphasis role="bold">sessionFactoryJndiName</emphasis>: by default, this
+ </para></listitem>
+ </varlistentry>
+
+
+ <varlistentry><term>sessionFactoryJndiName</term>
+ <listitem><para>by default, this
is null, meaning that the session factory is not fetched from JNDI. If set and
a session factory is needed to create a hibernate session, the session factory
will be fetched from jndi using the provided JNDI name.
- </listitem>
- <listitem><emphasis role="bold">dataSourceJndiName</emphasis>: by default, this is
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>dataSourceJndiName</term>
+
+ <listitem><para>by default, this is
null and creation of JDBC connections will be delegated to hibernate. By specifying
a datasource, jBPM will fetch a JDBC connection from the datasource and provide that
to hibernate while opening a new session. For user provided JDBC connections,
see <xref linkend="injectingresourcesprogrammatically" />.
- </listitem>
- </itemizedlist>
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
</section>
<section id="thehibernatesessionfactory">
@@ -518,11 +535,11 @@
use a different database:
</para>
<itemizedlist>
- <listitem>put the jdbc-driver library archive in the classpath
+ <listitem><para>put the jdbc-driver library archive in the classpath</para>
</listitem>
- <listitem>update the hibernate configuration used by jBPM
+ <listitem><para>update the hibernate configuration used by jBPM</para>
</listitem>
- <listitem>create the schema in the new database
+ <listitem><para>create the schema in the new database</para>
</listitem>
</itemizedlist>
</section>
@@ -561,9 +578,9 @@
<classname>org.jbpm.db.JbpmSchema</classname></ulink>:
</para>
<itemizedlist>
- <listitem>Create, drop, update and clean (drop-create) the database schema</listitem>
- <listitem>Generate SQL scripts for the above operations</listitem>
- <listitem>List the mapped tables and query the existing tables in the database</listitem>
+ <listitem><para>Create, drop, update and clean (drop-create) the database schema</para></listitem>
+ <listitem><para>Generate SQL scripts for the above operations</para></listitem>
+ <listitem><para>List the mapped tables and query the existing tables in the database</para></listitem>
</itemizedlist>
</section>
<section id="jbpmschematask">
@@ -673,16 +690,16 @@
follows:
</para>
<itemizedlist>
- <listitem>copy the jBPM hibernate mapping file(s) you want to copy from the
- sources (<literal>src/jbpm-jpdl-sources.jar</literal>)
+ <listitem><para>copy the jBPM hibernate mapping file(s) you want to copy from the
+ sources (<literal>src/jbpm-jpdl-sources.jar</literal>)</para>
</listitem>
- <listitem>
+ <listitem><para>
put the copy anywhere you want on the classpath, but make sure it is not
- the exact same location as they were before.
+ the exact same location as they were before.</para>
</listitem>
- <listitem>
+ <listitem><para>
update the references to the customized mapping files in the hibernate.cfg.xml
- configuration file
+ configuration file</para>
</listitem>
</itemizedlist>
</section>
@@ -695,7 +712,7 @@
</para>
<programlisting><cache usage="nonstrict-read-write"/></programlisting>
<para>Since process definitions (should) never change, it is ok to keep them in the
- second level cache. See also <xref linkend="changingdeployedprocessdefinitions" />.
+ second level cache.
</para>
<para>The second level cache is an important aspect of the JBoss jBPM implementation.
If it weren't for this cache, JBoss jBPM could have a serious drawback in comparison
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/pluggable.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/pluggable.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/pluggable.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="pluggable">
<title>Pluggable architecture</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/scheduler.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/scheduler.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/scheduler.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="scheduler">
<title>Scheduler</title>
<para>This chapter describes how to work with timers in jBPM.</para>
@@ -26,10 +31,10 @@
is executed, the following events occur in sequence : </para>
<itemizedlist>
- <listitem>an event is fired of type <literal>timer</literal></listitem>
- <listitem>if an action is specified, the action is executed.</listitem>
- <listitem>if a transition is specified, a signal will be sent to resume execution
- over the given transition.</listitem>
+ <listitem><para>an event is fired of type <literal>timer</literal></para></listitem>
+ <listitem><para>if an action is specified, the action is executed.</para></listitem>
+ <listitem><para>if a transition is specified, a signal will be sent to resume execution
+ over the given transition.</para></listitem>
</itemizedlist>
<para>Every timer must have a unique name. If no name is specified in the
@@ -61,4 +66,4 @@
</section>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/security.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/security.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/security.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="security">
<title>Security</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/simulation.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/simulation.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/simulation.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="simulation">
<title>Business Process Simulation</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/taskmgmt.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/taskmgmt.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/taskmgmt.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="taskmanagement">
<title>Task management</title>
@@ -88,14 +93,51 @@
continuation of the process. Following is the list of values that can be
given to the signal-property of a task-node.</para>
- <itemizedlist>
- <listitem><emphasis role="bold">last</emphasis>: This is the default. Proceeds execution when the last task instance is completed. When no tasks are created on entrance of this node, execution is continued.</listitem>
- <listitem><emphasis role="bold">last-wait</emphasis>: Proceeds execution when the last task instance is completed. When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.</listitem>
- <listitem><emphasis role="bold">first</emphasis>: Proceeds execution when the first task instance is completed. When no tasks are created on entrance of this node, execution is continued.</listitem>
- <listitem><emphasis role="bold">first-wait</emphasis>: Proceeds execution when the first task instance is completed. When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.</listitem>
- <listitem><emphasis role="bold">unsynchronized</emphasis>: Execution always continues, regardless wether tasks are created or still unfinished.</listitem>
- <listitem><emphasis role="bold">never</emphasis>: Execution never continues, regardless wether tasks are created or still unfinished.</listitem>
- </itemizedlist>
+ <variablelist>
+ <varlistentry>
+ <term>last</term>
+
+ <listitem><para>This is the default. Proceeds execution when the last task instance is completed. When no tasks are created on entrance of this node, execution is continued.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>last-wait</term>
+
+
+ <listitem><para>Proceeds execution when the last task instance is completed. When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>first</term>
+
+ <listitem><para>Proceeds execution when the first task instance is completed. When no tasks are created on entrance of this node, execution is continued.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>first-wait</term>
+
+
+ <listitem><para>Proceeds execution when
+ the first task instance is completed. When no tasks are created on entrance of this node, execution waits in the task node till tasks are created.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>unsynchronized</term>
+
+ <listitem><para>Execution always continues, regardless wether tasks are created or still unfinished.</para></listitem>
+ </varlistentry>
+
+
+
+ <varlistentry>
+ <term>never</term>
+
+ <listitem><para>Execution never continues, regardless wether tasks are created or still unfinished.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
<para>Task instance creation might be based upon a runtime calculation. In that case, add an
<literal>ActionHandler</literal> on the <literal>node-enter</literal> event of the <literal>task-node</literal> and
@@ -140,8 +182,8 @@
definition. At runtime, tasks result in the creation of task instances. A task
instance corresponds to one entry in a person's task list.</para>
- <para>With jBPM, <link linkend="thepersonaltasklist">push (personal task list)</link> and
- <link linkend="thegrouptasklist">pull (group task list)</link> model (see below) of
+ <para>With jBPM, push (personal task list) (<xref linkend="thepersonaltasklist" />) and
+ pull (group task list) (<xref linkend="thegrouptasklist" />) model (see below) of
task assignment can be applied in combination.
The process can calculate the responsible for a task and push it in his/her tasklist.
Or alternatively, a task can be assigned to a pool of actors, in which case
@@ -180,10 +222,10 @@
<para>Each task in the process definition can be associated with an assignment
handler implementation to perform the assignment at runtime.</para>
<para>When more than one task in a process should be assigned to the same person
- or group of actors, consider the usage of a <link linkend="swimlanes">swimlane</link></para>
+ or group of actors, consider the usage of a swimlane (<xref linkend="swimlanes" />)</para>
<para>To allow for the creation of reusable <literal>AssignmentHandler</literal>s,
each usage of an <literal>AssignmentHandler</literal> can be configured in
- the <literal>processdefinition.xml</literal>. See <xref linkend="delegation" />
+ the <literal>processdefinition.xml</literal>. See the section on Delegation
for more information on how to add configuration to assignment handlers.</para>
</section>
@@ -211,11 +253,13 @@
This is indicated with the property <literal>actorId</literal> on a <literal>TaskInstance</literal>. So
to put a TaskInstance in someone's personal task list, you just use one of the following ways:
</para>
+
<itemizedlist>
- <listitem>Specify an expression in the attribute <literal>actor-id</literal> of the task element in the process</listitem>
- <listitem>Use TaskInstance.setActorId(String) from anywhere in your code</listitem>
- <listitem>Use assignable.setActorId(String) in an AssignmentHandler</listitem>
+ <listitem><para>Specify an expression in the attribute <literal>actor-id</literal> of the task element in the process</para></listitem>
+ <listitem><para>Use TaskInstance.setActorId(String) from anywhere in your code</para></listitem>
+ <listitem><para>Use assignable.setActorId(String) in an AssignmentHandler</para></listitem>
</itemizedlist>
+
<para>To fetch the personal task list for a given user, use <literal>TaskMgmtSession.findTaskInstances(String actorId)</literal>.
</para>
</section>
@@ -232,9 +276,9 @@
groupIds in the pooledActorIds. So specify the pooled actors, use one of the following:
</para>
<itemizedlist>
- <listitem>Specify an expression in the attribute <literal>pooled-actor-ids</literal> of the task element in the process</listitem>
- <listitem>Use TaskInstance.setPooledActorIds(String[]) from anywhere in your code</listitem>
- <listitem>Use assignable.setPooledActorIds(String[]) in an AssignmentHandler</listitem>
+ <listitem><para>Specify an expression in the attribute <literal>pooled-actor-ids</literal> of the task element in the process</para></listitem>
+ <listitem><para>Use TaskInstance.setPooledActorIds(String[]) from anywhere in your code</para></listitem>
+ <listitem><para>Use assignable.setPooledActorIds(String[]) in an AssignmentHandler</para></listitem>
</itemizedlist>
<para>To fetch the group task list for a given user, proceed as follows: Make a collection that includes the user's actorId
and all the ids of groups that the user belongs to. With <literal>TaskMgmtSession.findPooledTaskInstances(String actorId)</literal> or
@@ -281,13 +325,13 @@
to:
</para>
<itemizedlist>
- <listitem>a) create copies of variables in the task instances so that intermediate updates
+ <listitem><para>a) create copies of variables in the task instances so that intermediate updates
to the task instance variables don't affect the process variables untill the process
- is finished and the copies are submitted back into the process variables.
+ is finished and the copies are submitted back into the process variables.</para>
</listitem>
- <listitem>b) the task instance variables do not relate one-on-one with the process variables.
+ <listitem><para>b) the task instance variables do not relate one-on-one with the process variables.
E.g. suppose the process has variables 'sales in januari' 'sales in februari' and 'sales in march'.
- Then the form for the task instance might need to show the average sales in the 3 months.
+ Then the form for the task instance might need to show the average sales in the 3 months.</para>
</listitem>
</itemizedlist>
<para>Tasks are intended to collect input from users. But there are many user interfaces
@@ -370,9 +414,9 @@
after the first task instance is created for a given swimlane, the actor
should be remembered in the process for all subsequent tasks that are in
the same swimlane. A swimlane therefore has one
- <link linkend="assignment"><literal>assignment</literal></link>
+ <literal>assignment</literal> (<xref linkend="assignment" />)
and all tasks that reference a swimlane should not specify an
- <link linkend="assignment"><literal>assignment</literal></link>.
+ <literal>assignment</literal>(<xref linkend="assignment" />).
</para>
<para>When the first task in a given swimlane is created, the
@@ -397,7 +441,7 @@
<para>A task can be specified in a start-state. That task be associated with a
swimlane. When a new task instance is created for such a task, the current
authenticated actor will be captured with
- <link linkend="authentication">Authentication.getAuthenticatedActorId()</link>
+ Authentication.getAuthenticatedActorId() (<xref linkend="authentication" />)
and that actor will be stored in the swimlane of the start task.
</para>
<para>For example:</para>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tdd.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/tdd.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tdd.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="tdd">
<title>TDD for workflow</title>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tutorial.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/tutorial.xml 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en-US/tutorial.xml 2010-05-19 21:56:28 UTC (rev 6362)
@@ -1,3 +1,8 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "jBPM_jPDL_User_Guide.ent">
+%BOOK_ENTITIES;
+]>
<chapter id="tutorial">
<title>Tutorial</title>
@@ -13,12 +18,12 @@
<para>The best way to learn is to create a project and experiment
by creating variations on the examples given.</para>
- <para>To get started first, <link linkend="downloadingandinstallingjbpm">
- download and install</link> jBPM.</para>
+ <para>To get started first,
+ download and install jBPM. <xref linkend="downloadingandinstallingjbpm" /></para>
<para>jBPM includes a graphical designer tool for authoring the
XML that is shown in the examples. You can find download instructions
- for the graphical designer in <xref linkend="downloadablesoverview" />.
+ for the graphical designer in the Downloadables Overview section..
You don't need the graphical designer tool to complete this tutorial.
</para>
Added: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/publican.cfg
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/publican.cfg (rev 0)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/publican.cfg 2010-05-19 21:56:28 UTC (rev 6362)
@@ -0,0 +1,7 @@
+# Config::Simple 4.59
+# Tue May 11 16:03:11 2010
+
+xml_lang: en-US
+type: Book
+brand: JBoss
+
13 years, 11 months
JBoss JBPM SVN: r6360 - in jbpm4/trunk/modules: jpdl/src/main/java/org/jbpm/jpdl/internal/activity and 6 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-05-19 03:50:12 -0400 (Wed, 19 May 2010)
New Revision: 6360
Added:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskSkip.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryTask.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TaskTimerTaskTest.java
Log:
JBPM-2537: mark incomplete task as obsolete before leaving it after expiration or external signal
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryTask.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryTask.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryTask.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -22,11 +22,9 @@
package org.jbpm.api.history;
import java.util.Date;
-import java.util.List;
import org.jbpm.api.task.Task;
-
/** history record for a task instance.
*
* In contrast to the {@link Task}, this entity will remain
@@ -37,6 +35,7 @@
public interface HistoryTask {
String STATE_COMPLETED = "completed";
+ String STATE_OBSOLETE = "obsolete";
/** the unique id for this task that is used as a reference in the service methods */
String getId();
@@ -50,7 +49,7 @@
/** might be null in case the activity is still active */
Date getEndTime();
- /** duration in milleseconds */
+ /** duration in milliseconds */
long getDuration();
/** history task state */
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -34,7 +34,6 @@
import org.jbpm.pvm.internal.history.events.TaskActivityStart;
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.script.ScriptManager;
import org.jbpm.pvm.internal.session.DbSession;
import org.jbpm.pvm.internal.task.ParticipationImpl;
import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
@@ -46,6 +45,8 @@
/**
* @author Tom Baeyens
* @author Alejandro Guizar
+ * @author Ronald van Kuijk
+ * @author Maciej Swiderski
*/
public class TaskActivity extends JpdlExternalActivity {
@@ -59,7 +60,7 @@
public void execute(ExecutionImpl execution) {
DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class);
- TaskImpl task = (TaskImpl) dbSession.createTask();
+ TaskImpl task = dbSession.createTask();
task.setTaskDefinition(taskDefinition);
task.setExecution(execution);
task.setProcessInstance(execution.getProcessInstance());
@@ -68,7 +69,8 @@
// initialize the name
if (taskDefinition.getName()!=null) {
task.setName(taskDefinition.getName());
- } else {
+ }
+ else {
task.setName(execution.getActivityName());
}
@@ -96,8 +98,9 @@
// copy the swimlane assignments to the task
task.setAssignee(swimlane.getAssignee());
- for (ParticipationImpl participant: swimlane.getParticipations()) {
- task.addParticipation(participant.getUserId(), participant.getGroupId(), participant.getType());
+ for (ParticipationImpl participant : swimlane.getParticipations()) {
+ task.addParticipation(participant.getUserId(), participant.getGroupId(),
+ participant.getType());
}
}
@@ -108,11 +111,13 @@
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters)
+ throws Exception {
signal((ExecutionImpl)execution, signalName, parameters);
}
- public void signal(ExecutionImpl execution, String signalName, Map<String, ?> parameters) throws Exception {
+ public void signal(ExecutionImpl execution, String signalName, Map<String, ?> parameters)
+ throws Exception {
ActivityImpl activity = execution.getActivity();
if (parameters!=null) {
@@ -121,8 +126,8 @@
execution.fire(signalName, activity);
- DbSession taskDbSession = EnvironmentImpl .getFromCurrent(DbSession.class);
- TaskImpl task = (TaskImpl) taskDbSession.findTaskByExecution(execution);
+ DbSession taskDbSession = EnvironmentImpl.getFromCurrent(DbSession.class);
+ TaskImpl task = taskDbSession.findTaskByExecution(execution);
if (task!=null) {
task.setSignalling(false);
}
@@ -130,45 +135,51 @@
Transition transition = null;
List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
- if ( (outgoingTransitions!=null) && (!outgoingTransitions.isEmpty()) ) {
-
+ if (outgoingTransitions!=null && !outgoingTransitions.isEmpty()) {
// Lookup the outgoing transition
-
- boolean noOutcomeSpecified =TaskConstants.NO_TASK_OUTCOME_SPECIFIED.equals(signalName);
+ boolean noOutcomeSpecified = TaskConstants.NO_TASK_OUTCOME_SPECIFIED.equals(signalName);
if (noOutcomeSpecified && activity.findOutgoingTransition(signalName) == null) {
// When no specific outcome was specified, the unnamed transition
// is looked up (name is null). If a null outcome was specifically
// used, then the else clause will be used (but the result is the same)
// Note: the second part of the if clause is to avoid the siutation
// where the user would have chosen the same name as the constant
- transition = activity.findOutgoingTransition(null);
- } else {
- transition = activity.findOutgoingTransition(signalName);
+ transition = activity.findOutgoingTransition(null);
}
+ else {
+ transition = activity.findOutgoingTransition(signalName);
+ }
// If no transition has been found, we check if we have a special case
// in which we can still deduce the outgoing transition
-
- if (transition==null) { // no unnamed transition found
-
- if (signalName == null) {
+ if (transition==null) {
+ // no unnamed transition found
+ if (signalName == null) {
// null was explicitely given as outcome
- throw new JbpmException("No unnamed transitions were found for the task '" + getTaskDefinition().getName() + "'");
-
- } else if (noOutcomeSpecified) { // Special case: complete(id)
-
+ throw new JbpmException("No unnamed transitions were found for the task '"
+ + getTaskDefinition().getName() + "'");
+ }
+ else if (noOutcomeSpecified) {
+ // Special case: complete(id)
if (outgoingTransitions.size() == 1) { // If only 1 transition, take that one
transition = outgoingTransitions.get(0);
- } else {
- throw new JbpmException("No unnamed transitions were found for the task '" + getTaskDefinition().getName() + "'");
}
-
- } else {
+ else {
+ throw new JbpmException("No unnamed transitions were found for the task '"
+ + getTaskDefinition().getName() + "'");
+ }
+ }
+ else {
// Likely a programmatic error.
- throw new JbpmException("No transition named '" + signalName + "' was found.");
+ throw new JbpmException("No transition named '" + signalName + "' was found.");
}
}
+ if (task != null && !task.isCompleted()) {
+ // task should be skipped since it is not completed yet !!!
+ task.skip(transition.getName());
+ }
+
if (transition!=null) {
execution.take(transition);
}
Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskSkip.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskSkip.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskSkip.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -0,0 +1,75 @@
+/*
+ * 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.history.events;
+
+import org.hibernate.Session;
+import org.jbpm.api.history.HistoryTask;
+import org.jbpm.pvm.internal.env.EnvironmentImpl;
+import org.jbpm.pvm.internal.history.model.HistoryActivityInstanceImpl;
+import org.jbpm.pvm.internal.history.model.HistoryTaskImpl;
+import org.jbpm.pvm.internal.history.model.HistoryTaskInstanceImpl;
+import org.jbpm.pvm.internal.task.TaskImpl;
+import org.jbpm.pvm.internal.util.Clock;
+
+/**
+ * @author Maciej Swiderski
+ */
+public class TaskSkip extends ActivityEnd {
+
+ private static final long serialVersionUID = 1L;
+
+ protected String outcome;
+
+ public TaskSkip(TaskImpl taskImpl, String outcome) {
+ this(outcome);
+ }
+
+ public TaskSkip(String outcome) {
+ this.outcome = outcome;
+ }
+
+ @Override
+ protected void updateHistoryActivityInstance(
+ HistoryActivityInstanceImpl historyActivityInstance) {
+ super.updateHistoryActivityInstance(historyActivityInstance);
+
+ Session session = EnvironmentImpl.getFromCurrent(Session.class);
+ Long historyTaskInstanceId = execution.getHistoryActivityInstanceDbid();
+ HistoryTaskInstanceImpl historyTaskInstance = (HistoryTaskInstanceImpl) session
+ .load(HistoryTaskInstanceImpl.class, historyTaskInstanceId);
+ historyTaskInstance.setEndTime(Clock.getTime());
+ historyTaskInstance.setTransitionName(outcome);
+
+ HistoryTaskImpl historyTask = historyTaskInstance.getHistoryTask();
+ historyTask.setOutcome(outcome);
+ historyTask.setEndTime(Clock.getTime());
+ historyTask.setState(HistoryTask.STATE_OBSOLETE);
+
+ session.update(historyTaskInstance);
+ }
+
+ @Override
+ protected Class<? extends HistoryActivityInstanceImpl> getHistoryActivityInstanceClass() {
+ return HistoryTaskInstanceImpl.class;
+ }
+
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskSkip.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -46,6 +46,7 @@
* @author Pascal Verdage
* @author Alejandro Guizar
* @author Ronald Van Kuijk
+ * @author Maciej Swiderski
*/
public class TimerImpl extends JobImpl<Boolean> implements Timer {
@@ -84,6 +85,8 @@
if (signalName!=null) {
if (log.isDebugEnabled()) log.debug("feeding timer signal "+signalName+" into "+execution);
+
+ // feed expiration signal
execution.signal(signalName);
}
@@ -139,11 +142,12 @@
if ((getSignalName() == null) && (getEventName() == null)) {
throw new JbpmException("timer has no signalName or eventName specified");
}
- if (getDueDate() == null) {
+ if (getDuedate() == null) {
throw new JbpmException("timer scheduled at null date");
}
}
+ @Override
public String toString() {
StringBuilder text = new StringBuilder();
text.append("timer[");
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -21,7 +21,6 @@
*/
package org.jbpm.pvm.internal.model;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -83,11 +82,8 @@
/**
* @author Tom Baeyens
*/
-public class ExecutionImpl extends ScopeInstanceImpl
- implements ClientProcessInstance,
- ActivityExecution,
- EventListenerExecution,
- Serializable {
+public class ExecutionImpl extends ScopeInstanceImpl implements ClientProcessInstance,
+ ActivityExecution, EventListenerExecution {
private static final long serialVersionUID = 1L;
@@ -110,7 +106,7 @@
/** the parent child relation of executions is convenient for some forms of
* concurrency. */
- protected ExecutionImpl parent = null;
+ protected ExecutionImpl parent;
protected ExecutionImpl processInstance;
/** the super process link in case this is a sub process execution */
@@ -174,13 +170,14 @@
public enum Propagation {
UNSPECIFIED, WAIT, EXPLICIT
}
- protected Propagation propagation = null;
+ protected Propagation propagation;
+
// construction /////////////////////////////////////////////////////////////
public void initializeProcessInstance(ProcessDefinitionImpl processDefinition, String key) {
setProcessDefinition(processDefinition);
- setActivity ( (ActivityImpl) processDefinition.getInitial() );
+ setActivity(processDefinition.getInitial());
this.processInstance = this;
this.state = STATE_CREATED;
this.key = key;
@@ -203,7 +200,6 @@
this.id = IdComposer.getIdComposer().createId(processDefinition, parent, this);
}
-
// execution method : start /////////////////////////////////////////////////
public void start() {
@@ -276,11 +272,11 @@
parent.setPropagation(getPropagation());
ExecutionImpl parentsParent = parent.getParent();
- if ( (parentsParent!=null)
- && (STATE_INACTIVE_CONCURRENT_ROOT.equals(parentsParent.getState()))
- ) {
+ if (parentsParent!=null
+ && STATE_INACTIVE_CONCURRENT_ROOT.equals(parentsParent.getState())) {
parent.setState(STATE_ACTIVE_CONCURRENT);
- } else {
+ }
+ else {
parent.setState(STATE_ACTIVE_ROOT);
}
@@ -293,14 +289,13 @@
return parent;
}
-
+ @Override
protected void destroyTimers(CompositeElementImpl scope) {
TimerSession timerSession = EnvironmentImpl.getFromCurrent(TimerSession.class, false);
if (timerSession!=null) {
log.debug("destroying timers of "+this);
List<Timer> timers = timerSession.findTimersByExecution(this);
for (Timer timer: timers) {
-
Job job = EnvironmentImpl.getFromCurrent(JobImpl.class, false);
if (timer!=job) {
timerSession.cancel(timer);
@@ -309,9 +304,9 @@
}
}
-
// basic object methods /////////////////////////////////////////////////////
+ @Override
public String toString() {
if (getId()!=null) {
return "execution["+id+"]";
@@ -347,7 +342,8 @@
if (log.isDebugEnabled()) {
if (state==STATE_ENDED) {
log.debug(toString()+" ends");
- } else {
+ }
+ else {
log.debug(toString()+" ends with state "+state);
}
}
@@ -370,16 +366,17 @@
if (dbSession!=null) {
dbSession.delete(this);
}
-
- } else { // this is a process instance
+ }
+ else {
+ // this is a process instance
HistoryEvent.fire(new ProcessInstanceEnd(), this);
fire(Event.END, getProcessDefinition());
if (superProcessExecution!=null) {
log.trace(toString()+" signals super process execution");
superProcessExecution.signal();
-
- } else if (dbSession!=null) {
+ }
+ else if (dbSession != null) {
dbSession.deleteProcessInstance(id, false);
}
}
@@ -393,7 +390,6 @@
((ExecutionImpl)executionToEnd).end(state);
}
-
// execution method : signal ////////////////////////////////////////////////
public void signal() {
@@ -416,9 +412,11 @@
propagation = Propagation.EXPLICIT;
if (getActivity()!=null) {
performAtomicOperation(new Signal(signal, parameters));
- } else if (transition!=null) {
+ }
+ else if (transition != null) {
performAtomicOperation(AtomicOperation.TRANSITION_START_ACTIVITY);
- } else {
+ }
+ else {
throw new JbpmException("execution is not in a activity or in a transition");
}
}
@@ -518,19 +516,19 @@
TransitionImpl defaultTransition = findDefaultTransition();
if (defaultTransition!=null) {
take(defaultTransition);
-
+ }
// in block structured processDefinition languages we assume that
// there is no default transition and that there is a
// parent activity of the current activity
- } else {
+ else {
ActivityImpl parentActivity = getActivity().getParentActivity();
// if there is a parent activity
if (parentActivity!=null) {
// propagate to the parent
performAtomicOperation(AtomicOperation.PROPAGATE_TO_PARENT);
-
- } else {
+ }
+ else {
// When we don't know how to proceed, i don't know if it's best to
// throw new PvmException("don't know how to proceed");
// or to end the execution. Because of convenience for testing,
@@ -554,7 +552,8 @@
fire(eventName, (ObservableElementImpl) eventSource, null);
}
- public void fire(String eventName, ObservableElementImpl observableElement, AtomicOperation eventCompletedOperation) {
+ public void fire(String eventName, ObservableElementImpl observableElement,
+ AtomicOperation eventCompletedOperation) {
EventImpl event = findEvent(observableElement, eventName);
if (event!=null) {
setEvent(event);
@@ -562,11 +561,10 @@
setEventListenerIndex(0);
setEventCompletedOperation(eventCompletedOperation);
performAtomicOperation(AtomicOperation.EXECUTE_EVENT_LISTENER);
- } else {
- if (eventCompletedOperation!=null) {
- performAtomicOperationSync(eventCompletedOperation);
- }
}
+ else if (eventCompletedOperation != null) {
+ performAtomicOperationSync(eventCompletedOperation);
+ }
}
public static EventImpl findEvent(ObservableElementImpl observableElement, String eventName) {
@@ -613,7 +611,8 @@
public synchronized void performAtomicOperation(AtomicOperation operation) {
if (operation.isAsync(this)) {
sendContinuationMessage(operation);
- } else {
+ }
+ else {
performAtomicOperationSync(operation);
}
}
@@ -631,7 +630,6 @@
public void performAtomicOperationSync(AtomicOperation operation) {
if (atomicOperations==null) {
-
// initialise the fifo queue of atomic operations
atomicOperations = new LinkedList<AtomicOperation>();
atomicOperations.offer(operation);
@@ -640,12 +638,13 @@
ExecutionContext executionContext = null;
EnvironmentImpl environment = EnvironmentImpl.getCurrent();
if (environment!=null) {
- originalExecutionContext = (ExecutionContext) environment.getContext(Context.CONTEXTNAME_EXECUTION);
- if ( (originalExecutionContext!=null)
- && (originalExecutionContext.getExecution()==this)
- ) {
+ originalExecutionContext = (ExecutionContext) environment
+ .getContext(Context.CONTEXTNAME_EXECUTION);
+ if (originalExecutionContext != null
+ && originalExecutionContext.getExecution() == this) {
originalExecutionContext = null;
- } else {
+ }
+ else {
executionContext = new ExecutionContext(this);
environment.setContext(executionContext);
}
@@ -656,10 +655,8 @@
AtomicOperation atomicOperation = atomicOperations.poll();
atomicOperation.perform(this);
}
-
- } catch (RuntimeException e ) {
- throw e;
- } finally {
+ }
+ finally {
atomicOperations = null;
if (executionContext!=null) {
@@ -669,7 +666,8 @@
environment.setContext(originalExecutionContext);
}
}
- } else {
+ }
+ else {
atomicOperations.offer(operation);
}
}
@@ -684,12 +682,13 @@
ExecutionContext executionContext = null;
EnvironmentImpl environment = EnvironmentImpl.getCurrent();
if (environment!=null) {
- originalExecutionContext = (ExecutionContext) environment.getContext(Context.CONTEXTNAME_EXECUTION);
- if ( (originalExecutionContext!=null)
- && (originalExecutionContext.getExecution()==this)
- ) {
+ originalExecutionContext = (ExecutionContext) environment
+ .getContext(Context.CONTEXTNAME_EXECUTION);
+ if (originalExecutionContext != null
+ && originalExecutionContext.getExecution() == this) {
originalExecutionContext = null;
- } else {
+ }
+ else {
executionContext = new ExecutionContext(this);
environment.setContext(executionContext);
}
@@ -698,10 +697,12 @@
try {
ScriptManager scriptManager = ScriptManager.getScriptManager();
return scriptManager.evaluateScript(expression, language);
- } catch(RuntimeException e) {
+ }
+ catch (RuntimeException e) {
log.error("Error while evaluation script " + expression, e);
throw e;
- } finally {
+ }
+ finally {
if (executionContext != null) {
environment.removeContext(executionContext);
}
@@ -711,11 +712,8 @@
}
}
- public void handleException(ObservableElementImpl observableElement,
- EventImpl event,
- EventListenerReference eventListenerReference,
- Exception exception,
- String rethrowMessage) {
+ public void handleException(ObservableElementImpl observableElement, EventImpl event,
+ EventListenerReference eventListenerReference, Exception exception, String rethrowMessage) {
List<ProcessElementImpl> processElements = new ArrayList<ProcessElementImpl>();
if (eventListenerReference!=null) {
@@ -737,7 +735,8 @@
try {
exceptionHandler.handle(this, exception);
return;
- } catch (Exception rethrowException) {
+ }
+ catch (Exception rethrowException) {
if (!exceptionHandler.isRethrowMasked()) {
exception = rethrowException;
}
@@ -752,13 +751,13 @@
ExceptionHandlerImpl.rethrow(exception, rethrowMessage+": "+exception.getMessage());
}
-
// tasks ////////////////////////////////////////////////////////////////////
/** tasks and swimlane assignment.
* SwimlaneDefinitionImpl is base class for TaskDefinitionImpl.
* Both Task and Swimlane implement Assignable. */
- public void initializeAssignments(AssignableDefinitionImpl assignableDefinition, Assignable assignable) {
+ public void initializeAssignments(AssignableDefinitionImpl assignableDefinition,
+ Assignable assignable) {
Expression assigneeExpression = assignableDefinition.getAssigneeExpression();
if (assigneeExpression!=null) {
String assignee = (String) assigneeExpression.evaluate(this);
@@ -788,19 +787,21 @@
}
}
- UserCodeReference assignmentHandlerReference = assignableDefinition.getAssignmentHandlerReference();
+ UserCodeReference assignmentHandlerReference = assignableDefinition
+ .getAssignmentHandlerReference();
if (assignmentHandlerReference!=null) {
-
// JBPM-2758
// TODO Find out why processdefinition is null in at this time....
if (processDefinition == null) {
- processDefinition = getProcessDefinition();
+ processDefinition = getProcessDefinition();
}
- AssignmentHandler assignmentHandler = (AssignmentHandler) assignmentHandlerReference.getObject(processDefinition);
+ AssignmentHandler assignmentHandler = (AssignmentHandler) assignmentHandlerReference
+ .getObject(processDefinition);
if (assignmentHandler!=null) {
try {
assignmentHandler.assign(assignable, this);
- } catch (Exception e) {
+ }
+ catch (Exception e) {
throw new JbpmException("assignment handler threw exception: " + e, e);
}
}
@@ -810,9 +811,7 @@
protected String resolveAssignmentExpression(String expression, String expressionLanguage) {
ScriptManager scriptManager = EnvironmentImpl.getFromCurrent(ScriptManager.class);
Object result = scriptManager.evaluateExpression(expression, expressionLanguage);
- if ( (result ==null)
- || (result instanceof String)
- ) {
+ if (result == null || result instanceof String) {
return (String) result;
}
throw new JbpmException("result of assignment expression "+expression+" is "+result+" ("+result.getClass().getName()+") instead of String");
@@ -830,8 +829,8 @@
}
public void removeSwimlane(SwimlaneImpl swimlane) {
- swimlanes.remove(swimlane.getName());
- swimlane.setExecution(null);
+ swimlanes.remove(swimlane.getName());
+ swimlane.setExecution(null);
}
public SwimlaneImpl getInitializedSwimlane(SwimlaneDefinitionImpl swimlaneDefinition) {
@@ -905,7 +904,7 @@
/** @see Execution#getExecution(String) */
public ExecutionImpl getExecution(String name) {
Map<String, Execution> executionsMap = getExecutionsMap();
- return (ExecutionImpl) (executionsMap!=null ? executionsMap.get(name) : null);
+ return executionsMap != null ? (ExecutionImpl) executionsMap.get(name) : null;
}
public void removeExecution(ExecutionImpl child) {
@@ -915,14 +914,15 @@
// invalidate the executionsMap cache
executionsMap = null;
- } else {
- throw new JbpmException(child+" is not a child execution of "+this);
}
+ else {
+ throw new JbpmException(child + " is not a child execution of " + this);
+ }
}
}
public Map<String, Execution> getExecutionsMap() {
- if ((executionsMap==null)) {
+ if (executionsMap == null) {
// initialize executionsMap cache
executionsMap = new HashMap<String, Execution>();
for(ExecutionImpl execution: executions) {
@@ -938,9 +938,7 @@
}
public boolean hasExecution(String name) {
- return ( (getExecutionsMap()!=null)
- && executionsMap.containsKey(name)
- );
+ return getExecutionsMap() != null && executionsMap.containsKey(name);
}
public boolean isActive(String activityName) {
@@ -952,10 +950,8 @@
}
protected Set<String> addActiveActivityNames(Set<String> activityNames) {
- if ( ( (state.equals(STATE_ACTIVE_ROOT)) || (state.equals(STATE_ACTIVE_CONCURRENT)) )
- &&
- (activityName!=null)
- ) {
+ if ((state.equals(STATE_ACTIVE_ROOT) || state.equals(STATE_ACTIVE_CONCURRENT))
+ && activityName != null) {
activityNames.add(activityName);
}
@@ -967,8 +963,7 @@
}
public ExecutionImpl findActiveExecutionIn(String activityName) {
- if ( activityName.equals(this.activityName)
- && isActive()) {
+ if (activityName.equals(this.activityName) && isActive()) {
return this;
}
@@ -998,7 +993,8 @@
if (variable!=null) {
log.debug("setting system variable '"+key+"' in '"+this+"' to value '"+value+"'");
variable.setValue(value, this);
- } else {
+ }
+ else {
log.debug("creating system variable '"+key+"' in '"+this+"' to value '"+value+"'");
createSystemVariable(key, value, null);
}
@@ -1014,7 +1010,7 @@
public boolean removeSystemVariable(String key) {
if (systemVariables.containsKey(key)) {
- return (systemVariables.remove(key)!=null);
+ return systemVariables.remove(key) != null;
}
return false;
}
@@ -1047,6 +1043,7 @@
// state mgmt ///////////////////////////////////////////////////////////////
/** @see Execution#suspend() */
+ @Override
public void suspend() {
super.suspend();
this.propagation = Propagation.EXPLICIT;
@@ -1057,6 +1054,7 @@
}
/** @see Execution#resume() */
+ @Override
public void resume() {
super.resume();
DbSession hibernatePvmDbSession = EnvironmentImpl.getFromCurrent(DbSession.class, false);
@@ -1150,6 +1148,7 @@
// equals ///////////////////////////////////////////////////////////////////
// hack to support comparing hibernate proxies against the real objects
// since this always falls back to ==, we don't need to overwrite the hashcode
+ @Override
public boolean equals(Object o) {
return EqualsUtil.equals(this, o);
}
@@ -1159,13 +1158,11 @@
// process definition id. //
/////////////////////////////////////////////////////////////////////////////
-
public ProcessDefinitionImpl getProcessDefinition() {
- if ( (processDefinition==null)
- && (processDefinitionId!=null)
- ) {
- RepositorySession repositorySession = EnvironmentImpl.getFromCurrent(RepositorySession.class);
- processDefinition = (ProcessDefinitionImpl) repositorySession.findProcessDefinitionById(processDefinitionId);
+ if (processDefinition == null && processDefinitionId != null) {
+ RepositorySession repositorySession = EnvironmentImpl
+ .getFromCurrent(RepositorySession.class);
+ processDefinition = repositorySession.findProcessDefinitionById(processDefinitionId);
if (processDefinition==null) {
throw new JbpmException("couldn't find process definition "+processDefinitionId+" in the repository");
}
@@ -1183,9 +1180,7 @@
/////////////////////////////////////////////////////////////////////////////
public ActivityImpl getActivity() {
- if ( (activity==null)
- && (activityName!=null)
- ) {
+ if (activity == null && activityName != null) {
activity = getProcessDefinition().findActivity(activityName);
}
return activity;
@@ -1195,7 +1190,8 @@
this.activity = activity;
if (activity!=null) {
this.activityName = activity.getName();
- } else {
+ }
+ else {
this.activityName = null;
}
}
@@ -1209,9 +1205,7 @@
public boolean hasAsyncEndEvent(List<ActivityImpl> leftActivities) {
for (ActivityImpl leftActivity : leftActivities) {
EventImpl endEvent = leftActivity.getEvent(Event.END);
- if ( (endEvent!=null)
- && (endEvent.isAsync())
- ) {
+ if (endEvent != null && endEvent.isAsync()) {
return true;
}
}
@@ -1224,6 +1218,7 @@
// getters and setters for scope instance //////////////////////////////////////
+ @Override
public ExecutionImpl getExecution() {
return this;
}
@@ -1243,7 +1238,7 @@
return eventSource;
}
public Collection<ExecutionImpl> getExecutions() {
- return (Collection) executions;
+ return executions;
}
public String getName() {
return name;
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -40,49 +40,53 @@
private static final Log log = Log.getLog(Signal.class.getName());
- String signalName;
- Map<String, ?> parameters;
+ private final String signalName;
+ private final Map<String, ?> parameters;
public Signal(String signalName, Map<String, ?> parameters) {
this.signalName = signalName;
this.parameters = parameters;
}
+ @Override
public boolean isAsync(ExecutionImpl execution) {
return false;
}
+ @Override
public void perform(ExecutionImpl execution) {
ActivityImpl activity = execution.getActivity();
-
- if (execution.getName()!=null) {
- log.debug(execution.toString()+" signals "+activity);
- } else {
- log.debug("signalling "+activity+", signalName="+signalName);
+ if (execution.getName() != null) {
+ log.debug(execution.toString() + " signals " + activity);
}
+ else {
+ log.debug("signalling " + activity + ", signalName=" + signalName);
+ }
- ExternalActivityBehaviour externalActivityBehaviour = (ExternalActivityBehaviour) activity.getActivityBehaviour();
-
+ ExternalActivityBehaviour activityBehaviour = (ExternalActivityBehaviour) activity
+ .getActivityBehaviour();
try {
execution.setPropagation(Propagation.UNSPECIFIED);
- externalActivityBehaviour.signal(execution, signalName, parameters);
-
- } catch (RuntimeException e) {
+ activityBehaviour.signal(execution, signalName, parameters);
+ }
+ catch (RuntimeException e) {
throw e;
-
- } catch (Exception e) {
- throw new JbpmException("couldn't signal "+activity+": "+e.getMessage(), e);
}
+ catch (Exception e) {
+ throw new JbpmException("couldn't signal " + activity + ": " + e.getMessage(), e);
+ }
if (execution.getPropagation() == Propagation.UNSPECIFIED) {
execution.proceed();
}
}
+ @Override
public String toString() {
- return "Signal";
+ return "Signal(" + signalName + ')';
}
+ @Override
public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
return null;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -21,7 +21,6 @@
*/
package org.jbpm.pvm.internal.task;
-import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
@@ -37,6 +36,7 @@
import org.jbpm.pvm.internal.client.ClientExecution;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.history.HistoryEvent;
+import org.jbpm.pvm.internal.history.events.TaskSkip;
import org.jbpm.pvm.internal.history.events.TaskComplete;
import org.jbpm.pvm.internal.history.events.TaskDelete;
import org.jbpm.pvm.internal.model.ExecutionImpl;
@@ -49,13 +49,14 @@
/**
* is one task instance that can be assigned to an actor (read: put in someone's task list) and that
* can trigger the continuation of execution of the token upon completion.
+ *
+ * @author Tom Baeyens
+ * @author Ronald van Kuijk
*/
-public class TaskImpl extends ScopeInstanceImpl implements Serializable, OpenTask, Assignable {
+public class TaskImpl extends ScopeInstanceImpl implements OpenTask, Assignable {
private static final long serialVersionUID = 1L;
- // private static Log log = Log.getLog(TaskImpl.class.getName());
-
protected boolean isNew;
protected String name;
protected String description;
@@ -97,10 +98,12 @@
// parent for variable lookup ///////////////////////////////////////////////
+ @Override
public ScopeInstanceImpl getParentVariableScope() {
return execution;
}
+ @Override
public TaskImpl getTask() {
return this;
}
@@ -147,7 +150,7 @@
allRoles = new HashSet<ParticipationImpl>(participations);
}
if (swimlane != null) {
- allRoles.addAll((Set) swimlane.getParticipations());
+ allRoles.addAll(swimlane.getParticipations());
}
return allRoles;
}
@@ -194,7 +197,7 @@
}
if (isSignalling()) {
- ClientExecution execution = (ClientExecution) getExecution();
+ ClientExecution execution = getExecution();
execution.signal(outcome);
}
@@ -210,13 +213,23 @@
historyTaskDelete(reason);
}
+ public void skip(String outcome) {
+ if (outcome == null || outcome.equals("")) {
+ outcome = TaskConstants.NO_TASK_OUTCOME_SPECIFIED;
+ }
+
+ historyTaskSkip(outcome);
+
+ DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class, false);
+ if (dbSession!=null){
+ dbSession.delete(this);
+ }
+ }
+
// state ////////////////////////////////////////////////////////////////////
public boolean isCompleted() {
- if (Task.STATE_COMPLETED.equals(state)) {
- return true;
- }
- if ((Task.STATE_OPEN.equals(state)) || (Task.STATE_SUSPENDED.equals(state))) {
+ if (Task.STATE_OPEN.equals(state) || Task.STATE_SUSPENDED.equals(state)) {
return false;
}
return true;
@@ -225,15 +238,13 @@
// subtasks /////////////////////////////////////////////////////////////////
public Set<Task> getSubTasks() {
- if (subTasks == null) {
- return Collections.emptySet();
- }
- return (Set) subTasks;
+ return subTasks != null ? Collections.<Task> unmodifiableSet(subTasks) :
+ Collections.<Task> emptySet();
}
public TaskImpl createSubTask() {
DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class);
- TaskImpl subTask = (TaskImpl) dbSession.createTask();
+ TaskImpl subTask = dbSession.createTask();
if (subTasks == null) {
subTasks = new HashSet<TaskImpl>();
}
@@ -270,10 +281,12 @@
// equals ///////////////////////////////////////////////////////////////////
// hack to support comparing hibernate proxies against the real objects
// since this always falls back to ==, we don't need to overwrite the hashcode
+ @Override
public boolean equals(Object o) {
return EqualsUtil.equals(this, o);
}
+ @Override
public String toString() {
return "Task(" + name + ")";
}
@@ -310,6 +323,12 @@
}
}
+ public void historyTaskSkip(String outcome) {
+ if (execution != null) {
+ HistoryEvent.fire(new TaskSkip(outcome), execution);
+ }
+ }
+
public void signalExecution(String signalName) {
if (execution != null) {
execution.signal(signalName);
@@ -386,6 +405,7 @@
this.duedate = duedate;
}
+ @Override
public ExecutionImpl getExecution() {
return execution;
}
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TaskTimerTaskTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TaskTimerTaskTest.java 2010-05-18 16:35:12 UTC (rev 6359)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TaskTimerTaskTest.java 2010-05-19 07:50:12 UTC (rev 6360)
@@ -19,21 +19,24 @@
* 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.test.timer;
import java.util.List;
+import org.jbpm.api.Execution;
import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.history.HistoryTask;
import org.jbpm.api.job.Job;
import org.jbpm.api.task.Task;
import org.jbpm.test.JbpmTestCase;
-
/**
+ * A triggered timer does not end the task which is left.
+ *
+ * @see <a href="https://jira.jboss.org/browse/JBPM-2537">JBPM-2537</a>
* @author Joram Barrez
+ * @author Ronald van Kuijk
+ * @author Maciej Swiderski
*/
public class TaskTimerTaskTest extends JbpmTestCase {
@@ -54,29 +57,57 @@
"</process>");
ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskTimer");
-
- assertEquals(1, taskService.createTaskQuery()
- .assignee("johndoe")
- .list()
- .size() );
-
- Job timer = managementService.createJobQuery()
- .processInstanceId(processInstance.getId())
- .timers()
- .uniqueResult();
-
+
+ List<Task> tasks = taskService.createTaskQuery().assignee("johndoe").list();
+ assertEquals(1, tasks.size());
+
+ Job timer = managementService
+ .createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .timers()
+ .uniqueResult();
assertNotNull(timer);
managementService.executeJob(timer.getId());
-
assertActivityActive(processInstance.getId(), "go to cafeteria");
-// TODO JBPM-2537
-// assertEquals(0, taskService.createTaskQuery()
-// .assignee("johndoe")
-// .list()
-// .size() );
+ assertEquals(0, taskService.createTaskQuery().assignee("johndoe").list().size());
+
+ String taskId = tasks.get(0).getId();
+ List<HistoryTask> history = historyService.createHistoryTaskQuery().taskId(taskId).list();
+ assertEquals(1, history.size());
+ assertEquals(HistoryTask.STATE_OBSOLETE, history.get(0).getState());
}
+ public void testTaskClosedBySignal() {
+ deployJpdlXmlString("<process name='TaskTimer'>" +
+ " <start name='start'>" +
+ " <transition to='do work' />" +
+ " </start>" +
+ " <task name='do work' assignee='johndoe'>" +
+ " <transition name='done' to='go home' />" +
+ " <transition name='lunch' to='go to cafeteria'>" +
+ " <timer duedate='10 seconds' />" +
+ " </transition>" +
+ " </task>" +
+ " <state name='go home' />" +
+ " <state name='go to cafeteria' />" +
+ "</process>");
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskTimer");
+
+ List<Task> tasks = taskService.createTaskQuery().assignee("johndoe").list();
+ assertEquals(1, tasks.size());
+
+ Execution exec = processInstance.findActiveExecutionIn("do work");
+ processInstance = executionService.signalExecutionById(exec.getId(), "done");
+ assertActivityActive(processInstance.getId(), "go home");
+
+ assertEquals(0, taskService.createTaskQuery().assignee("johndoe").list().size());
+
+ String taskId = tasks.get(0).getId();
+ List<HistoryTask> history = historyService.createHistoryTaskQuery().taskId(taskId).list();
+ assertEquals(1, history.size());
+ assertEquals(HistoryTask.STATE_OBSOLETE, history.get(0).getState());
+ }
}
13 years, 11 months
JBoss JBPM SVN: r6359 - jbpm4/trunk/modules/userguide/src/main/docbook/en/modules.
by do-not-reply@jboss.org
Author: swiderski.maciej
Date: 2010-05-18 12:35:12 -0400 (Tue, 18 May 2010)
New Revision: 6359
Modified:
jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml
Log:
JBPM-2808: added information about EL expression support to user guide - sub process section
Modified: jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml
===================================================================
--- jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml 2010-05-18 16:33:36 UTC (rev 6358)
+++ jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch06-Jpdl.xml 2010-05-18 16:35:12 UTC (rev 6359)
@@ -1306,20 +1306,22 @@
<tbody>
<row>
<entry><literal>sub-process-id</literal></entry>
- <entry>string</entry>
+ <entry>string or expression</entry>
<entry></entry>
<entry>either this or sub-process-key is required</entry>
<entry>Identifies the sub process by the id. This means that a specific
- version of a process definition is referenced.</entry>
+ version of a process definition is referenced. Sub process id can be specified as
+ simple text or EL expression.</entry>
</row>
<row>
<entry><literal>sub-process-key</literal></entry>
- <entry>string</entry>
+ <entry>string or expression</entry>
<entry></entry>
<entry>either this or sub-process-key is required</entry>
<entry>Identifies the sub process by the key. This means that the latest
version of the process definition with the given key is referenced. The latest version
- of the process is looked up each time the activity executes.
+ of the process is looked up each time the activity executes. Sub process key can be specified as
+ simple text or EL expression.
</entry>
</row>
<row>
13 years, 11 months
JBoss JBPM SVN: r6358 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/activity/subprocess and 1 other directory.
by do-not-reply@jboss.org
Author: swiderski.maciej
Date: 2010-05-18 12:33:36 -0400 (Tue, 18 May 2010)
New Revision: 6358
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java
Log:
JBPM-2444: added support for EL expression for sub-process-id attribute
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2010-05-18 16:33:36 UTC (rev 6358)
@@ -65,7 +65,9 @@
ClientProcessDefinition processDefinition = null;
if (subProcessId!=null) {
- processDefinition = repositorySession.findProcessDefinitionById(subProcessId);
+ Expression subProcessKeyExpression = Expression.create(subProcessId, Expression.LANGUAGE_UEL_VALUE);
+ String subProcessIdEval = (String) subProcessKeyExpression.evaluate(execution);
+ processDefinition = repositorySession.findProcessDefinitionById(subProcessIdEval);
} else {
String subProcessKeyEval = null;
try {
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java 2010-05-18 03:14:14 UTC (rev 6357)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java 2010-05-18 16:33:36 UTC (rev 6358)
@@ -105,6 +105,36 @@
" <end name='close'/>" +
"</process>";
+ private static final String MAIN_PROCESS_SUB_EL_ID =
+ "<process name='mainProcess'>" +
+ " <start>" +
+ " <transition to='review' />" +
+ " </start>" +
+ " <sub-process name='review' sub-process-id='#{dynamic_subprocess}'>" +
+ " <transition name='ok' to='next step'/>" +
+ " <transition name='nok' to='update'/>" +
+ " <transition name='reject' to='close'/>" +
+ " </sub-process>" +
+ " <state name='next step'/>" +
+ " <state name='update'/>" +
+ " <end name='close'/>" +
+ "</process>";
+
+ private static final String MAIN_PROCESS_SUB_ID =
+ "<process name='mainProcess'>" +
+ " <start>" +
+ " <transition to='review' />" +
+ " </start>" +
+ " <sub-process name='review' sub-process-id='SubProcessReview-1'>" +
+ " <transition name='ok' to='next step'/>" +
+ " <transition name='nok' to='update'/>" +
+ " <transition name='reject' to='close'/>" +
+ " </sub-process>" +
+ " <state name='next step'/>" +
+ " <state name='update'/>" +
+ " <end name='close'/>" +
+ "</process>";
+
public void testSubProcessOutcomeToState() {
deployJpdlXmlString(SUB_PROCESS);
deployJpdlXmlString(MAIN_PROCESS);
@@ -177,4 +207,26 @@
executionService.startProcessInstanceByKey("mainProcess");
}
+ public void testDynamicSubProcessWithId() {
+ deployJpdlXmlString(SUB_PROCESS);
+ deployJpdlXmlString(MAIN_PROCESS_SUB_EL_ID);
+
+ Map<String, String> vars = new HashMap<String, String>();
+ vars.put("dynamic_subprocess", "SubProcessReview-1");
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess",vars);
+ Task task = taskService.findPersonalTasks("johndoe").get(0);
+ taskService.completeTask(task.getId(), "reject");
+ assertProcessInstanceEnded(processInstance);
+ }
+
+ public void testSubProcessWithId() {
+ deployJpdlXmlString(SUB_PROCESS);
+ deployJpdlXmlString(MAIN_PROCESS_SUB_ID);
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess");
+ Task task = taskService.findPersonalTasks("johndoe").get(0);
+ taskService.completeTask(task.getId(), "reject");
+ assertProcessInstanceEnded(processInstance);
+ }
+
}
13 years, 11 months
JBoss JBPM SVN: r6357 - in jbpm3/branches/jbpm-3.2-soa/modules: core/src/main/java/org/jbpm/job/executor and 2 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-05-17 23:14:14 -0400 (Mon, 17 May 2010)
New Revision: 6357
Modified:
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteActionJob.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteNodeJob.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Job.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Timer.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/resources/org/jbpm/default.jbpm.cfg.xml
jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/configuration.xml
Log:
JBPM-2861: make job retries setting available to message and timer services other than the job executor
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/CleanUpProcessJob.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -42,14 +42,14 @@
public boolean execute(JbpmContext jbpmContext) throws Exception {
SchedulerService schedulerService = jbpmContext.getServices().getSchedulerService();
- if (schedulerService!=null) {
- schedulerService.deleteTimersByProcessInstance(processInstance);
+ if (schedulerService != null) {
+ schedulerService.deleteTimersByProcessInstance(getProcessInstance());
}
return true;
}
public String toString() {
- return "CleanUpProcessJob(" + id + ',' + processInstance + ')';
+ return "CleanUpProcessJob(" + getId() + ',' + getProcessInstance() + ')';
}
}
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteActionJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteActionJob.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteActionJob.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -10,7 +10,7 @@
private static final long serialVersionUID = 1L;
- Action action;
+ private Action action;
public ExecuteActionJob() {
}
@@ -20,6 +20,7 @@
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
+ Token token = getToken();
ExecutionContext executionContext = new ExecutionContext(token);
executionContext.setAction(action);
executionContext.setEvent(action.getEvent());
@@ -35,7 +36,7 @@
}
public String toString() {
- return "ExecuteActionJob(" + id + ',' + action + ')';
+ return "ExecuteActionJob(" + getId() + ',' + action + ')';
}
public Action getAction() {
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteNodeJob.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteNodeJob.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/ExecuteNodeJob.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -19,14 +19,15 @@
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
- token.unlock(this.toString());
+ Token token = getToken();
+ token.unlock(toString());
ExecutionContext executionContext = new ExecutionContext(token);
node.execute(executionContext);
return true;
}
public String toString() {
- return "ExecuteNodeJob(" + id + ',' + node + ')';
+ return "ExecuteNodeJob(" + getId() + ',' + node + ')';
}
public Node getNode() {
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Job.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Job.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Job.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -3,6 +3,7 @@
import java.io.Serializable;
import java.util.Date;
+import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
@@ -12,38 +13,26 @@
private static final long serialVersionUID = 1L;
- long id;
- int version;
+ private long id;
+ private int version;
- Date dueDate;
+ private Date dueDate;
- ProcessInstance processInstance;
- Token token;
- TaskInstance taskInstance;
+ private ProcessInstance processInstance;
+ private Token token;
+ private TaskInstance taskInstance;
- boolean isSuspended;
+ private boolean isSuspended;
+ private boolean isExclusive;
- /**
- * specifies if this job can be executed concurrently with other jobs for the
- * same process instance.
- */
- boolean isExclusive;
+ private String lockOwner;
+ private Date lockTime;
- /**
- * name of the job executor thread that has locked this job.
- */
- String lockOwner;
+ private String exception;
+ private int retries = JbpmConfiguration.Configs.getInt("jbpm.job.retries");
- /**
- * the time the job executor thread locked this job.
- */
- Date lockTime;
+ private String configuration;
- String exception;
- int retries = 1;
-
- String configuration;
-
public Job() {
}
@@ -87,7 +76,10 @@
return id;
}
- public Date getAqcuireDate() {
+ /**
+ * what time the executor locked this job.
+ */
+ public Date getLockTime() {
return lockTime;
}
@@ -95,6 +87,11 @@
this.lockTime = aqcuireDate;
}
+ /** @deprecated call {@link #getLockTime()} instead */
+ public Date getAqcuireDate() {
+ return lockTime;
+ }
+
public Date getDueDate() {
return dueDate;
}
@@ -111,6 +108,10 @@
this.exception = exception;
}
+ /**
+ * whether this job can be executed concurrently with other jobs for the same process
+ * instance.
+ */
public boolean isExclusive() {
return isExclusive;
}
@@ -119,7 +120,10 @@
this.isExclusive = isExclusive;
}
- public String getJobExecutorName() {
+ /**
+ * name of the executor that locked this job.
+ */
+ public String getLockOwner() {
return lockOwner;
}
@@ -127,6 +131,11 @@
this.lockOwner = jobExecutorName;
}
+ /** @deprecated call {@link #getLockOwner()} instead */
+ public String getJobExecutorName() {
+ return lockOwner;
+ }
+
public int getRetries() {
return retries;
}
@@ -151,14 +160,6 @@
this.configuration = configuration;
}
- public String getLockOwner() {
- return lockOwner;
- }
-
- public Date getLockTime() {
- return lockTime;
- }
-
public boolean isSuspended() {
return isSuspended;
}
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Timer.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Timer.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/Timer.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -15,6 +15,7 @@
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.Token;
+import org.jbpm.taskmgmt.exe.TaskInstance;
public class Timer extends Job {
@@ -36,9 +37,11 @@
}
public boolean execute(JbpmContext jbpmContext) throws Exception {
+ Token token = getToken();
ExecutionContext executionContext = new ExecutionContext(token);
executionContext.setTimer(this);
+ TaskInstance taskInstance = getTaskInstance();
if (taskInstance != null) {
executionContext.setTaskInstance(taskInstance);
}
@@ -60,6 +63,7 @@
// then take a transition if one is specified
// and if no unhandled exception occurred during the action
+ String exception = getException();
if (transitionName != null && exception == null) {
Node node = token.getNode();
Transition transition = node.getLeavingTransition(transitionName);
@@ -79,7 +83,7 @@
Duration interval = new Duration(repeat);
long currentTime = System.currentTimeMillis();
- Date repeatDate = dueDate;
+ Date repeatDate = getDueDate();
do {
repeatDate = businessCalendar.add(repeatDate, interval);
} while (repeatDate.getTime() <= currentTime);
@@ -87,13 +91,13 @@
if (log.isDebugEnabled()) {
log.debug("scheduling " + this + " for repeat on " + repeatDate);
}
- dueDate = repeatDate;
+ setDueDate(repeatDate);
// unlock timer so that:
// (a) any job executor thread can acquire it next time
// (b) the engine knows it is not executing and can be deleted
// see https://jira.jboss.org/jira/browse/JBPM-2036
- lockOwner = null;
+ setLockOwner(null);
return false;
}
@@ -108,7 +112,7 @@
text.append(name);
}
else {
- text.append(id);
+ text.append(getId());
}
return text.append(')').toString();
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -25,7 +25,6 @@
protected JbpmConfiguration jbpmConfiguration;
protected String name;
protected int nbrOfThreads;
- private int retries;
protected int idleInterval;
protected int maxIdleInterval;
/** @deprecated property has no effect */
@@ -354,13 +353,5 @@
this.nbrOfThreads = nbrOfThreads;
}
- public int getRetries() {
- return retries;
- }
-
- public void setRetries(int retries) {
- this.retries = retries;
- }
-
private static Log log = LogFactory.getLog(JobExecutor.class);
}
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/job/executor/JobExecutorThread.java 2010-05-18 03:14:14 UTC (rev 6357)
@@ -131,11 +131,7 @@
job.setLockOwner(lockOwner);
job.setLockTime(lockTime);
// has job failed previously?
- if (job.getException() == null) {
- // initialize retry count to configured value
- job.setRetries(jobExecutor.getRetries());
- }
- else {
+ if (job.getException() != null) {
// decrease retry count
int retries = job.getRetries() - 1;
job.setRetries(retries);
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/resources/org/jbpm/default.jbpm.cfg.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/resources/org/jbpm/default.jbpm.cfg.xml 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/resources/org/jbpm/default.jbpm.cfg.xml 2010-05-18 03:14:14 UTC (rev 6357)
@@ -88,9 +88,6 @@
<property name="nbrOfThreads">
<int value="1" />
</property>
- <property name="retries">
- <int value="3" />
- </property>
<property name="idleInterval">
<!-- 5 seconds -->
<int value="5000" />
@@ -108,4 +105,7 @@
<int value="60000" />
</property>
</bean>
+
+ <!-- job retry count -->
+ <int name="jbpm.job.retries" value="3" />
</jbpm-configuration>
Modified: jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/configuration.xml
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/configuration.xml 2010-05-17 23:34:36 UTC (rev 6356)
+++ jbpm3/branches/jbpm-3.2-soa/modules/userguide/src/main/docbook/en/modules/configuration.xml 2010-05-18 03:14:14 UTC (rev 6357)
@@ -93,19 +93,39 @@
<string name="jbpm.mail.smtp.host" value="localhost" />
<string name="jbpm.mail.from.address" value="jbpm@noreply" />
<bean name="jbpm.mail.address.resolver" class="org.jbpm.identity.mail.IdentityAddressResolver" singleton="true" />
-
- <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
- <property name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></property>
- <property name="name"><string value="JbpmJobExecutor" /></property>
- <property name="nbrOfThreads"><int value="1" /></property>
- <property name="retries"><int value="3" /></property>
- <property name="idleInterval"><int value="5000" /></property>
- <property name="maxIdleInterval"><int value="3600000" /><!-- 1 hour --></property>
- <property name="maxLockTime"><int value="600000" /><!-- 10 minutes --></property>
- <property name="lockMonitorInterval"><int value="60000" /><!-- 1 minute --></property>
- <property name="lockBufferTime"><int value="5000" /><!-- 5 seconds --></property>
+
+ <!-- job execution properties -->
+ <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor" singleton="true">
+ <property name="jbpmConfiguration">
+ <ref bean="jbpmConfiguration" />
+ </property>
+ <property name="name">
+ <string value="JbpmJobExecutor" />
+ </property>
+ <property name="nbrOfThreads">
+ <int value="1" />
+ </property>
+ <property name="idleInterval">
+ <!-- 5 seconds -->
+ <int value="5000" />
+ </property>
+ <property name="maxIdleInterval">
+ <!-- 1 hour -->
+ <int value="3600000" />
+ </property>
+ <property name="maxLockTime">
+ <!-- 10 minutes -->
+ <int value="600000" />
+ </property>
+ <property name="lockMonitorInterval">
+ <!-- 1 minute -->
+ <int value="60000" />
+ </property>
</bean>
+ <!-- job retry count -->
+ <int name="jbpm.job.retries" value="3" />
+
</jbpm-configuration>]]></programlisting>
<para>In this configuration file you can see 3 parts:
@@ -116,10 +136,10 @@
implementations. The possible configuration options are covered in the chapters
that cover the specific service implementations.
</para></listitem>
- <listitem><para>The second part are all mappings of references to configuration
+ <listitem><para>The second part is a series of references to configuration
resources. These resource references can be updated if you want to customize
one of these configuration files. Typically, you make a copy the default configuration
- which is in the <literal>jbpm-3.x.jar</literal> and put it somewhere on the classpath.
+ which is in the <literal>jbpm-jpdl.jar</literal> and put it somewhere on the classpath.
Then you update the reference in this file and jbpm will use your customized version
of that configuration file.
</para></listitem>
@@ -180,12 +200,12 @@
<section id="customizingfactories">
<title>Customizing factories</title>
<para>A common mistake when customizing factories is to mix the short and the long notation.
- Examples of the short notation can be seen in the default configuration file and above: E.g.
+ Examples of the short notation can be seen in the default configuration file and above:
</para>
- <programlisting> ...
- <service name='persistence' factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /></programlisting>
+ <programlisting> <service name='persistence'
+ factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /></programlisting>
<para>If specific properties on a service need to be specified, the short notation can't be used, but instead,
- the long notation has to be used like this: E.g.
+ the long notation has to be used like this:
</para>
<programlisting> <service name="persistence">
<factory>
@@ -345,11 +365,6 @@
<entry>1</entry>
</row>
<row>
- <entry>retries</entry>
- <entry>Number of times the job executor retries a failed job</entry>
- <entry>3</entry>
- </row>
- <row>
<entry>idleInterval</entry>
<entry>Period between checks for new jobs (milliseconds)</entry>
<entry>5 seconds</entry>
@@ -375,6 +390,18 @@
</tbody>
</tgroup>
</table>
+
+ <para>In addition to the job executor bean properties, you can indicate the
+ number of times a failed job is retried. Set the <literal>jbpm.job.retries</literal>
+ configuration entry to the desired value. The default is 3.</para>
+ <programlisting><![CDATA[<int name="jbpm.job.retries" value="5" />]]></programlisting>
+ <caution><para>Setting the retry count to a low value may cause <ulink
+ url="https://jira.jboss.org/browse/JBPM-2787">process instances to get stuck</ulink>,
+ whereas a high value causes jobs with unrecoverable exceptions (for instance,
+ database connectivity problems) to be unduly reattempted.</para></caution>
+ <note><para>Alternate implementations of the message and timer service,
+ such as the JCA inflow service included with JBoss ESB, also recognize
+ the <literal>jbpm.job.retries</literal> configuration entry.</para></note>
</section>
<section id="objectfactory">
@@ -396,11 +423,8 @@
<double name="salary">100000000.32</double>
<char name="java">j</char>
<null name="dusttodust" />
-</beans>
-
----------------------------------------------------------
-
-ObjectFactory of = ObjectFactory.parseXmlFromAbove();
+</beans></programlisting>
+ <programlisting>ObjectFactory of = ObjectFactory.parseXmlFromAbove();
assertEquals(TaskInstance.class, of.getNewObject("task").getClass());
assertEquals("hello world", of.getNewObject("greeting"));
assertEquals(new Integer(42), of.getNewObject("answer"));
@@ -410,7 +434,6 @@
assertEquals(new Character('j'), of.getNewObject("java"));
assertNull(of.getNewObject("dusttodust"));</programlisting>
-
<para>Also you can configure lists:</para>
<programlisting><beans>
13 years, 11 months
JBoss JBPM SVN: r6356 - in projects/jsf-console/branches/jsf-console-3.2-soa: gpd-deployer/src/main/webapp/WEB-INF and 1 other directories.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2010-05-17 19:34:36 -0400 (Mon, 17 May 2010)
New Revision: 6356
Modified:
projects/jsf-console/branches/jsf-console-3.2-soa/console/src/main/webapp/WEB-INF/web.xml
projects/jsf-console/branches/jsf-console-3.2-soa/gpd-deployer/src/main/webapp/WEB-INF/web.xml
projects/jsf-console/branches/jsf-console-3.2-soa/soa/src/main/webapp/WEB-INF/web.xml
Log:
SOA-2008: secure all http methods, not just get and post
Modified: projects/jsf-console/branches/jsf-console-3.2-soa/console/src/main/webapp/WEB-INF/web.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2-soa/console/src/main/webapp/WEB-INF/web.xml 2010-05-17 01:56:55 UTC (rev 6355)
+++ projects/jsf-console/branches/jsf-console-3.2-soa/console/src/main/webapp/WEB-INF/web.xml 2010-05-17 23:34:36 UTC (rev 6356)
@@ -59,8 +59,6 @@
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/app/*</url-pattern>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
Modified: projects/jsf-console/branches/jsf-console-3.2-soa/gpd-deployer/src/main/webapp/WEB-INF/web.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2-soa/gpd-deployer/src/main/webapp/WEB-INF/web.xml 2010-05-17 01:56:55 UTC (rev 6355)
+++ projects/jsf-console/branches/jsf-console-3.2-soa/gpd-deployer/src/main/webapp/WEB-INF/web.xml 2010-05-17 23:34:36 UTC (rev 6356)
@@ -26,7 +26,6 @@
<description>If you are deploying to JBoss AS, be sure to specify the
security domain in jboss-web.xml.</description>
<url-pattern>/upload/*</url-pattern>
- <http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description>Optionally customize the role name to require a login before
Modified: projects/jsf-console/branches/jsf-console-3.2-soa/soa/src/main/webapp/WEB-INF/web.xml
===================================================================
--- projects/jsf-console/branches/jsf-console-3.2-soa/soa/src/main/webapp/WEB-INF/web.xml 2010-05-17 01:56:55 UTC (rev 6355)
+++ projects/jsf-console/branches/jsf-console-3.2-soa/soa/src/main/webapp/WEB-INF/web.xml 2010-05-17 23:34:36 UTC (rev 6356)
@@ -59,8 +59,6 @@
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/app/*</url-pattern>
- <http-method>GET</http-method>
- <http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
13 years, 11 months
JBoss JBPM SVN: r6355 - in jbpm4/trunk/modules/pvm/src: test/java/org/jbpm/pvm/internal and 1 other directories.
by do-not-reply@jboss.org
Author: rebody
Date: 2010-05-16 21:56:55 -0400 (Sun, 16 May 2010)
New Revision: 6355
Added:
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/svc/
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/svc/RetryInterceptorTest.java
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/RetryInterceptor.java
Log:
JBPM-2864 now RetryInterceptor could handle exception caused by StaleStateException
e.g. HibernateOptimisticLockingFailureException(from spring)
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/RetryInterceptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/RetryInterceptor.java 2010-05-17 01:31:25 UTC (rev 6354)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/RetryInterceptor.java 2010-05-17 01:56:55 UTC (rev 6355)
@@ -27,21 +27,22 @@
import org.hibernate.StaleStateException;
-/** retries the command execution in case hibernate throws optimistic locking
+/** retries the command execution in case hibernate throws optimistic locking
* (StaleObjectException) exceptions.
- *
+ *
* @author Tom Baeyens
+ * @author Huisheng Xu
*/
public class RetryInterceptor extends Interceptor {
private static final Log log = Log.getLog(RetryInterceptor.class.getName());
-
+
int retries = 3;
long delay = 50;
long delayFactor = 4;
public <T> T execute(Command<T> command) {
-
+
// TODO JBPM-2196 unify the retry code with the JtaTransactionInterceptor
int attempt = 1;
@@ -51,24 +52,48 @@
log.trace("retrying...");
}
try {
-
+
return next.execute(command);
-
- } catch (StaleStateException e) {
+
+ } catch (RuntimeException ex) {
+ if (!this.isCausedByOptimisticLockingFailure(ex)) {
+ throw ex;
+ }
+
attempt++;
- log.trace("optimistic locking failed: "+e);
- log.trace("waiting "+sleepTime+" millis");
+ log.trace("optimistic locking failed: " + ex);
+ log.trace("waiting " + sleepTime + " millis");
+
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e1) {
log.trace("retry sleeping got interrupted");
}
+
sleepTime *= delayFactor;
}
}
- throw new JbpmException("gave up after "+attempt+" attempts");
+
+ throw new JbpmException("gave up after " + attempt + " attempts");
}
+ /**
+ * fix for JBPM-2864.
+ * If this exception is caused by StaleStateException, then we should retry.
+ */
+ protected boolean isCausedByOptimisticLockingFailure(
+ Throwable throwable) {
+ while (throwable != null) {
+ if (throwable instanceof StaleStateException) {
+ return true;
+ } else {
+ throwable = throwable.getCause();
+ }
+ }
+
+ return false;
+ }
+
public int getRetries() {
return retries;
}
Added: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/svc/RetryInterceptorTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/svc/RetryInterceptorTest.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/svc/RetryInterceptorTest.java 2010-05-17 01:56:55 UTC (rev 6355)
@@ -0,0 +1,57 @@
+/*
+ * 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.svc;
+
+import junit.framework.TestCase;
+
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+
+import org.jbpm.api.Configuration;
+import org.jbpm.api.ProcessEngine;
+import org.jbpm.api.cmd.Command;
+import org.jbpm.api.cmd.Environment;
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.cmd.CommandService;
+
+import org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException;
+
+
+/**
+ * @author Huisheng Xu
+ */
+public class RetryInterceptorTest extends TestCase {
+
+ private static Log log = Log.getLog(RetryInterceptorTest.class.getName());
+
+ public void testShouldRetryStaleStateException() {
+ RetryInterceptor retryInterceptor = new RetryInterceptor();
+ assertTrue(retryInterceptor.isCausedByOptimisticLockingFailure(new StaleStateException("test")));
+ }
+
+ public void testShouldRetry() {
+ RetryInterceptor retryInterceptor = new RetryInterceptor();
+ assertTrue(retryInterceptor.isCausedByOptimisticLockingFailure(
+ new HibernateOptimisticLockingFailureException(new StaleStateException("test"))
+ ));
+ }
+}
13 years, 11 months
JBoss JBPM SVN: r6354 - in jbpm4/trunk/modules/pvm/src: test/java/org/jbpm/pvm/internal/tx and 1 other directory.
by do-not-reply@jboss.org
Author: rebody
Date: 2010-05-16 21:31:25 -0400 (Sun, 16 May 2010)
New Revision: 6354
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronization.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronizationTest.java
Log:
JBPM-2863 correct spring transaction synchronization, add JIRA issue id
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronization.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronization.java 2010-05-16 09:25:12 UTC (rev 6353)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronization.java 2010-05-17 01:31:25 UTC (rev 6354)
@@ -29,11 +29,12 @@
/**
* @author Tom Baeyens
+ * @author Huisheng Xu
*/
public class SpringToStandardSynchronization implements TransactionSynchronization {
-
+
Synchronization synchronization;
-
+
public SpringToStandardSynchronization(Synchronization synchronization) {
this.synchronization = synchronization;
}
Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronizationTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronizationTest.java 2010-05-16 09:25:12 UTC (rev 6353)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/tx/SpringToStandardSynchronizationTest.java 2010-05-17 01:31:25 UTC (rev 6354)
@@ -26,6 +26,11 @@
import javax.transaction.Synchronization;
import org.springframework.transaction.support.TransactionSynchronization;
+/**
+ * JBPM-2863.
+ *
+ * @author Huisheng Xu
+ */
public class SpringToStandardSynchronizationTest extends TestCase {
public void testCommited() {
MockSync sync = new MockSync();
13 years, 11 months