[jbpm-commits] JBoss JBPM SVN: r3158 - in jbpm3/trunk: modules/core and 19 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sun Nov 30 23:47:28 EST 2008


Author: alex.guizar at jboss.com
Date: 2008-11-30 23:47:28 -0500 (Sun, 30 Nov 2008)
New Revision: 3158

Modified:
   jbpm3/trunk/modules/core/pom.xml
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmContext.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/ant/AntHelper.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/TokenVariableMap.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/hibernate/HibernateHelper.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/persistence/db/DbPersistenceServiceFactory.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/SerializabilityTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/DeleteProcessInstanceDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/GraphSessionDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm522/JBPM522Test.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm983/JBPM983Test.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/job/executor/JobExecutorDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/par/ProcessArchiveDeploymentDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/logging/exe/LoggingConfigDbTest.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java
   jbpm3/trunk/pom.xml
Log:
[JBPM-1816] merged back revisions 2833 and 2788, sans the schema creation in advance

Modified: jbpm3/trunk/modules/core/pom.xml
===================================================================
--- jbpm3/trunk/modules/core/pom.xml	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/pom.xml	2008-12-01 04:47:28 UTC (rev 3158)
@@ -342,21 +342,16 @@
             <artifactId>maven-surefire-plugin</artifactId>
             <configuration>
               <excludes>
-                <!-- [JBPM-1764] JobExecutorDbTest does not work on Sybase -->
-                <exclude>org/jbpm/job/executor/JobExecutorDbTest</exclude>
-                <!-- [JBPM-1810] Fix clean, drop, create schema with JbpmSchema  -->
-                <exclude>org/jbpm/db/JbpmSchemaDbTest.java</exclude>
-
-                <!-- [JBPM-1824] Investigate core test failures against Sybase -->
-                <exclude>org/jbpm/db/DeleteProcessInstanceDbTest.java</exclude>
+                <!-- [JBPM-1764] Deadlocks make job execution tests fail on Sybase -->
+                <exclude>org/jbpm/job/executor/JobExecutorDbTest.java</exclude>
                 <exclude>org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java</exclude>
                 <exclude>org/jbpm/jbpm1072/JBPM1072Test.java</exclude>
                 <exclude>org/jbpm/jbpm1755/JBPM1755Test.java</exclude>
                 <exclude>org/jbpm/jbpm983/JBPM983Test.java</exclude>
-                <exclude>org/jbpm/job/executor/JobExecutorDbTest.java</exclude>
                 <exclude>org/jbpm/optimisticlocking/LockingTest.java</exclude>
-                <exclude>org/jbpm/scheduler/exe/UnsafeSessionUsageTest.java</exclude>
                 <exclude>org/jbpm/seam/JobExecutorCustomizationTest.java</exclude>
+                <!-- [JBPM-1810] Fix clean, drop, create schema with JbpmSchema  -->
+                <exclude>org/jbpm/db/JbpmSchemaDbTest.java</exclude>
               </excludes>
             </configuration>
           </plugin>

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -602,13 +602,12 @@
 
       synchronized (instances)
       {
-        Iterator iter = instances.keySet().iterator();
+        Iterator iter = instances.values().iterator();
         while (iter.hasNext())
         {
-          String resource = (String)iter.next();
-          if (this == instances.get(resource))
+          if (this == iter.next())
           {
-            instances.remove(resource);
+            iter.remove();
             break;
           }
         }

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmContext.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmContext.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmContext.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -524,81 +524,81 @@
 
   /**
    * gets the hibernate session factory from the default configured persistence service.
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * @return the hibernate session factory, or <code>null</code> if a nonstandard
+   * persistence service is configured
    */
   public SessionFactory getSessionFactory()
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return null;
-    return persistenceService.getSessionFactory();
+    PersistenceService persistenceService = getPersistenceService();
+    return persistenceService instanceof DbPersistenceService
+      ? ((DbPersistenceService) persistenceService).getSessionFactory()
+      : null;
   }
 
   /**
    * sets the hibernate session factory into the default configured persistence service, overwriting the configured session factory (if there is one configured).
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * if a nonstandard persistence service is configured, then this call has no effect.
    */
   public void setSessionFactory(SessionFactory sessionFactory)
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return;
-    persistenceService.setSessionFactory(sessionFactory);
+    PersistenceService persistenceService = getPersistenceService();
+    if (persistenceService instanceof DbPersistenceService) {
+      DbPersistenceService dbPersistenceService = (DbPersistenceService) persistenceService;
+      dbPersistenceService.setSessionFactory(sessionFactory);
+    }
   }
 
   /**
    * gets the hibernate session from the default configured persistence service.
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * @return the hibernate session, or <code>null</code> if a nonstandard
+   * persistence service is configured.
    */
   public Session getSession()
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return null;
-    return persistenceService.getSession();
+    PersistenceService persistenceService = getPersistenceService();
+    return persistenceService instanceof DbPersistenceService
+      ? ((DbPersistenceService) persistenceService).getSession()
+      : null;
   }
 
   /**
    * sets the hibernate session into the default configured persistence service, preventing the creation of a session from the configured session factory (if there is
    * one configured).
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * if a nonstandard persistence service is configured, then this call has no effect.
    */
   public void setSession(Session session)
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return;
-    persistenceService.setSession(session);
+    PersistenceService persistenceService = getPersistenceService();
+    if (persistenceService instanceof DbPersistenceService) {
+      DbPersistenceService dbPersistenceService = (DbPersistenceService) persistenceService;
+      dbPersistenceService.setSession(session);
+    }
   }
 
   /**
    * gets the jdbc connection from the default configured persistence service.
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * @return the jdbc connectoin, or <code>null</code> if a nonstandard
+   * persistence service is configured.
    */
   public Connection getConnection()
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return null;
-    return persistenceService.getConnection();
+    PersistenceService persistenceService = getPersistenceService();
+    return persistenceService instanceof DbPersistenceService
+      ? ((DbPersistenceService) persistenceService).getConnection()
+      : null;
   }
 
   /**
    * allows users to provide a jdbc connection to be used when the hibernate session is created.
-   * 
-   * @throws ClassCastException if another persistence service is configured then the default.
+   * if a nonstandard persistence service is configured, then this call has no effect.
    */
   public void setConnection(Connection connection)
   {
-    DbPersistenceService persistenceService = (DbPersistenceService)getPersistenceService();
-    if (persistenceService == null)
-      return;
-    persistenceService.setConnection(connection);
+    PersistenceService persistenceService = getPersistenceService();
+    if (persistenceService instanceof DbPersistenceService) {
+      DbPersistenceService dbPersistenceService = (DbPersistenceService) persistenceService;
+      dbPersistenceService.setConnection(connection);
+    }
   }
 
   // jbpm database access sessions
@@ -704,9 +704,7 @@
 
   PersistenceService getPersistenceService()
   {
-    if (services == null)
-      return null;
-    return services.getPersistenceService();
+    return services != null ? services.getPersistenceService() : null;
   }
 
   public JbpmConfiguration getJbpmConfiguration()

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/ant/AntHelper.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/ant/AntHelper.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/ant/AntHelper.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -37,12 +37,16 @@
 /**
  * common strategy for jbpm ant tasks to obtain a hibernate SessionFactory.
  */
-public abstract class AntHelper
+public class AntHelper
 {
 
   final static Map configurations = new HashMap();
   final static Map jbpmConfigurations = new HashMap();
 
+  private AntHelper() {
+    // prevent instantiation
+  }
+
   public static Configuration getConfiguration(String hibernateCfgResource, String hibernatePropertiesResource)
   {
     Object key = getKey(hibernateCfgResource, hibernatePropertiesResource);

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/TokenVariableMap.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/TokenVariableMap.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/TokenVariableMap.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -54,7 +54,7 @@
   }
   
   public String toString() {
-    return "TokenVariableMap"+( (token!=null)&&(token.getName()!=null) ? "["+token.getName()+"]" : Integer.toHexString(System.identityHashCode(this)));
+    return "TokenVariableMap"+( (token!=null) ? "["+token.getFullName()+"]" : "@" + Integer.toHexString(System.identityHashCode(this)));
   }
 
   // protected ////////////////////////////////////////////////////////////////

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/context/exe/variableinstance/ByteArrayInstance.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -21,6 +21,8 @@
  */
 package org.jbpm.context.exe.variableinstance;
 
+import org.hibernate.Session;
+import org.jbpm.JbpmContext;
 import org.jbpm.bytes.ByteArray;
 import org.jbpm.context.exe.VariableInstance;
 import org.jbpm.context.log.variableinstance.ByteArrayUpdateLog;
@@ -42,6 +44,15 @@
 
   protected void setObject(Object value) {
     if (token!=null) token.addLog(new ByteArrayUpdateLog(this, this.value, (ByteArray) value));
+    // delete old value, otherwise it will be unreachable
+    if (this.value != null) {
+      JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
+      if (jbpmContext != null) {
+        Session session = jbpmContext.getSession();
+        if (session != null) session.delete(this.value);
+      }      
+    }
+    // set new value
     this.value = (ByteArray) value;
   }
 }

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/AbstractDbTestCase.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -83,8 +83,7 @@
     JbpmSchema jbpmSchema = new JbpmSchema(configuration);
 
     Map jbpmTablesRecordCount = jbpmSchema.getJbpmTablesRecordCount();
-    Iterator iter = jbpmTablesRecordCount.entrySet().iterator();
-    while (iter.hasNext())
+    for (Iterator iter = jbpmTablesRecordCount.entrySet().iterator(); iter.hasNext();)
     {
       Map.Entry entry = (Map.Entry)iter.next();
       String tableName = (String)entry.getKey();
@@ -94,7 +93,7 @@
       {
         hasLeftOvers = true;
         // [JBPM-1812] Fix tests that don't cleanup the database
-        // System.err.println("FIXME: " + getClass().getName() + "." + getName() + " left " + count + " records in " + tableName);
+        System.err.println("FIXME: " + getClass().getName() + "." + getName() + " left " + count + " records in " + tableName);
       }
     }
 

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -29,7 +29,6 @@
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.Serializable;
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -44,9 +43,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.Settings;
 import org.hibernate.connection.ConnectionProvider;
-import org.hibernate.connection.ConnectionProviderFactory;
 import org.hibernate.dialect.Dialect;
 import org.hibernate.engine.Mapping;
 import org.hibernate.mapping.ForeignKey;
@@ -64,8 +62,7 @@
   private static final long serialVersionUID = 1L;
 
   Configuration configuration = null;
-  Properties properties = null;
-  Dialect dialect = null;
+  Settings settings;
   Mapping mapping = null;
   String[] createSql = null;
   String[] dropSql = null;
@@ -78,26 +75,15 @@
   public JbpmSchema(Configuration configuration)
   {
     this.configuration = configuration;
-    this.properties = configuration.getProperties();
-    this.dialect = Dialect.getDialect(properties);
-    try
-    {
-      // get the mapping field via reflection :-(
-      Field mappingField = Configuration.class.getDeclaredField("mapping");
-      mappingField.setAccessible(true);
-      this.mapping = (Mapping)mappingField.get(configuration);
-    }
-    catch (Exception e)
-    {
-      throw new JbpmException("couldn't get the hibernate mapping", e);
-    }
+    this.settings = configuration.buildSettings();
+    this.mapping = configuration.buildMapping();
   }
 
   public String[] getCreateSql()
   {
     if (createSql == null)
     {
-      createSql = configuration.generateSchemaCreationScript(dialect);
+      createSql = configuration.generateSchemaCreationScript(settings.getDialect());
     }
     return createSql;
   }
@@ -106,7 +92,7 @@
   {
     if (dropSql == null)
     {
-      dropSql = configuration.generateDropSchemaScript(dialect);
+      dropSql = configuration.generateDropSchemaScript(settings.getDialect());
     }
     return dropSql;
   }
@@ -116,10 +102,11 @@
     if (cleanSql == null)
     {
       new SchemaExport(configuration);
-      
-      String catalog = properties.getProperty(Environment.DEFAULT_CATALOG);
-      String schema = properties.getProperty(Environment.DEFAULT_SCHEMA);
 
+      Dialect dialect = settings.getDialect();
+      String catalog = settings.getDefaultCatalogName();
+      String schema = settings.getDefaultSchemaName();
+
       // loop over all foreign key constraints
       List dropForeignKeysSql = new ArrayList();
       List createForeignKeysSql = new ArrayList();
@@ -351,8 +338,7 @@
   public void execute(String[] sqls)
   {
     String sql = null;
-    String showSqlText = properties.getProperty("hibernate.show_sql");
-    boolean showSql = ("true".equalsIgnoreCase(showSqlText));
+    boolean showSql = settings.isShowSqlEnabled();
 
     try
     {
@@ -410,7 +396,7 @@
 
   void createConnection() throws SQLException
   {
-    connectionProvider = ConnectionProviderFactory.newConnectionProvider(properties);
+    connectionProvider = settings.getConnectionProvider();
     connection = connectionProvider.getConnection();
     if (!connection.getAutoCommit())
     {
@@ -421,7 +407,7 @@
 
   public Properties getProperties()
   {
-    return properties;
+    return configuration.getProperties();
   }
 
   // sql delimiter ////////////////////////////////////////////////////////////
@@ -432,7 +418,7 @@
   {
     if (sqlDelimiter == null)
     {
-      sqlDelimiter = properties.getProperty("jbpm.sql.delimiter", ";");
+      sqlDelimiter = getProperties().getProperty("jbpm.sql.delimiter", ";");
     }
     return sqlDelimiter;
   }

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/hibernate/HibernateHelper.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/hibernate/HibernateHelper.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/db/hibernate/HibernateHelper.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -24,7 +24,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
@@ -33,17 +32,12 @@
 import org.apache.commons.logging.LogFactory;
 import org.hibernate.SessionFactory;
 import org.hibernate.cfg.Configuration;
-import org.hibernate.tool.hbm2ddl.SchemaExport;
-import org.jbpm.JbpmException;
 import org.jbpm.util.ClassLoaderUtil;
 
-public abstract class HibernateHelper {
+public class HibernateHelper {
 
-  /** maps SessionFactory's to Configurations.         */
-  /** by default, configuration lookup will be enabled */
-  static Map configurations = new HashMap();
-  public static void clearConfigurationsCache() {
-    configurations = new HashMap();
+  private HibernateHelper() {
+    // prevent instantiation
   }
 
   public static SessionFactory createSessionFactory() {
@@ -64,11 +58,7 @@
   }
 
   public static SessionFactory createSessionFactory(Configuration configuration, boolean isConfigLookupEnabled) {
-    SessionFactory sessionFactory = configuration.buildSessionFactory();
-    if (isConfigLookupEnabled) {
-      configurations.put(sessionFactory, configuration);
-    }
-    return sessionFactory;
+    return configuration.buildSessionFactory();
   }
 
   public static Configuration createConfiguration(String cfgXmlResource, String propertiesResource) {
@@ -102,23 +92,6 @@
     return configuration;
   }
 
-  public static Configuration getConfiguration(SessionFactory sessionFactory) {
-    return (Configuration) configurations.get(sessionFactory);
-  }
-  
-  public static SchemaExport createSchemaExport(SessionFactory sessionFactory) {
-    return new SchemaExport(getConfiguration(sessionFactory));
-  }
-
-  public static boolean createSchemaExportScript(SessionFactory sessionFactory) {
-    boolean script = false;
-    String showSql = getConfiguration(sessionFactory).getProperty("hibernate.show_sql");
-    if ("true".equalsIgnoreCase(showSql)) {
-      script = true;
-    }
-    return script;
-  }
-
   public static void clearHibernateCache(SessionFactory sessionFactory) {
     sessionFactory.evictQueries();
     

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/persistence/db/DbPersistenceServiceFactory.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/persistence/db/DbPersistenceServiceFactory.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/persistence/db/DbPersistenceServiceFactory.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -156,6 +156,11 @@
     }
   }
 
+  public void finalize() throws Throwable
+  {
+    close();
+  }
+
   public String getDataSourceJndiName()
   {
     return dataSourceJndiName;

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/SerializabilityTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/SerializabilityTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/SerializabilityTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -37,12 +37,7 @@
   String testRootDir = FileDefinitionFileSystemConfigTest.class.getProtectionDomain().getCodeSource().getLocation().getFile().toString();
   
   static Set excusedClasses = new HashSet(Arrays.asList(new String[] {
-      "org.jbpm.ant.DeployProcessTask",
-      "org.jbpm.ant.JbpmSchemaTask",
-      "org.jbpm.ant.Launcher",
-      "org.jbpm.ant.ShutDownHsqldb",
-      "org.jbpm.ant.StartHsqldbTask",
-      "org.jbpm.ant.StartJBossTask",
+      "org.jbpm.ant",
       "org.jbpm.context.exe.JbpmType",
       "org.jbpm.db.hibernate.ConverterEnumType",
       "org.jbpm.db.hibernate.Converters",

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -21,7 +21,6 @@
  */
 package org.jbpm.context.exe;
 
-import org.hibernate.cfg.Configuration;
 import org.jbpm.JbpmConfiguration;
 import org.jbpm.JbpmContext;
 import org.jbpm.context.def.ContextDefinition;
@@ -31,49 +30,35 @@
 import org.jbpm.persistence.db.DbPersistenceServiceFactory;
 import org.jbpm.svc.Services;
 
-public class CustomVariableLongIdDbTest extends AbstractDbTestCase
-{
+public class CustomVariableLongIdDbTest extends AbstractDbTestCase {
 
-  static JbpmConfiguration customLongJbpmConfiguration = createJbpmConfiguration();
-
-  private static JbpmConfiguration createJbpmConfiguration()
-  {
-    // make custom jbpm configuration aware of hibernate.properties
-    String configurationResource = CustomVariableLongIdDbTest.class.getClassLoader().getResource("hibernate.properties") != null ? "org/jbpm/db/jbpm.db.test.cfg.xml"
-        : "org/jbpm/jbpm.test.cfg.xml";
-    JbpmConfiguration jbpmConfiguration = JbpmConfiguration.parseResource(configurationResource);
-
-    DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory)jbpmConfiguration.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
-    JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
-    try
-    {
-      /*
-       * getConfiguration() relies on JbpmConfiguration.Configs, which accesses either the current context or the default jbpm configuration resource, but has no access
-       * to a custom jbpm configuration. The context is created only to enforce the use of the custom jbpm configuration.
-       */
-      Configuration configuration = dbPersistenceServiceFactory.getConfiguration();
-      configuration.addClass(CustomLongClass.class);
+  protected JbpmConfiguration getJbpmConfiguration() {
+    if (jbpmConfiguration == null) {
+      jbpmConfiguration = JbpmConfiguration.parseResource(getJbpmTestConfig());
+      JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
+      try {
+        DbPersistenceServiceFactory persistenceServiceFactory = (DbPersistenceServiceFactory) jbpmContext.getServices()
+            .getServiceFactory(Services.SERVICENAME_PERSISTENCE);
+        persistenceServiceFactory.getConfiguration().addClass(CustomLongClass.class);
+      }
+      finally {
+        jbpmContext.close();
+      }
     }
-    finally
-    {
-      jbpmContext.close();
-    }
     return jbpmConfiguration;
   }
 
-  protected JbpmConfiguration getJbpmConfiguration()
-  {
-    return customLongJbpmConfiguration;
+  protected void tearDown() throws Exception {
+    super.tearDown();
+    jbpmConfiguration.close();
   }
 
-  public void testCustomVariableClassWithLongId()
-  {
+  public void testCustomVariableClassWithLongId() {
     // create and save the process definition
     ProcessDefinition processDefinition = new ProcessDefinition();
     processDefinition.addDefinition(new ContextDefinition());
     graphSession.saveProcessDefinition(processDefinition);
-    try
-    {
+    try {
       // create the process instance
       ProcessInstance processInstance = new ProcessInstance(processDefinition);
       // set the jbpmSession in the context because its used to determine the
@@ -88,12 +73,11 @@
       contextInstance = processInstance.getContextInstance();
 
       // get the custom hibernatable object from the variableInstances
-      customLongObject = (CustomLongClass)contextInstance.getVariable("custom hibernate object");
+      customLongObject = (CustomLongClass) contextInstance.getVariable("custom hibernate object");
       assertNotNull(customLongObject);
       assertEquals("customname", customLongObject.getName());
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
 

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -21,7 +21,6 @@
  */
 package org.jbpm.context.exe;
 
-import org.hibernate.cfg.Configuration;
 import org.jbpm.JbpmConfiguration;
 import org.jbpm.JbpmContext;
 import org.jbpm.context.def.ContextDefinition;
@@ -31,52 +30,39 @@
 import org.jbpm.persistence.db.DbPersistenceServiceFactory;
 import org.jbpm.svc.Services;
 
-public class CustomVariableStringIdDbTest extends AbstractDbTestCase
-{
+public class CustomVariableStringIdDbTest extends AbstractDbTestCase {
 
-  static JbpmConfiguration customStringJbpmConfiguration = createJbpmConfiguration();
-
-  private static JbpmConfiguration createJbpmConfiguration()
-  {
-    // make custom jbpm configuration aware of hibernate.properties
-    String configurationResource = CustomVariableStringIdDbTest.class.getClassLoader().getResource("hibernate.properties") != null ? "org/jbpm/db/jbpm.db.test.cfg.xml"
-        : "org/jbpm/jbpm.test.cfg.xml";
-    JbpmConfiguration jbpmConfiguration = JbpmConfiguration.parseResource(configurationResource);
-
-    DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory)jbpmConfiguration.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
-    JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
-    try
-    {
-      /*
-       * getConfiguration() relies on JbpmConfiguration.Configs, which accesses either the current context or the default jbpm configuration resource, but has no access
-       * to a custom jbpm configuration. The context is created only to enforce the use of the custom jbpm configuration.
-       */
-      Configuration configuration = dbPersistenceServiceFactory.getConfiguration();
-      configuration.addClass(CustomStringClass.class);
+  protected JbpmConfiguration getJbpmConfiguration() {
+    if (jbpmConfiguration == null) {
+      jbpmConfiguration = JbpmConfiguration.parseResource(getJbpmTestConfig());
+      JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
+      try {
+        DbPersistenceServiceFactory persistenceServiceFactory = (DbPersistenceServiceFactory) jbpmContext.getServices()
+            .getServiceFactory(Services.SERVICENAME_PERSISTENCE);
+        persistenceServiceFactory.getConfiguration().addClass(CustomStringClass.class);
+      }
+      finally {
+        jbpmContext.close();
+      }
     }
-    finally
-    {
-      jbpmContext.close();
-    }
     return jbpmConfiguration;
   }
 
-  protected JbpmConfiguration getJbpmConfiguration()
-  {
-    return customStringJbpmConfiguration;
+  protected void tearDown() throws Exception {
+    super.tearDown();
+    jbpmConfiguration.close();
   }
 
-  public void testCustomVariableClassWithStringId()
-  {
+  public void testCustomVariableClassWithStringId() {
     // create and save the process definition
     ProcessDefinition processDefinition = new ProcessDefinition();
     processDefinition.addDefinition(new ContextDefinition());
     graphSession.saveProcessDefinition(processDefinition);
-    try
-    {
+    try {
       // create the process instance
       ProcessInstance processInstance = new ProcessInstance(processDefinition);
-      // set the jbpmSession in the context because its used to determine the jbpm-type for the custom object.
+      // set the jbpmSession in the context because its used to determine the
+      // jbpm-type for the custom object.
       ContextInstance contextInstance = processInstance.getContextInstance();
 
       // create the custom object
@@ -87,12 +73,11 @@
       contextInstance = processInstance.getContextInstance();
 
       // get the custom hibernatable object from the variableInstances
-      customStringObject = (CustomStringClass)contextInstance.getVariable("custom hibernate object");
+      customStringObject = (CustomStringClass) contextInstance.getVariable("custom hibernate object");
       assertNotNull(customStringObject);
       assertEquals("customname", customStringObject.getName());
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
   }

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/DeleteProcessInstanceDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/DeleteProcessInstanceDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/DeleteProcessInstanceDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -6,139 +6,123 @@
 import org.jbpm.graph.exe.Token;
 
 public class DeleteProcessInstanceDbTest extends AbstractDbTestCase {
-  
+
   public void testDeleteProcessInstance() {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
-      "<process-definition name='make fondue'>" +
-      "  <start-state>" +
-      "    <transition to='buy cheese' />" +
-      "  </start-state>" +
-      "  <state name='buy cheese' />" +
-      "</process-definition>"
-    );    
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+        + "  <start-state>"
+        + "    <transition to='buy cheese' />"
+        + "  </start-state>"
+        + "  <state name='buy cheese' />"
+        + "</process-definition>");
     jbpmContext.deployProcessDefinition(processDefinition);
-    try
-    {
+    try {
       newTransaction();
-      
+
       ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
       processInstance.signal();
-      
+
       processInstance = saveAndReload(processInstance);
-      
+
       jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
-      
+
       newTransaction();
-      
-      assertEquals(0, session.createQuery("from org.jbpm.graph.exe.ProcessInstance").list().size());
+
+      assertDeleted(processInstance);
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
   }
 
   public void testDeleteProcessInstanceWithTask() {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
-      "<process-definition name='make fondue'>" +
-      "  <start-state>" +
-      "    <transition to='buy cheese' />" +
-      "  </start-state>" +
-      "  <task-node name='buy cheese'>" +
-      "    <task />" +
-      "  </task-node>" +
-      "</process-definition>"
-    );    
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+        + "  <start-state>"
+        + "    <transition to='buy cheese' />"
+        + "  </start-state>"
+        + "  <task-node name='buy cheese'>"
+        + "    <task />"
+        + "  </task-node>"
+        + "</process-definition>");
     jbpmContext.deployProcessDefinition(processDefinition);
-    try
-    {
+    try {
       newTransaction();
-      
+
       ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
       processInstance.signal();
-      
+
       processInstance = saveAndReload(processInstance);
-      
+
       jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
-      
+
       newTransaction();
-      
-      assertEquals(0, session.createQuery("from org.jbpm.graph.exe.ProcessInstance").list().size());
+
+      assertDeleted(processInstance);
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
   }
 
   public void testDeleteProcessInstanceWithSubProcessInstance() {
-    ProcessDefinition buyCheese = ProcessDefinition.parseXmlString(
-      "<process-definition name='buy cheese'>" +
-      "  <start-state>" +
-      "    <transition to='find shop' />" +
-      "  </start-state>" +
-      "  <state name='find shop' />" +
-      "</process-definition>"
-    );    
+    ProcessDefinition buyCheese = ProcessDefinition.parseXmlString("<process-definition name='buy cheese'>"
+        + "  <start-state>"
+        + "    <transition to='find shop' />"
+        + "  </start-state>"
+        + "  <state name='find shop' />"
+        + "</process-definition>");
     jbpmContext.deployProcessDefinition(buyCheese);
-    
-    ProcessDefinition makeFondue = ProcessDefinition.parseXmlString(
-      "<process-definition name='make fondue'>" +
-      "  <start-state>" +
-      "    <transition to='buy cheese' />" +
-      "  </start-state>" +
-      "  <process-state name='buy cheese'>" +
-      "    <sub-process name='buy cheese' />" +
-      "  </process-state>" +
-      "</process-definition>"
-    );    
+
+    ProcessDefinition makeFondue = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+        + "  <start-state>"
+        + "    <transition to='buy cheese' />"
+        + "  </start-state>"
+        + "  <process-state name='buy cheese'>"
+        + "    <sub-process name='buy cheese' />"
+        + "  </process-state>"
+        + "</process-definition>");
     jbpmContext.deployProcessDefinition(makeFondue);
-    try
-    {
+    try {
       newTransaction();
-      
+
       ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
       processInstance.signal();
-      
+
       processInstance = saveAndReload(processInstance);
-      
+
       jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
-      
+
       newTransaction();
-      
-      assertEquals(0, session.createQuery("from org.jbpm.graph.exe.ProcessInstance").list().size());
+
+      assertDeleted(processInstance.getRootToken().getProcessInstance());
+      assertDeleted(processInstance);
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(buyCheese.getId());
       jbpmContext.getGraphSession().deleteProcessDefinition(makeFondue.getId());
     }
   }
 
   public void testDeleteProcessInstanceWithConcurrentPathsOfExecution() {
-    ProcessDefinition makeFondue = ProcessDefinition.parseXmlString(
-      "<process-definition name='make fondue'>" +
-      "  <start-state>" +
-      "    <transition to='fork' />" +
-      "  </start-state>" +
-      "  <fork name='fork'>" +
-      "    <transition name='cheese' to='buy cheese' />" +
-      "    <transition name='bread' to='bake bread' />" +
-      "  </fork>" +
-      "  <state name='buy cheese' />" +
-      "  <state name='bake bread' />" +
-      "</process-definition>"
-    );    
+    ProcessDefinition makeFondue = ProcessDefinition.parseXmlString("<process-definition name='make fondue'>"
+        + "  <start-state>"
+        + "    <transition to='fork' />"
+        + "  </start-state>"
+        + "  <fork name='fork'>"
+        + "    <transition name='cheese' to='buy cheese' />"
+        + "    <transition name='bread' to='bake bread' />"
+        + "  </fork>"
+        + "  <state name='buy cheese' />"
+        + "  <state name='bake bread' />"
+        + "</process-definition>");
     jbpmContext.deployProcessDefinition(makeFondue);
-    try
-    {
+    try {
       newTransaction();
-      
+
       ProcessInstance processInstance = jbpmContext.newProcessInstance("make fondue");
       ContextInstance contextInstance = processInstance.getContextInstance();
       contextInstance.setVariable("a", "asterix");
       contextInstance.setVariable("b", "obelix");
-      
+
       processInstance.signal();
       Token cheese = processInstance.getRootToken().getChild("cheese");
       contextInstance.setVariable("a", "mik", cheese);
@@ -150,21 +134,21 @@
       contextInstance.setVariable("b", "janneke", bread);
 
       processInstance = saveAndReload(processInstance);
-      
+
       jbpmContext.getGraphSession().deleteProcessInstance(processInstance);
-      
+
       newTransaction();
-      
-      assertEquals(0, session.createQuery("from org.jbpm.graph.exe.ProcessInstance").list().size());
-      assertEquals(0, session.createQuery("from org.jbpm.graph.exe.Token").list().size());
-      assertEquals(0, session.createQuery("from org.jbpm.context.exe.TokenVariableMap").list().size());
-      assertEquals(0, session.createQuery("from org.jbpm.context.exe.VariableInstance").list().size());
-      assertEquals(0, session.createQuery("from org.jbpm.logging.log.ProcessLog").list().size());
-      assertEquals(0, session.createQuery("from org.jbpm.module.exe.ModuleInstance").list().size());
+
+      assertDeleted(processInstance);
     }
-    finally
-    {
+    finally {
       jbpmContext.getGraphSession().deleteProcessDefinition(makeFondue.getId());
     }
   }
+
+  private void assertDeleted(ProcessInstance processInstance) {
+    long processInstanceId = processInstance.getId();
+    assertNull("process instance not deleted: " + processInstanceId,
+        graphSession.getProcessInstance(processInstanceId));
+  }
 }

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/GraphSessionDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/GraphSessionDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/db/GraphSessionDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -29,17 +29,14 @@
 import org.jbpm.graph.exe.ProcessInstance;
 import org.jbpm.graph.exe.Token;
 
-public class GraphSessionDbTest extends AbstractDbTestCase
-{
+public class GraphSessionDbTest extends AbstractDbTestCase {
 
-  public void testProcessDefinitionSaveAndLoad()
-  {
+  public void testProcessDefinitionSaveAndLoad() {
     // create a process definition
     ProcessDefinition processDefinition = new ProcessDefinition("auction");
     // save it in the database
     graphSession.saveProcessDefinition(processDefinition);
-    try
-    {
+    try {
       // get the assigned id
       long processDefinitionId = processDefinition.getId();
       // start a new transaction
@@ -49,16 +46,15 @@
       // check the result
       assertEquals("auction", processDefinition.getName());
     }
-    finally
-    {
-      // cleanup 
+    finally {
+      // cleanup
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
   }
 
-  public void testFindProcessDefinitionByNameAndVersion()
-  {
-    // put 3 process definitions in the database with the same name, but different versions
+  public void testFindProcessDefinitionByNameAndVersion() {
+    // put 3 process definitions in the database with the same name, but
+    // different versions
     ProcessDefinition processDefinitionOne = new ProcessDefinition("auction");
     processDefinitionOne.setVersion(1);
     graphSession.saveProcessDefinition(processDefinitionOne);
@@ -81,11 +77,11 @@
     assertEquals(secondVersionProcessDefinitionId, processDefinitionTwo.getId());
     assertEquals("auction", processDefinitionTwo.getName());
     assertEquals(2, processDefinitionTwo.getVersion());
-    
+
     // start a new transaction
     newTransaction();
 
-    // cleanup 
+    // cleanup
     graphSession.deleteProcessDefinition(processDefinitionOne.getId());
     newTransaction();
     graphSession.deleteProcessDefinition(processDefinitionTwo.getId());
@@ -93,9 +89,9 @@
     graphSession.deleteProcessDefinition(processDefinitionThree.getId());
   }
 
-  public void testFindLatestProcessDefinition() throws Exception
-  {
-    // put 3 process definitions in the database with the same name, but different versions
+  public void testFindLatestProcessDefinition() throws Exception {
+    // put 3 process definitions in the database with the same name, but
+    // different versions
     ProcessDefinition processDefinition = new ProcessDefinition("auction");
     processDefinition.setVersion(1);
     graphSession.saveProcessDefinition(processDefinition);
@@ -119,7 +115,7 @@
 
     newTransaction();
 
-    // cleanup 
+    // cleanup
     processDefinition = graphSession.findProcessDefinition("auction", 1);
     graphSession.deleteProcessDefinition(processDefinition.getId());
 
@@ -130,9 +126,11 @@
     graphSession.deleteProcessDefinition(processDefinition.getId());
   }
 
-  public void testFindAllProcessDefinitions() throws Exception
-  {
-    // put 3 process definitions in the database with the same name, but different versions
+  public void testFindAllProcessDefinitions() throws Exception {
+    ensureCleanProcessDefinitionTable();
+
+    // put 3 process definitions in the database with the same name, but
+    // different versions
     ProcessDefinition processDefinition = new ProcessDefinition("auction");
     processDefinition.setVersion(1);
     graphSession.saveProcessDefinition(processDefinition);
@@ -155,41 +153,43 @@
 
     newTransaction();
 
-    List allProcessDefinitions = graphSession.findAllProcessDefinitions();
-    assertEquals(5, allProcessDefinitions.size());
-    assertEquals(3, ((ProcessDefinition)allProcessDefinitions.get(0)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(0)).getName());
-    assertEquals(2, ((ProcessDefinition)allProcessDefinitions.get(1)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(1)).getName());
-    assertEquals(1, ((ProcessDefinition)allProcessDefinitions.get(2)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitions.get(2)).getName());
-    assertEquals(2, ((ProcessDefinition)allProcessDefinitions.get(3)).getVersion());
-    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitions.get(3)).getName());
-    assertEquals(1, ((ProcessDefinition)allProcessDefinitions.get(4)).getVersion());
-    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitions.get(4)).getName());
+    try {
+      List allProcessDefinitions = graphSession.findAllProcessDefinitions();
+      assertEquals(5, allProcessDefinitions.size());
+      assertEquals(3, ((ProcessDefinition) allProcessDefinitions.get(0)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitions.get(0)).getName());
+      assertEquals(2, ((ProcessDefinition) allProcessDefinitions.get(1)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitions.get(1)).getName());
+      assertEquals(1, ((ProcessDefinition) allProcessDefinitions.get(2)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitions.get(2)).getName());
+      assertEquals(2, ((ProcessDefinition) allProcessDefinitions.get(3)).getVersion());
+      assertEquals("bake cake", ((ProcessDefinition) allProcessDefinitions.get(3)).getName());
+      assertEquals(1, ((ProcessDefinition) allProcessDefinitions.get(4)).getVersion());
+      assertEquals("bake cake", ((ProcessDefinition) allProcessDefinitions.get(4)).getName());
 
-    newTransaction();
+      newTransaction();
+    }
+    finally {
+      processDefinition = graphSession.findProcessDefinition("auction", 1);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    // cleanup 
-    processDefinition = graphSession.findProcessDefinition("auction", 1);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("auction", 2);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("auction", 2);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("auction", 3);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("auction", 3);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("bake cake", 1);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("bake cake", 1);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
-
-    processDefinition = graphSession.findProcessDefinition("bake cake", 2);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("bake cake", 2);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testFindAllProcessDefinitionVersions() throws Exception
-  {
-    // put 3 process definitions in the database with the same name, but different versions
+  public void testFindAllProcessDefinitionVersions() throws Exception {
+    // put 3 process definitions in the database with the same name, but
+    // different versions
     ProcessDefinition processDefinition = new ProcessDefinition("auction");
     processDefinition.setVersion(1);
     graphSession.saveProcessDefinition(processDefinition);
@@ -212,184 +212,213 @@
 
     newTransaction();
 
-    List allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("auction");
-    assertEquals(3, allProcessDefinitionVersions.size());
-    assertEquals(3, ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getName());
-    assertEquals(2, ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getName());
-    assertEquals(1, ((ProcessDefinition)allProcessDefinitionVersions.get(2)).getVersion());
-    assertEquals("auction", ((ProcessDefinition)allProcessDefinitionVersions.get(2)).getName());
+    try {
+      List allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("auction");
+      assertEquals(3, allProcessDefinitionVersions.size());
+      assertEquals(3, ((ProcessDefinition) allProcessDefinitionVersions.get(0)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitionVersions.get(0)).getName());
+      assertEquals(2, ((ProcessDefinition) allProcessDefinitionVersions.get(1)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitionVersions.get(1)).getName());
+      assertEquals(1, ((ProcessDefinition) allProcessDefinitionVersions.get(2)).getVersion());
+      assertEquals("auction", ((ProcessDefinition) allProcessDefinitionVersions.get(2)).getName());
 
-    allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("bake cake");
-    assertEquals(2, allProcessDefinitionVersions.size());
-    assertEquals(2, ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getVersion());
-    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitionVersions.get(0)).getName());
-    assertEquals(1, ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getVersion());
-    assertEquals("bake cake", ((ProcessDefinition)allProcessDefinitionVersions.get(1)).getName());
+      allProcessDefinitionVersions = graphSession.findAllProcessDefinitionVersions("bake cake");
+      assertEquals(2, allProcessDefinitionVersions.size());
+      assertEquals(2, ((ProcessDefinition) allProcessDefinitionVersions.get(0)).getVersion());
+      assertEquals("bake cake", ((ProcessDefinition) allProcessDefinitionVersions.get(0)).getName());
+      assertEquals(1, ((ProcessDefinition) allProcessDefinitionVersions.get(1)).getVersion());
+      assertEquals("bake cake", ((ProcessDefinition) allProcessDefinitionVersions.get(1)).getName());
 
-    newTransaction();
+      newTransaction();
+    }
+    finally {
+      processDefinition = graphSession.findProcessDefinition("auction", 1);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    // cleanup 
-    processDefinition = graphSession.findProcessDefinition("auction", 1);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("auction", 2);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("auction", 2);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("auction", 3);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("auction", 3);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("bake cake", 1);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
 
-    processDefinition = graphSession.findProcessDefinition("bake cake", 1);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
-
-    processDefinition = graphSession.findProcessDefinition("bake cake", 2);
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      processDefinition = graphSession.findProcessDefinition("bake cake", 2);
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testSaveAndLoadProcessInstance()
-  {
+  public void testSaveAndLoadProcessInstance() {
     ProcessInstance processInstance = new ProcessInstance();
     processInstance = saveAndReload(processInstance);
-    assertNotNull(processInstance);
-    
-    // cleanup 
-    session.delete(processInstance);
+    try {
+      assertNotNull(processInstance);
+    }
+    finally {
+      graphSession.deleteProcessInstance(processInstance);
+    }
   }
 
-  public void testUpdateProcessInstance()
-  {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>" + "  <start-state name='s' />" + "  <node name='n' />"
+  public void testUpdateProcessInstance() {
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
+        + "  <start-state name='s' />"
+        + "  <node name='n' />"
         + "</process-definition>");
 
     processDefinition = saveAndReload(processDefinition);
+    
+    try {
+      ProcessInstance processInstance = new ProcessInstance(processDefinition);
 
-    ProcessInstance processInstance = new ProcessInstance(processDefinition);
+      processInstance = saveAndReload(processInstance);
+      long pid = processInstance.getId();
 
-    processInstance = saveAndReload(processInstance);
-    long pid = processInstance.getId();
+      assertEquals("s", processInstance.getRootToken().getNode().getName());
+      processInstance.getRootToken().setNode(processInstance.getProcessDefinition().getNode("n"));
 
-    assertEquals("s", processInstance.getRootToken().getNode().getName());
-    processInstance.getRootToken().setNode(processInstance.getProcessDefinition().getNode("n"));
+      processInstance = saveAndReload(processInstance);
+      assertEquals("n", processInstance.getRootToken().getNode().getName());
+      assertEquals(pid, processInstance.getId());
 
-    processInstance = saveAndReload(processInstance);
-    assertEquals("n", processInstance.getRootToken().getNode().getName());
-    assertEquals(pid, processInstance.getId());
-
-    newTransaction();
-
-    // cleanup 
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      newTransaction();
+    }
+    finally {
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testFindProcessInstancesByProcessDefinition()
-  {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>" + "  <start-state name='s' />" + "  <node name='n' />"
+  public void testFindProcessInstancesByProcessDefinition() {
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
+        + "  <start-state name='s' />"
+        + "  <node name='n' />"
         + "</process-definition>");
 
     graphSession.saveProcessDefinition(processDefinition);
 
-    jbpmContext.save(new ProcessInstance(processDefinition));
-    jbpmContext.save(new ProcessInstance(processDefinition));
-    jbpmContext.save(new ProcessInstance(processDefinition));
+    try {
+      jbpmContext.save(new ProcessInstance(processDefinition));
+      jbpmContext.save(new ProcessInstance(processDefinition));
+      jbpmContext.save(new ProcessInstance(processDefinition));
 
-    newTransaction();
+      newTransaction();
 
-    List processInstances = graphSession.findProcessInstances(processDefinition.getId());
-    assertEquals(3, processInstances.size());
+      List processInstances = graphSession.findProcessInstances(processDefinition.getId());
+      assertEquals(3, processInstances.size());
 
-    // process instances should be ordered from recent to old
-    long previousStart = System.currentTimeMillis();
-    Iterator iter = processInstances.iterator();
-    while (iter.hasNext())
-    {
-      ProcessInstance processInstance = (ProcessInstance)iter.next();
-      long processStart = processInstance.getStart().getTime();
-      assertTrue(previousStart >= processStart);
-      previousStart = processStart;
+      // process instances should be ordered from recent to old
+      long previousStart = System.currentTimeMillis();
+      Iterator iter = processInstances.iterator();
+      while (iter.hasNext()) {
+        ProcessInstance processInstance = (ProcessInstance) iter.next();
+        long processStart = processInstance.getStart().getTime();
+        assertTrue(previousStart >= processStart);
+        previousStart = processStart;
+      }
+
+      newTransaction();
     }
-    
-    newTransaction();
-
-    // cleanup 
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+    finally {
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testDeleteProcessInstance()
-  {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>" + "  <start-state name='s' />" + "  <node name='n' />"
+  public void testDeleteProcessInstance() {
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
+        + "  <start-state name='s' />"
+        + "  <node name='n' />"
         + "</process-definition>");
     graphSession.saveProcessDefinition(processDefinition);
-    ProcessInstance processInstance = new ProcessInstance(processDefinition);
-    jbpmContext.save(processInstance);
 
-    newTransaction();
+    try {
+      ProcessInstance processInstance = new ProcessInstance(processDefinition);
+      jbpmContext.save(processInstance);
 
-    graphSession.deleteProcessInstance(processInstance.getId());
+      newTransaction();
 
-    newTransaction();
+      graphSession.deleteProcessInstance(processInstance.getId());
 
-    assertEquals(0, graphSession.findProcessInstances(processDefinition.getId()).size());
-    
-    newTransaction();
+      newTransaction();
 
-    // cleanup 
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      assertEquals(0, graphSession.findProcessInstances(processDefinition.getId()).size());
+
+      newTransaction();
+    }
+    finally {
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testDeleteProcessInstanceWithVariables()
-  {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>" + "  <start-state name='start'>" + "    <transition to='fork' />"
-        + "  </start-state>" + "  <fork name='fork'>" + "    <transition name='a' to='a' />" + "    <transition name='b' to='b' />" + "  </fork>"
-        + "  <state name='a' />" + "  <state name='b' />" + "</process-definition>");
+  public void testDeleteProcessInstanceWithVariables() {
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>"
+        + "  <start-state name='start'>"
+        + "    <transition to='fork' />"
+        + "  </start-state>"
+        + "  <fork name='fork'>"
+        + "    <transition name='a' to='a' />"
+        + "    <transition name='b' to='b' />"
+        + "  </fork>"
+        + "  <state name='a' />"
+        + "  <state name='b' />"
+        + "</process-definition>");
 
     graphSession.saveProcessDefinition(processDefinition);
 
-    ProcessInstance processInstance = new ProcessInstance(processDefinition);
-    processInstance.signal();
-    Token tokenA = processInstance.findToken("/a");
-    Token tokenB = processInstance.findToken("/b");
+    try {
+      ProcessInstance processInstance = new ProcessInstance(processDefinition);
+      processInstance.signal();
+      Token tokenA = processInstance.findToken("/a");
+      Token tokenB = processInstance.findToken("/b");
 
-    ContextInstance contextInstance = processInstance.getContextInstance();
-    contextInstance.setVariable("r", "rrrrrr");
-    contextInstance.createVariable("a", "aaaaaa", tokenA);
-    contextInstance.createVariable("b", "bbbbbb", tokenB);
+      ContextInstance contextInstance = processInstance.getContextInstance();
+      contextInstance.setVariable("r", "rrrrrr");
+      contextInstance.createVariable("a", "aaaaaa", tokenA);
+      contextInstance.createVariable("b", "bbbbbb", tokenB);
 
-    processInstance = saveAndReload(processInstance);
+      processInstance = saveAndReload(processInstance);
 
-    graphSession.deleteProcessInstance(processInstance);
+      graphSession.deleteProcessInstance(processInstance);
 
-    newTransaction();
+      newTransaction();
 
-    List processInstances = graphSession.findProcessInstances(processDefinition.getId());
-    assertEquals(0, processInstances.size());
-    
-    newTransaction();
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      List processInstances = graphSession.findProcessInstances(processDefinition.getId());
+      assertEquals(0, processInstances.size());
+
+      newTransaction();
+    }
+    finally {
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
   }
 
-  public void testDeleteProcessDefinition()
-  {
-    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition>" + "  <start-state name='s' />" + "  <node name='n' />"
+  public void testDeleteProcessDefinition() {
+    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='deleteme'>"
+        + "  <start-state name='s' />"
+        + "  <node name='n' />"
         + "</process-definition>");
     graphSession.saveProcessDefinition(processDefinition);
-    jbpmContext.save(new ProcessInstance(processDefinition));
-    jbpmContext.save(new ProcessInstance(processDefinition));
-    jbpmContext.save(new ProcessInstance(processDefinition));
-    jbpmContext.save(new ProcessInstance(processDefinition));
 
-    newTransaction();
+    try {
+      jbpmContext.save(new ProcessInstance(processDefinition));
+      jbpmContext.save(new ProcessInstance(processDefinition));
+      jbpmContext.save(new ProcessInstance(processDefinition));
+      jbpmContext.save(new ProcessInstance(processDefinition));
 
-    graphSession.deleteProcessDefinition(processDefinition.getId());
+      newTransaction();
+    }
+    finally {
+      graphSession.deleteProcessDefinition(processDefinition.getId());
+    }
 
     newTransaction();
 
-    assertEquals(0, graphSession.findAllProcessDefinitions().size());
+    assertEquals(0, graphSession.findAllProcessDefinitionVersions(processDefinition.getName()).size());
     assertEquals(0, graphSession.findProcessInstances(processDefinition.getId()).size());
   }
 
-  public void testLatestProcessDefinitions()
-  {
+  public void testLatestProcessDefinitions() {
+    ensureCleanProcessDefinitionTable();
+
     ProcessDefinition websale = new ProcessDefinition("websale");
     jbpmContext.deployProcessDefinition(websale);
     jbpmContext.deployProcessDefinition(websale);
@@ -413,14 +442,23 @@
     graphSession.deleteProcessDefinition(changeNappy.getId());
   }
 
-  private int getVersionOfProcess(String name, List latestProcessDefinitions)
-  {
+  private void ensureCleanProcessDefinitionTable() {
+    List processDefinitions = session.createCriteria(ProcessDefinition.class).list();
+    if (!processDefinitions.isEmpty()) {
+      System.err.println("FIXME: "+ getClass().getName() + "." + getName() +
+          " found " + processDefinitions.size() + " process definitions left over");
+      for (Iterator i = processDefinitions.iterator(); i.hasNext();) {
+        ProcessDefinition processDefinition = (ProcessDefinition) i.next();
+        graphSession.deleteProcessDefinition(processDefinition);
+      }
+    }
+  }
+
+  private int getVersionOfProcess(String name, List latestProcessDefinitions) {
     Iterator iter = latestProcessDefinitions.iterator();
-    while (iter.hasNext())
-    {
-      ProcessDefinition processDefinition = (ProcessDefinition)iter.next();
-      if (name.equals(processDefinition.getName()))
-      {
+    while (iter.hasNext()) {
+      ProcessDefinition processDefinition = (ProcessDefinition) iter.next();
+      if (name.equals(processDefinition.getName())) {
         return processDefinition.getVersion();
       }
     }

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/exe/SubProcessPlusConcurrencyDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -59,7 +59,7 @@
       "    <transition name='a' to='join' />" +
       "    <transition name='b' to='join' />" +
       "  </fork>" +
-      "  <join name='join'>" +
+      "  <join name='join' lock='UPGRADE'>" +
       "    <transition to='s' />" +
       "  </join>" +
       "  <state name='s'>" +

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/graph/node/ProcessStateDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -21,8 +21,7 @@
  */
 package org.jbpm.graph.node;
 
-import java.util.List;
-
+import org.hibernate.criterion.Order;
 import org.jbpm.JbpmException;
 import org.jbpm.context.exe.ContextInstance;
 import org.jbpm.db.AbstractDbTestCase;
@@ -40,7 +39,7 @@
       "<process-definition>" +
       "  <process-state name='subprocess' />" +
       "</process-definition>");
-  
+
     processDefinition = saveAndReload(processDefinition);
     try
     {
@@ -49,8 +48,7 @@
     }
     finally
     {
-      newTransaction();
-      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
+      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition);
     }
   }
 
@@ -79,76 +77,72 @@
       ProcessInstance superProcessInstance = processDefinition.createProcessInstance();
       superProcessInstance.signal();
       superProcessInstance.signal();
-  
+
       superProcessInstance = saveAndReload(superProcessInstance);
-  
+
       Token superToken = superProcessInstance.getRootToken();
       assertEquals("subprocessnode", superToken.getNode().getName());
-      
+
       ProcessInstance subProcessInstance = superToken.getSubProcessInstance();
       assertNotNull(subProcessInstance);
       assertEquals("recursive process", subProcessInstance.getProcessDefinition().getName());
       Token subToken = subProcessInstance.getRootToken();
-  
+
       assertEquals("first wait", subToken.getNode().getName());
-      
+
       subProcessInstance.signal("done");
-  
+
       subProcessInstance = saveAndReload(subProcessInstance);
       superProcessInstance = graphSession.loadProcessInstance(superProcessInstance.getId());
-  
-      assertTrue(subProcessInstance.hasEnded());    
+
+      assertTrue(subProcessInstance.hasEnded());
       assertTrue(superProcessInstance.hasEnded());
-      
     }
     finally
     {
-      newTransaction();
-      try {
-        jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
-      } catch (RuntimeException e) {
-        e.printStackTrace();
-      } finally {
-        newTransaction();
-      }
+      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
     }
   }
 
-  public void testMultipleRecursiveProcessDefinitions() {
+  public void testMultipleRecursiveProcessDefinitions()
+  {
     for (int i=0; i<30; i++) {
       testRecursiveProcessDefinition();
       newTransaction();
     }
   }
 
-
   public void testProcessStateSubProcessDefinition() 
   {
     // create the subprocess
     ProcessDefinition subProcessDefinition = new ProcessDefinition("sub");
     // store the subprocess in the database
     graphSession.saveProcessDefinition(subProcessDefinition);
-
-    // create the super process
-    ProcessDefinition superProcessDefinition = ProcessDefinition.parseXmlString(
-      "<process-definition name='super'>" +
-      "  <process-state name='subprocess' />" +
-      "</process-definition>");
-    // resolve the reference to the subprocess
-    ProcessState processState = (ProcessState) superProcessDefinition.getNode("subprocess");
-    processState.setSubProcessDefinition(subProcessDefinition);
-  
-    // save and reload the superprocess
-    superProcessDefinition = saveAndReload(superProcessDefinition);
-    try
+    try 
     {
-      processState = (ProcessState) superProcessDefinition.getNode("subprocess");
-      assertNotNull("sub", processState.getSubProcessDefinition().getName());
+      // create the super process
+      ProcessDefinition superProcessDefinition = ProcessDefinition.parseXmlString(
+          "<process-definition name='super'>" +
+          "  <process-state name='subprocess' />" +
+      "</process-definition>");
+      // resolve the reference to the subprocess
+      ProcessState processState = (ProcessState) superProcessDefinition.getNode("subprocess");
+      processState.setSubProcessDefinition(subProcessDefinition);
+      
+      // save and reload the superprocess
+      superProcessDefinition = saveAndReload(superProcessDefinition); 
+      try
+      {
+        processState = (ProcessState) superProcessDefinition.getNode("subprocess");
+        assertNotNull("sub", processState.getSubProcessDefinition().getName());
+      }
+      finally
+      {
+        jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition);
+      }
     }
     finally
-    {
-      newTransaction();
-      jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
+    {      
       jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
     }
   }
@@ -171,44 +165,48 @@
     }
     finally
     {
-      newTransaction();
-      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition.getId());
+      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinition);
     }
   }
 
   public void testSubProcessBindingWithLatestVersion() 
   {
-    jbpmContext.deployProcessDefinition(new ProcessDefinition("the multiversion subprocess"));
-    jbpmContext.deployProcessDefinition(new ProcessDefinition("the multiversion subprocess"));
-    jbpmContext.deployProcessDefinition(new ProcessDefinition("the multiversion subprocess"));
-    
+    final int versionCount = 3;
+    for (int i = 0; i < versionCount; i++)
+    {
+      jbpmContext.deployProcessDefinition(new ProcessDefinition("the multiversion subprocess"));      
+    }
+
     newTransaction();
-    
-    ProcessDefinition processDefinitionTwo = ProcessDefinition.parseXmlString(
-      "<process-definition>" +
-      "  <process-state name='the sub process state'>" +
-      "    <sub-process name='the multiversion subprocess'/>" +
-      "  </process-state>" +
-      "</process-definition>"
-    );
-    processDefinitionTwo = saveAndReload(processDefinitionTwo);
     try
     {
-      ProcessState processState = (ProcessState) processDefinitionTwo.getNode("the sub process state");
-      assertEquals("the multiversion subprocess", processState.getSubProcessDefinition().getName() );
-      assertEquals(3, processState.getSubProcessDefinition().getVersion() );
+      ProcessDefinition processDefinitionTwo = ProcessDefinition.parseXmlString(
+          "<process-definition>" +
+          "  <process-state name='the sub process state'>" +
+          "    <sub-process name='the multiversion subprocess'/>" +
+          "  </process-state>" +
+          "</process-definition>"
+      );
+      processDefinitionTwo = saveAndReload(processDefinitionTwo);
+      try
+      {
+        ProcessState processState = (ProcessState) processDefinitionTwo.getNode("the sub process state");
+        assertEquals("the multiversion subprocess", processState.getSubProcessDefinition().getName() );
+        assertEquals(3, processState.getSubProcessDefinition().getVersion() );
+      }
+      finally
+      {
+        graphSession.deleteProcessDefinition(processDefinitionTwo);
+      }
     }
     finally
     {
-      newTransaction();
-      ProcessDefinition processDefinition = graphSession.findProcessDefinition("the multiversion subprocess", 1);
-      graphSession.deleteProcessDefinition(processDefinition.getId());
-      processDefinition = graphSession.findProcessDefinition("the multiversion subprocess", 2);
-      graphSession.deleteProcessDefinition(processDefinition.getId());
-      processDefinition = graphSession.findProcessDefinition("the multiversion subprocess", 3);
-      graphSession.deleteProcessDefinition(processDefinition.getId());
-      graphSession.deleteProcessDefinition(processDefinitionTwo.getId());
-    }
+      for (int i = 1; i <= versionCount; i++)
+      {
+        ProcessDefinition processDefinition = graphSession.findProcessDefinition("the multiversion subprocess", i);
+        graphSession.deleteProcessDefinition(processDefinition);
+      }      
+    }    
   }
 
   public void testAverageSubProcess() 
@@ -291,7 +289,6 @@
     }
     finally
     {
-      newTransaction();
       jbpmContext.getGraphSession().deleteProcessDefinition(superProcessDefinition.getId());
       jbpmContext.getGraphSession().deleteProcessDefinition(subProcessDefinition.getId());
     }
@@ -320,9 +317,8 @@
     }
     finally
     {
-      newTransaction();
       jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionOne.getId());
-      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo.getId());
+      jbpmContext.getGraphSession().deleteProcessDefinition(processDefinitionTwo);
     }
   }
 
@@ -352,46 +348,37 @@
       "</process-definition>");
     jbpmContext.deployProcessDefinition(superProcessDefinition);
     
-    ProcessInstance superProcessInstance = null;
-    ProcessInstance subProcessInstance = null;
-    
     try
     {
       newTransaction();
       
-      superProcessInstance = jbpmContext.newProcessInstanceForUpdate("superprocess");
+      ProcessInstance superProcessInstance = jbpmContext.newProcessInstanceForUpdate("superprocess");
       superProcessInstance.signal();
       
       newTransaction();
 
       long subProcessInstanceId = superProcessInstance.getRootToken().getSubProcessInstance().getId();
-      subProcessInstance = jbpmContext.loadProcessInstance(subProcessInstanceId);
+      ProcessInstance subProcessInstance = jbpmContext.loadProcessInstance(subProcessInstanceId);
       subProcessInstance.signal();
       jbpmContext.save(subProcessInstance);
 
       newTransaction();
 
-      List processStateLogs = session.createQuery(
-        "select l " +
-        "from org.jbpm.graph.log.ProcessStateLog l "
-      ).list();
-      
-      assertEquals(1, processStateLogs.size());
-      ProcessStateLog processStateLog = (ProcessStateLog) processStateLogs.get(0);
-      
+      ProcessStateLog processStateLog = (ProcessStateLog) session.createCriteria(ProcessStateLog.class)
+          .addOrder(Order.desc("enter"))
+          .setMaxResults(1)
+          .uniqueResult();
+
       assertEquals(subProcessInstanceId, processStateLog.getSubProcessInstance().getId());
       assertEquals(superProcessInstance.getId(), processStateLog.getToken().getProcessInstance().getId());
     }
     finally
     {
-      newTransaction();
-      graphSession.deleteProcessInstance(superProcessInstance.getId());
-      newTransaction();
       graphSession.deleteProcessDefinition(subProcessDefinition.getId());
       graphSession.deleteProcessDefinition(superProcessDefinition.getId());
     }
   }
-  
+
   public void testDynamicProcessBinding() 
   {
     ProcessDefinition processDefinitionOne = ProcessDefinition.parseXmlString(
@@ -417,7 +404,6 @@
         "  <end-state name='end' />" +
         "</process-definition>");
       jbpmContext.deployProcessDefinition(processDefinitionTwo);
-
     
     ProcessDefinition processDefinitionThree = ProcessDefinition.parseXmlString(
       "<process-definition name='superprocess'>" +

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm1452/JBPM1452Test.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -60,6 +60,7 @@
   protected void tearDown() throws Exception {
     graphSession.deleteProcessDefinition(processDefinitionId);
     super.tearDown();
+    jbpmConfiguration.close();
   }
 
   public void testNoJobExecutor() {

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm522/JBPM522Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm522/JBPM522Test.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm522/JBPM522Test.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -45,38 +45,47 @@
   public void testDeployProcess()
   {
     runTarget("deploy.process");
-    List processDefinitions = graphSession.findAllProcessDefinitions();
+    List processDefinitions = graphSession.findAllProcessDefinitionVersions("timerProcess");
     assertEquals(1, processDefinitions.size());
     ProcessDefinition processDefinition = (ProcessDefinition)processDefinitions.get(0);
     assertEquals("timerProcess", processDefinition.getName());
-    session.delete(processDefinition);
+    graphSession.deleteProcessDefinition(processDefinition);
   }
 
   public void testDeployBadProcess()
   {
     runTarget("deploy.bad.process");
-    List processDefinitions = graphSession.findAllProcessDefinitions();
+    List processDefinitions = graphSession.findAllProcessDefinitionVersions("sequential process");
     assertEquals(0, processDefinitions.size());
   }
 
   public void testDeployProcesses()
   {
     runTarget("deploy.processes");
-    List processDefinitions = graphSession.findAllProcessDefinitions();
-    assertEquals(2, processDefinitions.size());
+    List processDefinitions = graphSession.findAllProcessDefinitionVersions("classLoadingProcess");
+    assertEquals(1, processDefinitions.size());
     ProcessDefinition processDefinition = (ProcessDefinition)processDefinitions.get(0);
     assertEquals("classLoadingProcess", processDefinition.getName());
-    session.delete(processDefinition);
-    processDefinition = (ProcessDefinition)processDefinitions.get(1);
+    graphSession.deleteProcessDefinition(processDefinition);
+
+    processDefinitions = graphSession.findAllProcessDefinitionVersions("timerProcess");
+    assertEquals(1, processDefinitions.size());
+    processDefinition = (ProcessDefinition)processDefinitions.get(0);
     assertEquals("timerProcess", processDefinition.getName());
-    session.delete(processDefinition);
+    graphSession.deleteProcessDefinition(processDefinition);
   }
 
   public void testDeployProcessesIncludingBad()
   {
     runTarget("deploy.processes.including.bad");
-    List processDefinitions = graphSession.findAllProcessDefinitions();
+    List processDefinitions = graphSession.findAllProcessDefinitionVersions("timerProcess");
     assertEquals(0, processDefinitions.size());
+
+    processDefinitions = graphSession.findAllProcessDefinitionVersions("sequential process");
+    assertEquals(0, processDefinitions.size());
+
+    processDefinitions = graphSession.findAllProcessDefinitionVersions("classLoadingProces");
+    assertEquals(0, processDefinitions.size());
   }
 
   private static void runTarget(String target)

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm983/JBPM983Test.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm983/JBPM983Test.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jbpm983/JBPM983Test.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -25,11 +25,6 @@
   private long subProcessDefinitionId;
   private long processDefinitionId;
 
-  @Override
-  protected String getJbpmTestConfig() {
-    return "org/jbpm/jbpm.test.cfg.xml";
-  }
-
   protected void setUp() throws Exception {
     super.setUp();
 
@@ -49,6 +44,7 @@
 
   protected void tearDown() throws Exception {
     stopJobExecutor();
+    getJbpmConfiguration().getJobExecutor().setNbrOfThreads(1);
 
     graphSession.deleteProcessDefinition(processDefinitionId);
     graphSession.deleteProcessDefinition(subProcessDefinitionId);      

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/job/executor/JobExecutorDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/job/executor/JobExecutorDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/job/executor/JobExecutorDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -22,11 +22,6 @@
   static List<Long> allocatedProcessIds = Collections.synchronizedList(new ArrayList<Long>());
 
   @Override
-  protected String getJbpmTestConfig() {
-    return "org/jbpm/jbpm.test.cfg.xml";
-  }
-
-  @Override
   protected void setUp() throws Exception {
     super.setUp();
     deployProcess();    
@@ -35,6 +30,7 @@
 
   @Override
   protected void tearDown() throws Exception {
+    getJbpmConfiguration().getJobExecutor().setNbrOfThreads(1);
     deleteProcess();
     super.tearDown();
   }

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/par/ProcessArchiveDeploymentDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/par/ProcessArchiveDeploymentDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/jpdl/par/ProcessArchiveDeploymentDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -23,10 +23,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
@@ -37,10 +33,6 @@
 
 import org.jbpm.db.AbstractDbTestCase;
 import org.jbpm.graph.def.ProcessDefinition;
-import org.jbpm.graph.exe.ProcessInstance;
-import org.jbpm.instantiation.ProcessClassLoader;
-import org.jbpm.taskmgmt.def.Task;
-import org.jbpm.taskmgmt.def.TaskMgmtDefinition;
 import org.jbpm.util.ClassLoaderUtil;
 import org.jbpm.util.IoUtil;
 
@@ -70,7 +62,7 @@
     {
       newTransaction();
 
-      List allProcessDefinitions = graphSession.findAllProcessDefinitions();
+      List allProcessDefinitions = graphSession.findAllProcessDefinitionVersions(processDefinition.getName()); 
       assertEquals(1, allProcessDefinitions.size());
       
       processDefinition = (ProcessDefinition)allProcessDefinitions.get(0);
@@ -100,7 +92,7 @@
     {
       newTransaction();
 
-      List allProcessDefinitions = graphSession.findAllProcessDefinitions();
+      List allProcessDefinitions = graphSession.findAllProcessDefinitionVersions(processDefinition.getName());
       assertEquals(1, allProcessDefinitions.size());
       processDefinition = (ProcessDefinition)allProcessDefinitions.get(0);
       byte[] processBytes = processDefinition.getFileDefinition().getBytes("classes/org/jbpm/jpdl/par/ProcessArchiveDeploymentDbTest.class");
@@ -135,12 +127,15 @@
     ProcessDefinition processDefinitionTwo = ProcessDefinition.parseParZipInputStream(zipInputStream);
     jbpmContext.deployProcessDefinition(processDefinitionTwo);
 
+    String processDefinitionName = processDefinitionTwo.getName();
+    assertEquals(processDefinitionName, processDefinitionOne.getName());
+
     newTransaction();
 
     try
     {
-      assertEquals(2, graphSession.findAllProcessDefinitions().size());
-      assertEquals(2, graphSession.findLatestProcessDefinition("the deployable process").getVersion());
+      assertEquals(2, graphSession.findAllProcessDefinitionVersions(processDefinitionName).size());
+      assertEquals(2, graphSession.findLatestProcessDefinition(processDefinitionName).getVersion());
     }
     finally
     {

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/logging/exe/LoggingConfigDbTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/logging/exe/LoggingConfigDbTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/logging/exe/LoggingConfigDbTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -7,18 +7,27 @@
 import org.jbpm.graph.exe.ProcessInstance;
 
 public class LoggingConfigDbTest extends AbstractDbTestCase {
-  
+
   @Override
   protected JbpmConfiguration getJbpmConfiguration() {
-    return JbpmConfiguration.parseResource("org/jbpm/logging/exe/nologging.jbpm.cfg.xml");
+    if (jbpmConfiguration == null) {
+      jbpmConfiguration = JbpmConfiguration.parseResource("org/jbpm/logging/exe/nologging.jbpm.cfg.xml");
+    }
+    return jbpmConfiguration;
   }
 
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+    jbpmConfiguration.close();
+  }
+
   public void testLoggingconfiguration() {
     jbpmContext.deployProcessDefinition(new ProcessDefinition("logging"));
     ProcessInstance processInstance = jbpmContext.newProcessInstance("logging");
     processInstance.getContextInstance().setVariable("a", "1");
     newTransaction();
-    
+
     Query query = session.createQuery("from org.jbpm.logging.log.ProcessLog");
     assertEquals(0, query.list().size());
   }

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/seam/JobExecutorCustomizationTest.java	2008-12-01 04:47:28 UTC (rev 3158)
@@ -16,6 +16,12 @@
     return "org/jbpm/seam/custom.job.executor.jbpm.cfg.xml";
   }
 
+  @Override
+  protected void tearDown() throws Exception {
+    super.tearDown();
+    jbpmConfiguration.close();
+  }
+
   public void testCustomJobExecutor() {
     JobExecutor jobExecutor = getJbpmConfiguration().getJobExecutor();
     assertEquals(CustomJobExecutor.class, jobExecutor.getClass());

Modified: jbpm3/trunk/pom.xml
===================================================================
--- jbpm3/trunk/pom.xml	2008-11-28 17:06:35 UTC (rev 3157)
+++ jbpm3/trunk/pom.xml	2008-12-01 04:47:28 UTC (rev 3158)
@@ -29,11 +29,13 @@
   <!-- Modules -->
   <modules>
     <module>modules/core</module>
+    <module>modules/db</module>
     <module>modules/identity</module>
     <module>modules/enterprise</module>
     <module>modules/examples</module>
     <module>modules/simulation</module>
     <module>modules/integration</module>
+    <module>modules/userguide</module>
   </modules>
 
   <!-- Properties -->




More information about the jbpm-commits mailing list