[jbpm-commits] JBoss JBPM SVN: r6279 - in jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal: wire and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Apr 26 13:01:16 EDT 2010
Author: alex.guizar at jboss.com
Date: 2010-04-26 13:01:15 -0400 (Mon, 26 Apr 2010)
New Revision: 6279
Modified:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/env/BasicEnvironment.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java
Log:
JBPM-2844: refine the manner in which WireContext delegates a get(Class) call to the environment
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/env/BasicEnvironment.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/env/BasicEnvironment.java 2010-04-24 00:18:37 UTC (rev 6278)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/env/BasicEnvironment.java 2010-04-26 17:01:15 UTC (rev 6279)
@@ -21,14 +21,12 @@
*/
package org.jbpm.pvm.internal.env;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
import org.jbpm.api.JbpmException;
import org.jbpm.internal.log.Log;
-
/**
* @author Tom Baeyens
*/
@@ -39,19 +37,11 @@
private static final Log log = Log.getLog(BasicEnvironment.class.getName());
protected String authenticatedUserId;
- protected Map<String, Context> contexts;
- protected ArrayList<String> defaultSearchOrderList;
- protected String[] defaultSearchOrder;
+ protected Map<String, Context> contexts = new LinkedHashMap<String, Context>();
protected Throwable exception;
protected transient ClassLoader classLoader;
- public BasicEnvironment() {
- contexts = new HashMap<String, Context>();
- defaultSearchOrderList = new ArrayList<String>();
- defaultSearchOrder = null;
- }
-
// context methods ////////////////////////////////////////////////////////////
public Context getContext(String contextName) {
@@ -59,11 +49,7 @@
}
public void setContext(Context context) {
- String key = context.getName();
- if (contexts.put(key, context)==null) {
- defaultSearchOrderList.add(key);
- }
- defaultSearchOrder = null;
+ contexts.put(context.getName(), context);
}
public Context removeContext(Context context) {
@@ -71,12 +57,7 @@
}
public Context removeContext(String contextName) {
- Context removedContext = contexts.remove(contextName);
- if (removedContext!=null) {
- defaultSearchOrderList.remove(contextName);
- defaultSearchOrder = null;
- }
- return removedContext;
+ return contexts.remove(contextName);
}
public Context getEnvironmentFactoryContext() {
@@ -117,33 +98,51 @@
if (searchOrder==null) {
searchOrder = getDefaultSearchOrder();
}
- for (int i=0; i<searchOrder.length; i++){
- Context context = contexts.get(searchOrder[i]);
- if (context.has(name)) {
- return context.get(name);
- }
+ for (String contextName : searchOrder) {
+ Context context = contexts.get(contextName);
+ if (context.has(name)) return context.get(name);
}
return null;
}
public <T> T get(Class<T> type) {
- return get(type, null);
+ return get(type, (String[]) null);
}
public <T> T get(Class<T> type, String[] searchOrder) {
if (searchOrder==null) {
searchOrder = getDefaultSearchOrder();
}
- for (int i=0; i<searchOrder.length; i++){
- Context context = contexts.get(searchOrder[i]);
- T o = context.get(type);
- if (o!=null) {
- return o;
+ for (String contextName : searchOrder) {
+ Context context = contexts.get(contextName);
+ T object = context.get(type);
+ if (object != null) return object;
+ }
+ return null;
+ }
+
+ /**
+ * searches an object based on type in the default search order.
+ * if this environment contains the given context, the search skips
+ * contexts registered after it.
+ */
+ public <T> T get(Class<T> type, Context requester) {
+ String[] searchOrder = getDefaultSearchOrder();
+ int searchPosition = 0;
+ for (int i = 0; i < searchOrder.length; i++) {
+ if (contexts.get(searchOrder[i]) == requester) {
+ searchPosition = i + 1;
+ break;
}
}
+ for (int i = searchPosition; i < searchOrder.length; i++) {
+ Context context = contexts.get(searchOrder[i]);
+ T object = context.get(type);
+ if (object != null) return object;
+ }
return null;
}
-
+
// close ////////////////////////////////////////////////////////////////////
public void close() {
@@ -158,13 +157,14 @@
// private methods //////////////////////////////////////////////////////////
protected String[] getDefaultSearchOrder() {
- if (defaultSearchOrder==null) {
- int size = defaultSearchOrderList.size();
- defaultSearchOrder = (String[]) new String[size];
- for (int i=0; i<size; i++) {
- defaultSearchOrder[i] = defaultSearchOrderList.get(size-1-i);
- }
+ int size = contexts.size();
+ String[] defaultSearchOrder = new String[size];
+
+ int index = size;
+ for (String contextName : contexts.keySet()) {
+ defaultSearchOrder[--index] = contextName;
}
+
return defaultSearchOrder;
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java 2010-04-24 00:18:37 UTC (rev 6278)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/WireContext.java 2010-04-26 17:01:15 UTC (rev 6279)
@@ -31,6 +31,7 @@
import org.jbpm.api.activity.ActivityBehaviour;
import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.env.BasicEnvironment;
import org.jbpm.pvm.internal.env.Context;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.model.ProcessElementImpl;
@@ -707,26 +708,15 @@
}
// check if we can find it in the environment (if one is available)
EnvironmentImpl environment = EnvironmentImpl.getCurrent();
- if (environment != null) {
- Context processEngineContext = environment.getContext(CONTEXTNAME_PROCESS_ENGINE);
- if (processEngineContext != this) {
- Context transactionContext = environment.getContext(CONTEXTNAME_TRANSACTION);
- if (transactionContext != this) {
- return environment.get(type);
- }
- // try process engine context
- if (processEngineContext != null) {
- return processEngineContext.get(type);
- }
- }
+ if (environment instanceof BasicEnvironment) {
+ BasicEnvironment basicEnvironment = (BasicEnvironment) environment;
+ return basicEnvironment.get(type, this);
}
return null;
}
protected boolean hasException(String objectName) {
- return ( (exceptions!=null)
- && (exceptions.containsKey(objectName))
- );
+ return exceptions!=null && exceptions.containsKey(objectName);
}
protected void addException(Descriptor descriptor, Exception exception) {
More information about the jbpm-commits
mailing list