001: /**
002: * Copyright 2003-2007 Luck Consulting Pty Ltd
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */package net.sf.ehcache.distribution;
016:
017: import net.sf.ehcache.CacheException;
018: import net.sf.ehcache.CacheManager;
019: import net.sf.ehcache.util.PropertyUtil;
020:
021: import java.net.UnknownHostException;
022: import java.util.Properties;
023:
024: /**
025: * Builds a listener based on RMI.
026: * <p/>
027: * Expected configuration line:
028: * <p/>
029: * <code>
030: * <cachePeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
031: * properties="hostName=localhost, port=5000" />
032: * </code>
033: * @author Greg Luck
034: * @version $Id: RMICacheManagerPeerListenerFactory.java 519 2007-07-27 07:11:45Z gregluck $
035: */
036: public class RMICacheManagerPeerListenerFactory extends
037: CacheManagerPeerListenerFactory {
038:
039: /**
040: * The default timeout for cache replication for a single replication action.
041: * This may need to be increased for large data transfers.
042: */
043: public static final Integer DEFAULT_SOCKET_TIMEOUT_MILLIS = new Integer(
044: 120000);
045:
046: private static final String HOSTNAME = "hostName";
047: private static final String PORT = "port";
048: private static final String SOCKET_TIMEOUT_MILLIS = "socketTimeoutMillis";
049:
050: /**
051: * @param properties implementation specific properties. These are configured as comma
052: * separated name value pairs in ehcache.xml
053: */
054: public final CacheManagerPeerListener createCachePeerListener(
055: CacheManager cacheManager, Properties properties)
056: throws CacheException {
057: String hostName = PropertyUtil.extractAndLogProperty(HOSTNAME,
058: properties);
059: String portString = PropertyUtil.extractAndLogProperty(PORT,
060: properties);
061: Integer port = null;
062: if (portString != null && portString.length() != 0) {
063: port = new Integer(portString);
064: } else {
065: port = new Integer(0);
066: }
067: String socketTimeoutMillisString = PropertyUtil
068: .extractAndLogProperty(SOCKET_TIMEOUT_MILLIS,
069: properties);
070: Integer socketTimeoutMillis;
071: if (socketTimeoutMillisString == null
072: || socketTimeoutMillisString.length() == 0) {
073: socketTimeoutMillis = DEFAULT_SOCKET_TIMEOUT_MILLIS;
074: } else {
075: socketTimeoutMillis = new Integer(socketTimeoutMillisString);
076: }
077: return doCreateCachePeerListener(hostName, port, cacheManager,
078: socketTimeoutMillis);
079: }
080:
081: /**
082: * A template method to actually create the factory
083: * @param hostName
084: * @param port
085: * @param cacheManager
086: * @param socketTimeoutMillis
087: * @return a crate CacheManagerPeerListener
088: */
089: protected CacheManagerPeerListener doCreateCachePeerListener(
090: String hostName, Integer port, CacheManager cacheManager,
091: Integer socketTimeoutMillis) {
092: try {
093: return new RMICacheManagerPeerListener(hostName, port,
094: cacheManager, socketTimeoutMillis);
095: } catch (UnknownHostException e) {
096: throw new CacheException(
097: "Unable to create CacheManagerPeerListener. Initial cause was "
098: + e.getMessage(), e);
099: }
100: }
101: }
|