You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by if...@apache.org on 2015/02/20 20:07:27 UTC

[2/8] maven git commit: mechanism to carryover session scope seeds from one thread to another

mechanism to carryover session scope seeds from one thread to another

Signed-off-by: Igor Fedorenko <if...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/45563ff5
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/45563ff5
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/45563ff5

Branch: refs/heads/master
Commit: 45563ff5cbfd066761913ae35a4e3e8e6e25e83c
Parents: 117df85
Author: Igor Fedorenko <if...@apache.org>
Authored: Thu Feb 5 12:07:41 2015 -0500
Committer: Igor Fedorenko <if...@apache.org>
Committed: Fri Feb 20 10:26:14 2015 -0500

----------------------------------------------------------------------
 .../internal/LifecycleModuleBuilder.java        |  2 +-
 .../lifecycle/internal/LifecycleStarter.java    |  8 ++++-
 .../lifecycle/internal/ReactorContext.java      | 13 +++++++-
 .../session/scope/internal/SessionScope.java    | 33 ++++++++++++++++++++
 4 files changed, 53 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/45563ff5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
index d987a30..f9e6e6a 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
@@ -89,7 +89,7 @@ public class LifecycleModuleBuilder
 
         // session may be different from rootSession seeded in DefaultMaven
         // explicitly seed the right session here to make sure it is used by Guice
-        sessionScope.enter();
+        sessionScope.enter( reactorContext.getSessionScopeMemento() );
         sessionScope.seed( MavenSession.class, session );
         try
         {

http://git-wip-us.apache.org/repos/asf/maven/blob/45563ff5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
index cc00ff9..55217dc 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
@@ -30,6 +30,7 @@ import org.apache.maven.lifecycle.MissingProjectException;
 import org.apache.maven.lifecycle.NoGoalSpecifiedException;
 import org.apache.maven.lifecycle.internal.builder.Builder;
 import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
+import org.apache.maven.session.scope.internal.SessionScope;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
@@ -64,6 +65,9 @@ public class LifecycleStarter
 
     @Requirement
     private Map<String, Builder> builders;
+    
+    @Requirement
+    private SessionScope sessionScope;
 
     public void execute( MavenSession session )
     {
@@ -102,7 +106,9 @@ public class LifecycleStarter
 
             ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
             ReactorBuildStatus reactorBuildStatus = new ReactorBuildStatus( session.getProjectDependencyGraph() );
-            reactorContext = new ReactorContext( result, projectIndex, oldContextClassLoader, reactorBuildStatus );
+            reactorContext =
+                new ReactorContext( result, projectIndex, oldContextClassLoader, reactorBuildStatus,
+                                    sessionScope.memento() );
 
             String builderId = session.getRequest().getBuilderId();
             Builder builder = builders.get( builderId );

http://git-wip-us.apache.org/repos/asf/maven/blob/45563ff5/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
index a6adc95..feda5fc 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
@@ -20,6 +20,7 @@ package org.apache.maven.lifecycle.internal;
  */
 
 import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.session.scope.internal.SessionScope;
 
 /**
  * Context that is fixed for the entire reactor build.
@@ -39,14 +40,17 @@ public class ReactorContext
 
     private final ReactorBuildStatus reactorBuildStatus;
 
+    private final SessionScope.Memento sessionScope;
 
     public ReactorContext( MavenExecutionResult result, ProjectIndex projectIndex,
-                           ClassLoader originalContextClassLoader, ReactorBuildStatus reactorBuildStatus )
+                           ClassLoader originalContextClassLoader, ReactorBuildStatus reactorBuildStatus,
+                           SessionScope.Memento sessionScope )
     {
         this.result = result;
         this.projectIndex = projectIndex;
         this.originalContextClassLoader = originalContextClassLoader;
         this.reactorBuildStatus = reactorBuildStatus;
+        this.sessionScope = sessionScope;
     }
 
     public ReactorBuildStatus getReactorBuildStatus()
@@ -69,4 +73,11 @@ public class ReactorContext
         return originalContextClassLoader;
     }
 
+    /**
+     * @since 3.2.6
+     */
+    public SessionScope.Memento getSessionScopeMemento()
+    {
+        return sessionScope;
+    }
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/45563ff5/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java b/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
index ae62ea2..5a38e6e 100644
--- a/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
+++ b/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
@@ -19,9 +19,11 @@ package org.apache.maven.session.scope.internal;
  * under the License.
  */
 
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Map;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.inject.Key;
 import com.google.inject.OutOfScopeException;
@@ -32,6 +34,19 @@ import com.google.inject.util.Providers;
 public class SessionScope
     implements Scope
 {
+    /**
+     * @since 3.2.6
+     */
+    public static class Memento
+    {
+        final Map<Key<?>, Provider<?>> seeded;
+
+        Memento( final Map<Key<?>, Provider<?>> seeded )
+        {
+            this.seeded = ImmutableMap.copyOf( seeded );
+        }
+    }
+
     private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>()
     {
         public Object get()
@@ -60,6 +75,15 @@ public class SessionScope
         stack.addFirst( new ScopeState() );
     }
 
+    /**
+     * @since 3.2.6
+     */
+    public void enter( Memento memento )
+    {
+        enter();
+        getScopeState().seeded.putAll( memento.seeded );
+    }
+
     private ScopeState getScopeState()
     {
         LinkedList<ScopeState> stack = values.get();
@@ -84,6 +108,15 @@ public class SessionScope
         }
     }
 
+    /**
+     * @since 3.2.6
+     */
+    public Memento memento()
+    {
+        LinkedList<ScopeState> stack = values.get();
+        return new Memento( stack != null ? stack.getFirst().seeded : Collections.<Key<?>, Provider<?>>emptyMap() );
+    }
+
     public <T> void seed( Class<T> clazz, Provider<T> value )
     {
         getScopeState().seeded.put( Key.get( clazz ), value );