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 08:25:49 UTC

svn commit: r1606432 - in /onami/trunk/lifecycle: core/src/main/java/org/apache/onami/lifecycle/core/ jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/ standard/src/main/java/org/apache/onami/lifecycle/standard/ standard/src/test/java/org/apache/...

Author: ash2k
Date: Sun Jun 29 06:25:49 2014
New Revision: 1606432

URL: http://svn.apache.org/r1606432
Log:
ONAMI-102 Extend disposing capabilities

Added:
    onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DisposingStager.java
Modified:
    onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DefaultStager.java
    onami/trunk/lifecycle/jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/PreDestroyModule.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

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=1606432&r1=1606431&r2=1606432&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 06:25:49 2014
@@ -19,16 +19,19 @@ package org.apache.onami.lifecycle.core;
  * under the License.
  */
 
+import java.io.Closeable;
 import java.lang.annotation.Annotation;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Queue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Default {@link Stager} implementation.
  */
 public class DefaultStager<A extends Annotation>
-    implements Stager<A>
+    implements DisposingStager<A>
 {
     private final Class<A> stage;
 
@@ -90,6 +93,26 @@ public class DefaultStager<A extends Ann
     /**
      * {@inheritDoc}
      */
+    @Override
+    public <T extends ExecutorService> T register( T executorService )
+    {
+        register( new ExecutorServiceStageable( executorService ) );
+        return executorService;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <T extends Closeable> T register( T closeable )
+    {
+        register( new CloseableStageable( closeable ) );
+        return closeable;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public void stage()
     {
         stage( null );
@@ -144,4 +167,48 @@ public class DefaultStager<A extends Ann
         FIRST_IN_LAST_OUT
     }
 
+    private static class CloseableStageable extends AbstractStageable<Closeable>
+    {
+
+        public CloseableStageable( Closeable closeable )
+        {
+            super( closeable );
+        }
+
+        @Override
+        protected void doStage() throws Exception
+        {
+            object.close();
+        }
+
+    }
+
+    private static class ExecutorServiceStageable extends AbstractStageable<ExecutorService>
+    {
+
+        public ExecutorServiceStageable( ExecutorService executor )
+        {
+            super( executor );
+        }
+
+        @Override
+        protected void doStage() throws Exception
+        {
+            object.shutdown();
+            try
+            {
+                if ( !object.awaitTermination( 1, TimeUnit.MINUTES ) )
+                {
+                    object.shutdownNow();
+                }
+            }
+            catch ( InterruptedException e )
+            {
+                object.shutdownNow();
+                Thread.currentThread().interrupt();
+            }
+        }
+
+    }
+
 }

Added: onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DisposingStager.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DisposingStager.java?rev=1606432&view=auto
==============================================================================
--- onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DisposingStager.java (added)
+++ onami/trunk/lifecycle/core/src/main/java/org/apache/onami/lifecycle/core/DisposingStager.java Sun Jun 29 06:25:49 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.
+ */
+
+import java.io.Closeable;
+import java.lang.annotation.Annotation;
+import java.util.concurrent.ExecutorService;
+
+/**
+ * {@link org.apache.onami.lifecycle.core.Stager} that disposes resources.
+ *
+ * @author Mikhail Mazursky
+ */
+public interface DisposingStager<A extends Annotation> extends Stager<A>
+{
+
+    /**
+     * Register an {@link java.util.concurrent.ExecutorService} to be staged.
+     *
+     * @param executorService object to be staged to dispose resources.
+     * @return Staged object
+     */
+    <T extends ExecutorService> T register( T executorService );
+
+    /**
+     * Register a {@link java.io.Closeable} to be staged.
+     *
+     * @param closeable object to be staged to dispose resources.
+     * @return Staged object
+     */
+    <T extends Closeable> T register( T closeable );
+
+}

Modified: onami/trunk/lifecycle/jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/PreDestroyModule.java
URL: http://svn.apache.org/viewvc/onami/trunk/lifecycle/jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/PreDestroyModule.java?rev=1606432&r1=1606431&r2=1606432&view=diff
==============================================================================
--- onami/trunk/lifecycle/jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/PreDestroyModule.java (original)
+++ onami/trunk/lifecycle/jsr250/src/main/java/org/apache/onami/lifecycle/jsr250/PreDestroyModule.java Sun Jun 29 06:25:49 2014
@@ -19,9 +19,10 @@ package org.apache.onami.lifecycle.jsr25
  * under the License.
  */
 
+import com.google.inject.TypeLiteral;
 import org.apache.onami.lifecycle.core.DefaultStager;
+import org.apache.onami.lifecycle.core.DisposingStager;
 import org.apache.onami.lifecycle.core.LifeCycleStageModule;
-import org.apache.onami.lifecycle.core.Stager;
 
 import javax.annotation.PreDestroy;
 
@@ -36,16 +37,17 @@ public class PreDestroyModule
     extends LifeCycleStageModule
 {
 
-    private final Stager<PreDestroy> stager = new DefaultStager<PreDestroy>(
+    private final DisposingStager<PreDestroy> stager = new DefaultStager<PreDestroy>(
         PreDestroy.class, DefaultStager.Order.FIRST_IN_LAST_OUT );
 
     @Override
     protected void configureBindings()
     {
         bindStager( stager );
+        bind( new TypeLiteral<DisposingStager<PreDestroy>>() {} ).toInstance( stager );
     }
 
-    public Stager<PreDestroy> getStager()
+    public DisposingStager<PreDestroy> getStager()
     {
         return stager;
     }

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=1606432&r1=1606431&r2=1606432&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 06:25:49 2014
@@ -19,9 +19,10 @@ package org.apache.onami.lifecycle.stand
  * under the License.
  */
 
+import com.google.inject.TypeLiteral;
 import org.apache.onami.lifecycle.core.DefaultStager;
+import org.apache.onami.lifecycle.core.DisposingStager;
 import org.apache.onami.lifecycle.core.LifeCycleStageModule;
-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.
@@ -32,16 +33,17 @@ public class DisposeModule
     extends LifeCycleStageModule
 {
 
-    private final Stager<Dispose> stager = new DefaultStager<Dispose>(
+    private final DisposingStager<Dispose> stager = new DefaultStager<Dispose>(
         Dispose.class, DefaultStager.Order.FIRST_IN_LAST_OUT );
 
     @Override
     protected void configureBindings()
     {
         bindStager( stager );
+        bind( new TypeLiteral<DisposingStager<Dispose>>() {} ).toInstance( stager );
     }
 
-    public Stager<Dispose> getStager()
+    public DisposingStager<Dispose> getStager()
     {
         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=1606432&r1=1606431&r2=1606432&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 06:25:49 2014
@@ -22,6 +22,7 @@ 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.DisposingStager;
 import org.apache.onami.lifecycle.core.StageHandler;
 import org.apache.onami.lifecycle.core.Stageable;
 import org.apache.onami.lifecycle.core.Stager;
@@ -97,28 +98,9 @@ public final class DisposeModuleTestCase
                 }
 
                 @Provides
-                public ExecutorService provideExecutorService( Stager<Dispose> stager )
+                public ExecutorService provideExecutorService( DisposingStager<Dispose> stager )
                 {
-                    final ExecutorService executorService = Executors.newCachedThreadPool();
-                    stager.register( new Stageable()
-                    {
-
-                        public void stage( StageHandler stageHandler )
-                        {
-                            executorService.shutdown();
-                            try
-                            {
-                                executorService.awaitTermination( 1, TimeUnit.MINUTES );
-                                stageHandler.onSuccess( executorService );
-                            }
-                            catch ( InterruptedException e )
-                            {
-                                stageHandler.onError( executorService, e );
-                            }
-                        }
-
-                    });
-                    return executorService;
+                    return stager.register( Executors.newCachedThreadPool() );
                 }
 
             } );