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() );
}
} );