[jboss-cvs] JBossAS SVN: r106539 - in projects/cluster/ha-server-ispn/trunk: src and 19 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jul 9 16:10:11 EDT 2010
Author: pferraro
Date: 2010-07-09 16:10:10 -0400 (Fri, 09 Jul 2010)
New Revision: 106539
Added:
projects/cluster/ha-server-ispn/trunk/pom.xml
projects/cluster/ha-server-ispn/trunk/src/
projects/cluster/ha-server-ispn/trunk/src/main/
projects/cluster/ha-server-ispn/trunk/src/main/java/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/AliasAwareCacheContainer.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfiguration.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfigurationAdapter.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerFactory.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerRegistry.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerFactory.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerRegistry.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/Alias.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfiguration.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationEntry.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationSource.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SimpleCacheContainerRegistryConfigurationSource.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SingleCacheContainerRegistryConfigurationSource.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/package-info.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolver.java
projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/XMLCacheContainerRegistryConfigurationSource.java
projects/cluster/ha-server-ispn/trunk/src/main/resources/
projects/cluster/ha-server-ispn/trunk/src/main/resources/META-INF/
projects/cluster/ha-server-ispn/trunk/src/main/resources/META-INF/infinispan-configs.xsd
projects/cluster/ha-server-ispn/trunk/src/test/
projects/cluster/ha-server-ispn/trunk/src/test/java/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerFactoryTest.java
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerRegistryTest.java
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SimpleCacheManagerRegistryConfigurationSourceTest.java
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SingleCacheManagerRegistryConfigurationSourceTest.java
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolverTest.java
projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/XMLCacheManagerRegistryConfigurationSourceTest.java
projects/cluster/ha-server-ispn/trunk/src/test/resources/
projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs-multiple.xml
projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs.xml
Modified:
projects/cluster/ha-server-ispn/trunk/
Log:
Migrate CacheContainerRegistry code to separate module.
Property changes on: projects/cluster/ha-server-ispn/trunk
___________________________________________________________________
Name: svn:ignore
+ target
.settings
.classpath
.project
Added: projects/cluster/ha-server-ispn/trunk/pom.xml
===================================================================
--- projects/cluster/ha-server-ispn/trunk/pom.xml (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/pom.xml 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,107 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-parent</artifactId>
+ <version>5</version>
+ </parent>
+
+ <groupId>org.jboss.cluster</groupId>
+ <artifactId>jboss-ha-server-ispn</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+
+ <name>JBoss AS Clustering Infinispan Support</name>
+ <description>A set of server-side Infinispan support classes for users of JBoss AS clustering</description>
+ <url>http://www.jboss.org</url>
+
+ <licenses>
+ <license>
+ <name>lgpl</name>
+ <url>http://repository.jboss.com/licenses/lgpl.txt</url>
+ </license>
+ </licenses>
+ <organization>
+ <name>JBoss, a division of Red Hat, Inc.</name>
+ <url>http://www.jboss.org</url>
+ </organization>
+
+ <scm>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/cluster/ha-server-ispn/trunk</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/cluster/ha-server-ispn/trunk</developerConnection>
+ </scm>
+
+ <properties>
+ <version.infinispan>4.1.0.CR1</version.infinispan>
+ <version.jta>1.0.1.GA</version.jta>
+ <version.junit>4.8.1</version.junit>
+ <version.easymock>3.0</version.easymock>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <!-- The tagBase property is needed during the release process so that the maven release plugin
+ will create the release tag in the appropriate location. -->
+ <tagBase>https://svn.jboss.org/repos/jbossas/projects/cluster/ha-server-cache-ispn/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-core</artifactId>
+ <version>${version.infinispan}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- Exclude JTA, and redeclare using provided scope -->
+ <groupId>org.jboss.javaee</groupId>
+ <artifactId>jboss-transaction-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <!-- Provided (by the container) dependencies -->
+ <dependency>
+ <groupId>org.jboss.javaee</groupId>
+ <artifactId>jboss-transaction-api</artifactId>
+ <version>1.0.1.GA</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${version.junit}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>${version.easymock}</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>2.3.1</version>
+ </plugin>
+ </plugins>
+ </reporting>
+
+</project>
\ No newline at end of file
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/AliasAwareCacheContainer.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/AliasAwareCacheContainer.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/AliasAwareCacheContainer.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Map;
+
+import org.infinispan.Cache;
+import org.infinispan.manager.CacheContainer;
+
+/**
+ * Cache container decorator that returns the same cache instance for all aliases of a given cache name.
+ * @author Paul Ferraro
+ */
+public class AliasAwareCacheContainer implements CacheContainer
+{
+ private final CacheContainer container;
+ private final Map<String, String> aliases;
+
+ /**
+ * Creates a new alias-aware cache container.
+ * @param container the proxied cache container
+ * @param aliases an map of cache name aliases
+ */
+ public AliasAwareCacheContainer(CacheContainer container, Map<String, String> aliases)
+ {
+ this.container = container;
+ this.aliases = aliases;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.infinispan.lifecycle.Lifecycle#start()
+ */
+ @Override
+ public void start()
+ {
+ this.container.start();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.infinispan.lifecycle.Lifecycle#stop()
+ */
+ @Override
+ public void stop()
+ {
+ this.container.stop();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.infinispan.manager.CacheContainer#getCache()
+ */
+ @Override
+ public <K, V> Cache<K, V> getCache()
+ {
+ return this.container.getCache();
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.infinispan.manager.CacheContainer#getCache(java.lang.String)
+ */
+ @Override
+ public <K, V> Cache<K, V> getCache(String alias)
+ {
+ String name = this.aliases.get(alias);
+
+ return this.container.getCache((name == null) ? alias : name);
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfiguration.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfiguration.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfiguration.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,52 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Collection;
+
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
+
+/**
+ * Represents an Infinispan cache container configuration.
+ * @author Paul Ferraro
+ */
+public interface CacheContainerConfiguration
+{
+ /**
+ * The general configuration shared by all caches.
+ * @return a global configuration
+ */
+ GlobalConfiguration getGlobalConfiguration();
+
+ /**
+ * The default configuration inherited by any named caches.
+ * @return the default cache configuration
+ */
+ Configuration getDefaultConfiguration();
+
+ /**
+ * The name cache configurations.
+ * @return a collection of named cache configuration
+ */
+ Collection<Configuration> getConfigurations();
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfigurationAdapter.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfigurationAdapter.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerConfigurationAdapter.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,60 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Collection;
+
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
+import org.infinispan.config.InfinispanConfiguration;
+
+/**
+ * Adapts an {@link InfinispanConfiguration} to the {@link CacheContainerConfiguration} interface.
+ * @author Paul Ferraro
+ */
+public class CacheContainerConfigurationAdapter implements CacheContainerConfiguration
+{
+ private final InfinispanConfiguration configuration;
+
+ public CacheContainerConfigurationAdapter(InfinispanConfiguration configuration)
+ {
+ this.configuration = configuration;
+ }
+
+ @Override
+ public GlobalConfiguration getGlobalConfiguration()
+ {
+ return this.configuration.parseGlobalConfiguration();
+ }
+
+ @Override
+ public Configuration getDefaultConfiguration()
+ {
+ return this.configuration.parseDefaultConfiguration();
+ }
+
+ @Override
+ public Collection<Configuration> getConfigurations()
+ {
+ return this.configuration.parseNamedConfigurations().values();
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerFactory.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerFactory.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerFactory.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Map;
+
+import org.infinispan.manager.CacheContainer;
+
+/**
+ * Creates an Infinispan {@link CacheContainer} instance from configuration.
+ *
+ * @author Paul Ferraro
+ */
+public interface CacheContainerFactory
+{
+ /**
+ * Creates a {@link CacheContainer} from the specified configuration and alias mapping.
+ * @param configuration a cache container configuration
+ * @param aliases a map of cache name aliases
+ * @return an Infinispan cache container
+ */
+ CacheContainer createCacheContainer(CacheContainerConfiguration configuration, Map<String, String> aliases);
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerRegistry.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerRegistry.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/CacheContainerRegistry.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Set;
+
+import org.infinispan.manager.CacheContainer;
+
+/**
+ * A registry of Infinispan cache containers.
+ * @author Paul Ferraro
+ */
+public interface CacheContainerRegistry
+{
+ /**
+ * Returns the default cache container.
+ * Equivalent to getCacheContainer(null).
+ * @return an Infinispan cache container.
+ */
+ CacheContainer getDefaultCacheContainer();
+
+ /**
+ * Returns the cache container associated with the specified identifier,
+ * or the default cache container if there is no associated cache container
+ * or the specified id is null.
+ * @param id a cache container identifier
+ * @return an Infinispan cache container.
+ */
+ CacheContainer getCacheContainer(String id);
+
+ /**
+ * Returns the identifiers of all cache containers in this registry.
+ * @return a set of cache container identifiers.
+ */
+ Set<String> getCacheContainers();
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerFactory.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerFactory.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerFactory.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,122 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
+import org.infinispan.manager.CacheContainer;
+import org.infinispan.manager.DefaultCacheManager;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.remoting.transport.jgroups.JGroupsChannelLookup;
+import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
+import org.jgroups.Channel;
+import org.jgroups.ChannelFactory;
+
+/**
+ * An Infinispan cache container factory that injects its channel from a channel factory and adds aliasing support.
+ *
+ * @author Paul Ferraro
+ */
+ at SuppressWarnings("deprecation")
+public class DefaultCacheContainerFactory implements CacheContainerFactory
+{
+ private static final String CHANNEL_ID = "channelId";
+ private static final String CHANNEL_FACTORY = "channelFactory";
+
+ private final ChannelFactory channelFactory;
+
+ /**
+ * Creates a new cache container factory using the specified channel factory.
+ * @param channelFactory a channel factory
+ */
+ public DefaultCacheContainerFactory(ChannelFactory channelFactory)
+ {
+ this.channelFactory = channelFactory;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.CacheContainerFactory#createCacheContainer(org.jboss.ha.ispn.CacheContainerConfiguration, java.util.Map)
+ */
+ @Override
+ public CacheContainer createCacheContainer(CacheContainerConfiguration configuration, Map<String, String> aliases)
+ {
+ GlobalConfiguration globalConfiguration = configuration.getGlobalConfiguration();
+ Properties properties = globalConfiguration.getTransportProperties();
+ properties.put(CHANNEL_FACTORY, this.channelFactory);
+ properties.setProperty(CHANNEL_ID, globalConfiguration.getClusterName());
+ properties.setProperty(JGroupsTransport.CHANNEL_LOOKUP, ChannelFactoryChannelLookup.class.getName());
+
+ EmbeddedCacheManager manager = new DefaultCacheManager(globalConfiguration, configuration.getDefaultConfiguration(), false);
+
+ // Add named configurations
+ for (Configuration config: configuration.getConfigurations())
+ {
+ manager.defineConfiguration(config.getName(), config);
+ }
+
+ manager.start();
+
+ return new AliasAwareCacheContainer(manager, aliases);
+ }
+
+ /**
+ * JGroupsChannelLookup implementation that uses a channel factory.
+ */
+ public static class ChannelFactoryChannelLookup implements JGroupsChannelLookup
+ {
+ public static final String STACK = "stack";
+ public static final String DEFAULT_STACK = "udp";
+
+ @Override
+ public Channel getJGroupsChannel(Properties properties)
+ {
+ String stack = properties.getProperty(STACK, DEFAULT_STACK);
+ String id = properties.getProperty(CHANNEL_ID);
+ ChannelFactory factory = (ChannelFactory) properties.get(CHANNEL_FACTORY);
+
+ try
+ {
+ return factory.createMultiplexerChannel(stack, id);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ @Override
+ public boolean shouldStartAndConnect()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean shouldStopAndDisconnect()
+ {
+ return true;
+ }
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerRegistry.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerRegistry.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/DefaultCacheContainerRegistry.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,207 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn;
+
+import java.util.AbstractMap;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.infinispan.manager.CacheContainer;
+import org.jboss.ha.ispn.config.Alias;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfiguration;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationEntry;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource;
+import org.jboss.logging.Logger;
+
+/**
+ * Cache container registry that populates itself using a specified factory from configuration from a specified source.
+ * All cache containers in the registry are bound to jndi.
+ * @author Paul Ferraro
+ */
+public class DefaultCacheContainerRegistry implements CacheContainerRegistry
+{
+ private static Logger logger = Logger.getLogger(DefaultCacheContainerRegistry.class);
+
+ private final CacheContainerFactory factory;
+ private final CacheContainerRegistryConfigurationSource source;
+ private final Context context;
+ private final Map<String, Map.Entry<String, CacheContainer>> containers = new ConcurrentHashMap<String, Map.Entry<String, CacheContainer>>();
+
+ private CacheContainer defaultContainer;
+
+ /**
+ * Creates a new cache container registry using the specified factory and source.
+ * @param factory used to create cache container instances from configuration
+ * @param source source of cache container configurations.
+ * @throws NamingException if inital context could not be created
+ */
+ public DefaultCacheContainerRegistry(CacheContainerFactory factory, CacheContainerRegistryConfigurationSource source) throws NamingException
+ {
+ this(factory, source, new InitialContext());
+ }
+
+ /**
+ * Creates a new cache container registry using the specified factory and source.
+ * @param factory used to create cache container instances from configuration
+ * @param source source of cache container configurations.
+ * @param context jndi context to which to bind cache containers.
+ */
+ public DefaultCacheContainerRegistry(CacheContainerFactory factory, CacheContainerRegistryConfigurationSource source, Context context)
+ {
+ this.factory = factory;
+ this.source = source;
+ this.context = context;
+ }
+
+ public void start() throws Exception
+ {
+ CacheContainerRegistryConfiguration registry = this.source.getRegistryConfiguration();
+
+ for (CacheContainerRegistryConfigurationEntry entry: registry.getEntries())
+ {
+ if (entry.getJndiName() == null)
+ {
+ entry.setJndiName(this.context.composeName(entry.getId(), registry.getBaseJndiName()));
+ }
+
+ this.add(entry);
+ }
+
+ CacheContainerRegistryConfigurationEntry defaultEntry = registry.getDefaultEntry();
+
+ if (defaultEntry == null)
+ {
+ defaultEntry = registry.getEntries().get(0);
+ }
+
+ this.defaultContainer = this.containers.get(defaultEntry.getId()).getValue();
+ }
+
+ public void stop() throws Exception
+ {
+ for (Map.Entry<String, CacheContainer> entry: this.containers.values())
+ {
+ try
+ {
+ this.context.unbind(entry.getKey());
+ }
+ catch (NamingException e)
+ {
+ logger.warn(e.getMessage(), e);
+ }
+
+ entry.getValue().stop();
+ }
+
+ this.containers.clear();
+ this.defaultContainer = null;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.CacheContainerRegistry#getCacheContainers()
+ */
+ @Override
+ public Set<String> getCacheContainers()
+ {
+ return Collections.unmodifiableSet(this.containers.keySet());
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.CacheContainerRegistry#getDefaultCacheContainer()
+ */
+ @Override
+ public CacheContainer getDefaultCacheContainer()
+ {
+ return this.defaultContainer;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.CacheContainerRegistry#getCacheContainer(java.lang.String)
+ */
+ @Override
+ public CacheContainer getCacheContainer(String name)
+ {
+ Map.Entry<String, CacheContainer> entry = (name != null) ? this.containers.get(name) : null;
+
+ // Return default cache manager, if name was not found or if it was null
+ return (entry != null) ? entry.getValue() : this.defaultContainer;
+ }
+
+ public void add(CacheContainerRegistryConfigurationEntry entry) throws NamingException
+ {
+ CacheContainerConfiguration configuration = new CacheContainerConfigurationAdapter(entry.getConfiguration());
+ CacheContainer container = this.factory.createCacheContainer(configuration, this.mapAliases(entry));
+
+ String jndiName = entry.getJndiName();
+
+ // Store cache containers with jndi name, so they can be unbound during stop()
+ this.containers.put(entry.getId(), new AbstractMap.SimpleImmutableEntry<String, CacheContainer>(jndiName, container));
+
+ // Bind cache container to jndi
+ this.context.bind(jndiName, container);
+ }
+
+ private Map<String, String> mapAliases(CacheContainerRegistryConfigurationEntry entry)
+ {
+ List<Alias> aliases = entry.getAliases();
+
+ if ((aliases == null) || aliases.isEmpty()) return Collections.emptyMap();
+
+ if (aliases.size() == 1)
+ {
+ Alias alias = aliases.get(0);
+ return Collections.singletonMap(alias.getName(), alias.getTarget());
+ }
+
+ Map<String, String> map = new HashMap<String, String>();
+
+ for (Alias alias: aliases)
+ {
+ map.put(alias.getName(), alias.getTarget());
+ }
+
+ return map;
+ }
+
+ public void remove(CacheContainerRegistryConfigurationEntry config) throws NamingException
+ {
+ Map.Entry<String, CacheContainer> entry = this.containers.remove(config.getId());
+
+ if (entry != null)
+ {
+ entry.getValue().stop();
+
+ this.context.unbind(entry.getKey());
+ }
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/Alias.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/Alias.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/Alias.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,63 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Generic alias descriptor.
+ * @author Paul Ferraro
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType
+public class Alias
+{
+ @XmlAttribute(name = "name")
+ private String name;
+
+ @XmlValue
+ private String target;
+
+ public String getName()
+ {
+ return this.name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getTarget()
+ {
+ return this.target;
+ }
+
+ public void setTarget(String target)
+ {
+ this.target = target;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfiguration.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfiguration.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfiguration.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,82 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Root element for cache container registry configuration.
+ * @author Paul Ferraro
+ */
+ at XmlRootElement(name = "infinispan-configs")
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType
+public class CacheContainerRegistryConfiguration
+{
+ @XmlIDREF
+ @XmlAttribute(name = "default", required = false)
+ private CacheContainerRegistryConfigurationEntry defaultEntry;
+
+ @XmlAttribute(name = "base-jndi-name", required = false)
+ private String baseJndiName = "java:CacheManager";
+
+ @XmlElement(name = "infinispan-config")
+ private List<CacheContainerRegistryConfigurationEntry> entries;
+
+ public CacheContainerRegistryConfigurationEntry getDefaultEntry()
+ {
+ return this.defaultEntry;
+ }
+
+ public void setDefaultEntry(CacheContainerRegistryConfigurationEntry defaultEntry)
+ {
+ this.defaultEntry = defaultEntry;
+ }
+
+ public List<CacheContainerRegistryConfigurationEntry> getEntries()
+ {
+ return this.entries;
+ }
+
+ public void setEntries(List<CacheContainerRegistryConfigurationEntry> entries)
+ {
+ this.entries = entries;
+ }
+
+ public String getBaseJndiName()
+ {
+ return this.baseJndiName;
+ }
+
+ public void setBaseJndiName(String baseJndiName)
+ {
+ this.baseJndiName = baseJndiName;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationEntry.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationEntry.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationEntry.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlID;
+import javax.xml.bind.annotation.XmlType;
+
+import org.infinispan.config.InfinispanConfiguration;
+
+/**
+ * A cache container registry configuration entry.
+ * @author Paul Ferraro
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType
+public class CacheContainerRegistryConfigurationEntry
+{
+ @XmlID
+ @XmlAttribute(name = "name", required = true)
+ private String id;
+ @XmlAttribute(name = "jndi-name", required = false)
+ private String jndiName;
+
+ @XmlElement(name = "alias")
+ private List<Alias> aliases;
+
+ @XmlElementRef
+ private InfinispanConfiguration configuration;
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getJndiName()
+ {
+ return this.jndiName;
+ }
+
+ public void setJndiName(String jndiName)
+ {
+ this.jndiName = jndiName;
+ }
+
+ public List<Alias> getAliases()
+ {
+ return this.aliases;
+ }
+
+ public void setAliases(List<Alias> aliases)
+ {
+ this.aliases = aliases;
+ }
+
+ public InfinispanConfiguration getConfiguration()
+ {
+ return this.configuration;
+ }
+
+ public void setConfiguration(InfinispanConfiguration configuration)
+ {
+ this.configuration = configuration;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationSource.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationSource.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/CacheContainerRegistryConfigurationSource.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+/**
+ * A source of cache container registry configuration.
+ * @author Paul Ferraro
+ */
+public interface CacheContainerRegistryConfigurationSource
+{
+ /**
+ * Retrieves a cache container registry configuration.
+ * @return a cache container registry configuration
+ * @throws Exception if the configuration could not be retrieved.
+ */
+ CacheContainerRegistryConfiguration getRegistryConfiguration() throws Exception;
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SimpleCacheContainerRegistryConfigurationSource.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SimpleCacheContainerRegistryConfigurationSource.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SimpleCacheContainerRegistryConfigurationSource.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+/**
+ * A trivial cache container registry source implementation.
+ * @author Paul Ferraro
+ */
+public class SimpleCacheContainerRegistryConfigurationSource implements CacheContainerRegistryConfigurationSource
+{
+ private final CacheContainerRegistryConfiguration configuration;
+
+ /**
+ * Creates a new SimpleCacheContainerRegistryConfigurationSource using the specified configuration.
+ * @param configuration the cache container registry configuration.
+ */
+ public SimpleCacheContainerRegistryConfigurationSource(CacheContainerRegistryConfiguration configuration)
+ {
+ this.configuration = configuration;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource#getRegistryConfiguration()
+ */
+ @Override
+ public CacheContainerRegistryConfiguration getRegistryConfiguration()
+ {
+ return this.configuration;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SingleCacheContainerRegistryConfigurationSource.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SingleCacheContainerRegistryConfigurationSource.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/SingleCacheContainerRegistryConfigurationSource.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config;
+
+import java.io.IOException;
+import java.util.Collections;
+
+import org.infinispan.config.InfinispanConfiguration;
+
+/**
+ * A source for a cache container registry that parses an single Infinispan configuration file.
+ * @author Paul Ferraro
+ */
+public class SingleCacheContainerRegistryConfigurationSource implements CacheContainerRegistryConfigurationSource
+{
+ public static final String DEFAULT_ID = "default";
+
+ private final String resource;
+
+ private String id = DEFAULT_ID;
+ private String jndiName;
+
+ /**
+ * Creates a new SingleCacheContainerRegistryConfigurationSource
+ * @param id the identifier of the singleton cache container
+ * @param jndiName the jndi name for the cache container
+ * @param resource the classpath resource containing the infinispan cache container configuration.
+ */
+ public SingleCacheContainerRegistryConfigurationSource(String resource)
+ {
+ this.resource = resource;
+ }
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public void setJndiName(String jndiName)
+ {
+ this.jndiName = jndiName;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource#getRegistryConfiguration()
+ */
+ @Override
+ public CacheContainerRegistryConfiguration getRegistryConfiguration() throws IOException
+ {
+ CacheContainerRegistryConfigurationEntry entry = new CacheContainerRegistryConfigurationEntry();
+ entry.setId(this.id);
+ entry.setJndiName(this.jndiName);
+ entry.setConfiguration(InfinispanConfiguration.newInfinispanConfiguration(this.resource));
+
+ CacheContainerRegistryConfiguration registry = new CacheContainerRegistryConfiguration();
+ registry.setDefaultEntry(entry);
+ registry.setEntries(Collections.singletonList(entry));
+
+ return registry;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/package-info.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/package-info.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/package-info.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,26 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+ at XmlSchema(namespace = "urn:jboss:infinispan-configs:1.0", elementFormDefault = XmlNsForm.QUALIFIED)
+package org.jboss.ha.ispn.config;
+
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlSchema;
\ No newline at end of file
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolver.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolver.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolver.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,111 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config.xml;
+
+import java.net.URL;
+import java.util.Map;
+
+import org.w3c.dom.bootstrap.DOMImplementationRegistry;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSResourceResolver;
+
+/**
+ * A custom resource resolver that can override the locations for resources by namespace.
+ *
+ * @author Paul Ferraro
+ */
+public class NamespaceResourceResolver implements LSResourceResolver
+{
+ private final Map<String, Map<String, URL>> types;
+ private final DOMImplementationLS implementation;
+
+ /**
+ * Creates a new NamespaceResourceResolver using the specified set of target resource URLs, identified by namespace, per resource type.
+ * Uses the default DOM load-store implementation.
+ * @param types a map of resource type to map of namespace to resource location
+ */
+ public NamespaceResourceResolver(Map<String, Map<String, URL>> types)
+ {
+ this(types, defaultImplementation());
+ }
+
+ /**
+ * Creates a new NamespaceResourceResolver using the specified set of target resource URLs, identified by namespace, per resource type.
+ * @param types a map of resource type to map of namespace to resource location
+ * @param implementation a DOM load-store implementation
+ */
+ public NamespaceResourceResolver(Map<String, Map<String, URL>> types, DOMImplementationLS implementation)
+ {
+ this.types = types;
+ this.implementation = implementation;
+ }
+
+ private static DOMImplementationLS defaultImplementation()
+ {
+ try
+ {
+ return (DOMImplementationLS) DOMImplementationRegistry.newInstance().getDOMImplementation("LS");
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new IllegalStateException(e);
+ }
+ catch (InstantiationException e)
+ {
+ throw new IllegalStateException(e);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.w3c.dom.ls.LSResourceResolver#resolveResource(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI)
+ {
+ LSInput input = this.implementation.createLSInput();
+
+ input.setPublicId(publicId);
+ input.setSystemId(systemId);
+ input.setBaseURI(baseURI);
+
+ Map<String, URL> namespaces = this.types.get(type);
+
+ if (namespaces != null)
+ {
+ URL url = namespaces.get(namespaceURI);
+
+ if (url != null)
+ {
+ // Substitute our system id, since we have a matching type and namespace
+ input.setSystemId(url.toString());
+ }
+ }
+
+ return input;
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/XMLCacheContainerRegistryConfigurationSource.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/XMLCacheContainerRegistryConfigurationSource.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/java/org/jboss/ha/ispn/config/xml/XMLCacheContainerRegistryConfigurationSource.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,115 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ha.ispn.config.xml;
+
+import java.net.URL;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.validation.SchemaFactory;
+
+import org.infinispan.config.InfinispanConfiguration;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfiguration;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource;
+import org.xml.sax.SAXException;
+
+/**
+ * A source for a cache container registry that parses an XML file containing a series of infinispan cache container configurations.
+ * @author Paul Ferraro
+ */
+public class XMLCacheContainerRegistryConfigurationSource implements CacheContainerRegistryConfigurationSource
+{
+ private static final String SCHEMA = "META-INF/infinispan-configs.xsd";
+ private static final String DEFAULT_XML = "infinispan-configs.xml";
+
+ private static final String INFINISPAN_NAMESPACE = "urn:infinispan:config:4.0";
+ private static final String INFINISPAN_SCHEMA = InfinispanConfiguration.resolveSchemaPath();
+
+ private final URL infinispanSchemaURL;
+ private final URL schemaURL;
+ private final URL xmlURL;
+
+ /**
+ * Creates a new XMLCacheContainerRegistryConfigurationSource using the {@link #DEFAULT_XML} classpath resource
+ * containing the cache container registry configuration.
+ */
+ public XMLCacheContainerRegistryConfigurationSource()
+ {
+ this(DEFAULT_XML);
+ }
+
+ /**
+ * Creates a new XMLCacheContainerRegistryConfigurationSource using the specified location containing
+ * the cache container registry configuration.
+ * @param url the location of the cache container registry configuration
+ */
+ public XMLCacheContainerRegistryConfigurationSource(URL url)
+ {
+ this.xmlURL = url;
+ this.schemaURL = findResource(SCHEMA);
+ this.infinispanSchemaURL = findResource(INFINISPAN_SCHEMA);
+ }
+
+ /**
+ * Creates a new XMLCacheContainerRegistryConfigurationSource using the specified classpath resource containing
+ * the cache container registry configuration.
+ * @param resource the classpath resource containing the cache container registry configuration
+ */
+ public XMLCacheContainerRegistryConfigurationSource(String resource)
+ {
+ this(findResource(resource));
+ }
+
+ private static URL findResource(String resource)
+ {
+ URL url = Thread.currentThread().getContextClassLoader().getResource(resource);
+
+ if (url == null)
+ {
+ throw new IllegalArgumentException("Failed to locate resource: " + resource);
+ }
+
+ return url;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource#getRegistryConfiguration()
+ */
+ @Override
+ public CacheContainerRegistryConfiguration getRegistryConfiguration() throws JAXBException, SAXException
+ {
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ // Resolve Infinispan schema against schema found in classpath
+ Map<String, URL> schemaURLs = Collections.singletonMap(INFINISPAN_NAMESPACE, this.infinispanSchemaURL);
+ schemaFactory.setResourceResolver(new NamespaceResourceResolver(Collections.singletonMap(XMLConstants.W3C_XML_SCHEMA_NS_URI, schemaURLs)));
+
+ Unmarshaller unmarshaller = JAXBContext.newInstance(CacheContainerRegistryConfiguration.class).createUnmarshaller();
+ unmarshaller.setSchema(schemaFactory.newSchema(this.schemaURL));
+
+ return (CacheContainerRegistryConfiguration) unmarshaller.unmarshal(this.xmlURL);
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/main/resources/META-INF/infinispan-configs.xsd
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/main/resources/META-INF/infinispan-configs.xsd (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/main/resources/META-INF/infinispan-configs.xsd 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<xs:schema targetNamespace="urn:jboss:infinispan-configs:1.0" xmlns:tns="urn:jboss:infinispan-configs:1.0" xmlns:ispn="urn:infinispan:config:4.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0">
+
+ <xs:import namespace="urn:infinispan:config:4.0" schemaLocation="http://docs.jboss.org/infinispan/schemas/infinispan-config-4.1.xsd"/>
+
+ <xs:element name="infinispan-configs" type="tns:cacheContainerRegistryConfiguration"/>
+
+ <xs:complexType name="cacheContainerRegistryConfiguration">
+ <xs:sequence>
+ <xs:element name="infinispan-config" type="tns:cacheContainerRegistryConfigurationEntry" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="default" type="xs:IDREF"/>
+ <xs:attribute name="base-jndi-name" type="xs:string" default="java:CacheManager"/>
+ </xs:complexType>
+
+ <xs:complexType name="cacheContainerRegistryConfigurationEntry">
+ <xs:sequence>
+ <xs:element name="alias" type="tns:alias" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ispn:infinispan"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:ID" use="required"/>
+ <xs:attribute name="jndi-name" type="xs:string"/>
+ </xs:complexType>
+
+ <xs:complexType name="alias">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+</xs:schema>
\ No newline at end of file
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerFactoryTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerFactoryTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerFactoryTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,114 @@
+package org.jboss.ha.ispn;
+
+import java.net.URL;
+import java.util.Collections;
+
+import junit.framework.Assert;
+
+import org.easymock.EasyMock;
+import org.infinispan.Cache;
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
+import org.infinispan.lifecycle.ComponentStatus;
+import org.infinispan.manager.CacheContainer;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
+import org.jgroups.ChannelFactory;
+import org.jgroups.JChannel;
+import org.junit.Test;
+
+ at SuppressWarnings("deprecation")
+public class DefaultCacheContainerFactoryTest
+{
+ @Test
+ public void test() throws Exception
+ {
+ CacheContainerConfiguration configuration = EasyMock.createStrictMock(CacheContainerConfiguration.class);
+ ChannelFactory channelFactory = EasyMock.createStrictMock(ChannelFactory.class);
+ GlobalConfiguration globalConfiguration = new GlobalConfiguration();
+ globalConfiguration.setTransportClass(JGroupsTransport.class.getName());
+ globalConfiguration.setClusterName("mychannel");
+
+ Configuration defaultConfiguration = new Configuration();
+ Configuration namedConfiguration = new NamedConfiguration("custom");
+
+ CacheContainerFactory factory = new DefaultCacheContainerFactory(channelFactory);
+
+ EasyMock.expect(configuration.getGlobalConfiguration()).andReturn(globalConfiguration);
+ EasyMock.expect(configuration.getDefaultConfiguration()).andReturn(defaultConfiguration);
+ EasyMock.expect(configuration.getConfigurations()).andReturn(Collections.singletonList(namedConfiguration));
+
+ EasyMock.replay(configuration, channelFactory);
+
+ CacheContainer result = factory.createCacheContainer(configuration, Collections.singletonMap("alias", CacheContainer.DEFAULT_CACHE_NAME));
+
+ try
+ {
+ EasyMock.verify(configuration, channelFactory);
+
+ EasyMock.reset(configuration, channelFactory);
+
+ URL url = Thread.currentThread().getContextClassLoader().getResource("config-samples/jgroups-udp.xml");
+ EasyMock.expect(channelFactory.createMultiplexerChannel(DefaultCacheContainerFactory.ChannelFactoryChannelLookup.DEFAULT_STACK, "mychannel")).andReturn(new JChannel(url));
+
+ EasyMock.replay(channelFactory);
+
+ Cache<?, ?> cache = result.getCache();
+
+ try
+ {
+ EasyMock.verify(channelFactory);
+
+ Assert.assertSame(ComponentStatus.RUNNING, cache.getStatus());
+
+ EmbeddedCacheManager manager = (EmbeddedCacheManager) cache.getCacheManager();
+
+ Assert.assertSame(manager, cache.getCacheManager());
+ Assert.assertSame(ComponentStatus.RUNNING, manager.getStatus());
+ Assert.assertTrue(manager.isCoordinator());
+ Assert.assertEquals(Collections.singletonList(manager.getAddress()), manager.getMembers());
+
+ Cache<?, ?> aliasCache = result.getCache("alias");
+
+ try
+ {
+ Assert.assertSame(cache, aliasCache);
+
+ Cache<?, ?> otherCache = result.getCache("other");
+
+ try
+ {
+ Assert.assertNotSame(cache, otherCache);
+ Assert.assertNotSame(aliasCache, otherCache);
+ }
+ finally
+ {
+ otherCache.stop();
+ }
+ }
+ finally
+ {
+ aliasCache.stop();
+ }
+ }
+ finally
+ {
+ cache.stop();
+ }
+ }
+ finally
+ {
+ result.stop();
+ }
+ }
+
+ public static class NamedConfiguration extends Configuration
+ {
+ private static final long serialVersionUID = -6362167959914418561L;
+
+ public NamedConfiguration(String name)
+ {
+ this.name = name;
+ }
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerRegistryTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerRegistryTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/DefaultCacheContainerRegistryTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,195 @@
+package org.jboss.ha.ispn;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.naming.Context;
+
+import junit.framework.Assert;
+
+import org.easymock.Capture;
+import org.easymock.CaptureType;
+import org.easymock.EasyMock;
+import org.infinispan.config.Configuration;
+import org.infinispan.config.InfinispanConfiguration;
+import org.infinispan.manager.CacheContainer;
+import org.jboss.ha.ispn.config.Alias;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfiguration;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationEntry;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource;
+import org.junit.Test;
+
+public class DefaultCacheContainerRegistryTest
+{
+ /**
+ * Test with unspecified default config and default base jndi name
+ * @throws Exception
+ */
+ @Test
+ public void defaults() throws Exception
+ {
+ CacheContainerFactory factory = EasyMock.createStrictMock(CacheContainerFactory.class);
+ CacheContainerRegistryConfigurationSource source = EasyMock.createStrictMock(CacheContainerRegistryConfigurationSource.class);
+ CacheContainer defaultCacheManager = EasyMock.createStrictMock(CacheContainer.class);
+ CacheContainer otherCacheManager = EasyMock.createStrictMock(CacheContainer.class);
+ Context context = EasyMock.createStrictMock(Context.class);
+ Capture<CacheContainerConfiguration> capturedConfiguration = new Capture<CacheContainerConfiguration>(CaptureType.ALL);
+
+ InfinispanConfiguration config = InfinispanConfiguration.newInfinispanConfiguration("config-samples/minimal.xml");
+
+ CacheContainerRegistryConfigurationEntry entry1 = new CacheContainerRegistryConfigurationEntry();
+
+ entry1.setId("default");
+ entry1.setConfiguration(config);
+
+ CacheContainerRegistryConfigurationEntry entry2 = new CacheContainerRegistryConfigurationEntry();
+
+ entry2.setId("other");
+ entry2.setConfiguration(config);
+
+ CacheContainerRegistryConfiguration configRegistry = new CacheContainerRegistryConfiguration();
+ configRegistry.setEntries(Arrays.asList(entry1, entry2));
+
+ DefaultCacheContainerRegistry registry = new DefaultCacheContainerRegistry(factory, source, context);
+
+ EasyMock.expect(source.getRegistryConfiguration()).andReturn(configRegistry);
+
+ EasyMock.expect(factory.createCacheContainer(EasyMock.capture(capturedConfiguration), EasyMock.eq(Collections.<String, String>emptyMap()))).andReturn(defaultCacheManager);
+ EasyMock.expect(context.composeName("default", "java:CacheManager")).andReturn("java:CacheManager/default");
+
+ context.bind("java:CacheManager/default", defaultCacheManager);
+
+ EasyMock.expect(factory.createCacheContainer(EasyMock.capture(capturedConfiguration), EasyMock.eq(Collections.<String, String>emptyMap()))).andReturn(otherCacheManager);
+ EasyMock.expect(context.composeName("other", "java:CacheManager")).andReturn("java:CacheManager/other");
+
+ context.bind("java:CacheManager/other", otherCacheManager);
+
+ EasyMock.replay(factory, source, context, defaultCacheManager, otherCacheManager);
+
+ registry.start();
+
+ EasyMock.verify(factory, source, context, defaultCacheManager, otherCacheManager);
+
+ Set<String> names = registry.getCacheContainers();
+ Assert.assertEquals(2, names.size());
+ Assert.assertTrue(names.contains("default"));
+ Assert.assertTrue(names.contains("other"));
+
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer(null));
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer("default"));
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer("unknown"));
+ Assert.assertSame(otherCacheManager, registry.getCacheContainer("other"));
+
+ List<CacheContainerConfiguration> configurations = capturedConfiguration.getValues();
+ Assert.assertEquals(2, configurations.size());
+
+ for (CacheContainerConfiguration configuration: configurations)
+ {
+ Assert.assertSame(config.parseGlobalConfiguration(), configuration.getGlobalConfiguration());
+ Assert.assertSame(config.parseDefaultConfiguration(), configuration.getDefaultConfiguration());
+ Map<String, Configuration> namedConfigurations = config.parseNamedConfigurations();
+ Collection<Configuration> configs = configuration.getConfigurations();
+ Assert.assertEquals(namedConfigurations.size(), configs.size());
+ for (Configuration c: configs)
+ {
+ Assert.assertSame(namedConfigurations.get(c.getName()), c);
+ }
+ }
+
+ EasyMock.reset(factory, source, context, defaultCacheManager, otherCacheManager);
+ }
+
+ /**
+ * Test with custom default config and custom base jndi name
+ * @throws Exception
+ */
+ @Test
+ public void custom() throws Exception
+ {
+ CacheContainerFactory factory = EasyMock.createStrictMock(CacheContainerFactory.class);
+ CacheContainerRegistryConfigurationSource provider = EasyMock.createStrictMock(CacheContainerRegistryConfigurationSource.class);
+ CacheContainer defaultCacheManager = EasyMock.createStrictMock(CacheContainer.class);
+ CacheContainer otherCacheManager = EasyMock.createStrictMock(CacheContainer.class);
+ Context context = EasyMock.createStrictMock(Context.class);
+ Capture<CacheContainerConfiguration> capturedConfiguration = new Capture<CacheContainerConfiguration>(CaptureType.ALL);
+
+ InfinispanConfiguration config = InfinispanConfiguration.newInfinispanConfiguration("config-samples/minimal.xml");
+
+ CacheContainerRegistryConfigurationEntry entry1 = new CacheContainerRegistryConfigurationEntry();
+
+ entry1.setId("other");
+ entry1.setConfiguration(config);
+ entry1.setJndiName("java:other");
+
+ Alias alias1 = new Alias();
+ alias1.setName("legacy-other-cache");
+ alias1.setTarget("other-cache");
+ entry1.setAliases(Collections.singletonList(alias1));
+
+ CacheContainerRegistryConfigurationEntry entry2 = new CacheContainerRegistryConfigurationEntry();
+
+ entry2.setId("default");
+ entry2.setConfiguration(config);
+
+ Alias alias2 = new Alias();
+ alias2.setName("legacy-default-cache");
+ alias2.setTarget("default-cache");
+ entry2.setAliases(Collections.singletonList(alias2));
+
+ CacheContainerRegistryConfiguration configRegistry = new CacheContainerRegistryConfiguration();
+ configRegistry.setEntries(Arrays.asList(entry1, entry2));
+ configRegistry.setDefaultEntry(entry2);
+ configRegistry.setBaseJndiName("java:Infinispan");
+
+ DefaultCacheContainerRegistry registry = new DefaultCacheContainerRegistry(factory, provider, context);
+
+ EasyMock.expect(provider.getRegistryConfiguration()).andReturn(configRegistry);
+
+ EasyMock.expect(factory.createCacheContainer(EasyMock.capture(capturedConfiguration), EasyMock.eq(Collections.singletonMap("legacy-other-cache", "other-cache")))).andReturn(otherCacheManager);
+
+ context.bind("java:other", otherCacheManager);
+
+ EasyMock.expect(factory.createCacheContainer(EasyMock.capture(capturedConfiguration), EasyMock.eq(Collections.singletonMap("legacy-default-cache", "default-cache")))).andReturn(defaultCacheManager);
+ EasyMock.expect(context.composeName("default", "java:Infinispan")).andReturn("java:Infinispan/default");
+
+ context.bind("java:Infinispan/default", defaultCacheManager);
+
+ EasyMock.replay(factory, provider, context, defaultCacheManager, otherCacheManager);
+
+ registry.start();
+
+ EasyMock.verify(factory, provider, context, defaultCacheManager, otherCacheManager);
+
+ Set<String> names = registry.getCacheContainers();
+ Assert.assertEquals(2, names.size());
+ Assert.assertTrue(names.contains("default"));
+ Assert.assertTrue(names.contains("other"));
+
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer(null));
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer("default"));
+ Assert.assertSame(defaultCacheManager, registry.getCacheContainer("unknown"));
+ Assert.assertSame(otherCacheManager, registry.getCacheContainer("other"));
+
+ List<CacheContainerConfiguration> configurations = capturedConfiguration.getValues();
+ Assert.assertEquals(2, configurations.size());
+
+ for (CacheContainerConfiguration configuration: configurations)
+ {
+ Assert.assertSame(config.parseGlobalConfiguration(), configuration.getGlobalConfiguration());
+ Assert.assertSame(config.parseDefaultConfiguration(), configuration.getDefaultConfiguration());
+ Map<String, Configuration> namedConfigurations = config.parseNamedConfigurations();
+ Collection<Configuration> configs = configuration.getConfigurations();
+ Assert.assertEquals(namedConfigurations.size(), configs.size());
+ for (Configuration c: configs)
+ {
+ Assert.assertSame(namedConfigurations.get(c.getName()), c);
+ }
+ }
+
+ EasyMock.reset(factory, provider, context, defaultCacheManager, otherCacheManager);
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SimpleCacheManagerRegistryConfigurationSourceTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SimpleCacheManagerRegistryConfigurationSourceTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SimpleCacheManagerRegistryConfigurationSourceTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,17 @@
+package org.jboss.ha.ispn.config;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SimpleCacheManagerRegistryConfigurationSourceTest
+{
+ @Test
+ public void test() throws Exception
+ {
+ CacheContainerRegistryConfiguration configuration = new CacheContainerRegistryConfiguration();
+
+ CacheContainerRegistryConfigurationSource source = new SimpleCacheContainerRegistryConfigurationSource(configuration);
+
+ Assert.assertSame(configuration, source.getRegistryConfiguration());
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SingleCacheManagerRegistryConfigurationSourceTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SingleCacheManagerRegistryConfigurationSourceTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/SingleCacheManagerRegistryConfigurationSourceTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,56 @@
+package org.jboss.ha.ispn.config;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SingleCacheManagerRegistryConfigurationSourceTest
+{
+ @Test
+ public void testDefault() throws Exception
+ {
+ CacheContainerRegistryConfigurationSource source = new SingleCacheContainerRegistryConfigurationSource("config-samples/minimal.xml");
+
+ CacheContainerRegistryConfiguration configuration = source.getRegistryConfiguration();
+
+ Assert.assertEquals("java:CacheManager", configuration.getBaseJndiName());
+
+ List<CacheContainerRegistryConfigurationEntry> entries = configuration.getEntries();
+
+ Assert.assertEquals(1, entries.size());
+
+ CacheContainerRegistryConfigurationEntry entry = entries.get(0);
+
+ Assert.assertSame(entry, configuration.getDefaultEntry());
+
+ Assert.assertEquals("default", entry.getId());
+ Assert.assertNull(entry.getJndiName());
+ Assert.assertEquals(0, entry.getConfiguration().parseNamedConfigurations().size());
+ }
+
+ @Test
+ public void testCustom() throws Exception
+ {
+ SingleCacheContainerRegistryConfigurationSource source = new SingleCacheContainerRegistryConfigurationSource("config-samples/minimal.xml");
+
+ source.setId("custom");
+ source.setJndiName("java:SingleCacheManager");
+
+ CacheContainerRegistryConfiguration configuration = source.getRegistryConfiguration();
+
+ Assert.assertEquals("java:CacheManager", configuration.getBaseJndiName());
+
+ List<CacheContainerRegistryConfigurationEntry> entries = configuration.getEntries();
+
+ Assert.assertEquals(1, entries.size());
+
+ CacheContainerRegistryConfigurationEntry entry = entries.get(0);
+
+ Assert.assertSame(entry, configuration.getDefaultEntry());
+
+ Assert.assertEquals("custom", entry.getId());
+ Assert.assertEquals("java:SingleCacheManager", entry.getJndiName());
+ Assert.assertEquals(0, entry.getConfiguration().parseNamedConfigurations().size());
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolverTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolverTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/NamespaceResourceResolverTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,70 @@
+package org.jboss.ha.ispn.config.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSResourceResolver;
+
+public class NamespaceResourceResolverTest
+{
+ @Test
+ public void test() throws IOException
+ {
+ File file = File.createTempFile("test", "test");
+ file.deleteOnExit();
+
+ URL url = file.toURI().toURL();
+ String type = "my-type";
+ String namespace = "urn:my:namespace:1.0";
+ String publicId = "my-public-id";
+ String systemId = "my-system-id";
+ String baseURI = "my-base-uri";
+
+ LSResourceResolver resolver = new NamespaceResourceResolver(Collections.singletonMap(type, Collections.singletonMap(namespace, url)));
+
+ LSInput result = resolver.resolveResource("some-type", "namespace-uri", publicId, systemId, baseURI);
+
+ Assert.assertNull(result.getByteStream());
+ Assert.assertNull(result.getCharacterStream());
+ Assert.assertNull(result.getStringData());
+ Assert.assertFalse(result.getCertifiedText());
+ Assert.assertSame(publicId, result.getPublicId());
+ Assert.assertSame(systemId, result.getSystemId());
+ Assert.assertSame(baseURI, result.getBaseURI());
+
+ result = resolver.resolveResource(type, "namespace-uri", publicId, systemId, baseURI);
+
+ Assert.assertNull(result.getByteStream());
+ Assert.assertNull(result.getCharacterStream());
+ Assert.assertNull(result.getStringData());
+ Assert.assertFalse(result.getCertifiedText());
+ Assert.assertSame(publicId, result.getPublicId());
+ Assert.assertSame(systemId, result.getSystemId());
+ Assert.assertSame(baseURI, result.getBaseURI());
+
+ result = resolver.resolveResource("some-type", namespace, publicId, systemId, baseURI);
+
+ Assert.assertNull(result.getByteStream());
+ Assert.assertNull(result.getCharacterStream());
+ Assert.assertNull(result.getStringData());
+ Assert.assertFalse(result.getCertifiedText());
+ Assert.assertSame(publicId, result.getPublicId());
+ Assert.assertSame(systemId, result.getSystemId());
+ Assert.assertSame(baseURI, result.getBaseURI());
+
+ result = resolver.resolveResource(type, namespace, publicId, systemId, baseURI);
+
+ Assert.assertNull(result.getByteStream());
+ Assert.assertNull(result.getCharacterStream());
+ Assert.assertNull(result.getStringData());
+ Assert.assertFalse(result.getCertifiedText());
+ Assert.assertSame(publicId, result.getPublicId());
+ Assert.assertEquals(url.toString(), result.getSystemId());
+ Assert.assertSame(baseURI, result.getBaseURI());
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/XMLCacheManagerRegistryConfigurationSourceTest.java
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/XMLCacheManagerRegistryConfigurationSourceTest.java (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/java/org/jboss/ha/ispn/config/xml/XMLCacheManagerRegistryConfigurationSourceTest.java 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,81 @@
+package org.jboss.ha.ispn.config.xml;
+
+import java.util.List;
+
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfiguration;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationEntry;
+import org.jboss.ha.ispn.config.CacheContainerRegistryConfigurationSource;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class XMLCacheManagerRegistryConfigurationSourceTest
+{
+ @Test
+ public void testDefault() throws Exception
+ {
+ CacheContainerRegistryConfigurationSource provider = new XMLCacheContainerRegistryConfigurationSource();
+
+ CacheContainerRegistryConfiguration configuration = provider.getRegistryConfiguration();
+
+ Assert.assertEquals("java:CacheManager", configuration.getBaseJndiName());
+ Assert.assertNull(configuration.getDefaultEntry());
+
+ List<CacheContainerRegistryConfigurationEntry> entries = configuration.getEntries();
+
+ Assert.assertEquals(1, entries.size());
+
+ CacheContainerRegistryConfigurationEntry entry = entries.get(0);
+
+ Assert.assertEquals("default", entry.getId());
+ Assert.assertNull(entry.getJndiName());
+ Assert.assertEquals(7, entry.getConfiguration().parseNamedConfigurations().size());
+ }
+
+ @Test
+ public void testMultiple() throws Exception
+ {
+ CacheContainerRegistryConfigurationSource provider = new XMLCacheContainerRegistryConfigurationSource("infinispan-configs-multiple.xml");
+
+ CacheContainerRegistryConfiguration registry = provider.getRegistryConfiguration();
+
+ Assert.assertEquals("java:CacheContainer", registry.getBaseJndiName());
+
+ List<CacheContainerRegistryConfigurationEntry> entries = registry.getEntries();
+
+ Assert.assertEquals(3, entries.size());
+
+ CacheContainerRegistryConfigurationEntry entry = entries.get(0);
+
+ Assert.assertEquals("manager0", entry.getId());
+ Assert.assertNull(entry.getJndiName());
+ Assert.assertNotSame(entry, registry.getDefaultEntry());
+ Assert.assertEquals(0, entry.getConfiguration().parseNamedConfigurations().size());
+ Assert.assertNull(entry.getAliases());
+
+ entry = entries.get(1);
+
+ Assert.assertEquals("manager1", entry.getId());
+ Assert.assertNull(entry.getJndiName());
+ Assert.assertSame(entry, registry.getDefaultEntry());
+ Assert.assertEquals(0, entry.getConfiguration().parseNamedConfigurations().size());
+ Assert.assertNotNull(entry.getAliases());
+ Assert.assertEquals(2, entry.getAliases().size());
+ Assert.assertEquals("alias1", entry.getAliases().get(0).getName());
+ Assert.assertEquals("default", entry.getAliases().get(0).getTarget());
+ Assert.assertEquals("alias2", entry.getAliases().get(1).getName());
+ Assert.assertEquals("default", entry.getAliases().get(1).getTarget());
+
+ entry = entries.get(2);
+
+ Assert.assertEquals("manager2", entry.getId());
+ Assert.assertEquals("java:CacheManager", entry.getJndiName());
+ Assert.assertNotSame(entry, registry.getDefaultEntry());
+ Assert.assertEquals(0, entry.getConfiguration().parseNamedConfigurations().size());
+ Assert.assertNotNull(entry.getAliases());
+ Assert.assertEquals(2, entry.getAliases().size());
+ Assert.assertEquals("alias1", entry.getAliases().get(0).getName());
+ Assert.assertEquals("default1", entry.getAliases().get(0).getTarget());
+ Assert.assertEquals("alias2", entry.getAliases().get(1).getName());
+ Assert.assertEquals("default2", entry.getAliases().get(1).getTarget());
+ }
+}
Added: projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs-multiple.xml
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs-multiple.xml (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs-multiple.xml 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<infinispan-configs default="manager1" base-jndi-name="java:CacheContainer" xmlns="urn:jboss:infinispan-configs:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:infinispan-configs:1.0 ../../src/main/resources/infinispan-configs.xsd">
+ <infinispan-config name="manager0">
+ <infinispan xmlns="urn:infinispan:config:4.0"/>
+ </infinispan-config>
+ <infinispan-config name="manager1">
+ <alias name="alias1">default</alias>
+ <alias name="alias2">default</alias>
+ <infinispan xmlns="urn:infinispan:config:4.0"/>
+ </infinispan-config>
+ <infinispan-config name="manager2" jndi-name="java:CacheManager">
+ <alias name="alias1">default1</alias>
+ <alias name="alias2">default2</alias>
+ <infinispan xmlns="urn:infinispan:config:4.0"/>
+ </infinispan-config>
+</infinispan-configs>
\ No newline at end of file
Added: projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs.xml
===================================================================
--- projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs.xml (rev 0)
+++ projects/cluster/ha-server-ispn/trunk/src/test/resources/infinispan-configs.xml 2010-07-09 20:10:10 UTC (rev 106539)
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<infinispan-configs xmlns="urn:jboss:infinispan-configs:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:infinispan-configs:1.0 ../../src/main/resources/infinispan-configs.xsd">
+ <infinispan-config name="default">
+ <!-- *************************** -->
+ <!-- System-wide global settings -->
+ <!-- *************************** -->
+ <infinispan xmlns="urn:infinispan:config:4.0">
+
+ <global>
+
+ <!-- Note that if these are left blank, defaults are used. See the user guide for what these defaults are -->
+ <asyncListenerExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
+ <properties>
+ <property name="maxThreads" value="5"/>
+ <property name="threadNamePrefix" value="AsyncListenerThread"/>
+ </properties>
+ </asyncListenerExecutor>
+
+ <asyncTransportExecutor factory="org.infinispan.executors.DefaultExecutorFactory">
+ <properties>
+ <property name="maxThreads" value="25"/>
+ <property name="threadNamePrefix" value="AsyncSerializationThread"/>
+ </properties>
+ </asyncTransportExecutor>
+
+ <evictionScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="EvictionThread"/>
+ </properties>
+ </evictionScheduledExecutor>
+
+ <replicationQueueScheduledExecutor factory="org.infinispan.executors.DefaultScheduledExecutorFactory">
+ <properties>
+ <property name="threadNamePrefix" value="ReplicationQueueThread"/>
+ </properties>
+ </replicationQueueScheduledExecutor>
+
+ <globalJmxStatistics enabled="true" jmxDomain="infinispan"/>
+
+ <!--
+ If the transport is omitted, there is no way to create distributed or clustered caches.
+ There is no added cost to defining a transport but not creating a cache that uses one, since the transport
+ is created and initialized lazily.
+ -->
+ <transport clusterName="infinispan-cluster" distributedSyncTimeout="50000" nodeName="Jalapeno"/>
+ <!-- Note that the JGroups transport uses sensible defaults if no configuration property is defined. -->
+ <!-- See the JGroupsTransport javadocs for more flags -->
+
+ <!-- Again, sensible defaults are used here if this is omitted. -->
+ <serialization marshallerClass="org.infinispan.marshall.VersionAwareMarshaller" version="1.0"/>
+
+ <!--
+ Used to register JVM shutdown hooks.
+ hookBehavior: DEFAULT, REGISTER, DONT_REGISTER
+ -->
+ <shutdown hookBehavior="DEFAULT"/>
+ </global>
+
+ <!-- *************************** -->
+ <!-- Default "template" settings -->
+ <!-- *************************** -->
+ <!-- this is used as a "template" configuration for all caches in the system. -->
+ <default xmlns="urn:infinispan:config:4.0">
+ <!--
+ isolation levels supported: READ_COMMITTED and REPEATABLE_READ
+ -->
+ <locking
+ isolationLevel="REPEATABLE_READ"
+ lockAcquisitionTimeout="20000"
+ writeSkewCheck="false"
+ concurrencyLevel="500"
+ useLockStriping="true"
+ />
+
+ <!--
+ Used to register a transaction manager and participate in ongoing transactions.
+ -->
+ <transaction
+ transactionManagerLookupClass="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"
+ syncRollbackPhase="false"
+ syncCommitPhase="false"
+ useEagerLocking="false"/>
+
+ <!--
+ Used to register JMX statistics in any available MBean server
+ -->
+ <jmxStatistics enabled="false"/>
+
+ <lazyDeserialization enabled="false"/>
+
+ <!--
+ Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods.
+ -->
+ <invocationBatching enabled="false"/>
+
+ <!--
+ This element specifies that the cache is clustered.
+ modes supported: distribution (d), replication (r) or invalidation (i).
+ -->
+ <clustering mode="replication">
+
+ <!--
+ Defines whether to retrieve state on startup
+ -->
+ <stateRetrieval timeout="20000" fetchInMemoryState="false"/>
+
+ <!--
+ Network calls are synchronous.
+ -->
+ <sync replTimeout="20000"/>
+ <!--
+ Uncomment this for async replication.
+ -->
+ <!--<async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500"/>-->
+ </clustering>
+
+ </default>
+
+ <!-- ************************************** -->
+ <!-- Individually configured "named" caches -->
+ <!-- ************************************** -->
+
+ <namedCache name="asyncCache">
+ <clustering mode="replication">
+ <async asyncMarshalling="true"/>
+ </clustering>
+ </namedCache>
+
+ <!-- Note that any of the elements appearing in a namedCache section can also appear in the default section as a template. -->
+ <namedCache name="evictionCache">
+
+ <!--
+ Eviction configuration. WakeupInterval defines how often the eviction thread runs, in milliseconds. 0 means
+ the eviction thread will never run. A separate executor is used for eviction in each cache.
+ -->
+ <eviction wakeUpInterval="500" maxEntries="5000" strategy="FIFO" threadPolicy="PIGGYBACK"/>
+ <expiration lifespan="60000" maxIdle="1000"/>
+ </namedCache>
+
+
+ <namedCache name="persistentCache">
+ <!--
+ Cache loaders.
+
+ If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted. Similarly, when the state
+ is accessed again, it is removed from the cache loaderold and loaded into memory.
+
+ Otherwise, state is always maintained in the cache loaderold as well as in memory.
+
+ Set 'shared' to true if all instances in the cluster use the same cache loaderold instance, e.g., are talking to the
+ same database.
+
+ If "preload" is true, all keys are loaded from the cache loaderold into memory upon starting the cache.
+ -->
+ <loaders passivation="false" shared="false" preload="true">
+
+ <!--
+ We can have multiple cache loaders, which get chained
+ -->
+ <loader class="org.infinispan.loaders.file.FileCacheStore" fetchPersistentState="true"
+ ignoreModifications="true" purgeOnStartup="true">
+
+ <!-- See the documentation for more configuration examples and flags. -->
+ <properties>
+ <property name="location" value="${java.io.tmpdir}"/>
+ </properties>
+ <singletonStore enabled="true" pushStateWhenCoordinator="true" pushStateTimeout="20000"/>
+ <async enabled="true" flushLockTimeout="15000" threadPoolSize="5"/>
+ </loader>
+ </loaders>
+
+ <deadlockDetection enabled="true" spinDuration="1000"/>
+
+ </namedCache>
+
+ <namedCache name="distributedCache">
+ <clustering mode="distribution">
+ <sync/>
+ <!--
+ num owners: number of owners for each key. The larger this number is, the safer your data will be, but the
+ slower the cluster will be.
+
+ rehashRpcTimeout: timeout used for RPC calls relating to rehashing. This defaults to 600000 (10 minutes).
+ -->
+ <hash numOwners="3" rehashWait="120000" rehashRpcTimeout="600000"/>
+ <l1 enabled="true" lifespan="600000"/>
+ </clustering>
+ </namedCache>
+
+ <namedCache name="withReplicatinQueue">
+ <clustering>
+ <async useReplQueue="true" replQueueInterval="100" replQueueMaxElements="200"/>
+ </clustering>
+ </namedCache>
+
+ <namedCache name="lockPerEntry">
+ <locking useLockStriping="false" />
+ </namedCache>
+
+ <namedCache name="cacheWithCustomInterceptors">
+ <!--
+ Define custom interceptors. All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor
+ -->
+ <!--
+ <customInterceptors>
+ <interceptor position="first" class="com.mycompany.CustomInterceptor1">
+ <property name="com.mycompany.attributeOne" value="value1" />
+ <property name="com.mycompany.attributeTwo" value="value2" />
+ </interceptor>
+ <interceptor position="last" class="com.mycompany.CustomInterceptor2"/>
+ <interceptor index="3" class="com.mycompany.CustomInterceptor1"/>
+ <interceptor before="org.infinispanpan.interceptors.CallInterceptor" class="com.mycompany.CustomInterceptor2"/>
+ <interceptor after="org.infinispanpan.interceptors.CallInterceptor" class="com.mycompany.CustomInterceptor1"/>
+ </customInterceptors>
+ -->
+ </namedCache>
+ </infinispan>
+ </infinispan-config>
+</infinispan-configs>
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list