[jboss-cvs] JBossAS SVN: r108972 - projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 28 13:18:01 EDT 2010
Author: pferraro
Date: 2010-10-28 13:18:01 -0400 (Thu, 28 Oct 2010)
New Revision: 108972
Modified:
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainer.java
Log:
ISPN-744 workaround
In CacheStopped event handler, execute manager.stop() is separate thread to avoid rejected execution exceptions.
Modified: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainer.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainer.java 2010-10-28 17:16:57 UTC (rev 108971)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainer.java 2010-10-28 17:18:01 UTC (rev 108972)
@@ -26,6 +26,8 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import org.infinispan.Cache;
import org.infinispan.config.Configuration;
@@ -47,6 +49,8 @@
{
private final EmbeddedCacheManager container;
private final ConcurrentMap<String, EmbeddedCacheManager> containers = new ConcurrentHashMap<String, EmbeddedCacheManager>();
+
+ private ExecutorService executor;
public DefaultCacheContainer(EmbeddedCacheManager manager)
{
@@ -76,8 +80,29 @@
if (container == null)
{
- GlobalConfiguration global = globalConfig.clone();
+ // Workaround for ISPN-744
+ GlobalConfiguration global = new GlobalConfiguration();
+ global.setAllowDuplicateDomains(globalConfig.isAllowDuplicateDomains());
+ global.setAsyncListenerExecutorFactoryClass(globalConfig.getAsyncListenerExecutorFactoryClass());
+ global.setAsyncListenerExecutorProperties(globalConfig.getAsyncListenerExecutorProperties());
+ global.setAsyncTransportExecutorFactoryClass(globalConfig.getAsyncTransportExecutorFactoryClass());
+ global.setAsyncTransportExecutorProperties(globalConfig.getAsyncTransportExecutorProperties());
global.setClusterName(clusterName);
+ global.setDistributedSyncTimeout(globalConfig.getDistributedSyncTimeout());
+ global.setEvictionScheduledExecutorFactoryClass(globalConfig.getEvictionScheduledExecutorFactoryClass());
+ global.setEvictionScheduledExecutorProperties(globalConfig.getEvictionScheduledExecutorProperties());
+ global.setExposeGlobalJmxStatistics(globalConfig.isExposeGlobalJmxStatistics());
+ global.setJmxDomain(globalConfig.getJmxDomain());
+ global.setMarshallerClass(globalConfig.getMarshallerClass());
+ global.setMarshallVersion(globalConfig.getMarshallVersion());
+ global.setMBeanServerLookup(globalConfig.getMBeanServerLookup());
+ global.setReplicationQueueScheduledExecutorFactoryClass(globalConfig.getReplicationQueueScheduledExecutorFactoryClass());
+ global.setReplicationQueueScheduledExecutorProperties(globalConfig.getReplicationQueueScheduledExecutorProperties());
+ global.setShutdownHookBehavior(globalConfig.getShutdownHookBehavior());
+ global.setStrictPeerToPeer(globalConfig.isStrictPeerToPeer());
+ global.setTransportClass(globalConfig.getTransportClass());
+ global.setTransportNodeName(globalConfig.getTransportNodeName());
+
Properties properties = new Properties(globalConfig.getTransportProperties());
properties.setProperty("clusterId", clusterName);
global.setTransportProperties(properties);
@@ -111,15 +136,20 @@
}
@Override
- public void start()
+ public synchronized void start()
{
+ this.executor = Executors.newSingleThreadExecutor();
this.container.start();
}
@Override
- public void stop()
+ public synchronized void stop()
{
this.container.stop();
+ if (this.executor != null)
+ {
+ this.executor.shutdown();
+ }
}
@Override
@@ -201,11 +231,35 @@
}
@CacheStopped
- public void cacheStopped(CacheStoppedEvent event)
+ public synchronized void cacheStopped(CacheStoppedEvent event)
{
- EmbeddedCacheManager manager = event.getCacheManager();
+ final EmbeddedCacheManager manager = event.getCacheManager();
+
this.containers.remove(manager.getClusterName());
+
// Stop the cache manager when its cache stops
- manager.stop();
+ // Need to invoke in separate thread - to avoid RejectedExecutionException of listener
+ Runnable task = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ // Synchronize to ensure that parent method has completed
+ synchronized (DefaultCacheContainer.this)
+ {
+ manager.stop();
+ }
+ }
+ };
+
+ // This shouldn't ever be null here - but just in case
+ if (this.executor != null)
+ {
+ this.executor.submit(task);
+ }
+ else
+ {
+ task.run();
+ }
}
}
More information about the jboss-cvs-commits
mailing list