You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/05/24 20:12:19 UTC

svn commit: r1597333 - in /tomee/tomee/trunk/container: openejb-api/src/main/java/org/apache/openejb/api/ openejb-concurrency-utilities-ee/ openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ openejb-concu...

Author: rmannibucau
Date: Sat May 24 18:12:18 2014
New Revision: 1597333

URL: http://svn.apache.org/r1597333
Log:
forbidding to call shutdown methods on ManagedExecutorService

Added:
    tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/CloseableResource.java
      - copied, changed from r1597315, tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/LocalClient.java
Modified:
    tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/pom.xml
    tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedExecutorServiceImplFactory.java
    tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedScheduledExecutorServiceImplFactory.java
    tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedExecutorServiceImpl.java
    tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedScheduledExecutorServiceImpl.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java

Copied: tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/CloseableResource.java (from r1597315, tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/LocalClient.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/CloseableResource.java?p2=tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/CloseableResource.java&p1=tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/LocalClient.java&r1=1597315&r2=1597333&rev=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/LocalClient.java (original)
+++ tomee/tomee/trunk/container/openejb-api/src/main/java/org/apache/openejb/api/CloseableResource.java Sat May 24 18:12:18 2014
@@ -16,12 +16,12 @@
  */
 package org.apache.openejb.api;
 
-import java.lang.annotation.Target;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
-public @interface LocalClient {
+public @interface CloseableResource {
 }

Modified: tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/pom.xml?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/pom.xml (original)
+++ tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/pom.xml Sat May 24 18:12:18 2014
@@ -32,6 +32,11 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
       <artifactId>openejb-core</artifactId>
       <version>${project.version}</version>
     </dependency>

Modified: tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedExecutorServiceImplFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedExecutorServiceImplFactory.java?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedExecutorServiceImplFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedExecutorServiceImplFactory.java Sat May 24 18:12:18 2014
@@ -36,10 +36,9 @@ public class ManagedExecutorServiceImplF
     private Duration keepAlive = new Duration("5 second");
     private int queue = 15;
     private String threadFactory;
-    private Duration waitAtShutdown = new Duration("30 seconds");
 
     public ManagedExecutorServiceImpl create() {
-        return new ManagedExecutorServiceImpl(createExecutorService(), waitAtShutdown);
+        return new ManagedExecutorServiceImpl(createExecutorService());
     }
 
     private ExecutorService createExecutorService() {
@@ -80,8 +79,4 @@ public class ManagedExecutorServiceImplF
     public void setThreadFactory(final String threadFactory) {
         this.threadFactory = threadFactory;
     }
-
-    public void setWaitAtShutdown(final Duration waitAtShutdown) {
-        this.waitAtShutdown = waitAtShutdown;
-    }
 }

Modified: tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedScheduledExecutorServiceImplFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedScheduledExecutorServiceImplFactory.java?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedScheduledExecutorServiceImplFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/factory/ManagedScheduledExecutorServiceImplFactory.java Sat May 24 18:12:18 2014
@@ -30,10 +30,9 @@ import java.util.concurrent.ScheduledThr
 public class ManagedScheduledExecutorServiceImplFactory {
     private int core = 5;
     private String threadFactory = ManagedThreadFactoryImpl.class.getName();
-    private Duration waitAtShutdown = new Duration("30 seconds");
 
     public ManagedScheduledExecutorServiceImpl create() {
-        return new ManagedScheduledExecutorServiceImpl(createScheduledExecutorService(), waitAtShutdown);
+        return new ManagedScheduledExecutorServiceImpl(createScheduledExecutorService());
     }
 
     private ScheduledExecutorService createScheduledExecutorService() {
@@ -55,8 +54,4 @@ public class ManagedScheduledExecutorSer
     public void setThreadFactory(final String threadFactory) {
         this.threadFactory = threadFactory;
     }
-
-    public void setWaitAtShutdown(final Duration waitAtShutdown) {
-        this.waitAtShutdown = waitAtShutdown;
-    }
 }

Modified: tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedExecutorServiceImpl.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedExecutorServiceImpl.java?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedExecutorServiceImpl.java (original)
+++ tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedExecutorServiceImpl.java Sat May 24 18:12:18 2014
@@ -16,12 +16,16 @@
  */
 package org.apache.openejb.concurrencyutilities.ee.impl;
 
+import org.apache.openejb.api.CloseableResource;
 import org.apache.openejb.concurrencyutilities.ee.future.CUFuture;
 import org.apache.openejb.concurrencyutilities.ee.task.CUCallable;
 import org.apache.openejb.concurrencyutilities.ee.task.CURunnable;
-import org.apache.openejb.util.Duration;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 import javax.enterprise.concurrent.ManagedExecutorService;
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.AbstractExecutorService;
 import java.util.concurrent.Callable;
@@ -29,28 +33,24 @@ import java.util.concurrent.ExecutorServ
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-public class ManagedExecutorServiceImpl extends AbstractExecutorService implements ManagedExecutorService {
+@CloseableResource
+public class ManagedExecutorServiceImpl extends AbstractExecutorService implements ManagedExecutorService, Closeable {
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, ManagedExecutorServiceImpl.class);
+
     private final ExecutorService delegate;
-    private final Duration waitAtShutdown;
 
-    public ManagedExecutorServiceImpl(final ExecutorService delegate, final Duration waitAtShutdown) {
+    public ManagedExecutorServiceImpl(final ExecutorService delegate) {
         this.delegate = delegate;
-        this.waitAtShutdown = waitAtShutdown;
     }
 
     @Override
     public void shutdown() {
-        delegate.shutdown();
-        try { // wait a bit to let task a chance to be done
-            delegate.awaitTermination(waitAtShutdown.getTime(), waitAtShutdown.getUnit());
-        } catch (final InterruptedException e) {
-            // no-op
-        }
+        throw new IllegalStateException("You can't call shutdown");
     }
 
     @Override
     public List<Runnable> shutdownNow() {
-        return delegate.shutdownNow();
+        throw new IllegalStateException("You can't call shutdownNow");
     }
 
     @Override
@@ -102,4 +102,20 @@ public class ManagedExecutorServiceImpl 
     public ExecutorService getDelegate() {
         return delegate;
     }
+
+    @Override
+    public void close() throws IOException {
+        final List<Runnable> runnables = delegate.shutdownNow();
+        if (runnables.size() > 0) {
+            LOGGER.warning(runnables.size() + " tasks to execute");
+            for (final Runnable runnable : runnables) {
+                try {
+                    LOGGER.info("Executing " + runnable);
+                    runnable.run();
+                } catch (final Throwable th) {
+                    LOGGER.error(th.getMessage(), th);
+                }
+            }
+        }
+    }
 }

Modified: tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedScheduledExecutorServiceImpl.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedScheduledExecutorServiceImpl.java?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedScheduledExecutorServiceImpl.java (original)
+++ tomee/tomee/trunk/container/openejb-concurrency-utilities-ee/src/main/java/org/apache/openejb/concurrencyutilities/ee/impl/ManagedScheduledExecutorServiceImpl.java Sat May 24 18:12:18 2014
@@ -16,13 +16,13 @@
  */
 package org.apache.openejb.concurrencyutilities.ee.impl;
 
+import org.apache.openejb.api.CloseableResource;
 import org.apache.openejb.concurrencyutilities.ee.future.CUScheduleFuture;
 import org.apache.openejb.concurrencyutilities.ee.task.CUCallable;
 import org.apache.openejb.concurrencyutilities.ee.task.CURunnable;
 import org.apache.openejb.concurrencyutilities.ee.task.TriggerCallable;
 import org.apache.openejb.concurrencyutilities.ee.task.TriggerRunnable;
 import org.apache.openejb.concurrencyutilities.ee.task.TriggerTask;
-import org.apache.openejb.util.Duration;
 
 import javax.enterprise.concurrent.ManagedScheduledExecutorService;
 import javax.enterprise.concurrent.ManagedTask;
@@ -38,11 +38,12 @@ import java.util.concurrent.ScheduledFut
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
+@CloseableResource
 public class ManagedScheduledExecutorServiceImpl extends ManagedExecutorServiceImpl implements ManagedScheduledExecutorService {
     private final ScheduledExecutorService delegate;
 
-    public ManagedScheduledExecutorServiceImpl(final ScheduledExecutorService delegate, final Duration waitAtShutdown) {
-        super(delegate, waitAtShutdown);
+    public ManagedScheduledExecutorServiceImpl(final ScheduledExecutorService delegate) {
+        super(delegate);
         this.delegate = delegate;
     }
 

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1597333&r1=1597332&r2=1597333&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Sat May 24 18:12:18 2014
@@ -18,6 +18,7 @@
 package org.apache.openejb.assembler.classic;
 
 import java.io.ByteArrayInputStream;
+import java.io.Closeable;
 import java.io.Externalizable;
 import java.io.File;
 import java.io.IOException;
@@ -105,6 +106,7 @@ import org.apache.openejb.OpenEJB;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.UndeployException;
+import org.apache.openejb.api.CloseableResource;
 import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated;
 import org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
 import org.apache.openejb.assembler.classic.event.AssemblerCreated;
@@ -1480,8 +1482,12 @@ public class Assembler extends Assembler
             } catch (final Exception e) {
                 logger.debug("Not processing resource on destroy: " + className, e);
             }
-        } else if (ExecutorService.class.isInstance(object)) {
-            ExecutorService.class.cast(object).shutdown();
+        } else if (ExecutorService.class.isInstance(object) && object.getClass().getAnnotation(CloseableResource.class) != null) {
+            try {
+                Closeable.class.cast(object).close();
+            } catch (final IOException e) {
+                logger.error(e.getMessage(), e);
+            }
         } else if (logger.isDebugEnabled() && !DataSource.class.isInstance(object)) {
             logger.debug("Not processing resource on destroy: " + className);
         }