[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