You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2006/10/24 05:18:02 UTC
svn commit: r467222 [24/31] - in /tomcat/tc6.0.x/trunk/java:
javax/annotation/ javax/annotation/security/ javax/ejb/ javax/el/
javax/mail/ javax/mail/internet/ javax/persistence/ javax/servlet/
javax/servlet/http/ javax/servlet/jsp/ javax/servlet/jsp/e...
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java Mon Oct 23 20:17:11 2006
@@ -1,185 +1,185 @@
-/*
- * 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.catalina.tribes.tipis;
-
-import java.io.Serializable;
-
-import org.apache.catalina.tribes.Channel;
-import org.apache.catalina.tribes.ChannelException;
-import org.apache.catalina.tribes.ChannelListener;
-import org.apache.catalina.tribes.Member;
-import org.apache.catalina.tribes.MembershipListener;
-import org.apache.catalina.tribes.group.RpcCallback;
-import org.apache.catalina.tribes.util.Arrays;
-import org.apache.catalina.tribes.UniqueId;
-
-/**
- * A smart implementation of a stateful replicated map. uses primary/secondary backup strategy.
- * One node is always the primary and one node is always the backup.
- * This map is synchronized across a cluster, and only has one backup member.<br/>
- * A perfect usage for this map would be a session map for a session manager in a clustered environment.<br/>
- * The only way to modify this list is to use the <code>put, putAll, remove</code> methods.
- * entrySet, entrySetFull, keySet, keySetFull, returns all non modifiable sets.<br><br>
- * If objects (values) in the map change without invoking <code>put()</code> or <code>remove()</code>
- * the data can be distributed using two different methods:<br>
- * <code>replicate(boolean)</code> and <code>replicate(Object, boolean)</code><br>
- * These two methods are very important two understand. The map can work with two set of value objects:<br>
- * 1. Serializable - the entire object gets serialized each time it is replicated<br>
- * 2. ReplicatedMapEntry - this interface allows for a isDirty() flag and to replicate diffs if desired.<br>
- * Implementing the <code>ReplicatedMapEntry</code> interface allows you to decide what objects
- * get replicated and how much data gets replicated each time.<br>
- * If you implement a smart AOP mechanism to detect changes in underlying objects, you can replicate
- * only those changes by implementing the ReplicatedMapEntry interface, and return true when isDiffable()
- * is invoked.<br><br>
- *
- * This map implementation doesn't have a background thread running to replicate changes.
- * If you do have changes without invoking put/remove then you need to invoke one of the following methods:
- * <ul>
- * <li><code>replicate(Object,boolean)</code> - replicates only the object that belongs to the key</li>
- * <li><code>replicate(boolean)</code> - Scans the entire map for changes and replicates data</li>
- * </ul>
- * the <code>boolean</code> value in the <code>replicate</code> method used to decide
- * whether to only replicate objects that implement the <code>ReplicatedMapEntry</code> interface
- * or to replicate all objects. If an object doesn't implement the <code>ReplicatedMapEntry</code> interface
- * each time the object gets replicated the entire object gets serialized, hence a call to <code>replicate(true)</code>
- * will replicate all objects in this map that are using this node as primary.
- *
- * <br><br><b>REMBER TO CALL <code>breakdown()</code> or <code>finalize()</code> when you are done with the map to
- * avoid memory leaks.<br><br>
- * @todo implement periodic sync/transfer thread
- * @author Filip Hanik
- * @version 1.0
- */
-public class LazyReplicatedMap extends AbstractReplicatedMap
- implements RpcCallback, ChannelListener, MembershipListener {
- protected static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(LazyReplicatedMap.class);
-
-
-
-//------------------------------------------------------------------------------
-// CONSTRUCTORS / DESTRUCTORS
-//------------------------------------------------------------------------------
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- * @param initialCapacity int - the size of this map, see HashMap
- * @param loadFactor float - load factor, see HashMap
- */
- public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls) {
- super(owner,channel,timeout,mapContextName,initialCapacity,loadFactor, Channel.SEND_OPTIONS_DEFAULT,cls);
- }
-
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- * @param initialCapacity int - the size of this map, see HashMap
- */
- public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) {
- super(owner, channel,timeout,mapContextName,initialCapacity, LazyReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
- }
-
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- */
- public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) {
- super(owner, channel,timeout,mapContextName, LazyReplicatedMap.DEFAULT_INITIAL_CAPACITY,LazyReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls);
- }
-
-
-
-
-
-//------------------------------------------------------------------------------
-// METHODS TO OVERRIDE
-//------------------------------------------------------------------------------
- /**
- * publish info about a map pair (key/value) to other nodes in the cluster
- * @param key Object
- * @param value Object
- * @return Member - the backup node
- * @throws ChannelException
- */
- protected Member[] publishEntryInfo(Object key, Object value) throws ChannelException {
- if (! (key instanceof Serializable && value instanceof Serializable) ) return new Member[0];
- Member[] members = getMapMembers();
- int firstIdx = getNextBackupIndex();
- int nextIdx = firstIdx;
- Member[] backup = new Member[0];
-
- //there are no backups
- if ( members.length == 0 || firstIdx == -1 ) return backup;
-
- boolean success = false;
- do {
- //select a backup node
- Member next = members[firstIdx];
-
- //increment for the next round of back up selection
- nextIdx = firstIdx + 1;
- if ( nextIdx >= members.length ) nextIdx = 0;
-
- if (next == null) {
- continue;
- }
- MapMessage msg = null;
- try {
- backup = wrap(next);
- //publish the backup data to one node
- msg = new MapMessage(getMapContextName(), MapMessage.MSG_BACKUP, false,
- (Serializable) key, (Serializable) value, null, backup);
- if ( log.isTraceEnabled() )
- log.trace("Publishing backup data:"+msg+" to: "+next.getName());
- UniqueId id = getChannel().send(backup, msg, getChannelSendOptions());
- if ( log.isTraceEnabled() )
- log.trace("Data published:"+msg+" msg Id:"+id);
- //we published out to a backup, mark the test success
- success = true;
- }catch ( ChannelException x ) {
- log.error("Unable to replicate backup key:"+key+" to backup:"+next+". Reason:"+x.getMessage(),x);
- }
- try {
- //publish the data out to all nodes
- Member[] proxies = excludeFromSet(backup, getMapMembers());
- if (success && proxies.length > 0 ) {
- msg = new MapMessage(getMapContextName(), MapMessage.MSG_PROXY, false,
- (Serializable) key, null, null, backup);
- if ( log.isTraceEnabled() )
- log.trace("Publishing proxy data:"+msg+" to: "+Arrays.toNameString(proxies));
- getChannel().send(proxies, msg, getChannelSendOptions());
- }
- }catch ( ChannelException x ) {
- //log the error, but proceed, this should only happen if a node went down,
- //and if the node went down, then it can't receive the message, the others
- //should still get it.
- log.error("Unable to replicate proxy key:"+key+" to backup:"+next+". Reason:"+x.getMessage(),x);
- }
- } while ( !success && (firstIdx!=nextIdx));
- return backup;
- }
-
-
-
-
-
+/*
+ * 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.catalina.tribes.tipis;
+
+import java.io.Serializable;
+
+import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelListener;
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.MembershipListener;
+import org.apache.catalina.tribes.group.RpcCallback;
+import org.apache.catalina.tribes.util.Arrays;
+import org.apache.catalina.tribes.UniqueId;
+
+/**
+ * A smart implementation of a stateful replicated map. uses primary/secondary backup strategy.
+ * One node is always the primary and one node is always the backup.
+ * This map is synchronized across a cluster, and only has one backup member.<br/>
+ * A perfect usage for this map would be a session map for a session manager in a clustered environment.<br/>
+ * The only way to modify this list is to use the <code>put, putAll, remove</code> methods.
+ * entrySet, entrySetFull, keySet, keySetFull, returns all non modifiable sets.<br><br>
+ * If objects (values) in the map change without invoking <code>put()</code> or <code>remove()</code>
+ * the data can be distributed using two different methods:<br>
+ * <code>replicate(boolean)</code> and <code>replicate(Object, boolean)</code><br>
+ * These two methods are very important two understand. The map can work with two set of value objects:<br>
+ * 1. Serializable - the entire object gets serialized each time it is replicated<br>
+ * 2. ReplicatedMapEntry - this interface allows for a isDirty() flag and to replicate diffs if desired.<br>
+ * Implementing the <code>ReplicatedMapEntry</code> interface allows you to decide what objects
+ * get replicated and how much data gets replicated each time.<br>
+ * If you implement a smart AOP mechanism to detect changes in underlying objects, you can replicate
+ * only those changes by implementing the ReplicatedMapEntry interface, and return true when isDiffable()
+ * is invoked.<br><br>
+ *
+ * This map implementation doesn't have a background thread running to replicate changes.
+ * If you do have changes without invoking put/remove then you need to invoke one of the following methods:
+ * <ul>
+ * <li><code>replicate(Object,boolean)</code> - replicates only the object that belongs to the key</li>
+ * <li><code>replicate(boolean)</code> - Scans the entire map for changes and replicates data</li>
+ * </ul>
+ * the <code>boolean</code> value in the <code>replicate</code> method used to decide
+ * whether to only replicate objects that implement the <code>ReplicatedMapEntry</code> interface
+ * or to replicate all objects. If an object doesn't implement the <code>ReplicatedMapEntry</code> interface
+ * each time the object gets replicated the entire object gets serialized, hence a call to <code>replicate(true)</code>
+ * will replicate all objects in this map that are using this node as primary.
+ *
+ * <br><br><b>REMBER TO CALL <code>breakdown()</code> or <code>finalize()</code> when you are done with the map to
+ * avoid memory leaks.<br><br>
+ * @todo implement periodic sync/transfer thread
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public class LazyReplicatedMap extends AbstractReplicatedMap
+ implements RpcCallback, ChannelListener, MembershipListener {
+ protected static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(LazyReplicatedMap.class);
+
+
+
+//------------------------------------------------------------------------------
+// CONSTRUCTORS / DESTRUCTORS
+//------------------------------------------------------------------------------
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ * @param initialCapacity int - the size of this map, see HashMap
+ * @param loadFactor float - load factor, see HashMap
+ */
+ public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls) {
+ super(owner,channel,timeout,mapContextName,initialCapacity,loadFactor, Channel.SEND_OPTIONS_DEFAULT,cls);
+ }
+
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ * @param initialCapacity int - the size of this map, see HashMap
+ */
+ public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) {
+ super(owner, channel,timeout,mapContextName,initialCapacity, LazyReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
+ }
+
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ */
+ public LazyReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) {
+ super(owner, channel,timeout,mapContextName, LazyReplicatedMap.DEFAULT_INITIAL_CAPACITY,LazyReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls);
+ }
+
+
+
+
+
+//------------------------------------------------------------------------------
+// METHODS TO OVERRIDE
+//------------------------------------------------------------------------------
+ /**
+ * publish info about a map pair (key/value) to other nodes in the cluster
+ * @param key Object
+ * @param value Object
+ * @return Member - the backup node
+ * @throws ChannelException
+ */
+ protected Member[] publishEntryInfo(Object key, Object value) throws ChannelException {
+ if (! (key instanceof Serializable && value instanceof Serializable) ) return new Member[0];
+ Member[] members = getMapMembers();
+ int firstIdx = getNextBackupIndex();
+ int nextIdx = firstIdx;
+ Member[] backup = new Member[0];
+
+ //there are no backups
+ if ( members.length == 0 || firstIdx == -1 ) return backup;
+
+ boolean success = false;
+ do {
+ //select a backup node
+ Member next = members[firstIdx];
+
+ //increment for the next round of back up selection
+ nextIdx = firstIdx + 1;
+ if ( nextIdx >= members.length ) nextIdx = 0;
+
+ if (next == null) {
+ continue;
+ }
+ MapMessage msg = null;
+ try {
+ backup = wrap(next);
+ //publish the backup data to one node
+ msg = new MapMessage(getMapContextName(), MapMessage.MSG_BACKUP, false,
+ (Serializable) key, (Serializable) value, null, backup);
+ if ( log.isTraceEnabled() )
+ log.trace("Publishing backup data:"+msg+" to: "+next.getName());
+ UniqueId id = getChannel().send(backup, msg, getChannelSendOptions());
+ if ( log.isTraceEnabled() )
+ log.trace("Data published:"+msg+" msg Id:"+id);
+ //we published out to a backup, mark the test success
+ success = true;
+ }catch ( ChannelException x ) {
+ log.error("Unable to replicate backup key:"+key+" to backup:"+next+". Reason:"+x.getMessage(),x);
+ }
+ try {
+ //publish the data out to all nodes
+ Member[] proxies = excludeFromSet(backup, getMapMembers());
+ if (success && proxies.length > 0 ) {
+ msg = new MapMessage(getMapContextName(), MapMessage.MSG_PROXY, false,
+ (Serializable) key, null, null, backup);
+ if ( log.isTraceEnabled() )
+ log.trace("Publishing proxy data:"+msg+" to: "+Arrays.toNameString(proxies));
+ getChannel().send(proxies, msg, getChannelSendOptions());
+ }
+ }catch ( ChannelException x ) {
+ //log the error, but proceed, this should only happen if a node went down,
+ //and if the node went down, then it can't receive the message, the others
+ //should still get it.
+ log.error("Unable to replicate proxy key:"+key+" to backup:"+next+". Reason:"+x.getMessage(),x);
+ }
+ } while ( !success && (firstIdx!=nextIdx));
+ return backup;
+ }
+
+
+
+
+
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java Mon Oct 23 20:17:11 2006
@@ -1,118 +1,118 @@
-/*
- * 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.catalina.tribes.tipis;
-
-import java.io.Serializable;
-
-import org.apache.catalina.tribes.Channel;
-import org.apache.catalina.tribes.ChannelException;
-import org.apache.catalina.tribes.ChannelListener;
-import org.apache.catalina.tribes.Member;
-import org.apache.catalina.tribes.MembershipListener;
-import org.apache.catalina.tribes.group.RpcCallback;
-
-/**
- * All-to-all replication for a hash map implementation. Each node in the cluster will carry an identical
- * copy of the map.<br><br>
- * This map implementation doesn't have a background thread running to replicate changes.
- * If you do have changes without invoking put/remove then you need to invoke one of the following methods:
- * <ul>
- * <li><code>replicate(Object,boolean)</code> - replicates only the object that belongs to the key</li>
- * <li><code>replicate(boolean)</code> - Scans the entire map for changes and replicates data</li>
- * </ul>
- * the <code>boolean</code> value in the <code>replicate</code> method used to decide
- * whether to only replicate objects that implement the <code>ReplicatedMapEntry</code> interface
- * or to replicate all objects. If an object doesn't implement the <code>ReplicatedMapEntry</code> interface
- * each time the object gets replicated the entire object gets serialized, hence a call to <code>replicate(true)</code>
- * will replicate all objects in this map that are using this node as primary.
- *
- * <br><br><b>REMBER TO CALL <code>breakdown()</code> or <code>finalize()</code> when you are done with the map to
- * avoid memory leaks.<br><br>
- * @todo implement periodic sync/transfer thread
- * @author Filip Hanik
- * @version 1.0
- *
- * @todo memberDisappeared, should do nothing except change map membership
- * by default it relocates the primary objects
- */
-public class ReplicatedMap extends AbstractReplicatedMap implements RpcCallback, ChannelListener, MembershipListener {
-
- protected static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(ReplicatedMap.class);
-
-//------------------------------------------------------------------------------
-// CONSTRUCTORS / DESTRUCTORS
-//------------------------------------------------------------------------------
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- * @param initialCapacity int - the size of this map, see HashMap
- * @param loadFactor float - load factor, see HashMap
- */
- public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) {
- super(owner,channel, timeout, mapContextName, initialCapacity, loadFactor, Channel.SEND_OPTIONS_DEFAULT, cls);
- }
-
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- * @param initialCapacity int - the size of this map, see HashMap
- */
- public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) {
- super(owner,channel, timeout, mapContextName, initialCapacity, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls);
- }
-
- /**
- * Creates a new map
- * @param channel The channel to use for communication
- * @param timeout long - timeout for RPC messags
- * @param mapContextName String - unique name for this map, to allow multiple maps per channel
- */
- public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) {
- super(owner, channel, timeout, mapContextName,AbstractReplicatedMap.DEFAULT_INITIAL_CAPACITY, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
- }
-
-//------------------------------------------------------------------------------
-// METHODS TO OVERRIDE
-//------------------------------------------------------------------------------
- /**
- * publish info about a map pair (key/value) to other nodes in the cluster
- * @param key Object
- * @param value Object
- * @return Member - the backup node
- * @throws ChannelException
- */
- protected Member[] publishEntryInfo(Object key, Object value) throws ChannelException {
- if (! (key instanceof Serializable && value instanceof Serializable) ) return new Member[0];
- //select a backup node
- Member[] backup = getMapMembers();
-
- if (backup == null || backup.length == 0) return null;
-
- //publish the data out to all nodes
- MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_BACKUP, false,
- (Serializable) key, null, null, backup);
-
- getChannel().send(getMapMembers(), msg, getChannelSendOptions());
-
- return backup;
- }
-
+/*
+ * 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.catalina.tribes.tipis;
+
+import java.io.Serializable;
+
+import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelListener;
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.MembershipListener;
+import org.apache.catalina.tribes.group.RpcCallback;
+
+/**
+ * All-to-all replication for a hash map implementation. Each node in the cluster will carry an identical
+ * copy of the map.<br><br>
+ * This map implementation doesn't have a background thread running to replicate changes.
+ * If you do have changes without invoking put/remove then you need to invoke one of the following methods:
+ * <ul>
+ * <li><code>replicate(Object,boolean)</code> - replicates only the object that belongs to the key</li>
+ * <li><code>replicate(boolean)</code> - Scans the entire map for changes and replicates data</li>
+ * </ul>
+ * the <code>boolean</code> value in the <code>replicate</code> method used to decide
+ * whether to only replicate objects that implement the <code>ReplicatedMapEntry</code> interface
+ * or to replicate all objects. If an object doesn't implement the <code>ReplicatedMapEntry</code> interface
+ * each time the object gets replicated the entire object gets serialized, hence a call to <code>replicate(true)</code>
+ * will replicate all objects in this map that are using this node as primary.
+ *
+ * <br><br><b>REMBER TO CALL <code>breakdown()</code> or <code>finalize()</code> when you are done with the map to
+ * avoid memory leaks.<br><br>
+ * @todo implement periodic sync/transfer thread
+ * @author Filip Hanik
+ * @version 1.0
+ *
+ * @todo memberDisappeared, should do nothing except change map membership
+ * by default it relocates the primary objects
+ */
+public class ReplicatedMap extends AbstractReplicatedMap implements RpcCallback, ChannelListener, MembershipListener {
+
+ protected static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(ReplicatedMap.class);
+
+//------------------------------------------------------------------------------
+// CONSTRUCTORS / DESTRUCTORS
+//------------------------------------------------------------------------------
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ * @param initialCapacity int - the size of this map, see HashMap
+ * @param loadFactor float - load factor, see HashMap
+ */
+ public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity,float loadFactor, ClassLoader[] cls) {
+ super(owner,channel, timeout, mapContextName, initialCapacity, loadFactor, Channel.SEND_OPTIONS_DEFAULT, cls);
+ }
+
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ * @param initialCapacity int - the size of this map, see HashMap
+ */
+ public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls) {
+ super(owner,channel, timeout, mapContextName, initialCapacity, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR,Channel.SEND_OPTIONS_DEFAULT, cls);
+ }
+
+ /**
+ * Creates a new map
+ * @param channel The channel to use for communication
+ * @param timeout long - timeout for RPC messags
+ * @param mapContextName String - unique name for this map, to allow multiple maps per channel
+ */
+ public ReplicatedMap(Object owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls) {
+ super(owner, channel, timeout, mapContextName,AbstractReplicatedMap.DEFAULT_INITIAL_CAPACITY, AbstractReplicatedMap.DEFAULT_LOAD_FACTOR, Channel.SEND_OPTIONS_DEFAULT, cls);
+ }
+
+//------------------------------------------------------------------------------
+// METHODS TO OVERRIDE
+//------------------------------------------------------------------------------
+ /**
+ * publish info about a map pair (key/value) to other nodes in the cluster
+ * @param key Object
+ * @param value Object
+ * @return Member - the backup node
+ * @throws ChannelException
+ */
+ protected Member[] publishEntryInfo(Object key, Object value) throws ChannelException {
+ if (! (key instanceof Serializable && value instanceof Serializable) ) return new Member[0];
+ //select a backup node
+ Member[] backup = getMapMembers();
+
+ if (backup == null || backup.length == 0) return null;
+
+ //publish the data out to all nodes
+ MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_BACKUP, false,
+ (Serializable) key, null, null, backup);
+
+ getChannel().send(getMapMembers(), msg, getChannelSendOptions());
+
+ return backup;
+ }
+
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMap.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java Mon Oct 23 20:17:11 2006
@@ -1,124 +1,124 @@
-/*
- * 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.catalina.tribes.tipis;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-/**
- *
- * For smarter replication, an object can implement this interface to replicate diffs<br>
- * The replication logic will call the methods in the following order:<br>
- * <code>
- * 1. if ( entry.isDirty() ) <br>
- * try {
- * 2. entry.lock();<br>
- * 3. byte[] diff = entry.getDiff();<br>
- * 4. entry.reset();<br>
- * } finally {<br>
- * 5. entry.unlock();<br>
- * }<br>
- * }<br>
- * </code>
- * <br>
- * <br>
- * When the data is deserialized the logic is called in the following order<br>
- * <code>
- * 1. ReplicatedMapEntry entry = (ReplicatedMapEntry)objectIn.readObject();<br>
- * 2. if ( isBackup(entry)||isPrimary(entry) ) entry.setOwner(owner); <br>
- * </code>
- * <br>
- *
- *
- * @author Filip Hanik
- * @version 1.0
- */
-public interface ReplicatedMapEntry extends Serializable {
-
- /**
- * Has the object changed since last replication
- * and is not in a locked state
- * @return boolean
- */
- public boolean isDirty();
-
- /**
- * If this returns true, the map will extract the diff using getDiff()
- * Otherwise it will serialize the entire object.
- * @return boolean
- */
- public boolean isDiffable();
-
- /**
- * Returns a diff and sets the dirty map to false
- * @return byte[]
- * @throws IOException
- */
- public byte[] getDiff() throws IOException;
-
-
- /**
- * Applies a diff to an existing object.
- * @param diff byte[]
- * @param offset int
- * @param length int
- * @throws IOException
- */
- public void applyDiff(byte[] diff, int offset, int length) throws IOException, ClassNotFoundException;
-
- /**
- * Resets the current diff state and resets the dirty flag
- */
- public void resetDiff();
-
- /**
- * Lock during serialization
- */
- public void lock();
-
- /**
- * Unlock after serialization
- */
- public void unlock();
-
- /**
- * This method is called after the object has been
- * created on a remote map. On this method,
- * the object can initialize itself for any data that wasn't
- *
- * @param owner Object
- */
- public void setOwner(Object owner);
-
- /**
- * For accuracy checking, a serialized attribute can contain a version number
- * This number increases as modifications are made to the data.
- * The replicated map can use this to ensure accuracy on a periodic basis
- * @return long - the version number or -1 if the data is not versioned
- */
- public long getVersion();
-
- /**
- * Forces a certain version to a replicated map entry<br>
- * @param version long
- */
- public void setVersion(long version);
-
-
-
-
+/*
+ * 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.catalina.tribes.tipis;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ *
+ * For smarter replication, an object can implement this interface to replicate diffs<br>
+ * The replication logic will call the methods in the following order:<br>
+ * <code>
+ * 1. if ( entry.isDirty() ) <br>
+ * try {
+ * 2. entry.lock();<br>
+ * 3. byte[] diff = entry.getDiff();<br>
+ * 4. entry.reset();<br>
+ * } finally {<br>
+ * 5. entry.unlock();<br>
+ * }<br>
+ * }<br>
+ * </code>
+ * <br>
+ * <br>
+ * When the data is deserialized the logic is called in the following order<br>
+ * <code>
+ * 1. ReplicatedMapEntry entry = (ReplicatedMapEntry)objectIn.readObject();<br>
+ * 2. if ( isBackup(entry)||isPrimary(entry) ) entry.setOwner(owner); <br>
+ * </code>
+ * <br>
+ *
+ *
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public interface ReplicatedMapEntry extends Serializable {
+
+ /**
+ * Has the object changed since last replication
+ * and is not in a locked state
+ * @return boolean
+ */
+ public boolean isDirty();
+
+ /**
+ * If this returns true, the map will extract the diff using getDiff()
+ * Otherwise it will serialize the entire object.
+ * @return boolean
+ */
+ public boolean isDiffable();
+
+ /**
+ * Returns a diff and sets the dirty map to false
+ * @return byte[]
+ * @throws IOException
+ */
+ public byte[] getDiff() throws IOException;
+
+
+ /**
+ * Applies a diff to an existing object.
+ * @param diff byte[]
+ * @param offset int
+ * @param length int
+ * @throws IOException
+ */
+ public void applyDiff(byte[] diff, int offset, int length) throws IOException, ClassNotFoundException;
+
+ /**
+ * Resets the current diff state and resets the dirty flag
+ */
+ public void resetDiff();
+
+ /**
+ * Lock during serialization
+ */
+ public void lock();
+
+ /**
+ * Unlock after serialization
+ */
+ public void unlock();
+
+ /**
+ * This method is called after the object has been
+ * created on a remote map. On this method,
+ * the object can initialize itself for any data that wasn't
+ *
+ * @param owner Object
+ */
+ public void setOwner(Object owner);
+
+ /**
+ * For accuracy checking, a serialized attribute can contain a version number
+ * This number increases as modifications are made to the data.
+ * The replicated map can use this to ensure accuracy on a periodic basis
+ * @return long - the version number or -1 if the data is not versioned
+ */
+ public long getVersion();
+
+ /**
+ * Forces a certain version to a replicated map entry<br>
+ * @param version long
+ */
+ public void setVersion(long version);
+
+
+
+
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/ReplicatedMapEntry.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java Mon Oct 23 20:17:11 2006
@@ -1,61 +1,61 @@
-/*
- * 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.catalina.tribes.tipis;
-
-import java.io.IOException;
-
-/**
- * Example usage:
- * <code><pre>
- * byte[] data = new byte[1024];
- * Streamable st = ....;
- * while ( !st.eof() ) {
- * int length = st.read(data,0,data.length);
- * String s = new String(data,0,length);
- * System.out.println(s);
- * }
- * </pre></code>
- * @author Filip Hanik
- * @version 1.0
- */
-public interface Streamable {
-
- /**
- * returns true if the stream has reached its end
- * @return boolean
- */
- public boolean eof();
-
- /**
- * write data into the byte array starting at offset, maximum bytes read are (data.length-offset)
- * @param data byte[] - the array to read data into
- * @param offset int - start position for writing data
- * @return int - the number of bytes written into the data buffer
- */
- public int write(byte[] data, int offset, int length) throws IOException;
-
- /**
- * read data into the byte array starting at offset
- * @param data byte[] - the array to read data into
- * @param offset int - start position for writing data
- * @param length - the desired read length
- * @return int - the number of bytes read from the data buffer
- */
- public int read(byte[] data, int offset, int length) throws IOException;
-
-
+/*
+ * 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.catalina.tribes.tipis;
+
+import java.io.IOException;
+
+/**
+ * Example usage:
+ * <code><pre>
+ * byte[] data = new byte[1024];
+ * Streamable st = ....;
+ * while ( !st.eof() ) {
+ * int length = st.read(data,0,data.length);
+ * String s = new String(data,0,length);
+ * System.out.println(s);
+ * }
+ * </pre></code>
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public interface Streamable {
+
+ /**
+ * returns true if the stream has reached its end
+ * @return boolean
+ */
+ public boolean eof();
+
+ /**
+ * write data into the byte array starting at offset, maximum bytes read are (data.length-offset)
+ * @param data byte[] - the array to read data into
+ * @param offset int - start position for writing data
+ * @return int - the number of bytes written into the data buffer
+ */
+ public int write(byte[] data, int offset, int length) throws IOException;
+
+ /**
+ * read data into the byte array starting at offset
+ * @param data byte[] - the array to read data into
+ * @param offset int - start position for writing data
+ * @param length - the desired read length
+ * @return int - the number of bytes read from the data buffer
+ */
+ public int read(byte[] data, int offset, int length) throws IOException;
+
+
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/Streamable.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/AbstractSender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/AbstractSender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java Mon Oct 23 20:17:11 2006
@@ -1,43 +1,43 @@
-/*
- * 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.catalina.tribes.transport;
-
-import org.apache.catalina.tribes.io.XByteBuffer;
-
-/**
- * Manifest constants for the <code>org.apache.catalina.tribes.transport</code>
- * package.
- * @author Filip Hanik
- * @author Peter Rossbach
- * @version $Revision: 303753 $ $Date: 2005-03-14 15:24:30 -0600 (Mon, 14 Mar 2005) $
- */
-
-public class Constants {
-
- public static final String Package = "org.apache.catalina.tribes.transport";
-
- /*
- * Do not change any of these values!
- */
- public static final byte[] ACK_DATA = new byte[] {6, 2, 3};
- public static final byte[] FAIL_ACK_DATA = new byte[] {11, 0, 5};
- public static final byte[] ACK_COMMAND = XByteBuffer.createDataPackage(ACK_DATA);
- public static final byte[] FAIL_ACK_COMMAND = XByteBuffer.createDataPackage(FAIL_ACK_DATA);
-
-}
+/*
+ * 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.catalina.tribes.transport;
+
+import org.apache.catalina.tribes.io.XByteBuffer;
+
+/**
+ * Manifest constants for the <code>org.apache.catalina.tribes.transport</code>
+ * package.
+ * @author Filip Hanik
+ * @author Peter Rossbach
+ * @version $Revision$ $Date$
+ */
+
+public class Constants {
+
+ public static final String Package = "org.apache.catalina.tribes.transport";
+
+ /*
+ * Do not change any of these values!
+ */
+ public static final byte[] ACK_DATA = new byte[] {6, 2, 3};
+ public static final byte[] FAIL_ACK_DATA = new byte[] {11, 0, 5};
+ public static final byte[] ACK_COMMAND = XByteBuffer.createDataPackage(ACK_DATA);
+ public static final byte[] FAIL_ACK_COMMAND = XByteBuffer.createDataPackage(FAIL_ACK_DATA);
+
+}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/Constants.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java Mon Oct 23 20:17:11 2006
@@ -1,47 +1,47 @@
-/*
- * 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.catalina.tribes.transport;
-
-import java.io.IOException;
-
-/**
- * <p>Title: </p>
- *
- * <p>Description: </p>
- *
- * <p>Copyright: Copyright (c) 2005</p>
- *
- * <p>Company: </p>
- *
- * @author not attributable
- * @version 1.0
- */
-public interface DataSender {
- public void connect() throws IOException;
- public void disconnect();
- public boolean isConnected();
- public void setRxBufSize(int size);
- public void setTxBufSize(int size);
- public boolean keepalive();
- public void setTimeout(long timeout);
- public void setKeepAliveCount(int maxRequests);
- public void setKeepAliveTime(long keepAliveTimeInMs);
- public int getRequestCount();
- public long getConnectTime();
-
-
+/*
+ * 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.catalina.tribes.transport;
+
+import java.io.IOException;
+
+/**
+ * <p>Title: </p>
+ *
+ * <p>Description: </p>
+ *
+ * <p>Copyright: Copyright (c) 2005</p>
+ *
+ * <p>Company: </p>
+ *
+ * @author not attributable
+ * @version 1.0
+ */
+public interface DataSender {
+ public void connect() throws IOException;
+ public void disconnect();
+ public boolean isConnected();
+ public void setRxBufSize(int size);
+ public void setTxBufSize(int size);
+ public boolean keepalive();
+ public void setTimeout(long timeout);
+ public void setKeepAliveCount(int maxRequests);
+ public void setKeepAliveTime(long keepAliveTimeInMs);
+ public int getRequestCount();
+ public long getConnectTime();
+
+
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/DataSender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/LocalStrings.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/LocalStrings.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java Mon Oct 23 20:17:11 2006
@@ -1,38 +1,38 @@
-/*
- * 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.catalina.tribes.transport;
-import org.apache.catalina.tribes.ChannelMessage;
-import org.apache.catalina.tribes.ChannelException;
-import org.apache.catalina.tribes.Member;
-
-/**
- * @author Filip Hanik
- * @version $Revision: 303993 $ $Date: 2005-07-16 16:05:54 -0500 (Sat, 16 Jul 2005) $
- * @since 5.5.16
- */
-
-public interface MultiPointSender extends DataSender
-{
- public void sendMessage(Member[] destination, ChannelMessage data) throws ChannelException;
- public void setRxBufSize(int size);
- public void setTxBufSize(int size);
- public void setMaxRetryAttempts(int attempts);
- public void setDirectBuffer(boolean directBuf);
- public void memberAdded(Member member);
- public void memberDisappeared(Member member);
-}
+/*
+ * 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.catalina.tribes.transport;
+import org.apache.catalina.tribes.ChannelMessage;
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.Member;
+
+/**
+ * @author Filip Hanik
+ * @version $Revision$ $Date$
+ * @since 5.5.16
+ */
+
+public interface MultiPointSender extends DataSender
+{
+ public void sendMessage(Member[] destination, ChannelMessage data) throws ChannelException;
+ public void setRxBufSize(int size);
+ public void setTxBufSize(int size);
+ public void setMaxRetryAttempts(int attempts);
+ public void setDirectBuffer(boolean directBuf);
+ public void memberAdded(Member member);
+ public void memberDisappeared(Member member);
+}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/MultiPointSender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java Mon Oct 23 20:17:11 2006
@@ -1,198 +1,198 @@
-/*
- * 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.catalina.tribes.transport;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * <p>Title: </p>
- *
- * <p>Description: </p>
- *
- * <p>Copyright: Copyright (c) 2005</p>
- *
- * <p>Company: </p>
- *
- * @author not attributable
- * @version 1.0
- */
-public abstract class PooledSender extends AbstractSender implements MultiPointSender {
-
- private SenderQueue queue = null;
- private int poolSize = 25;
- public PooledSender() {
- queue = new SenderQueue(this,poolSize);
- }
-
- public abstract DataSender getNewDataSender();
-
- public DataSender getSender() {
- return queue.getSender(getTimeout());
- }
-
- public void returnSender(DataSender sender) {
- sender.keepalive();
- queue.returnSender(sender);
- }
-
- public synchronized void connect() throws IOException {
- //do nothing, happens in the socket sender itself
- queue.open();
- setConnected(true);
- }
-
- public synchronized void disconnect() {
- queue.close();
- setConnected(false);
- }
-
-
- public int getInPoolSize() {
- return queue.getInPoolSize();
- }
-
- public int getInUsePoolSize() {
- return queue.getInUsePoolSize();
- }
-
-
- public void setPoolSize(int poolSize) {
- this.poolSize = poolSize;
- queue.setLimit(poolSize);
- }
-
- public int getPoolSize() {
- return poolSize;
- }
-
- public boolean keepalive() {
- //do nothing, the pool checks on every return
- return false;
- }
-
-
-
- // ----------------------------------------------------- Inner Class
-
- private class SenderQueue {
- private int limit = 25;
-
- PooledSender parent = null;
-
- private List notinuse = null;
-
- private List inuse = null;
-
- private boolean isOpen = true;
-
- public SenderQueue(PooledSender parent, int limit) {
- this.limit = limit;
- this.parent = parent;
- notinuse = new java.util.LinkedList();
- inuse = new java.util.LinkedList();
- }
-
- /**
- * @return Returns the limit.
- */
- public int getLimit() {
- return limit;
- }
- /**
- * @param limit The limit to set.
- */
- public void setLimit(int limit) {
- this.limit = limit;
- }
- /**
- * @return
- */
- public int getInUsePoolSize() {
- return inuse.size();
- }
-
- /**
- * @return
- */
- public int getInPoolSize() {
- return notinuse.size();
- }
-
- public synchronized DataSender getSender(long timeout) {
- long start = System.currentTimeMillis();
- while ( true ) {
- if (!isOpen)throw new IllegalStateException("Queue is closed");
- DataSender sender = null;
- if (notinuse.size() == 0 && inuse.size() < limit) {
- sender = parent.getNewDataSender();
- } else if (notinuse.size() > 0) {
- sender = (DataSender) notinuse.remove(0);
- }
- if (sender != null) {
- inuse.add(sender);
- return sender;
- }//end if
- long delta = System.currentTimeMillis() - start;
- if ( delta > timeout && timeout>0) return null;
- else {
- try {
- wait(Math.max(timeout - delta,1));
- }catch (InterruptedException x){}
- }//end if
- }
- }
-
- public synchronized void returnSender(DataSender sender) {
- if ( !isOpen) {
- sender.disconnect();
- return;
- }
- //to do
- inuse.remove(sender);
- //just in case the limit has changed
- if ( notinuse.size() < this.getLimit() ) notinuse.add(sender);
- else try {sender.disconnect(); } catch ( Exception ignore){}
- notify();
- }
-
- public synchronized void close() {
- isOpen = false;
- Object[] unused = notinuse.toArray();
- Object[] used = inuse.toArray();
- for (int i = 0; i < unused.length; i++) {
- DataSender sender = (DataSender) unused[i];
- sender.disconnect();
- }//for
- for (int i = 0; i < used.length; i++) {
- DataSender sender = (DataSender) used[i];
- sender.disconnect();
- }//for
- notinuse.clear();
- inuse.clear();
- notify();
-
-
-
- }
-
- public synchronized void open() {
- isOpen = true;
- notify();
- }
- }
+/*
+ * 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.catalina.tribes.transport;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * <p>Title: </p>
+ *
+ * <p>Description: </p>
+ *
+ * <p>Copyright: Copyright (c) 2005</p>
+ *
+ * <p>Company: </p>
+ *
+ * @author not attributable
+ * @version 1.0
+ */
+public abstract class PooledSender extends AbstractSender implements MultiPointSender {
+
+ private SenderQueue queue = null;
+ private int poolSize = 25;
+ public PooledSender() {
+ queue = new SenderQueue(this,poolSize);
+ }
+
+ public abstract DataSender getNewDataSender();
+
+ public DataSender getSender() {
+ return queue.getSender(getTimeout());
+ }
+
+ public void returnSender(DataSender sender) {
+ sender.keepalive();
+ queue.returnSender(sender);
+ }
+
+ public synchronized void connect() throws IOException {
+ //do nothing, happens in the socket sender itself
+ queue.open();
+ setConnected(true);
+ }
+
+ public synchronized void disconnect() {
+ queue.close();
+ setConnected(false);
+ }
+
+
+ public int getInPoolSize() {
+ return queue.getInPoolSize();
+ }
+
+ public int getInUsePoolSize() {
+ return queue.getInUsePoolSize();
+ }
+
+
+ public void setPoolSize(int poolSize) {
+ this.poolSize = poolSize;
+ queue.setLimit(poolSize);
+ }
+
+ public int getPoolSize() {
+ return poolSize;
+ }
+
+ public boolean keepalive() {
+ //do nothing, the pool checks on every return
+ return false;
+ }
+
+
+
+ // ----------------------------------------------------- Inner Class
+
+ private class SenderQueue {
+ private int limit = 25;
+
+ PooledSender parent = null;
+
+ private List notinuse = null;
+
+ private List inuse = null;
+
+ private boolean isOpen = true;
+
+ public SenderQueue(PooledSender parent, int limit) {
+ this.limit = limit;
+ this.parent = parent;
+ notinuse = new java.util.LinkedList();
+ inuse = new java.util.LinkedList();
+ }
+
+ /**
+ * @return Returns the limit.
+ */
+ public int getLimit() {
+ return limit;
+ }
+ /**
+ * @param limit The limit to set.
+ */
+ public void setLimit(int limit) {
+ this.limit = limit;
+ }
+ /**
+ * @return
+ */
+ public int getInUsePoolSize() {
+ return inuse.size();
+ }
+
+ /**
+ * @return
+ */
+ public int getInPoolSize() {
+ return notinuse.size();
+ }
+
+ public synchronized DataSender getSender(long timeout) {
+ long start = System.currentTimeMillis();
+ while ( true ) {
+ if (!isOpen)throw new IllegalStateException("Queue is closed");
+ DataSender sender = null;
+ if (notinuse.size() == 0 && inuse.size() < limit) {
+ sender = parent.getNewDataSender();
+ } else if (notinuse.size() > 0) {
+ sender = (DataSender) notinuse.remove(0);
+ }
+ if (sender != null) {
+ inuse.add(sender);
+ return sender;
+ }//end if
+ long delta = System.currentTimeMillis() - start;
+ if ( delta > timeout && timeout>0) return null;
+ else {
+ try {
+ wait(Math.max(timeout - delta,1));
+ }catch (InterruptedException x){}
+ }//end if
+ }
+ }
+
+ public synchronized void returnSender(DataSender sender) {
+ if ( !isOpen) {
+ sender.disconnect();
+ return;
+ }
+ //to do
+ inuse.remove(sender);
+ //just in case the limit has changed
+ if ( notinuse.size() < this.getLimit() ) notinuse.add(sender);
+ else try {sender.disconnect(); } catch ( Exception ignore){}
+ notify();
+ }
+
+ public synchronized void close() {
+ isOpen = false;
+ Object[] unused = notinuse.toArray();
+ Object[] used = inuse.toArray();
+ for (int i = 0; i < unused.length; i++) {
+ DataSender sender = (DataSender) unused[i];
+ sender.disconnect();
+ }//for
+ for (int i = 0; i < used.length; i++) {
+ DataSender sender = (DataSender) used[i];
+ sender.disconnect();
+ }//for
+ notinuse.clear();
+ inuse.clear();
+ notify();
+
+
+
+ }
+
+ public synchronized void open() {
+ isOpen = true;
+ notify();
+ }
+ }
}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReceiverBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReceiverBase.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java Mon Oct 23 20:17:11 2006
@@ -29,7 +29,7 @@
* type
*
* @author Filip Hanik
- * @version $Revision: 379956 $ $Date: 2006-02-22 16:57:35 -0600 (Wed, 22 Feb 2006) $
+ * @version $Revision$ $Date$
*/
public class ReplicationTransmitter implements ChannelSender {
private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(ReplicationTransmitter.class);
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/ReplicationTransmitter.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java?view=diff&rev=467222&r1=467221&r2=467222
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java Mon Oct 23 20:17:11 2006
@@ -1,115 +1,115 @@
-/*
- * 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.catalina.tribes.transport;
-
-import org.apache.catalina.tribes.Member;
-import java.util.HashMap;
-
-
-/**
- *
- * @author Filip Hanik
- * @version 1.0
- * @since 5.5.16
- */
-
-public class SenderState {
-
- public static final int READY = 0;
- public static final int SUSPECT = 1;
- public static final int FAILING = 2;
- /**
- * The descriptive information about this implementation.
- */
- private static final String info = "SenderState/1.0";
-
-
- protected static HashMap memberStates = new HashMap();
-
- public static SenderState getSenderState(Member member) {
- return getSenderState(member,true);
- }
-
- public static SenderState getSenderState(Member member, boolean create) {
- SenderState state = (SenderState)memberStates.get(member);
- if ( state == null && create) {
- synchronized ( memberStates ) {
- state = (SenderState)memberStates.get(member);
- if ( state == null ) {
- state = new SenderState();
- memberStates.put(member,state);
- }
- }
- }
- return state;
- }
-
- public static void removeSenderState(Member member) {
- synchronized ( memberStates ) {
- memberStates.remove(member);
- }
- }
-
-
- // ----------------------------------------------------- Instance Variables
-
- private int state = READY;
-
- // ----------------------------------------------------- Constructor
-
-
- private SenderState() {
- this(READY);
- }
-
- private SenderState(int state) {
- this.state = state;
- }
-
- /**
- *
- * @return boolean
- */
- public boolean isSuspect() {
- return (state == SUSPECT) || (state == FAILING);
- }
-
- public void setSuspect() {
- state = SUSPECT;
- }
-
- public boolean isReady() {
- return state == READY;
- }
-
- public void setReady() {
- state = READY;
- }
-
- public boolean isFailing() {
- return state == FAILING;
- }
-
- public void setFailing() {
- state = FAILING;
- }
-
-
- // ----------------------------------------------------- Public Properties
-
-}
+/*
+ * 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.catalina.tribes.transport;
+
+import org.apache.catalina.tribes.Member;
+import java.util.HashMap;
+
+
+/**
+ *
+ * @author Filip Hanik
+ * @version 1.0
+ * @since 5.5.16
+ */
+
+public class SenderState {
+
+ public static final int READY = 0;
+ public static final int SUSPECT = 1;
+ public static final int FAILING = 2;
+ /**
+ * The descriptive information about this implementation.
+ */
+ private static final String info = "SenderState/1.0";
+
+
+ protected static HashMap memberStates = new HashMap();
+
+ public static SenderState getSenderState(Member member) {
+ return getSenderState(member,true);
+ }
+
+ public static SenderState getSenderState(Member member, boolean create) {
+ SenderState state = (SenderState)memberStates.get(member);
+ if ( state == null && create) {
+ synchronized ( memberStates ) {
+ state = (SenderState)memberStates.get(member);
+ if ( state == null ) {
+ state = new SenderState();
+ memberStates.put(member,state);
+ }
+ }
+ }
+ return state;
+ }
+
+ public static void removeSenderState(Member member) {
+ synchronized ( memberStates ) {
+ memberStates.remove(member);
+ }
+ }
+
+
+ // ----------------------------------------------------- Instance Variables
+
+ private int state = READY;
+
+ // ----------------------------------------------------- Constructor
+
+
+ private SenderState() {
+ this(READY);
+ }
+
+ private SenderState(int state) {
+ this.state = state;
+ }
+
+ /**
+ *
+ * @return boolean
+ */
+ public boolean isSuspect() {
+ return (state == SUSPECT) || (state == FAILING);
+ }
+
+ public void setSuspect() {
+ state = SUSPECT;
+ }
+
+ public boolean isReady() {
+ return state == READY;
+ }
+
+ public void setReady() {
+ state = READY;
+ }
+
+ public boolean isFailing() {
+ return state == FAILING;
+ }
+
+ public void setFailing() {
+ state = FAILING;
+ }
+
+
+ // ----------------------------------------------------- Public Properties
+
+}
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/SenderState.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org