Author: tolusha
Date: 2010-11-02 11:51:38 -0400 (Tue, 02 Nov 2010)
New Revision: 3381
Modified:
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/ExoJBossCacheFactory.java
jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestSVNodeDataOptimization.java
Log:
JCR-1469: JCR clustering consumes lot of native threads
Modified:
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/ExoJBossCacheFactory.java
===================================================================
---
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/ExoJBossCacheFactory.java 2010-11-02
14:29:13 UTC (rev 3380)
+++
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/ExoJBossCacheFactory.java 2010-11-02
15:51:38 UTC (rev 3381)
@@ -58,13 +58,19 @@
public static final String JGROUPS_MUX_ENABLED =
"jgroups-multiplexer-stack";
+ /**
+ * Keep only one instance of the {@link JChannelFactory} to prevent creating several
times the
+ * same multiplexer stack
+ */
+ private static final JChannelFactory CHANNEL_FACTORY = new JChannelFactory();
+
private final TemplateConfigurationHelper configurationHelper;
private final TransactionManager transactionManager;
private ConfigurationManager configurationManager;
- private final Log log =
ExoLogger.getLogger("exo.jcr.component.core.ExoJBossCacheFactory");
+ private static final Log log =
ExoLogger.getLogger("exo.jcr.component.core.ExoJBossCacheFactory");
/**
* Creates ExoJbossCacheFactory with provided configuration transaction managers.
@@ -143,16 +149,14 @@
if (jgroupsConfigurationFilePath != null)
{
// Create and inject multiplexer factory
- JChannelFactory muxFactory = new JChannelFactory();
-
muxFactory.setMultiplexerConfig(configurationManager.getResource(jgroupsConfigurationFilePath));
-
cache.getConfiguration().getRuntimeConfig().setMuxChannelFactory(muxFactory);
+
CHANNEL_FACTORY.setMultiplexerConfig(configurationManager.getResource(jgroupsConfigurationFilePath));
+
cache.getConfiguration().getRuntimeConfig().setMuxChannelFactory(CHANNEL_FACTORY);
log.info("Multiplexer stack successfully enabled for the
cache.");
}
}
catch (Exception e)
{
// exception occurred setting mux factory
- e.printStackTrace();
throw new RepositoryConfigurationException("Error setting multiplexer
configuration.", e);
}
}
Modified:
jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestSVNodeDataOptimization.java
===================================================================
---
jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestSVNodeDataOptimization.java 2010-11-02
14:29:13 UTC (rev 3380)
+++
jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestSVNodeDataOptimization.java 2010-11-02
15:51:38 UTC (rev 3381)
@@ -16,6 +16,17 @@
*/
package org.exoplatform.services.jcr.impl.core;
+import org.exoplatform.services.jcr.JcrImplBaseTest;
+import org.exoplatform.services.jcr.config.CacheEntry;
+import org.exoplatform.services.jcr.config.ContainerEntry;
+import org.exoplatform.services.jcr.config.LockManagerEntry;
+import org.exoplatform.services.jcr.config.LockPersisterEntry;
+import org.exoplatform.services.jcr.config.QueryHandlerEntry;
+import org.exoplatform.services.jcr.config.SimpleParameterEntry;
+import org.exoplatform.services.jcr.config.WorkspaceEntry;
+import org.exoplatform.services.jcr.config.WorkspaceInitializerEntry;
+import org.exoplatform.services.jcr.datamodel.NodeData;
+
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
@@ -25,14 +36,6 @@
import javax.jcr.Node;
import javax.jcr.NodeIterator;
-import org.exoplatform.services.jcr.JcrImplBaseTest;
-import org.exoplatform.services.jcr.config.ContainerEntry;
-import org.exoplatform.services.jcr.config.QueryHandlerEntry;
-import org.exoplatform.services.jcr.config.SimpleParameterEntry;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.config.WorkspaceInitializerEntry;
-import org.exoplatform.services.jcr.datamodel.NodeData;
-
/**
* Created by The eXo Platform SAS.
*
@@ -196,9 +199,34 @@
ws1back.setAccessManager(ws1e.getAccessManager());
ws1back.setAutoInitializedRootNt(ws1e.getAutoInitializedRootNt());
ws1back.setAutoInitPermissions(ws1e.getAutoInitPermissions());
- ws1back.setCache(ws1e.getCache());
+
+ CacheEntry cacheConfig = new CacheEntry(new
ArrayList(ws1e.getCache().getParameters()));
+ if (cacheConfig.getParameterValue("jbosscache-cluster-name", null) !=
null)
+ {
+ // Ensure that the cluster name is unique
+ cacheConfig.putParameterValue("jbosscache-cluster-name",
"JCR-cluster-" + ws1back.getUniqueName());
+ }
+ cacheConfig.setEnabled(ws1e.getCache().getEnabled());
+ cacheConfig.setType(ws1e.getCache().getType());
+ ws1back.setCache(cacheConfig);
ws1back.setContainer(ws1e.getContainer());
- ws1back.setLockManager(ws1e.getLockManager());
+ LockManagerEntry lockManagerConfig = new LockManagerEntry();
+ lockManagerConfig.setParameters(new
ArrayList(ws1e.getLockManager().getParameters()));
+ if (lockManagerConfig.getParameterValue("jbosscache-cluster-name", null)
!= null)
+ {
+ // Ensure that the cluster name is unique
+ lockManagerConfig.putParameterValue("jbosscache-cluster-name",
"JCR-cluster-locks-" + ws1back.getUniqueName());
+ }
+ lockManagerConfig.setType(ws1e.getLockManager().getType());
+ lockManagerConfig.setTimeout(ws1e.getLockManager().getTimeout());
+ if (ws1e.getLockManager().getPersister() != null)
+ {
+ LockPersisterEntry LockPersisterConfig = new LockPersisterEntry();
+ LockPersisterConfig.setParameters(new
ArrayList(ws1e.getLockManager().getPersister().getParameters()));
+ LockPersisterConfig.setType(ws1e.getLockManager().getPersister().getType());
+ lockManagerConfig.setPersister(LockPersisterConfig);
+ }
+ ws1back.setLockManager(lockManagerConfig);
// Initializer
WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
Show replies by date