You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@onami.apache.org by as...@apache.org on 2014/06/29 07:50:38 UTC
svn commit: r1606430 - in /onami/trunk/lifecycle:
core/src/main/java/org/apache/onami/lifecycle/core/
core/src/test/java/org/apache/onami/lifecycle/core/
standard/src/main/java/org/apache/onami/lifecycle/standard/
standard/src/test/java/org/apache/onam...
Author: ash2k
Date: Sun Jun 29 05:50:37 2014
New Revision: 1606430
URL: http://svn.apache.org/r1606430
Log:
ONAMI-102 Redesign module API
Added:
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractBasicStageable.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractStageable.java
Removed:
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DefaultDisposer.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/Disposable.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeHandler.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/Disposer.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/StagerWrapper.java
Modified:
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractMethodTypeListener.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleModule.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleStageModule.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/NoOpStageableTypeMapper.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/Stageable.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableMethod.java
onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableTypeMapper.java
onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/DefaultStagerTestCase.java
onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/MultiLifeCycleTestCase.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/AfterInjectionModule.java
onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeModule.java
onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeModuleTestCase.java
onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeTestCase.java
onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUpModule.java
onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUper.java
onami/trunk/lifecycle/warmup/src/test/java/org/apachi/onami/lifecycle/warmup/TestWarmUpManager.java
Added: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractBasicStageable.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractBasicStageable.java?rev=1606430&view=auto
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractBasicStageable.java (added)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractBasicStageable.java Sun Jun 29 05:50:37 2014
@@ -0,0 +1,50 @@
+package org.apache.onami.lifecycle.core;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Base implementation for stageables.
+ *
+ * @author Mikhail Mazursky
+ */
+public abstract class AbstractBasicStageable<S>
+ implements Stageable
+{
+
+ /**
+ * Object to stage.
+ */
+ protected final S object;
+
+ protected AbstractBasicStageable( S object )
+ {
+ this.object = object;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final String toString()
+ {
+ return object.toString();
+ }
+
+}
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractMethodTypeListener.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractMethodTypeListener.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractMethodTypeListener.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractMethodTypeListener.java Sun Jun 29 05:50:37 2014
@@ -42,14 +42,14 @@ abstract class AbstractMethodTypeListene
/**
* The lifecycle annotations to search on methods in the order to be searched.
*/
- private final List<Class<? extends Annotation>> annotationTypes;
+ protected final List<? extends Class<? extends Annotation>> annotationTypes;
/**
* Creates a new methods listener instance.
*
* @param annotationTypes the lifecycle annotations to search on methods in the order to be searched.
*/
- public AbstractMethodTypeListener( List<Class<? extends Annotation>> annotationTypes )
+ public AbstractMethodTypeListener( List<? extends Class<? extends Annotation>> annotationTypes )
{
this.annotationTypes = annotationTypes;
}
@@ -97,16 +97,6 @@ abstract class AbstractMethodTypeListene
}
/**
- * Returns the lifecycle annotation to search on methods.
- *
- * @return the lifecycle annotation to search on methods.
- */
- protected final List<Class<? extends Annotation>> getAnnotationTypes()
- {
- return annotationTypes;
- }
-
- /**
* Allows implementations to define the behavior when lifecycle annotation is found on the method.
*
* @param method encountered by this type handler.
Added: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractStageable.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractStageable.java?rev=1606430&view=auto
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractStageable.java (added)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/AbstractStageable.java Sun Jun 29 05:50:37 2014
@@ -0,0 +1,60 @@
+package org.apache.onami.lifecycle.core;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Base implementation for stageables.
+ *
+ * @author Mikhail Mazursky
+ */
+public abstract class AbstractStageable<S>
+ extends AbstractBasicStageable<S>
+{
+
+ protected AbstractStageable( S object )
+ {
+ super( object );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void stage( StageHandler stageHandler )
+ {
+ try
+ {
+ doStage();
+ }
+ catch ( Throwable e )
+ {
+ stageHandler.onError( object, e );
+ return;
+ }
+ stageHandler.onSuccess( object );
+ }
+
+ /**
+ * Does actual object staging.
+ *
+ * @throws Exception
+ */
+ protected abstract void doStage() throws Exception;
+}
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java Sun Jun 29 05:50:37 2014
@@ -39,9 +39,17 @@ public class DefaultStager<A extends Ann
/**
* @param stage the annotation that specifies this stage
+ */
+ public DefaultStager( Class<A> stage )
+ {
+ this( stage, Order.FIRST_IN_FIRST_OUT );
+ }
+
+ /**
+ * @param stage the annotation that specifies this stage
* @param mode execution order
*/
- protected DefaultStager( Class<A> stage, Order mode )
+ public DefaultStager( Class<A> stage, Order mode )
{
this.stage = stage;
@@ -69,29 +77,6 @@ public class DefaultStager<A extends Ann
}
/**
- * Allocate a new stager
- *
- * @param stage the stage annotation
- * @return stager
- */
- public static <A extends Annotation> Stager<A> newStager( Class<A> stage )
- {
- return newStager( stage, Order.FIRST_IN_FIRST_OUT );
- }
-
- /**
- * Allocate a new stager
- *
- * @param stage the stage annotation
- * @param mode execution order
- * @return stager
- */
- public static <A extends Annotation> Stager<A> newStager( Class<A> stage, Order mode )
- {
- return new DefaultStager<A>( stage, mode );
- }
-
- /**
* {@inheritDoc}
*/
public void register( Stageable stageable )
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleModule.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleModule.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleModule.java Sun Jun 29 05:50:37 2014
@@ -19,6 +19,7 @@ package org.apache.onami.lifecycle.core;
* under the License.
*/
+import com.google.inject.AbstractModule;
import com.google.inject.ProvisionException;
import com.google.inject.TypeLiteral;
import com.google.inject.matcher.Matcher;
@@ -30,68 +31,47 @@ import java.lang.reflect.InvocationTarge
import java.lang.reflect.Method;
import java.util.List;
+import static com.google.inject.matcher.Matchers.any;
import static java.lang.String.format;
+import static java.util.Arrays.asList;
/**
* Guice module to register methods to be invoked after injection is complete.
*/
-public final class LifeCycleModule
- extends AbstractLifeCycleModule
+public abstract class LifeCycleModule
+ extends AbstractModule
{
/**
- * Creates a new module which looks for the input lifecycle annotation on methods in any type.
+ * Binds lifecycle listener.
*
- * @param annotationType the lifecycle annotation to be searched.
+ * @param annotation the lifecycle annotation to be searched.
*/
- public <A extends Annotation> LifeCycleModule( Class<A> annotationType )
+ protected final void bindLifeCycle( Class<? extends Annotation> annotation )
{
- super( annotationType );
+ bindLifeCycle( annotation, any() );
}
/**
- * Creates a new module which looks for the input lifecycle annotation on methods
- * in types filtered by the input matcher.
+ * Binds lifecycle listener.
*
- * @param annotationType the lifecycle annotation to be searched.
- * @param typeMatcher the filter for injectee types.
+ * @param annotation the lifecycle annotation to be searched.
+ * @param typeMatcher the filter for injectee types.
*/
- public <A extends Annotation> LifeCycleModule( Class<A> annotationType,
- Matcher<? super TypeLiteral<?>> typeMatcher )
+ protected final void bindLifeCycle( Class<? extends Annotation> annotation, Matcher<? super TypeLiteral<?>> typeMatcher )
{
- super( annotationType, typeMatcher );
+ bindLifeCycle( asList( annotation ), typeMatcher );
}
/**
- * Creates a new module which looks for the input lifecycle annotations on methods in any type.
+ * Binds lifecycle listener.
*
- * @param annotationTypes the lifecycle annotations to be searched in the order to be searched.
+ * @param annotations the lifecycle annotations to be searched in the order to be searched.
+ * @param typeMatcher the filter for injectee types.
*/
- public LifeCycleModule( List<Class<? extends Annotation>> annotationTypes )
+ protected final void bindLifeCycle( List<? extends Class<? extends Annotation>> annotations, Matcher<? super TypeLiteral<?>> typeMatcher )
{
- super( annotationTypes );
- }
-
- /**
- * Creates a new module which looks for the input lifecycle annotations on methods
- * in types filtered by the input matcher.
- *
- * @param annotationTypes the lifecycle annotations to be searched in the order to be searched.
- * @param typeMatcher the filter for injectee types.
- */
- public LifeCycleModule( List<Class<? extends Annotation>> annotationTypes,
- Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- super( annotationTypes, typeMatcher );
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void configure()
- {
- bindListener( getTypeMatcher(), new AbstractMethodTypeListener( getAnnotationTypes() )
+ bindListener( typeMatcher, new AbstractMethodTypeListener( annotations )
{
@Override
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleStageModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleStageModule.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleStageModule.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/LifeCycleStageModule.java Sun Jun 29 05:50:37 2014
@@ -29,68 +29,22 @@ import com.google.inject.util.Types;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
+import java.util.ArrayList;
+import java.util.List;
import static com.google.inject.matcher.Matchers.any;
+import static java.util.Arrays.asList;
/**
* Guice module to register methods to be invoked when {@link Stager#stage()} is invoked.
* <p/>
* Module instance have has so it must not be used to construct more than one {@link com.google.inject.Injector}.
*/
-public final class LifeCycleStageModule<A extends Annotation>
- extends AbstractLifeCycleModule
+public abstract class LifeCycleStageModule
+ extends LifeCycleModule
{
- private final Stager<A> stager;
-
- private final StageableTypeMapper<A> typeMapper;
-
- /**
- * Creates a new module which register methods annotated with input annotation on methods in any type.
- *
- * @param stager the annotation that represents this stage and the methods with this annotation
- */
- public LifeCycleStageModule( Stager<A> stager )
- {
- this( stager, any() );
- }
-
- /**
- * Creates a new module which register methods annotated with input annotation on methods
- * in types filtered by the input matcher.
- *
- * @param stager the annotation that represents this stage and the methods with this annotation
- * @param typeMatcher the filter for injectee types.
- */
- public LifeCycleStageModule( Stager<A> stager, Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- super( stager.getStage(), typeMatcher );
- this.stager = stager;
- typeMapper = new NoOpStageableTypeMapper<A>();
- }
-
- /**
- * Creates a new module from the supplied {@link Builder}.
- *
- * @param builder settings container.
- */
- LifeCycleStageModule( Builder<A> builder )
- {
- super( builder.stager.getStage(), builder.typeMatcher );
- this.stager = builder.stager;
- this.typeMapper = builder.typeMapper;
- }
-
- /**
- * Allows one to create {@link LifeCycleStageModule} with builder pattern.
- *
- * @param stage the annotation that represents this stage and the methods with this annotation
- * @return builder for {@link LifeCycleStageModule}.
- */
- public static <A extends Annotation> Builder<A> builder( Class<A> stage )
- {
- return new Builder<A>( stage );
- }
+ private List<BindingBuilder<?>> bindings;
/**
* Convenience to generate the correct key for retrieving stagers from an injector.
@@ -122,11 +76,34 @@ public final class LifeCycleStageModule<
* {@inheritDoc}
*/
@Override
- protected void configure()
+ protected final void configure()
+ {
+ if ( bindings != null )
+ {
+ throw new IllegalStateException( "Re-entry is not allowed" );
+ }
+ bindings = new ArrayList<BindingBuilder<?>>();
+ try
+ {
+ configureBindings();
+ for ( BindingBuilder<?> binding : bindings )
+ {
+ bind( binding );
+ }
+ }
+ finally
+ {
+ bindings = null;
+ }
+ }
+
+ private <A extends Annotation> void bind( BindingBuilder<A> binding )
{
+ final Stager<A> stager = binding.stager;
+ final StageableTypeMapper typeMapper = binding.typeMapper;
bind( type( stager.getStage() ) ).toInstance( stager );
- bindListener( getTypeMatcher(), new AbstractMethodTypeListener( getAnnotationTypes() )
+ bindListener( binding.typeMatcher, new AbstractMethodTypeListener( asList( stager.getStage() ) )
{
@Override
@@ -150,78 +127,73 @@ public final class LifeCycleStageModule<
} );
}
+ protected abstract void configureBindings();
+
+ protected final <A extends Annotation> MapperBinding bindStager( Stager<A> stager )
+ {
+ BindingBuilder<A> builder = new BindingBuilder<A>( checkNotNull( stager, "Argument 'stager' must be not null" ) );
+ bindings.add( builder );
+ return builder;
+ }
+
+ protected interface MatcherBinding
+ {
+ /**
+ * Sets the filter for injectee types.
+ *
+ * @param typeMatcher the filter for injectee types.
+ */
+ void matching( Matcher<? super TypeLiteral<?>> typeMatcher );
+ }
+
+ protected interface MapperBinding extends MatcherBinding
+ {
+ /**
+ * Sets the container to register mappings from {@link Stageable}s to the types that created them.
+ *
+ * @param typeMapper container to map {@link Stageable}s to types.
+ */
+ MatcherBinding mappingWith( StageableTypeMapper typeMapper );
+ }
+
/**
* Builder pattern helper.
*/
- public static final class Builder<A extends Annotation>
+ private static class BindingBuilder<A extends Annotation> implements MapperBinding
{
private Matcher<? super TypeLiteral<?>> typeMatcher = any();
- private Stager<A> stager;
-
- private StageableTypeMapper<A> typeMapper = new NoOpStageableTypeMapper<A>();
+ private final Stager<A> stager;
- Builder( Class<A> annotationClass )
- {
- stager = new DefaultStager<A>( annotationClass, DefaultStager.Order.FIRST_IN_FIRST_OUT );
- }
+ private StageableTypeMapper typeMapper = new NoOpStageableTypeMapper();
- private static <T> T checkNotNull( T object, String message )
- {
- if ( object == null )
- {
- throw new IllegalArgumentException( message );
- }
- return object;
- }
-
- /**
- * Builds {@link LifeCycleStageModule} with given settings.
- *
- * @return {@link LifeCycleStageModule} with given settings.
- */
- public LifeCycleStageModule<A> build()
+ public BindingBuilder( Stager<A> stager )
{
- return new LifeCycleStageModule<A>( this );
+ this.stager = stager;
}
- /**
- * Sets the filter for injectee types.
- *
- * @param typeMatcher the filter for injectee types.
- * @return self
- */
- public Builder<A> withTypeMatcher( Matcher<? super TypeLiteral<?>> typeMatcher )
+ @Override
+ public MatcherBinding mappingWith( StageableTypeMapper typeMapper )
{
- this.typeMatcher = checkNotNull( typeMatcher, "Argument 'typeMatcher' must be not null." );
+ this.typeMapper = checkNotNull( typeMapper, "Argument 'typeMapper' must be not null." );
return this;
}
- /**
- * Sets the container to register disposable objects.
- *
- * @param stager container to register disposable objects.
- * @return self
- */
- public Builder<A> withStager( Stager<A> stager )
+ @Override
+ public void matching( Matcher<? super TypeLiteral<?>> typeMatcher )
{
- this.stager = checkNotNull( stager, "Argument 'stager' must be not null." );
- return this;
+ this.typeMatcher = checkNotNull( typeMatcher, "Argument 'typeMatcher' must be not null" );
}
- /**
- * Sets the container to register mappings from {@link Stageable}s to the types that created them.
- *
- * @param typeMapper container to map {@link Stageable}s to types
- * @return self
- */
- public Builder<A> withTypeMapper( StageableTypeMapper<A> typeMapper )
+ }
+
+ private static <T> T checkNotNull( T object, String message )
+ {
+ if ( object == null )
{
- this.typeMapper = checkNotNull( typeMapper, "Argument 'typeMapper' must be not null." );
- return this;
+ throw new IllegalArgumentException( message );
}
-
+ return object;
}
-
}
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/NoOpStageableTypeMapper.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/NoOpStageableTypeMapper.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/NoOpStageableTypeMapper.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/NoOpStageableTypeMapper.java Sun Jun 29 05:50:37 2014
@@ -21,10 +21,8 @@ package org.apache.onami.lifecycle.core;
import com.google.inject.TypeLiteral;
-import java.lang.annotation.Annotation;
-
-class NoOpStageableTypeMapper<A extends Annotation>
- implements StageableTypeMapper<A>
+class NoOpStageableTypeMapper
+ implements StageableTypeMapper
{
public <I> void registerType( Stageable stageable, TypeLiteral<I> parentType )
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/Stageable.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/Stageable.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/Stageable.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/Stageable.java Sun Jun 29 05:50:37 2014
@@ -33,4 +33,9 @@ public interface Stageable
*/
void stage( StageHandler stageHandler );
+ /**
+ * @return Description of a stageable resource.
+ */
+ @Override
+ String toString();
}
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableMethod.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableMethod.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableMethod.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableMethod.java Sun Jun 29 05:50:37 2014
@@ -27,7 +27,7 @@ import java.lang.reflect.Method;
* and related method to release resources.
*/
final class StageableMethod
- implements Stageable
+ extends AbstractBasicStageable<Object>
{
/**
@@ -36,11 +36,6 @@ final class StageableMethod
private final Method stageMethod;
/**
- * The target injectee has to stage the resources.
- */
- private final Object injectee;
-
- /**
* Creates a new {@link StageableMethod} reference.
*
* @param stageMethod the method to be invoked to stage resources.
@@ -48,32 +43,34 @@ final class StageableMethod
*/
StageableMethod( Method stageMethod, Object injectee )
{
+ super( injectee );
this.stageMethod = stageMethod;
- this.injectee = injectee;
}
/**
* {@inheritDoc}
*/
- public void stage( StageHandler stageHandler )
+ public final void stage( StageHandler stageHandler )
{
try
{
- stageMethod.invoke( injectee );
- stageHandler.onSuccess( injectee );
+ if ( !stageMethod.isAccessible() )
+ {
+ stageMethod.setAccessible( true );
+ }
+ stageMethod.invoke( object );
}
- catch ( IllegalArgumentException e )
- {
- stageHandler.onError( injectee, e );
- }
- catch ( IllegalAccessException e )
+ catch ( InvocationTargetException e )
{
- stageHandler.onError( injectee, e );
+ stageHandler.onError( object, e.getCause() );
+ return;
}
- catch ( InvocationTargetException e )
+ catch ( Throwable e )
{
- stageHandler.onError( injectee, e.getCause() );
+ stageHandler.onError( object, e );
+ return;
}
+ stageHandler.onSuccess( object );
}
-}
\ No newline at end of file
+}
Modified: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableTypeMapper.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableTypeMapper.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableTypeMapper.java (original)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/StageableTypeMapper.java Sun Jun 29 05:50:37 2014
@@ -21,13 +21,11 @@ package org.apache.onami.lifecycle.core;
import com.google.inject.TypeLiteral;
-import java.lang.annotation.Annotation;
-
/**
* Container for mapping a {@link Stageable} to the parent type
* that created it. Useful in specialty Stage containers.
*/
-public interface StageableTypeMapper<A extends Annotation>
+public interface StageableTypeMapper
{
/**
Modified: onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/DefaultStagerTestCase.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/DefaultStagerTestCase.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/DefaultStagerTestCase.java (original)
+++ onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/DefaultStagerTestCase.java Sun Jun 29 05:50:37 2014
@@ -31,7 +31,7 @@ public class DefaultStagerTestCase
public void stagerShouldStageObjectsRegisteredWhileStaging()
{
final Stager<TestAnnotationA> stager =
- DefaultStager.newStager( TestAnnotationA.class );
+ new DefaultStager<TestAnnotationA>( TestAnnotationA.class );
final AtomicBoolean staged = new AtomicBoolean();
stager.register( new Stageable()
{
@@ -63,7 +63,7 @@ public class DefaultStagerTestCase
{
final AtomicBoolean staged = new AtomicBoolean();
final Stager<TestAnnotationA> stager =
- DefaultStager.newStager( TestAnnotationA.class );
+ new DefaultStager<TestAnnotationA>( TestAnnotationA.class );
stager.register( new Stageable()
{
public void stage( StageHandler stageHandler )
Modified: onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/MultiLifeCycleTestCase.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/MultiLifeCycleTestCase.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/MultiLifeCycleTestCase.java (original)
+++ onami/trunk/lifecycle/core/src/test/java/org/apache/onami/lifecycle/core/MultiLifeCycleTestCase.java Sun Jun 29 05:50:37 2014
@@ -19,6 +19,9 @@ package org.apache.onami.lifecycle.core;
* under the License.
*/
+import static com.google.inject.matcher.Matchers.any;
+import static java.util.Arrays.asList;
+
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
@@ -27,14 +30,16 @@ import com.google.inject.Module;
import org.junit.Assert;
import org.junit.Test;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
public class MultiLifeCycleTestCase
{
@Test
public void testOrdering()
{
- LifeCycleModule lifeCycleModule = new LifeCycleModule(
- ListBuilder.builder().append( TestAnnotationA.class ).append( TestAnnotationB.class ).append(
- TestAnnotationC.class ).build() );
+ Module lifeCycleModule = new TestLifeCycleModule(
+ asList( TestAnnotationA.class, TestAnnotationB.class, TestAnnotationC.class ) );
MultiLifeCycleObject obj = Guice.createInjector( lifeCycleModule ).getInstance( MultiLifeCycleObject.class );
Assert.assertEquals( "aaabbbc", obj.toString() );
}
@@ -51,12 +56,12 @@ public class MultiLifeCycleTestCase
@Test
public void testStaging()
{
- LifeCycleStageModule<TestAnnotationA> moduleA =
- new LifeCycleStageModule<TestAnnotationA>( DefaultStager.newStager( TestAnnotationA.class ) );
- LifeCycleStageModule<TestAnnotationB> moduleB =
- new LifeCycleStageModule<TestAnnotationB>( DefaultStager.newStager( TestAnnotationB.class ) );
- LifeCycleStageModule<TestAnnotationC> moduleC =
- new LifeCycleStageModule<TestAnnotationC>( DefaultStager.newStager( TestAnnotationC.class ) );
+ Module moduleA =
+ new TestLifeCycleStageModule( new DefaultStager<TestAnnotationA>( TestAnnotationA.class ) );
+ Module moduleB =
+ new TestLifeCycleStageModule( new DefaultStager<TestAnnotationB>( TestAnnotationB.class ) );
+ Module moduleC =
+ new TestLifeCycleStageModule( new DefaultStager<TestAnnotationC>( TestAnnotationC.class ) );
Injector injector = Guice.createInjector( moduleA, moduleB, moduleC );
MultiLifeCycleObject obj = injector.getInstance( MultiLifeCycleObject.class );
@@ -76,10 +81,10 @@ public class MultiLifeCycleTestCase
@Test
public void testStagingOrdering()
{
- LifeCycleStageModule<TestAnnotationA> moduleA =
- new LifeCycleStageModule<TestAnnotationA>( DefaultStager.newStager( TestAnnotationA.class, DefaultStager.Order.FIRST_IN_FIRST_OUT ) );
- LifeCycleStageModule<TestAnnotationB> moduleB =
- new LifeCycleStageModule<TestAnnotationB>( DefaultStager.newStager( TestAnnotationB.class, DefaultStager.Order.FIRST_IN_LAST_OUT ) );
+ Module moduleA =
+ new TestLifeCycleStageModule( new DefaultStager<TestAnnotationA>( TestAnnotationA.class, DefaultStager.Order.FIRST_IN_FIRST_OUT ) );
+ Module moduleB =
+ new TestLifeCycleStageModule( new DefaultStager<TestAnnotationB>( TestAnnotationB.class, DefaultStager.Order.FIRST_IN_LAST_OUT ) );
final StringBuilder str = new StringBuilder();
Module m = new AbstractModule()
@@ -102,4 +107,38 @@ public class MultiLifeCycleTestCase
injector.getInstance( LifeCycleStageModule.key( TestAnnotationB.class ) ).stage();
Assert.assertEquals( "2b1b", str.toString() );
}
+
+ private static class TestLifeCycleModule extends LifeCycleModule
+ {
+
+ private final List<? extends Class<? extends Annotation>> annotations;
+
+ public TestLifeCycleModule( List<? extends Class<? extends Annotation>> annotations )
+ {
+ this.annotations = annotations;
+ }
+
+ @Override
+ protected void configure()
+ {
+ bindLifeCycle( annotations, any() );
+ }
+ }
+
+ private static class TestLifeCycleStageModule extends LifeCycleStageModule
+ {
+
+ private final Stager<?> stager;
+
+ public TestLifeCycleStageModule( Stager<?> stager )
+ {
+ this.stager = stager;
+ }
+
+ @Override
+ protected void configureBindings()
+ {
+ bindStager( stager );
+ }
+ }
}
Modified: onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/AfterInjectionModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/AfterInjectionModule.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/AfterInjectionModule.java (original)
+++ onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/AfterInjectionModule.java Sun Jun 29 05:50:37 2014
@@ -19,18 +19,19 @@ package org.apache.onami.lifecycle.stand
* under the License.
*/
-import com.google.inject.AbstractModule;
import org.apache.onami.lifecycle.core.LifeCycleModule;
/**
* Guice module to register methods to be invoked after injection is complete.
*/
public class AfterInjectionModule
- extends AbstractModule
+ extends LifeCycleModule
{
+
@Override
protected void configure()
{
- binder().install( new LifeCycleModule( AfterInjection.class ) );
+ bindLifeCycle( AfterInjection.class );
}
+
}
Modified: onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeModule.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeModule.java (original)
+++ onami/trunk/lifecycle/standard/src/main/java/org/apache/onami/lifecycle/standard/DisposeModule.java Sun Jun 29 05:50:37 2014
@@ -19,14 +19,9 @@ package org.apache.onami.lifecycle.stand
* under the License.
*/
-import com.google.inject.AbstractModule;
-import com.google.inject.TypeLiteral;
-import com.google.inject.matcher.Matcher;
+import org.apache.onami.lifecycle.core.DefaultStager;
import org.apache.onami.lifecycle.core.LifeCycleStageModule;
-
-import java.lang.annotation.Annotation;
-
-import static com.google.inject.matcher.Matchers.any;
+import org.apache.onami.lifecycle.core.Stager;
/**
* Guice module to register methods to be invoked when {@link org.apache.onami.lifecycle.core.Stager#stage()} is invoked.
@@ -34,145 +29,21 @@ import static com.google.inject.matcher.
* Module instance have state so it must not be used to construct more than one {@link com.google.inject.Injector}.
*/
public class DisposeModule
- extends AbstractModule
+ extends LifeCycleStageModule
{
- private final LifeCycleStageModule<?> lifeCycleStageModule;
-
- private final Disposer disposer;
-
- public DisposeModule()
- {
- disposer = new DefaultDisposer();
- lifeCycleStageModule = new LifeCycleStageModule<Dispose>( new StagerWrapper<Dispose>( disposer, Dispose.class ) );
- }
-
- /**
- * Creates a new module which register methods annotated with input annotation on methods
- * in types filtered by the input matcher.
- *
- * @param disposeAnnotationType the <i>Dispose</i> annotation to be searched.
- * @param typeMatcher the filter for injectee types.
- */
- public <A extends Annotation> DisposeModule( Class<A> disposeAnnotationType,
- Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- disposer = new DefaultDisposer();
- lifeCycleStageModule =
- LifeCycleStageModule.builder( disposeAnnotationType )
- .withTypeMatcher( typeMatcher )
- .withStager( new StagerWrapper<A>( disposer, disposeAnnotationType ) )
- .build();
- }
-
- protected DisposeModule( Builder builder )
- {
- disposer = builder.disposer;
- lifeCycleStageModule = buildModule( builder.disposer, builder.disposeAnnotationType,
- builder.typeMatcher );
- }
-
- // Wildcard capturing method. Bloch, item 28.
- private static <A extends Annotation> LifeCycleStageModule<A> buildModule( Disposer disposer,
- Class<A> stage, Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- StagerWrapper<A> wrapper = new StagerWrapper<A>( disposer, stage );
- return LifeCycleStageModule.builder( stage )
- .withStager( wrapper )
- .withTypeMatcher( typeMatcher )
- .build();
- }
- public static Builder builder()
- {
- return new Builder();
- }
+ private final Stager<Dispose> stager = new DefaultStager<Dispose>(
+ Dispose.class, DefaultStager.Order.FIRST_IN_LAST_OUT );
@Override
- protected void configure()
+ protected void configureBindings()
{
- bind( Disposer.class ).toInstance( disposer );
- install( lifeCycleStageModule );
+ bindStager( stager );
}
- /**
- * Builder pattern helper.
- *
- * @since 0.2.0
- */
- public static final class Builder
+ public Stager<Dispose> getStager()
{
-
- private Class<? extends Annotation> disposeAnnotationType = Dispose.class;
-
- private Matcher<? super TypeLiteral<?>> typeMatcher = any();
-
- private Disposer disposer = new DefaultDisposer();
-
- /**
- * Hidden constructor.
- */
- Builder()
- {
- }
-
- private static <T> T checkNotNull( T object, String message )
- {
- if ( object == null )
- {
- throw new IllegalArgumentException( message );
- }
- return object;
- }
-
- /**
- * Builds {@link org.apache.onami.lifecycle.standard.DisposeModule} with given settings.
- *
- * @return {@link org.apache.onami.lifecycle.standard.DisposeModule} with given settings.
- * @since 0.2.0
- */
- public DisposeModule build()
- {
- return new DisposeModule( this );
- }
-
- /**
- * Sets <i>Dispose</i> annotation to be searched.
- *
- * @param disposeAnnotationType <i>Dispose</i> annotation to be searched.
- * @return self
- * @since 0.2.0
- */
- public Builder withDisposeAnnotationType( Class<? extends Annotation> disposeAnnotationType )
- {
- this.disposeAnnotationType =
- checkNotNull( disposeAnnotationType, "Argument 'disposeAnnotationType' must be not null." );
- return this;
- }
-
- /**
- * Sets the filter for injectee types.
- *
- * @param typeMatcher the filter for injectee types.
- * @return self
- * @since 0.2.0
- */
- public Builder withTypeMatcher( Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- this.typeMatcher = checkNotNull( typeMatcher, "Argument 'typeMatcher' must be not null." );
- return this;
- }
-
- /**
- * Sets the container to register disposable objects.
- *
- * @param disposer container to register disposable objects.
- * @return self
- * @since 0.2.0
- */
- public Builder withDisposer( Disposer disposer )
- {
- this.disposer = checkNotNull( disposer, "Argument 'disposer' must be not null." );
- return this;
- }
+ return stager;
}
+
}
Modified: onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeModuleTestCase.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeModuleTestCase.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeModuleTestCase.java (original)
+++ onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeModuleTestCase.java Sun Jun 29 05:50:37 2014
@@ -22,6 +22,9 @@ package org.apache.onami.lifecycle.stand
import com.google.inject.AbstractModule;
import com.google.inject.CreationException;
import com.google.inject.Provides;
+import org.apache.onami.lifecycle.core.StageHandler;
+import org.apache.onami.lifecycle.core.Stageable;
+import org.apache.onami.lifecycle.core.Stager;
import org.junit.Test;
import java.util.concurrent.ExecutorService;
@@ -37,10 +40,10 @@ public final class DisposeModuleTestCase
@Test
public void disposeUsingModuleOnInjectorFailure()
{
- Disposer disposer = new DefaultDisposer();
+ DisposeModule disposeModule = new DisposeModule();
try
{
- createInjector( DisposeModule.builder().withDisposer( disposer ).build(), new AbstractModule()
+ createInjector( disposeModule, new AbstractModule()
{
@Override
@@ -60,7 +63,7 @@ public final class DisposeModuleTestCase
}
finally
{
- disposer.dispose( new DisposeHandler()
+ disposeModule.getStager().stage( new StageHandler()
{
public <I> void onSuccess( I injectee )
@@ -81,10 +84,10 @@ public final class DisposeModuleTestCase
@Test
public void disposeUsingModuleWithProvidesMethodOnInjectorFailure()
{
- Disposer disposer = new DefaultDisposer();
+ DisposeModule disposeModule = new DisposeModule();
try
{
- createInjector( DisposeModule.builder().withDisposer( disposer ).build(), new AbstractModule()
+ createInjector( disposeModule, new AbstractModule()
{
@Override
@@ -94,23 +97,23 @@ public final class DisposeModuleTestCase
}
@Provides
- public ExecutorService provideExecutorService( Disposer disposer )
+ public ExecutorService provideExecutorService( Stager<Dispose> stager )
{
final ExecutorService executorService = Executors.newCachedThreadPool();
- disposer.register( new Disposable()
+ stager.register( new Stageable()
{
- public void dispose( DisposeHandler disposeHandler )
+ public void stage( StageHandler stageHandler )
{
executorService.shutdown();
try
{
executorService.awaitTermination( 1, TimeUnit.MINUTES );
- disposeHandler.onSuccess( executorService );
+ stageHandler.onSuccess( executorService );
}
catch ( InterruptedException e )
{
- disposeHandler.onError( executorService, e );
+ stageHandler.onError( executorService, e );
}
}
@@ -129,7 +132,7 @@ public final class DisposeModuleTestCase
}
finally
{
- disposer.dispose( new DisposeHandler()
+ disposeModule.getStager().stage( new StageHandler()
{
public <I> void onSuccess( I injectee )
Modified: onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeTestCase.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeTestCase.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeTestCase.java (original)
+++ onami/trunk/lifecycle/standard/src/test/java/org/apache/onami/lifecycle/standard/DisposeTestCase.java Sun Jun 29 05:50:37 2014
@@ -3,6 +3,10 @@ package org.apache.onami.lifecycle.stand
import com.google.inject.AbstractModule;
import com.google.inject.ConfigurationException;
import com.google.inject.Inject;
+import com.google.inject.Key;
+import com.google.inject.TypeLiteral;
+import org.apache.onami.lifecycle.core.StageHandler;
+import org.apache.onami.lifecycle.core.Stager;
import org.junit.Before;
import org.junit.Test;
@@ -14,13 +18,13 @@ public final class DisposeTestCase
{
@Inject
- private Disposer disposer;
+ private Stager<Dispose> stager;
private boolean disposeInvoked = false;
- public void setDisposer( Disposer disposer )
+ public void setStager( Stager<Dispose> stager )
{
- this.disposer = disposer;
+ this.stager = stager;
}
@Dispose
@@ -40,7 +44,7 @@ public final class DisposeTestCase
@Test
public void disposeMethodInvoked()
{
- disposer.dispose();
+ stager.stage();
assertTrue( disposeInvoked );
}
@@ -62,7 +66,7 @@ public final class DisposeTestCase
bind( ThrowingExceptionDisposeMethod.class ).toInstance( new ThrowingExceptionDisposeMethod() );
}
- } ).getInstance( Disposer.class ).dispose( new DisposeHandler()
+ } ).getInstance( Key.get( new TypeLiteral<Stager<Dispose>>() {} ) ).stage( new StageHandler()
{
public <I> void onSuccess( I injectee )
Modified: onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUpModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUpModule.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUpModule.java (original)
+++ onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUpModule.java Sun Jun 29 05:50:37 2014
@@ -19,161 +19,23 @@ package org.apache.onami.lifecycle.warmu
* under the License.
*/
-import com.google.inject.AbstractModule;
-import com.google.inject.TypeLiteral;
-import com.google.inject.matcher.Matcher;
-import org.apache.onami.lifecycle.core.LifeCycleStageModule;
-import org.apache.onami.lifecycle.core.StageableTypeMapper;
-
-import java.lang.annotation.Annotation;
import java.util.concurrent.TimeUnit;
-import static com.google.inject.matcher.Matchers.any;
+import org.apache.onami.lifecycle.core.LifeCycleStageModule;
/**
* The module for preparing for warm ups.
*/
-public class WarmUpModule<A extends Annotation>
- extends AbstractModule
+public class WarmUpModule
+ extends LifeCycleStageModule
{
- private final LifeCycleStageModule<A> lifeCycleStageModule;
private static final long DEFAULT_WAIT_MS = TimeUnit.DAYS.toMillis( Integer.MAX_VALUE ); // essentially forever
- /**
- * Creates a new module which register methods annotated with input annotation on methods
- * in types filtered by the input matcher.
- *
- * @param stage the annotation to be searched.
- */
- public WarmUpModule( Class<A> stage )
- {
- this( stage, any() );
- }
-
- /**
- * Creates a new module which register methods annotated with input annotation on methods
- * in types filtered by the input matcher.
- *
- * @param stage the annotation to be searched.
- * @param typeMatcher the filter for injectee types.
- */
- public WarmUpModule( Class<A> stage, Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- WarmUper<A> stager = new WarmUper<A>( stage, DEFAULT_WAIT_MS );
- lifeCycleStageModule =
- LifeCycleStageModule.builder( stage ).withTypeMatcher( typeMatcher ).withStager( stager ).withTypeMapper(
- stager ).build();
- }
-
- /**
- * Return a new standard warm up module
- *
- * @return warm up module
- */
- public static WarmUpModule<WarmUp> newWarmUpModule()
- {
- return new WarmUpModule<WarmUp>( WarmUp.class );
- }
-
- /**
- * Return a new standard warm up module
- *
- * @param typeMatcher the filter for injectee types.
- * @return warm up module
- */
- public static WarmUpModule<WarmUp> newWarmUpModule( Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- return new WarmUpModule<WarmUp>( WarmUp.class, typeMatcher );
- }
-
- /**
- * Allows one to create WarmUpModule with builder pattern.
- *
- * @return builder for WarmUpModule.
- */
- public static Builder<WarmUp> builder()
- {
- WarmUper<WarmUp> stager = new WarmUper<WarmUp>( WarmUp.class, DEFAULT_WAIT_MS );
- return new Builder<WarmUp>( WarmUp.class, stager ).withTypeMapper( stager );
- }
-
- /**
- * Allows one to create WarmUpModule with builder pattern.
- *
- * @param stage the annotation to be searched.
- * @return builder for WarmUpModule.
- */
- public static <A extends Annotation> Builder<A> builder( Class<A> stage )
- {
- WarmUper<A> stager = new WarmUper<A>( stage, DEFAULT_WAIT_MS );
- return new Builder<A>( stage, stager ).withTypeMapper( stager );
- }
-
@Override
- protected void configure()
- {
- install( lifeCycleStageModule );
- }
-
- public static class Builder<A extends Annotation>
+ protected void configureBindings()
{
- private final WarmUper<A> stager;
-
- private LifeCycleStageModule.Builder<A> internalBuilder;
-
- Builder( Class<A> annotationClass, WarmUper<A> stager )
- {
- this.stager = stager;
- internalBuilder = LifeCycleStageModule.builder( annotationClass ).withStager( stager );
- }
-
- /**
- * Builds {@link LifeCycleStageModule} with given settings.
- *
- * @return {@link LifeCycleStageModule} with given settings.
- */
- public LifeCycleStageModule<A> build()
- {
- return internalBuilder.build();
- }
-
- /**
- * Sets the filter for injectee types.
- *
- * @param typeMatcher the filter for injectee types.
- * @return self
- */
- public Builder<A> withTypeMatcher( Matcher<? super TypeLiteral<?>> typeMatcher )
- {
- internalBuilder.withTypeMatcher( typeMatcher );
- return this;
- }
-
- /**
- * Sets the container to register mappings from {@link org.apache.onami.lifecycle.core.Stageable}s to the types that created them.
- *
- * @param typeMapper container to map {@link org.apache.onami.lifecycle.core.Stageable}s to types
- * @return self
- */
- public Builder<A> withTypeMapper( StageableTypeMapper<A> typeMapper )
- {
- internalBuilder.withTypeMapper( typeMapper );
- return this;
- }
-
- /**
- * When the warm up is staged, it will wait until this maximum time for warm ups to finish.
- * The default is to wait forever
- *
- * @param maxWait max time to wait
- * @param unit time unit
- * @return self
- */
- public Builder<A> withMaxWait( long maxWait, TimeUnit unit )
- {
- stager.setMaxWait( maxWait, unit );
- return this;
- }
+ WarmUper<WarmUp> stager = new WarmUper<WarmUp>( WarmUp.class, DEFAULT_WAIT_MS );
+ bindStager( stager ).mappingWith( stager );
}
}
Modified: onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUper.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUper.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUper.java (original)
+++ onami/trunk/lifecycle/warmup/src/main/java/org/apache/onami/lifecycle/warmup/WarmUper.java Sun Jun 29 05:50:37 2014
@@ -42,7 +42,7 @@ import java.util.concurrent.TimeoutExcep
* <strong>must</strong> use WarmUper.
*/
public class WarmUper<A extends Annotation>
- implements Stager<A>, StageableTypeMapper<A>
+ implements Stager<A>, StageableTypeMapper
{
private final ConcurrentMap<TypeLiteral<?>, Set<Stageable>> reverseLookup =
new ConcurrentHashMap<TypeLiteral<?>, Set<Stageable>>();
Modified: onami/trunk/lifecycle/warmup/src/test/java/org/apachi/onami/lifecycle/warmup/TestWarmUpManager.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/warmup/src/test/java/org/apachi/onami/lifecycle/warmup/TestWarmUpManager.java?rev=1606430&r1=1606429&r2=1606430&view=diff
==============================================================================
--- onami/trunk/lifecycle/warmup/src/test/java/org/apachi/onami/lifecycle/warmup/TestWarmUpManager.java (original)
+++ onami/trunk/lifecycle/warmup/src/test/java/org/apachi/onami/lifecycle/warmup/TestWarmUpManager.java Sun Jun 29 05:50:37 2014
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
@@ -36,6 +35,7 @@ import org.apache.onami.lifecycle.core.S
import org.apache.onami.lifecycle.core.Stager;
import org.apache.onami.lifecycle.warmup.WarmUp;
import org.apache.onami.lifecycle.warmup.WarmUpModule;
+import org.apache.onami.lifecycle.warmup.WarmUper;
import org.junit.Test;
import com.google.inject.AbstractModule;
@@ -59,7 +59,7 @@ public class TestWarmUpManager
bind( WarmUpWithException.class ).asEagerSingleton();
}
};
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule(), module );
+ Injector injector = Guice.createInjector( new WarmUpModule(), module );
final AtomicInteger errorCount = new AtomicInteger( 0 );
StageHandler stageHandler = new StageHandler()
@@ -89,7 +89,7 @@ public class TestWarmUpManager
bind( CountDownLatch.class ).toInstance( new CountDownLatch( 3 ) );
}
};
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule(), module );
+ Injector injector = Guice.createInjector( new WarmUpModule(), module );
injector.getInstance( Dag1.A.class );
injector.getInstance( LifeCycleStageModule.key( WarmUp.class ) ).stage();
Recorder recorder = injector.getInstance( Recorder.class );
@@ -110,7 +110,7 @@ public class TestWarmUpManager
public void testDag2()
throws Exception
{
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule() );
+ Injector injector = Guice.createInjector( new WarmUpModule() );
injector.getInstance( Dag2.A1.class );
injector.getInstance( Dag2.A2.class );
injector.getInstance( Dag2.A3.class );
@@ -154,7 +154,7 @@ public class TestWarmUpManager
public void testDag3()
throws Exception
{
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule() );
+ Injector injector = Guice.createInjector( new WarmUpModule() );
injector.getInstance( Dag3.A.class );
injector.getInstance( LifeCycleStageModule.key( WarmUp.class ) ).stage();
Recorder recorder = injector.getInstance( Recorder.class );
@@ -191,7 +191,7 @@ public class TestWarmUpManager
bind( RecorderSleepSettings.class ).toInstance( recorderSleepSettings );
}
};
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule(), module );
+ Injector injector = Guice.createInjector( new WarmUpModule(), module );
injector.getInstance( Dag4.A.class );
injector.getInstance( LifeCycleStageModule.key( WarmUp.class ) ).stage();
Recorder recorder = injector.getInstance( Recorder.class );
@@ -211,7 +211,7 @@ public class TestWarmUpManager
public void testFlat()
throws Exception
{
- Injector injector = Guice.createInjector( WarmUpModule.newWarmUpModule() );
+ Injector injector = Guice.createInjector( new WarmUpModule() );
Recorder recorder = injector.getInstance( Recorder.class );
injector.getInstance( Flat.A.class ).recorder = recorder;
injector.getInstance( Flat.B.class ).recorder = recorder;
@@ -242,8 +242,7 @@ public class TestWarmUpManager
bind( CountDownLatch.class ).toInstance( latch );
}
};
- LifeCycleStageModule<WarmUp> warmUpModule = WarmUpModule.builder().withMaxWait( 1, TimeUnit.SECONDS ).build();
- Injector injector = Guice.createInjector( warmUpModule, module );
+ Injector injector = Guice.createInjector( new TestWarmUpModule(), module );
injector.getInstance( Dag1.A.class );
Stager<WarmUp> stager = injector.getInstance( LifeCycleStageModule.key( WarmUp.class ) );
@@ -306,4 +305,16 @@ public class TestWarmUpManager
}
}
+ private static class TestWarmUpModule extends LifeCycleStageModule
+ {
+
+ @Override
+ protected void configureBindings()
+ {
+ WarmUper<WarmUp> stager = new WarmUper<WarmUp>( WarmUp.class, TimeUnit.SECONDS.toMillis( 1 ) );
+ bindStager( stager ).mappingWith( stager );
+ }
+
+ }
+
}