Author: jmarino
Date: Thu Apr 13 18:57:49 2006
New Revision: 393999
URL: http://svn.apache.org/viewcvs?rev=393999&view=rev
Log:
add support for eager init of request scope impls
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java
Modified:
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java?rev=393999&r1=393998&r2=393999&view=diff
==============================================================================
---
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java
(original)
+++
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/RequestScopeContext.java
Thu Apr 13 18:57:49 2006
@@ -25,6 +25,7 @@
import org.apache.tuscany.core.context.event.InstanceCreated;
import org.apache.tuscany.core.context.event.Event;
import org.apache.tuscany.core.context.event.RequestEnd;
+import org.apache.tuscany.core.context.event.RequestStart;
import java.util.ArrayList;
import java.util.List;
@@ -52,10 +53,11 @@
}
public void onEvent(Event event){
- /* clean up current context for pooled threads */
- if (event instanceof RequestEnd){
+ if (event instanceof RequestStart){
+ getContexts(); // eager load
+ }else if (event instanceof RequestEnd){
checkInit();
- getEventContext().clearIdentifiers();
+ getEventContext().clearIdentifiers(); // clean up current context
for pooled threads
shutdownContexts();
cleanupRequestContexts();
}else if (event instanceof InstanceCreated){
@@ -156,20 +158,33 @@
*/
private Map<String, Context> getContexts() throws CoreRuntimeException {
- Map<String, Context> contexts =
this.contexts.get(Thread.currentThread());
- if (contexts == null) {
- contexts = new ConcurrentHashMap<String, Context>();
+ Map<String, Context> requestContexts =
this.contexts.get(Thread.currentThread());
+ if (requestContexts == null) {
+ requestContexts = new ConcurrentHashMap<String, Context>();
List<Context> shutdownQueue = new ArrayList<Context>();
for (ContextFactory<Context> config : contextFactories.values()) {
Context context = config.createContext();
context.start();
- contexts.put(context.getName(), context);
+ requestContexts.put(context.getName(), context);
+ }
+ // initialize eager components. Note this cannot be done when we
initially create each context since a component may
+ // contain a forward reference to a component which has not been
instantiated
+ for (Context context : requestContexts.values()) {
+ if (context instanceof AtomicContext) {
+ AtomicContext atomic = (AtomicContext) context;
+ if (atomic.isEagerInit()) {
+ atomic.init(); // Notify the instance
+ synchronized(shutdownQueue){
+ shutdownQueue.add(context);
+ }
+ }
+ }
context.addListener(this);
}
- this.contexts.put(Thread.currentThread(), contexts);
+ contexts.put(Thread.currentThread(), requestContexts);
destroyQueues.put(Thread.currentThread(), shutdownQueue);
}
- return contexts;
+ return requestContexts;
}
private void shutdownContexts() {
@@ -187,7 +202,6 @@
if (context instanceof AtomicContext){
((AtomicContext)context).destroy();
}
- context.stop();
} catch (TargetException e) {
// TODO send a monitoring event
}