You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2007/05/11 03:10:26 UTC
svn commit: r537063 - in /geronimo/sandbox/gcache/client: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/geronimo/ src/main/java/org/apache/geronimo/gcache/
src/main/java/org/apache/geronimo/gcach...
Author: jgenender
Date: Thu May 10 18:10:24 2007
New Revision: 537063
URL: http://svn.apache.org/viewvc?view=rev&rev=537063
Log:
Add client
Added:
geronimo/sandbox/gcache/client/gcache-client.iml
geronimo/sandbox/gcache/client/pom.xml
geronimo/sandbox/gcache/client/src/
geronimo/sandbox/gcache/client/src/main/
geronimo/sandbox/gcache/client/src/main/java/
geronimo/sandbox/gcache/client/src/main/java/org/
geronimo/sandbox/gcache/client/src/main/java/org/apache/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/ClientConfigBuilder.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GCacheClient.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GcacheClientConfiguration.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/JaxbGcacheClientConfigurationFactory.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientConnectionManager.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportFactory.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportService.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/DisconnectionException.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientCommandVisitor.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketHandler.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportService.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactory.java
geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPReceiverFuture.java
geronimo/sandbox/gcache/client/src/main/resources/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/
geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/tcp
geronimo/sandbox/gcache/client/src/main/resources/gcache-client-config-default.xml
geronimo/sandbox/gcache/client/src/main/xsd/
geronimo/sandbox/gcache/client/src/main/xsd/catalog.cat
geronimo/sandbox/gcache/client/src/main/xsd/gcache-client.xsd
geronimo/sandbox/gcache/client/src/test/
geronimo/sandbox/gcache/client/src/test/java/
geronimo/sandbox/gcache/client/src/test/java/org/
geronimo/sandbox/gcache/client/src/test/java/org/apache/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/ClientConfigBuilderTest.java
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/
geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactoryTest.java
geronimo/sandbox/gcache/client/src/test/resources/
geronimo/sandbox/gcache/client/src/test/resources/gcache-client-config.xml
geronimo/sandbox/gcache/client/src/test/resources/log4j.xml
Added: geronimo/sandbox/gcache/client/gcache-client.iml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/gcache-client.iml?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/gcache-client.iml (added)
+++ geronimo/sandbox/gcache/client/gcache-client.iml Thu May 10 18:10:24 2007
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="false" type="JAVA_MODULE">
+ <component name="ModuleRootManager" />
+ <component name="NewModuleRootManager" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <exclude-output />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/jaxb" isTestSource="false" />
+ <excludeFolder url="file://$MODULE_DIR$/target/classes" />
+ <excludeFolder url="file://$MODULE_DIR$/target/surefire-reports" />
+ <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/backport-util-concurrent/backport-util-concurrent/2.2/backport-util-concurrent-2.2.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/org/apache/mina/mina-core/1.0.0/mina-core-1.0.0.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module" module-name="gcache-common" />
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/log4j/log4j/1.2.8/log4j-1.2.8.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/commons-collections/commons-collections/2.1/commons-collections-2.1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/com/sun/xml/bind/jaxb-impl/2.0.3/jaxb-impl-2.0.3.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/org/testng/testng/5.1/testng-5.1-jdk15.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///Users/jeffgenender/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntryProperties />
+ </component>
+</module>
+
Added: geronimo/sandbox/gcache/client/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/pom.xml?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/pom.xml (added)
+++ geronimo/sandbox/gcache/client/pom.xml Thu May 10 18:10:24 2007
@@ -0,0 +1,62 @@
+<project>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.geronimo.gcache</groupId>
+ <artifactId>gcache</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>gcache-client</artifactId>
+ <packaging>jar</packaging>
+
+ <name>GCache :: Client</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.gcache</groupId>
+ <artifactId>gcache-common</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.ehcache</groupId>
+ <artifactId>ehcache</artifactId>
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jaxb2-maven-plugin</artifactId>
+ <configuration>
+ <catalog>${basedir}/src/main/xsd/catalog.cat</catalog>
+ <packageName>
+ org.apache.geronimo.gcache.client.dd
+ </packageName>
+ <extension>true</extension>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/ClientConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/ClientConfigBuilder.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/ClientConfigBuilder.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/ClientConfigBuilder.java Thu May 10 18:10:24 2007
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.client;
+
+import java.net.URI;
+import java.net.URL;
+import java.util.List;
+
+import net.sf.ehcache.config.CacheConfiguration;
+import net.sf.ehcache.config.Configuration;
+import net.sf.ehcache.config.DiskStoreConfiguration;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gcache.client.dd.CacheType;
+import org.apache.geronimo.gcache.client.dd.DefaultCacheType;
+import org.apache.geronimo.gcache.client.dd.DiscoveryType;
+import org.apache.geronimo.gcache.client.dd.DiskStoreType;
+import org.apache.geronimo.gcache.client.dd.GcacheClientConfig;
+import org.apache.geronimo.gcache.client.dd.JaxbGcacheClientConfigurationFactory;
+import org.apache.geronimo.gcache.dd.GcacheConfiguration;
+
+public class ClientConfigBuilder {
+
+ private static final Log log = LogFactory.getLog(ClientConfigBuilder.class);
+
+ private static final String CLASSPATH_CONFIGURATION_FILE = "gcache-client-config.xml";
+
+ private static final String DEFAULT_CLASSPATH_CONFIGURATION_FILE = "gcache-client-config-default.xml";
+
+ public GcacheClientConfiguration getConfig(URL fileURL) {
+
+ GcacheClientConfiguration config = null;
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+ // Was a file passed to us?
+ if (fileURL != null) {
+ config = processConfig(fileURL);
+ return config;
+ }
+
+ // Is the configuration file in the path somewhere?
+ URL configURL = cl.getResource(CLASSPATH_CONFIGURATION_FILE);
+ if (configURL != null) {
+ config = processConfig(configURL);
+
+ return config;
+ }
+
+ // Read the default config
+ log.warn("Using " + DEFAULT_CLASSPATH_CONFIGURATION_FILE
+ + " for configuration. No cache configurations are loaded. Please consider having your own.");
+
+ configURL = cl.getResource(DEFAULT_CLASSPATH_CONFIGURATION_FILE);
+ if (configURL == null) {
+ throw new RuntimeException(DEFAULT_CLASSPATH_CONFIGURATION_FILE + " not found, not configuration can be loaded.");
+ }
+ config = processConfig(configURL);
+ return config;
+ }
+
+ private GcacheClientConfiguration processConfig(URL url) {
+ try {
+ GcacheClientConfiguration gcacheClientConfig = new GcacheClientConfiguration();
+ Configuration ehcacheConfig = new Configuration();
+ DiskStoreConfiguration diskConfig = null;
+ CacheConfiguration defaultCache = null;
+
+ JaxbGcacheClientConfigurationFactory factory = new JaxbGcacheClientConfigurationFactory();
+
+ GcacheClientConfig config = factory.getConfig(url);
+
+ // Get the discovery
+ DiscoveryType discovery = config.getDiscovery();
+ if (discovery != null) {
+ gcacheClientConfig.setUser(discovery.getUser());
+ gcacheClientConfig.setPassword(discovery.getPassword());
+
+ URI discoveryURI = new URI(discovery.getUri());
+ gcacheClientConfig.setDiscoveryUri(discoveryURI);
+
+ }
+
+ // Read the disk store
+ DiskStoreType diskStore = config.getDiskStore();
+ if (diskStore != null) {
+ String path = diskStore.getPath();
+ diskConfig = new DiskStoreConfiguration();
+ diskConfig.setPath(path);
+ }
+
+ // Read the default cache
+ DefaultCacheType defaultType = config.getDefaultCache();
+ if (defaultType != null) {
+ defaultCache = new CacheConfiguration();
+ defaultCache.setDiskExpiryThreadIntervalSeconds(defaultType.getDiskExpiryThreadIntervalSeconds());
+ defaultCache.setMaxElementsInMemory(defaultType.getMaxElementsInMemory());
+ defaultCache.setEternal(defaultType.isEternal());
+ defaultCache.setDiskPersistent(defaultType.isDiskPersistent());
+ defaultCache.setOverflowToDisk(defaultType.isOverflowToDisk());
+ defaultCache.setTimeToIdleSeconds(defaultType.getTimeToIdleSeconds());
+ defaultCache.setTimeToLiveSeconds(defaultType.getTimeToLiveSeconds());
+ defaultCache.setMemoryStoreEvictionPolicy(defaultType.getMemoryStoreEvictionPolicy());
+ }
+
+ ehcacheConfig.setDefaultCacheConfiguration(defaultCache);
+ ehcacheConfig.addDiskStore(diskConfig);
+
+ // Read the cache list
+ List<CacheType> cacheList = config.getCaches();
+ for (CacheType cacheType : cacheList) {
+ CacheConfiguration cache = new CacheConfiguration();
+ cache.setName(cacheType.getName());
+ cache.setDiskExpiryThreadIntervalSeconds(cacheType.getDiskExpiryThreadIntervalSeconds());
+ cache.setMaxElementsInMemory(cacheType.getMaxElementsInMemory());
+ cache.setEternal(cacheType.isEternal());
+ cache.setDiskPersistent(cacheType.isDiskPersistent());
+ cache.setOverflowToDisk(cacheType.isOverflowToDisk());
+ cache.setTimeToIdleSeconds(cacheType.getTimeToIdleSeconds());
+ cache.setTimeToLiveSeconds(cacheType.getTimeToLiveSeconds());
+ cache.setMemoryStoreEvictionPolicy(cacheType.getMemoryStoreEvictionPolicy());
+
+ ehcacheConfig.addCache(cache);
+ }
+
+ gcacheClientConfig.setEhcacheConfig(ehcacheConfig);
+
+ return gcacheClientConfig;
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GCacheClient.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GCacheClient.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GCacheClient.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GCacheClient.java Thu May 10 18:10:24 2007
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.client;
+
+import java.io.File;
+
+import net.sf.ehcache.CacheManager;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.dd.GcacheConfiguration;
+import org.apache.geronimo.gcache.transports.ClientConnectionManager;
+import org.apache.geronimo.gcache.transports.ConnectionManager;
+import org.apache.geronimo.gcache.transports.tcp.TCPClientCommandVisitor;
+
+public class GCacheClient {
+
+ private String configFile;
+ private CacheInfoHolder info;
+ private CacheManager cacheMgr;
+ private ClientConnectionManager connectionManager;
+
+ public GCacheClient(String configFile) {
+ super();
+ this.configFile = configFile;
+ }
+
+ public void start() throws Exception {
+ // Create a cache with the configuration from the gcache-config file
+ ClientConfigBuilder builder = new ClientConfigBuilder();
+
+ GcacheClientConfiguration config = builder.getConfig(configFile == null ? null : (new File(configFile)).toURL());
+
+ cacheMgr = new CacheManager(config.getEhcacheConfig());
+ cacheMgr = new CacheManager();
+ info = new CacheInfoHolder(cacheMgr);
+ info.setCommandVisitor(new TCPClientCommandVisitor(info));
+
+ connectionManager = new ClientConnectionManager(info);
+ connectionManager.setDiscoveryURI(config.getDiscoveryUri());
+ connectionManager.setUserName(config.getUser());
+ connectionManager.setPassword(config.getPassword());
+ connectionManager.start();
+
+ }
+
+ public void stop() throws Exception{
+ connectionManager.stop();
+ }
+
+ public void put(String session, Object key, Object value) {
+ }
+
+ public void get(String session, Object key) {
+
+ }
+
+ public void remove(String session, Object key) {
+
+ }
+
+ public void lock(String session, Object key) {
+ connectionManager.waitForConnection();
+ //TODO: Add lock calls here
+ }
+
+ public void release(String session, Object key) {
+
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GcacheClientConfiguration.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GcacheClientConfiguration.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GcacheClientConfiguration.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/GcacheClientConfiguration.java Thu May 10 18:10:24 2007
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.client;
+
+import java.net.URI;
+
+import org.apache.geronimo.gcache.dd.GcacheConfiguration;
+
+public class GcacheClientConfiguration extends GcacheConfiguration {
+
+ private String user;
+ private String password;
+ private URI discoveryUri;
+
+ public URI getDiscoveryUri() {
+ return discoveryUri;
+ }
+ public void setDiscoveryUri(URI discoveryUri) {
+ this.discoveryUri = discoveryUri;
+ }
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ public String getUser() {
+ return user;
+ }
+ public void setUser(String user) {
+ this.user = user;
+ }
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/JaxbGcacheClientConfigurationFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/JaxbGcacheClientConfigurationFactory.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/JaxbGcacheClientConfigurationFactory.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/client/dd/JaxbGcacheClientConfigurationFactory.java Thu May 10 18:10:24 2007
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.client.dd;
+
+import java.net.URL;
+
+import org.apache.geronimo.gcache.dd.JaxbConfigFactory;
+
+public class JaxbGcacheClientConfigurationFactory extends JaxbConfigFactory {
+
+ public static final String SCHEMA = "http://geronimo.apache.org/xml/ns/gcache-client-1.0";
+
+ public GcacheClientConfig getConfig(URL url) throws Exception {
+ return getConfig(url, GcacheClientConfig.class);
+ }
+
+ @Override
+ public String getSchema() {
+ return SCHEMA;
+ }
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientConnectionManager.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientConnectionManager.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientConnectionManager.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientConnectionManager.java Thu May 10 18:10:24 2007
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.transports.discovery.DiscoveryAgentFactory;
+
+public class ClientConnectionManager extends ConnectionManager {
+
+ private static Log log = LogFactory.getLog(ClientConnectionManager.class);
+
+ private boolean stopped = true;
+
+ AtomicBoolean connected = new AtomicBoolean(false);
+
+ private Object connectionLatch = new Object();
+
+ private ConnectionMonitor monitor;
+
+ public ClientConnectionManager(CacheInfoHolder info) {
+ super(info);
+ }
+
+ @Override
+ public void start() throws Exception {
+
+ stopped = false;
+
+ if (discoveryURI != null) {
+ discovery = DiscoveryAgentFactory.createDiscoveryAgent(discoveryURI, info);
+ }
+
+ if (discovery != null)
+ discovery.start();
+
+ monitor = new ConnectionMonitor(this);
+ monitor.start();
+
+ }
+
+ @Override
+ public void stop() throws Exception {
+
+ stopped = true;
+
+ // Shut down the connection monitor
+ monitor.signal();
+
+ if (discovery != null)
+ discovery.stop();
+
+ if (transport != null) {
+ transport.stop();
+ }
+
+ }
+
+ public boolean isConnected() {
+ return connected.get();
+ }
+
+ public void waitForConnection() {
+ if (!isConnected()) {
+ try {
+ synchronized(connectionLatch){
+ connectionLatch.wait();
+ }
+ } catch (InterruptedException e) {
+ log.error(e);
+ }
+ }
+ }
+
+ public void onDisconnect() throws Exception {
+ // Signal the monitor to get a connection
+ connected.set(false);
+ monitor.signal();
+ }
+
+ private void connectToServer() {
+ DiscoveryManager disc = info.getDiscoveryManager();
+ while (!stopped) {
+ String services[] = disc.getServices();
+
+ // If nobody is out there, then sleep for a second to listen for
+ // servers
+ if (services.length == 0) {
+ sleeper(1000);
+ continue;
+ }
+
+ // TODO - We need to identify the master here!!!!
+
+ // Ok, we have some servers, lets go for the first one in line
+ URI uri = null;
+ try {
+ uri = new URI(services[0]);
+ } catch (URISyntaxException e) {
+ // This should never happen
+ log.error(e);
+ // Take a nap
+ sleeper(1000);
+ // And try again
+ continue;
+ }
+
+ transportURI = uri;
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Attempting to connect client to " + transportURI.toASCIIString());
+ }
+ transport = ClientTransportFactory.createTransportService(transportURI, info, this);
+ } catch (IOException e) {
+ transport = null;
+ log.error(e);
+ // Take a nap
+ sleeper(1000);
+ // And try again
+ continue;
+ }
+ transport.setUserName(userName);
+ transport.setPassword(password);
+
+ try {
+ transport.start();
+ int tries = 0;
+
+ // Try to connect 3 times
+ while (!((ClientTransportService) transport).connect()) {
+ if (tries++ > 2)
+ break;
+ sleeper(500);
+ }
+ if (tries > 2) {
+ log.error("Unable to connect to " + transportURI);
+ continue;
+ }
+
+ // Now authenticate
+ if (!((ClientTransportService) transport).join()) {
+ log.error("Unable to authenticate to " + transportURI.toASCIIString());
+ continue;
+ }
+
+ connected.set(true);
+ synchronized(connectionLatch){
+ connectionLatch.notifyAll();
+ }
+
+ } catch (Exception e) {
+ transport = null;
+ log.error(e);
+ // Take a nap
+ sleeper(1000);
+ // And try again
+ continue;
+ }
+
+ return;
+
+ }
+ }
+
+ private void sleeper(int millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (InterruptedException e) {
+ // This really should not ever happen
+ log.error(e);
+ }
+ }
+
+ class ConnectionMonitor extends Thread {
+ private Object monitor = new Object();
+
+ private ClientConnectionManager mgr;
+
+ public ConnectionMonitor(ClientConnectionManager mgr) {
+ super();
+ this.mgr = mgr;
+ }
+
+ public void signal() {
+ // Shut down the old transport
+ if (transport != null) {
+ try {
+ transport.stop();
+ } catch (Exception e) {
+ log.error(e);
+ }
+ }
+
+ // Signal the monitor to reconnect
+ synchronized (monitor) {
+ monitor.notify();
+ }
+ }
+
+ @Override
+ public void run() {
+ do {
+ mgr.connectToServer();
+
+ synchronized (monitor) {
+ try {
+ monitor.wait();
+ } catch (InterruptedException e) {
+ // We are done
+ return;
+ }
+ }
+
+ } while (!stopped);
+
+ }
+
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportFactory.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportFactory.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportFactory.java Thu May 10 18:10:24 2007
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.util.FactoryFinder;
+import org.apache.geronimo.gcache.util.IOExceptionSupport;
+
+public abstract class ClientTransportFactory {
+
+ static final private FactoryFinder transportFactoryFinder = new FactoryFinder("META-INF/services/org/apache/geronimo/gcache/client/transport/");
+ static final private ConcurrentHashMap transportFactorys = new ConcurrentHashMap();
+
+ /**
+ * @param location
+ * @return
+ * @throws IOException
+ */
+ private static ClientTransportFactory findTransportFactory(URI location) throws IOException {
+ String scheme = location.getScheme();
+ if( scheme == null )
+ throw new IOException("Transport not scheme specified: [" + location + "]");
+ ClientTransportFactory tf = (ClientTransportFactory) transportFactorys.get(scheme);
+ if (tf == null) {
+ // Try to load if from a META-INF property.
+ try {
+ tf = (ClientTransportFactory) transportFactoryFinder.newInstance(scheme);
+ transportFactorys.put(scheme, tf);
+ }
+ catch (Throwable e) {
+ throw IOExceptionSupport.create("Transport scheme NOT recognized: [" + scheme + "]", e);
+ }
+ }
+ return tf;
+ }
+
+ public static TransportService createTransportService(URI uri, CacheInfoHolder info, ClientConnectionManager connectionManager) throws IOException{
+ ClientTransportFactory tf = findTransportFactory(uri);
+ return tf.doCreateTransportService(uri, info, connectionManager);
+
+ }
+
+ abstract protected TransportService doCreateTransportService(URI uri, CacheInfoHolder info, ClientConnectionManager connectionManager) throws IOException;
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportService.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportService.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportService.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/ClientTransportService.java Thu May 10 18:10:24 2007
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports;
+
+public interface ClientTransportService {
+
+ public boolean connect();
+
+ public void putSession(String cacheName, String sessionId, Object value);
+
+ public void putEntry(String cacheName, String sessionId, Object key, Object value);
+
+ public void removeSession(String cacheName, String session);
+
+ public void removeEntry(String cacheName, String sessionId, Object key);
+
+ public boolean join();
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/DisconnectionException.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/DisconnectionException.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/DisconnectionException.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/DisconnectionException.java Thu May 10 18:10:24 2007
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports;
+
+public class DisconnectionException extends Exception {
+
+ private static final long serialVersionUID = -111080993146368517L;
+
+ public DisconnectionException() {
+ super();
+ }
+
+ public DisconnectionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public DisconnectionException(String message) {
+ super(message);
+ }
+
+ public DisconnectionException(Throwable cause) {
+ super(cause);
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientCommandVisitor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientCommandVisitor.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientCommandVisitor.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientCommandVisitor.java Thu May 10 18:10:24 2007
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.command.BulkSendCommand;
+import org.apache.geronimo.gcache.command.ErrorCommand;
+import org.apache.geronimo.gcache.command.GetSessionCommand;
+import org.apache.geronimo.gcache.command.LockAcquiredCommand;
+import org.apache.geronimo.gcache.command.LockCommand;
+import org.apache.geronimo.gcache.command.LockReleasedCommand;
+import org.apache.geronimo.gcache.command.MessageAckCommand;
+import org.apache.geronimo.gcache.command.PutEntryCommand;
+import org.apache.geronimo.gcache.command.PutSessionCommand;
+import org.apache.geronimo.gcache.command.ReleaseLockCommand;
+import org.apache.geronimo.gcache.command.RemoveEntryCommand;
+import org.apache.geronimo.gcache.command.RemoveSessionCommand;
+import org.apache.mina.common.IoSession;
+
+public class TCPClientCommandVisitor extends BaseCommandVisitor {
+
+ private CacheInfoHolder infoHolder;
+
+ public TCPClientCommandVisitor(CacheInfoHolder infoHolder) {
+ super();
+ this.infoHolder = infoHolder;
+ }
+
+ public void processPutSession(PutSessionCommand command) {
+ Cache cache = infoHolder.getCache(command.getCacheName(), true);
+
+ cache.put(new Element(command.getSessionId(), command.getPayload()));
+
+ sendAck(command);
+
+ }
+
+ @SuppressWarnings( { "unchecked" })
+ public void processPutEntry(PutEntryCommand command) {
+ Cache cache = infoHolder.getCache(command.getCacheName(), true);
+
+ // Check if we are using sessions
+ if (command.hasSession()) {
+
+ Map sessionMap = null;
+
+ // We are so use the session maps that is stored
+ Element element = cache.get(command.getSessionId());
+ if (element != null) {
+ sessionMap = (Map) element.getObjectValue();
+ } else {
+ sessionMap = Collections.synchronizedMap(new HashMap());
+ }
+
+ sessionMap.put(command.getHashableKey(), command.getPayload());
+ // Put the session away
+ cache.put(new Element(command.getSessionId(), sessionMap));
+
+ } else {
+
+ // No session map so store the value
+ cache.put(new Element(command.getHashableKey(), command.getPayload()));
+ }
+
+ sendAck(command);
+ }
+
+ public void processMessageAck(MessageAckCommand command) {
+ // This should never get called as the filters will handle it
+ }
+
+ public void processGetSession(GetSessionCommand command) {
+ Cache cache = infoHolder.getCache(command.getCacheName(), true);
+ Object key = cache.get(command.getSessionId());
+ Element element = cache.get(key);
+
+ }
+
+ public void processBulkSend(BulkSendCommand command) {
+
+ // Get the command count and set the attribute to count em down
+ int commandCount = command.getNumberOfCommands();
+
+ IoSession sess = (IoSession) command.getAttachment();
+ if (sess == null)
+ return;
+
+ // Setup the BulkCommand filter to process bulk commands
+ sess.setAttribute(Constants.BULK_COUNT + command.getCommandId(), commandCount);
+ sess.setAttribute(Constants.BULK_COMMAND_ID + command.getCommandId());
+
+ // Do not send an ack here, the filter will send it once all
+ // of the following commands have been received
+ }
+
+ public void processRemoveEntry(RemoveEntryCommand command) {
+ Cache cache = infoHolder.getCache(command.getCacheName(), true);
+
+ // Check if we are using sessions
+ if (command.hasSession()) {
+
+ Map sessionMap = null;
+
+ // We are so use the session maps that is stored
+ Element element = cache.get(command.getSessionId());
+ if (element != null) {
+ sessionMap = (Map) element.getObjectValue();
+ } else {
+ sessionMap = Collections.synchronizedMap(new HashMap());
+ }
+
+ sessionMap.remove(command.getKey());
+
+ // Put the session away
+ cache.put(new Element(command.getSessionId(), sessionMap));
+
+ } else {
+
+ // No session map so remove the value
+ cache.remove(command.getHashableKey());
+ }
+
+ sendAck(command);
+ }
+
+ public void processRemoveSession(RemoveSessionCommand command) {
+ Cache cache = infoHolder.getCache(command.getCacheName(), true);
+
+ // Be sure a session was sent
+ if (command.hasSession()) {
+ cache.remove(command.getSessionId());
+ }
+
+ sendAck(command);
+ }
+
+ public void processLockAcquired(LockAcquiredCommand command) {
+ // TODO - Fill in
+ }
+
+ public void processLockSession(LockCommand command) {
+ // TODO - Fill in
+ }
+
+ public void processReleaseLockSession(ReleaseLockCommand command) {
+ // TODO - Fill in
+ }
+
+ public void processError(ErrorCommand command) {
+ // TODO - Fill in
+ }
+
+ public void processLockReleased(LockReleasedCommand command) {
+ // TODO - Fill in
+ }
+
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketHandler.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketHandler.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketHandler.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketHandler.java Thu May 10 18:10:24 2007
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.command.BaseCommand;
+import org.apache.geronimo.gcache.command.Command;
+import org.apache.geronimo.gcache.transports.ClientConnectionManager;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.WriteFuture;
+
+public class TCPClientSocketHandler extends TCPSocketHandler {
+ ConcurrentHashMap<Long, TCPReceiverFuture> receivers = new ConcurrentHashMap<Long, TCPReceiverFuture>();
+ ClientConnectionManager connectionManager;
+
+ public TCPClientSocketHandler(CacheInfoHolder infoHolder, ClientConnectionManager connectionManager, int threadPoolSize) {
+ super(infoHolder, threadPoolSize);
+ this.connectionManager = connectionManager;
+ }
+
+ public TCPClientSocketHandler(CacheInfoHolder infoHolder, ClientConnectionManager connectionManager) {
+ super(infoHolder);
+ this.connectionManager = connectionManager;
+ }
+
+ @Override
+ public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
+ }
+
+ @Override
+ public void sessionClosed(IoSession sess) throws Exception {
+ //Clean up any open receivers by forcing a disconnect
+ for (Long key : receivers.keySet()) {
+ TCPReceiverFuture receiver = receivers.remove(key);
+ if (receiver != null){
+ receiver.disconnect();
+ }
+ }
+ connectionManager.onDisconnect();
+ }
+
+ @Override
+ public void messageReceived(IoSession session, Object obj) throws Exception {
+
+ Command command = (Command) obj;
+
+ //Lookup and remove if we have a receiver
+ TCPReceiverFuture receiver = receivers.remove(command.getCommandId());
+
+ //If we have a receiver, process the answer directly to the client
+ if (receiver != null) {
+ receiver.setResponse(command);
+ return;
+ }
+
+ //Otherwise process the answer with the visitor
+ command.setAttachment(session);
+ command.execute(infoHolder.getCommandVisitor());
+
+ }
+
+ public TCPReceiverFuture synchronousSend(IoSession sess, BaseCommand command) {
+ TCPReceiverFuture receiver = new TCPReceiverFuture();
+ command.getCommandId();
+ receivers.put(command.getCommandId(), receiver);
+ WriteFuture future = sess.write(command);
+
+ // Wait for it to be written
+ future.join();
+
+ return receiver;
+
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportService.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportService.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportService.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportService.java Thu May 10 18:10:24 2007
@@ -0,0 +1,254 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.net.InetSocketAddress;
+import java.security.PublicKey;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gcache.command.AuthCommand;
+import org.apache.geronimo.gcache.command.AuthSuccessfulCommand;
+import org.apache.geronimo.gcache.command.BaseCommand;
+import org.apache.geronimo.gcache.command.Command;
+import org.apache.geronimo.gcache.command.HandShakeCommand;
+import org.apache.geronimo.gcache.command.PublicKeyCommand;
+import org.apache.geronimo.gcache.command.PutEntryCommand;
+import org.apache.geronimo.gcache.command.PutSessionCommand;
+import org.apache.geronimo.gcache.command.RemoveEntryCommand;
+import org.apache.geronimo.gcache.transports.ClientConnectionManager;
+import org.apache.geronimo.gcache.transports.ClientTransportService;
+import org.apache.geronimo.gcache.transports.DisconnectionException;
+import org.apache.geronimo.gcache.util.CipherUtil;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.WriteFuture;
+import org.apache.mina.filter.LoggingFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.SocketConnector;
+import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
+
+public class TCPClientSocketTransportService extends TCPTransportService implements ClientTransportService {
+
+ private static Log log = LogFactory.getLog(TCPClientSocketTransportService.class);
+
+ private boolean stopped = true;
+
+ private IoHandler handler;
+
+ private IoSession sess;
+
+ private String userId = "system";
+
+ private String password = "manager";
+
+ private ClientConnectionManager connectionManager;
+
+ @Override
+ public void start() throws Exception {
+ stopped = false;
+ }
+
+ @Override
+ public void stop() throws Exception {
+ stopped = true;
+ disconnect();
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public void setConnectionManager(ClientConnectionManager connectionManager) {
+ this.connectionManager = connectionManager;
+ }
+
+ public boolean connect() {
+ // Get the proper attributes
+ int port = tcpURI.getPort();
+ String host = tcpURI.getHost();
+
+ // Create an address
+ InetSocketAddress address = new InetSocketAddress(host, port);
+
+ if (sess != null && sess.isConnected()) {
+ throw new IllegalStateException("Already connected. Disconnect first.");
+ }
+
+ try {
+
+ SocketConnector connector = new SocketConnector();
+ SocketConnectorConfig cfg = new SocketConnectorConfig();
+
+ // If we requested logging, add that too
+ if (enableLogging) {
+ cfg.getFilterChain().addLast("logFilter", new LoggingFilter());
+ }
+
+ // Add the filter to handle the GCache Codec
+ cfg.getFilterChain().addLast("protocolFilter", new ProtocolCodecFilter(new TCPCommandProtocolCodecFactory()));
+
+ // Add the BulkCommandFilter for filtering when a BulkCommand is
+ // being read
+ cfg.getFilterChain().addLast(TCPBulkCommandFilter.NAME, new TCPBulkCommandFilter());
+
+ // If we require message acks, then set up the message ack filter
+ if (requireMessageAck) {
+ cfg.getFilterChain().addLast(TCPMessageAckCommandFilter.NAME, new TCPMessageAckCommandFilter(ackTimeout));
+ }
+
+ handler = new TCPClientSocketHandler(info, connectionManager);
+
+
+ ConnectFuture future = connector.connect(address, handler, cfg);
+ future.join();
+ if (!future.isConnected()) {
+ return false;
+ }
+ sess = future.getSession();
+
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ private void disconnect() {
+ if (sess != null) {
+// if (sess.isConnected()) {
+// sess.getCloseFuture().join();
+// }
+ sess.close();
+ sess = null;
+ }
+ }
+
+ public boolean join() {
+
+ //Send a handshake and introduce myself
+ HandShakeCommand command = new HandShakeCommand();
+ command.setPublicKey(CipherUtil.publicKey);
+ try {
+ Command response = sendAndReceive(command);
+ if (!(response instanceof PublicKeyCommand)) {
+ log.error("Response expected a PublicKeyCommand and received a " + response.getClass().getSimpleName() + " instead.");
+ return false;
+ }
+
+ //Expect a PublicKey from the server
+ PublicKey serverKey = ((PublicKeyCommand)response).getPublicKey();
+
+ //Send auth credentials
+ AuthCommand auth = new AuthCommand();
+ auth.setPassword(password);
+ auth.setUserId(userId);
+ auth.setPublicKey(serverKey);
+ response = sendAndReceive(auth);
+ if (!(response instanceof AuthSuccessfulCommand)) {
+ log.error("Response expected a PublicKeyCommand and received a " + response.getClass().getSimpleName() + " instead.");
+ return false;
+ }
+
+ }catch (DisconnectionException e) {
+ log.error(e);
+ return false;
+ }catch (TimeoutException e) {
+ log.error(e);
+ return false;
+ } catch (InterruptedException e) {
+ log.error(e);
+ return false;
+ } catch (ExecutionException e) {
+ log.error(e);
+ return false;
+ }
+
+ return true;
+ }
+
+ public void putSession(String cacheName, String sessionId, Object value) {
+
+ PutSessionCommand command = new PutSessionCommand();
+
+ command.setCacheName(cacheName);
+ command.setSessionId(sessionId);
+ command.setKey(value);
+ command.setPayload(value);
+
+ send(command);
+ }
+
+ public void removeEntry(String cacheName, String sessionId, Object key) {
+ RemoveEntryCommand command = new RemoveEntryCommand();
+
+ command.setCacheName(cacheName);
+ command.setSessionId(sessionId);
+ command.setKey(key);
+
+ send(command);
+ }
+
+ public void removeSession(String cacheName, String session) {
+ PutSessionCommand command = new PutSessionCommand();
+
+ command.setCacheName(cacheName);
+ command.setSessionId(session);
+
+ send(command);
+ }
+
+ public void putEntry(String cacheName, String sessionId, Object key, Object value) {
+
+ PutEntryCommand command = new PutEntryCommand();
+
+ command.setCacheName(cacheName);
+ command.setSessionId(sessionId);
+ command.setKey(value);
+ command.setPayload(value);
+
+ send(command);
+ }
+
+ public void send(BaseCommand command) {
+
+ WriteFuture future = sess.write(command);
+
+ // Request ack if setup to do so
+ command.setAttachment(sess);
+ ((TCPClientCommandVisitor) info.getCommandVisitor()).requestAck(command);
+
+ // Wait for it to be written
+ future.join();
+
+ }
+
+ private Command sendAndReceive(BaseCommand command) throws InterruptedException, ExecutionException, TimeoutException, DisconnectionException {
+ TCPClientSocketHandler handler = (TCPClientSocketHandler) sess.getHandler();
+ TCPReceiverFuture future = handler.synchronousSend(sess, command);
+ //TODO: Offer a timeout
+ return (Command) future.get();
+ }
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactory.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactory.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactory.java Thu May 10 18:10:24 2007
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.transports.ClientConnectionManager;
+import org.apache.geronimo.gcache.transports.ClientTransportFactory;
+import org.apache.geronimo.gcache.transports.TransportService;
+import org.apache.geronimo.gcache.util.IOExceptionSupport;
+import org.apache.geronimo.gcache.util.IntrospectionSupport;
+import org.apache.geronimo.gcache.util.URISupport;
+
+public class TCPClientSocketTransportServiceFactory extends ClientTransportFactory {
+
+ @Override
+ protected TransportService doCreateTransportService(URI uri, CacheInfoHolder info, ClientConnectionManager connectionManager) throws IOException {
+ try {
+
+ Map options = URISupport.parseParamters(uri);
+ TCPClientSocketTransportService rc = new TCPClientSocketTransportService();
+
+ rc.setInfo(info);
+ rc.setTcpURI(uri);
+ rc.setConnectionManager(connectionManager);
+ IntrospectionSupport.setProperties(rc, options);
+ return rc;
+
+ } catch (Throwable e) {
+ throw IOExceptionSupport.create("Could not create tcp transport service: " + uri, e);
+ }
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPReceiverFuture.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPReceiverFuture.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPReceiverFuture.java (added)
+++ geronimo/sandbox/gcache/client/src/main/java/org/apache/geronimo/gcache/transports/tcp/TCPReceiverFuture.java Thu May 10 18:10:24 2007
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.geronimo.gcache.transports.DisconnectionException;
+
+public class TCPReceiverFuture{
+
+ private CountDownLatch latch = new CountDownLatch(1);
+ private Object response;
+
+
+ private AtomicBoolean done = new AtomicBoolean(false);
+ private AtomicBoolean disconnected = new AtomicBoolean(false);
+
+ public Object get() throws InterruptedException, ExecutionException, DisconnectionException {
+ latch.await();
+ if (disconnected.get())
+ throw new DisconnectionException();
+ return response;
+ }
+
+ public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException, DisconnectionException {
+ latch.await(timeout, unit);
+ if (disconnected.get())
+ throw new DisconnectionException();
+ return response;
+ }
+
+ public boolean isDone() {
+ return done.get();
+ }
+
+ public void setResponse(Object response) {
+ this.response = response;
+ done.set(false);
+ latch.countDown();
+ }
+
+ protected void disconnect(){
+ disconnected.set(true);
+ latch.countDown();
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/tcp
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/tcp?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/tcp (added)
+++ geronimo/sandbox/gcache/client/src/main/resources/META-INF/services/org/apache/geronimo/gcache/client/transport/tcp Thu May 10 18:10:24 2007
@@ -0,0 +1 @@
+class=org.apache.geronimo.gcache.transports.tcp.TCPClientSocketTransportServiceFactory
\ No newline at end of file
Added: geronimo/sandbox/gcache/client/src/main/resources/gcache-client-config-default.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/resources/gcache-client-config-default.xml?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/resources/gcache-client-config-default.xml (added)
+++ geronimo/sandbox/gcache/client/src/main/resources/gcache-client-config-default.xml Thu May 10 18:10:24 2007
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gcache-client-config>
+ <discovery user="system" password="manager" uri="multicast://default" />
+ <diskStore path="${java.io.tmpdir}/gcache" />
+ <defaultCache maxElementsInMemory="10000" eternal="false"
+ timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
+ diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
+ memoryStoreEvictionPolicy="LRU" />
+</gcache-client-config>
\ No newline at end of file
Added: geronimo/sandbox/gcache/client/src/main/xsd/catalog.cat
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/xsd/catalog.cat?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/xsd/catalog.cat (added)
+++ geronimo/sandbox/gcache/client/src/main/xsd/catalog.cat Thu May 10 18:10:24 2007
@@ -0,0 +1 @@
+SYSTEM "http://geronimo.apache.org/xml/ns/gcache-1.0.xsd" "../../../../common/src/main/xsd/gcache.xsd"
Added: geronimo/sandbox/gcache/client/src/main/xsd/gcache-client.xsd
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/main/xsd/gcache-client.xsd?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/main/xsd/gcache-client.xsd (added)
+++ geronimo/sandbox/gcache/client/src/main/xsd/gcache-client.xsd Thu May 10 18:10:24 2007
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema
+ xmlns:gcache-client="http://geronimo.apache.org/xml/ns/gcache-client-1.0"
+ xmlns:gcache="http://geronimo.apache.org/xml/ns/gcache-1.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
+ xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
+ targetNamespace="http://geronimo.apache.org/xml/ns/gcache-client-1.0"
+ jxb:version="2.0"
+ jxb:extensionBindingPrefixes="xjc"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xs:annotation>
+ <xs:appinfo>
+ <jxb:globalBindings>
+ <xjc:simple />
+ </jxb:globalBindings>
+ </xs:appinfo>
+ </xs:annotation>
+
+ <xs:import namespace="http://geronimo.apache.org/xml/ns/gcache-1.0" schemaLocation="http://geronimo.apache.org/xml/ns/gcache-1.0.xsd"/>
+
+ <xs:element name="gcache-client-config"
+ type="gcache-client:gcacheClientConfig" />
+
+ <xs:complexType name="gcacheClientConfig">
+ <xs:sequence>
+ <xs:element name="discovery" type="gcache-client:discoveryType"
+ minOccurs="1" maxOccurs="1" />
+ <xs:element name="diskStore" type="gcache:diskStoreType"
+ minOccurs="1" maxOccurs="1" />
+ <xs:element name="defaultCache"
+ type="gcache:defaultCacheType" minOccurs="1" maxOccurs="1" />
+ <xs:element name="cache" type="gcache:cacheType"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="discoveryType">
+ <xs:attribute name="user" use="optional" type="xs:NCName" default="system"/>
+ <xs:attribute name="password" use="optional" type="xs:NCName" default="manager"/>
+ <xs:attribute name="uri" use="optional" type="xs:NCName" />
+ </xs:complexType>
+
+</xs:schema>
\ No newline at end of file
Added: geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/ClientConfigBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/ClientConfigBuilderTest.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/ClientConfigBuilderTest.java (added)
+++ geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/dd/ClientConfigBuilderTest.java Thu May 10 18:10:24 2007
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.dd;
+
+import java.util.Map;
+
+import net.sf.ehcache.config.CacheConfiguration;
+import net.sf.ehcache.config.Configuration;
+
+import org.apache.geronimo.gcache.client.ClientConfigBuilder;
+import org.apache.geronimo.gcache.client.GcacheClientConfiguration;
+import org.testng.annotations.Test;
+
+public class ClientConfigBuilderTest {
+
+ @Test
+ public void testConfigBuilder() throws Exception {
+ ClientConfigBuilder cb = new ClientConfigBuilder();
+
+ //Pull the configuration
+ GcacheClientConfiguration config = cb.getConfig(null);
+
+ //Discovery settings
+ assert config.getUser().equals("system");
+ assert config.getPassword().equals("manager");
+ assert config.getDiscoveryUri().getHost().equals("default");
+ assert config.getDiscoveryUri().getScheme().equals("multicast");
+
+ //Check for cache configs
+ Configuration ehcacheConfig = config.getEhcacheConfig();
+ assert ehcacheConfig != null;
+
+ Map configs = ehcacheConfig.getCacheConfigurations();
+ assert configs.containsKey("Test");
+ assert configs.containsKey("Test2");
+
+ //Test cache detail info
+ CacheConfiguration cacheConfig = (CacheConfiguration) configs.get("Test");
+ assert 60 == cacheConfig.getDiskExpiryThreadIntervalSeconds();
+ assert 1800 == cacheConfig.getTimeToIdleSeconds();
+ assert cacheConfig.getMemoryStoreEvictionPolicy().toString().equals("LRU");
+ assert 0 == cacheConfig.getTimeToLiveSeconds();
+
+ //Test a default cache was configured
+ CacheConfiguration defaultConfig = ehcacheConfig.getDefaultCacheConfiguration();
+ assert 120 == defaultConfig.getDiskExpiryThreadIntervalSeconds();
+ assert 120 == defaultConfig.getTimeToIdleSeconds();
+ assert defaultConfig.getMemoryStoreEvictionPolicy().toString().equals("LRU");
+ assert 120 == defaultConfig.getTimeToLiveSeconds();
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactoryTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactoryTest.java?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactoryTest.java (added)
+++ geronimo/sandbox/gcache/client/src/test/java/org/apache/geronimo/gcache/transports/tcp/TCPClientSocketTransportServiceFactoryTest.java Thu May 10 18:10:24 2007
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.geronimo.gcache.transports.tcp;
+
+import java.net.URI;
+
+import org.apache.geronimo.gcache.CacheInfoHolder;
+import org.apache.geronimo.gcache.transports.ClientConnectionManager;
+import org.testng.annotations.Test;
+
+public class TCPClientSocketTransportServiceFactoryTest {
+
+ @Test
+ public void testTCPClientSocketTransportServiceFactory() throws Exception{
+
+ CacheInfoHolder info = new CacheInfoHolder(null);
+ ClientConnectionManager mgr = new ClientConnectionManager(info);
+ URI uri = new URI("tcp://default");
+ TCPClientSocketTransportService service = (TCPClientSocketTransportService)TCPClientSocketTransportServiceFactory.createTransportService(uri, info, mgr);
+
+ assert service instanceof TCPClientSocketTransportService;
+ assert service != null;
+ }
+
+}
Added: geronimo/sandbox/gcache/client/src/test/resources/gcache-client-config.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/test/resources/gcache-client-config.xml?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/test/resources/gcache-client-config.xml (added)
+++ geronimo/sandbox/gcache/client/src/test/resources/gcache-client-config.xml Thu May 10 18:10:24 2007
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gcache-client-config>
+ <discovery user="system" password="manager" uri="multicast://default" />
+
+ <diskStore path="${java.io.tmpdir}/gcache" />
+
+ <defaultCache maxElementsInMemory="10000" eternal="false"
+ timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
+ diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
+ memoryStoreEvictionPolicy="LRU" />
+
+ <cache name="Test" maxElementsInMemory="10000" eternal="false"
+ timeToIdleSeconds="1800" timeToLiveSeconds="0" overflowToDisk="true"
+ diskPersistent="false" diskExpiryThreadIntervalSeconds="60"
+ memoryStoreEvictionPolicy="LRU" />
+
+ <cache name="Test2" maxElementsInMemory="10000" eternal="false"
+ timeToIdleSeconds="0" timeToLiveSeconds="1800" overflowToDisk="false"
+ diskPersistent="true" diskExpiryThreadIntervalSeconds="60"
+ memoryStoreEvictionPolicy="LFU" />
+</gcache-client-config>
Added: geronimo/sandbox/gcache/client/src/test/resources/log4j.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/client/src/test/resources/log4j.xml?view=auto&rev=537063
==============================================================================
--- geronimo/sandbox/gcache/client/src/test/resources/log4j.xml (added)
+++ geronimo/sandbox/gcache/client/src/test/resources/log4j.xml Thu May 10 18:10:24 2007
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+ <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <!--param name="ConversionPattern" value="[%p] %c %m%n"/-->
+ <param name="ConversionPattern" value="[%p] [%c{1}] %m%n"/>
+ </layout>
+ </appender>
+
+ <category name="net.sf.ehcache.config.ConfigurationFactory">
+ <priority value="ERROR"/>
+ </category>
+
+ <root>
+ <priority value="debug"/>
+ <appender-ref ref="ConsoleAppender"/>
+ </root>
+
+</log4j:configuration>
\ No newline at end of file