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