Author: rmannibucau
Date: Mon Feb 17 07:24:12 2014
New Revision: 1568885
URL: http://svn.apache.org/r1568885
Log:
we already had this issue but seems it was not fixed, using daemonthreadfactory
everywhere in multicast + little refactory of our custom pool in servicepool
Modified:
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MulticastPulseAgent.java
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MultipointServer.java
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
Modified:
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MulticastPulseAgent.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MulticastPulseAgent.java?rev=1568885&r1=1568884&r2=1568885&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MulticastPulseAgent.java
(original)
+++
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MulticastPulseAgent.java
Mon Feb 17 07:24:12 2014
@@ -6,6 +6,7 @@ import org.apache.openejb.server.Discove
import org.apache.openejb.server.SelfManaging;
import org.apache.openejb.server.ServerService;
import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.util.DaemonThreadFactory;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OptionsLog;
@@ -122,7 +123,7 @@ public class MulticastPulseAgent impleme
length = 1;
}
- executor = Executors.newFixedThreadPool(length * 3);
+ executor = Executors.newFixedThreadPool(length * 3, new
DaemonThreadFactory("multicast-pulse-agent-"));
}
return executor;
Modified:
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MultipointServer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MultipointServer.java?rev=1568885&r1=1568884&r2=1568885&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MultipointServer.java
(original)
+++
tomee/tomee/trunk/server/openejb-multicast/src/main/java/org/apache/openejb/server/discovery/MultipointServer.java
Mon Feb 17 07:24:12 2014
@@ -19,6 +19,7 @@ package org.apache.openejb.server.discov
import org.apache.openejb.monitoring.Event;
import org.apache.openejb.monitoring.Managed;
import org.apache.openejb.server.ServerRuntimeException;
+import org.apache.openejb.util.DaemonThreadFactory;
import org.apache.openejb.util.Duration;
import org.apache.openejb.util.Join;
import org.apache.openejb.util.LogCategory;
@@ -1213,7 +1214,7 @@ public class MultipointServer {
return colors[(int) index];
}
- private final Executor dnsResolutionQueue =
Executors.newFixedThreadPool(2);
+ private final Executor dnsResolutionQueue =
Executors.newFixedThreadPool(2, new DaemonThreadFactory("multipoint-server-"));
private class Host {
Modified:
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java?rev=1568885&r1=1568884&r2=1568885&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
(original)
+++
tomee/tomee/trunk/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
Mon Feb 17 07:24:12 2014
@@ -92,71 +92,69 @@ public class ServicePool extends ServerS
is true then a final attempt is made to run the runnable in the
current thread (the service thread).
*/
- threadPool = new ThreadPoolExecutor(threadCore, threads,
keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(queue));
- threadPool.setThreadFactory(new ThreadFactory() {
-
- private final AtomicInteger i = new AtomicInteger(0);
-
- @Override
- public Thread newThread(final Runnable r) {
- final Thread t = new Thread(r, "OpenEJB." +
ServicePool.this.getName() + "." + i.incrementAndGet());
- t.setDaemon(true);
- t.setUncaughtExceptionHandler(new
Thread.UncaughtExceptionHandler() {
- @Override
- public void uncaughtException(final Thread t, final
Throwable e) {
- log.error("ServicePool '" + ServicePool.this.getName()
+ "': Uncaught error in: " + t.getName(), e);
- }
- });
-
- return t;
- }
-
- });
-
final int c = threadCore;
final int t = threads;
final int q = queue;
- threadPool.setRejectedExecutionHandler(new RejectedExecutionHandler() {
- @Override
- public void rejectedExecution(final Runnable r, final
ThreadPoolExecutor tpe) {
+ threadPool = new ThreadPoolExecutor(threadCore, threads,
keepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(queue),
+ new ThreadFactory() {
+ private final AtomicInteger i = new AtomicInteger(0);
- if (null == r || null == tpe || tpe.isShutdown() ||
tpe.isTerminated() || tpe.isTerminating()) {
- return;
- }
+ @Override
+ public Thread newThread(final Runnable r) {
+ final Thread t = new Thread(r, "OpenEJB." +
ServicePool.this.getName() + "." + i.incrementAndGet());
+ t.setDaemon(true);
+ t.setUncaughtExceptionHandler(new
Thread.UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(final Thread t,
final Throwable e) {
+ log.error("ServicePool '" +
ServicePool.this.getName() + "': Uncaught error in: " + t.getName(), e);
+ }
+ });
- if (log.isWarningEnabled()) {
- log.warning(String.format("ServicePool '" +
ServicePool.this.getName() + "' with (%1$s) threads is at capicity (%2$s) for
queue (%3$s) on process: %4$s"
- + "\nConsider increasing the
'threadCore','threads' and 'queue' size properties.", c, t, q, r));
- }
+ return t;
+ }
- boolean offer = false;
- try {
- offer = tpe.getQueue().offer(r, 10, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- //Ignore
- }
+ },
+ new RejectedExecutionHandler() {
+ @Override
+ public void rejectedExecution(final Runnable r, final
ThreadPoolExecutor tpe) {
- if (!offer) {
+ if (null == r || null == tpe || tpe.isShutdown() ||
tpe.isTerminated() || tpe.isTerminating()) {
+ return;
+ }
- if (block) {
+ if (log.isWarningEnabled()) {
+ log.warning(String.format("ServicePool '" +
ServicePool.this.getName() + "' with (%1$s) threads is at capicity (%2$s) for
queue (%3$s) on process: %4$s"
+ + "\nConsider increasing
the 'threadCore','threads' and 'queue' size properties.", c, t, q, r));
+ }
+
+ boolean offer = false;
try {
- //Last ditch effort to run the process in the
current thread
- r.run();
+ offer = tpe.getQueue().offer(r, 10,
TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ //Ignore
+ }
- log.warning("ServicePool '" +
ServicePool.this.getName() + "' forced execution on the current server thread:
" + r
- + "\nIt is highly recommended that the
service 'threadCore','threads' and 'queue' size properties are increased!");
+ if (!offer) {
- } catch (Throwable e) {
- log.error("ServicePool '" +
ServicePool.this.getName() + "' failed to run a process in the current server
thread: " + r);
+ if (block) {
+ try {
+ //Last ditch effort to run the process in
the current thread
+ r.run();
+
+ log.warning("ServicePool '" +
ServicePool.this.getName() + "' forced execution on the current server thread:
" + r
+ + "\nIt is highly recommended
that the service 'threadCore','threads' and 'queue' size properties are
increased!");
+
+ } catch (Throwable e) {
+ log.error("ServicePool '" +
ServicePool.this.getName() + "' failed to run a process in the current server
thread: " + r);
+ }
+ } else {
+ log.error("ServicePool '" +
ServicePool.this.getName() + "' rejected asynchronous process: " + r
+ + "\nIt is strongly advised that the
'threadCore', 'threads', 'queue' size and 'block' properties are modified to
prevent data loss!");
+ }
}
- } else {
- log.error("ServicePool '" + ServicePool.this.getName()
+ "' rejected asynchronous process: " + r
- + "\nIt is strongly advised that the
'threadCore', 'threads', 'queue' size and 'block' properties are modified to
prevent data loss!");
}
- }
- }
- });
+ });
SystemInstance.get().setComponent(ServicePool.class, this);