[jbpm-commits] JBoss JBPM SVN: r4036 - in jbpm3/trunk/modules/core/src: main/java/org/jbpm/job/executor and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Feb 25 17:40:39 EST 2009


Author: alex.guizar at jboss.com
Date: 2009-02-25 17:40:38 -0500 (Wed, 25 Feb 2009)
New Revision: 4036

Modified:
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/svc/Services.java
   jbpm3/trunk/modules/core/src/test/java/org/jbpm/JbpmConfigurationTest.java
Log:
remove soft reference stuff, seems to cause instability in JbpmConfigurationTest

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java	2009-02-25 21:25:42 UTC (rev 4035)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/JbpmConfiguration.java	2009-02-25 22:40:38 UTC (rev 4036)
@@ -24,7 +24,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.Serializable;
-import java.lang.ref.SoftReference;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
@@ -254,12 +253,13 @@
   private static final long serialVersionUID = 1L;
 
   static ObjectFactory defaultObjectFactory;
-  static final Map<String, SoftReference<JbpmConfiguration>> instances = new HashMap<String, SoftReference<JbpmConfiguration>>();
+  static final Map<String, JbpmConfiguration> instances = new HashMap<String, JbpmConfiguration>();
   static final ThreadLocal<List<JbpmConfiguration>> jbpmConfigurationStacks = new StackThreadLocal<JbpmConfiguration>();
 
-  private ObjectFactory objectFactory;
+  private final ObjectFactory objectFactory;
+  private final ThreadLocal<List<JbpmContext>> jbpmContextStacks = new StackThreadLocal<JbpmContext>();
   private JobExecutor jobExecutor;
-  private final ThreadLocal<List<JbpmContext>> jbpmContextStacks = new StackThreadLocal<JbpmContext>();
+  private boolean isClosed;
 
   static class StackThreadLocal<E> extends ThreadLocal<List<E>> {
     @Override
@@ -284,8 +284,8 @@
     JbpmConfiguration instance;
     synchronized (instances) {
       // look for configuration in cache
-      SoftReference<JbpmConfiguration> instanceRef = instances.get(resource);
-      if (instanceRef == null || (instance = instanceRef.get()) == null) {
+      instance = instances.get(resource);
+      if (instance == null) {
         // configuration does not exist or was evicted, construct it
         if (defaultObjectFactory != null) {
           log.debug("creating configuration from default object factory: " + defaultObjectFactory);
@@ -306,22 +306,14 @@
           instance = createJbpmConfiguration(objectFactory);
         }
         // put configuration in cache
-        instanceRef = new SoftReference<JbpmConfiguration>(instance);
-        instances.put(resource, instanceRef);
+        instances.put(resource, instance);
       }
     }
     return instance;
   }
 
   public static boolean hasInstance(String resource) {
-    boolean hasInstance = false;
-    if (resource == null) {
-      resource = "jbpm.cfg.xml";
-    }
-    if (instances != null && instances.containsKey(resource)) {
-      hasInstance = true;
-    }
-    return hasInstance;
+    return instances.containsKey(resource != null ? resource : "jbpm.cfg.xml");
   }
 
   protected static ObjectFactory parseObjectFactory(InputStream inputStream) {
@@ -370,7 +362,7 @@
     if (!objectFactory.hasObject("jbpm.hide.stale.object.exceptions")) return true;
 
     Object object = objectFactory.createObject("jbpm.hide.stale.object.exceptions");
-    return object instanceof Boolean ? ((Boolean) object).booleanValue() : true;
+    return object instanceof Boolean ? (Boolean) object : true;
   }
 
   public static JbpmConfiguration parseInputStream(InputStream inputStream) {
@@ -394,12 +386,18 @@
   }
 
   public JbpmContext createJbpmContext(String name) {
+    ensureOpen();
+
     JbpmContext jbpmContext = (JbpmContext) objectFactory.createObject(name);
     jbpmContext.jbpmConfiguration = this;
     jbpmContextCreated(jbpmContext);
     return jbpmContext;
   }
 
+  private void ensureOpen() {
+    if (isClosed) throw new JbpmException("configuration closed");
+  }
+
   public ServiceFactory getServiceFactory(String serviceName) {
     return getServiceFactory(serviceName, JbpmContext.DEFAULT_JBPM_CONTEXT_NAME);
   }
@@ -508,20 +506,27 @@
         jbpmContextName);
   }
 
+  public boolean isClosed() {
+    return isClosed;
+  }
+
   public void close() {
     close(JbpmContext.DEFAULT_JBPM_CONTEXT_NAME);
   }
 
   public void close(String jbpmContextName) {
+    // prevent configuration from being closed more than once
+    if (isClosed) return;
+
     // stop job executor
     if (jobExecutor != null) {
       jobExecutor.stop();
       jobExecutor = null;
     }
 
+    // close service factories
     JbpmContext jbpmContext = createJbpmContext(jbpmContextName);
     try {
-      // close service factories
       Map<String, ServiceFactory> serviceFactories = jbpmContext.getServices()
           .getServiceFactories();
       if (serviceFactories != null) {
@@ -534,14 +539,18 @@
       jbpmContext.close();
     }
 
+    // closing service factories requires open configuration
+    isClosed = true;
+
     // release context stack
     jbpmContextStacks.remove();
 
     // remove from configuration cache
     synchronized (instances) {
-      for (SoftReference<JbpmConfiguration> instanceRef : instances.values()) {
-        if (this == instanceRef.get()) {
-          instanceRef.clear();
+      for (java.util.Iterator<JbpmConfiguration> i = instances.values().iterator(); i.hasNext();) {
+        if (this == i.next()) {
+          i.remove();
+          break;
         }
       }
     }
@@ -574,6 +583,8 @@
   }
 
   public JbpmContext getCurrentJbpmContext() {
+    ensureOpen();
+
     JbpmContext currentJbpmContext = null;
     List<JbpmContext> stack = getJbpmContextStack();
     if (!stack.isEmpty()) {
@@ -622,6 +633,8 @@
   }
 
   public synchronized JobExecutor getJobExecutor() {
+    ensureOpen();
+
     if (jobExecutor == null) {
       Object object = objectFactory.createObject("jbpm.job.executor");
       if (object instanceof JobExecutor) {

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java	2009-02-25 21:25:42 UTC (rev 4035)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/job/executor/JobExecutor.java	2009-02-25 22:40:38 UTC (rev 4036)
@@ -43,7 +43,7 @@
 
   public synchronized void start() {
     if (!isStarted) {
-      log.debug("starting thread group '" + name + "'...");
+      log.debug("starting job executor '" + name + "'...");
       for (int i = 0; i < nbrOfThreads; i++) {
         startThread();
       }
@@ -51,7 +51,7 @@
       isStarted = true;
     }
     else {
-      log.debug("ignoring start: thread group '" + name + "' is already started'");
+      log.debug("ignoring start: job executor '" + name + "' is already started'");
     }
   }
 
@@ -66,7 +66,7 @@
   public synchronized List<Thread> stop() {
     List<Thread> stoppedThreads;
     if (isStarted) {
-      log.debug("stopping thread group '" + name + "'...");
+      log.debug("stopping job executor '" + name + "'...");
       isStarted = false;
 
       stoppedThreads = new ArrayList<Thread>(threads.size());
@@ -77,7 +77,7 @@
       if (lockMonitorThread != null) lockMonitorThread.deactivate();
     }
     else {
-      log.debug("ignoring stop: thread group '" + name + "' not started");
+      log.debug("ignoring stop: job executor '" + name + "' not started");
       stoppedThreads = Collections.emptyList();
     }
     return stoppedThreads;

Modified: jbpm3/trunk/modules/core/src/main/java/org/jbpm/svc/Services.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/svc/Services.java	2009-02-25 21:25:42 UTC (rev 4035)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/svc/Services.java	2009-02-25 22:40:38 UTC (rev 4036)
@@ -24,6 +24,7 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -79,7 +80,7 @@
 
   Map<String, ServiceFactory> serviceFactories;
   Map<String, Service> services;
-  List<String> serviceNames;
+  Collection<String> serviceNames;
   List<SaveOperation> saveOperations;
 
   public static Service getCurrentService(String name) {
@@ -99,10 +100,10 @@
   }
 
   public Services(Map<String, ServiceFactory> serviceFactories) {
-    this(serviceFactories, new ArrayList<String>(serviceFactories.keySet()), null);
+    this(serviceFactories, serviceFactories.keySet(), null);
   }
 
-  public Services(Map<String, ServiceFactory> serviceFactories, List<String> serviceNames,
+  public Services(Map<String, ServiceFactory> serviceFactories, Collection<String> serviceNames,
       List<SaveOperation> saveOperations) {
     this.serviceFactories = serviceFactories;
     this.serviceNames = serviceNames;

Modified: jbpm3/trunk/modules/core/src/test/java/org/jbpm/JbpmConfigurationTest.java
===================================================================
--- jbpm3/trunk/modules/core/src/test/java/org/jbpm/JbpmConfigurationTest.java	2009-02-25 21:25:42 UTC (rev 4035)
+++ jbpm3/trunk/modules/core/src/test/java/org/jbpm/JbpmConfigurationTest.java	2009-02-25 22:40:38 UTC (rev 4036)
@@ -21,12 +21,11 @@
  */
 package org.jbpm;
 
+import org.hibernate.SessionFactory;
 import org.jbpm.configuration.ConfigurationException;
 import org.jbpm.configuration.ObjectFactory;
 import org.jbpm.configuration.ObjectFactoryImpl;
 import org.jbpm.configuration.ObjectFactoryParser;
-import org.jbpm.persistence.db.DbPersistenceServiceFactory;
-import org.jbpm.svc.Services;
 import org.jbpm.util.XmlException;
 
 public class JbpmConfigurationTest extends AbstractJbpmTestCase {
@@ -201,15 +200,14 @@
   public void testJbpmConfigurationClose() {
     JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
     JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
+    SessionFactory sessionFactory;
     try {
-      jbpmContext.getSession();
+      sessionFactory = jbpmContext.getSessionFactory();
     } finally {
       jbpmContext.close();
     }
-    
     jbpmConfiguration.close();
-    
-    DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory) jbpmConfiguration.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
-    assertTrue(dbPersistenceServiceFactory.getSessionFactory().isClosed());
+
+    assertTrue("expected " + sessionFactory + " to be closed", sessionFactory.isClosed());
   }
 }




More information about the jbpm-commits mailing list