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 04:45:59 UTC
svn commit: r467206 [4/30] - in /tomcat: build/tc5.5.x/ connectors/trunk/
connectors/trunk/ajp/ajplib/test/ connectors/trunk/ajp/proxy/
connectors/trunk/jk/jkstatus/src/share/org/apache/jk/status/
connectors/trunk/jk/native/iis/ connectors/trunk/jk/nat...
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java?view=diff&rev=467206&r1=467205&r2=467206
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java Mon Oct 23 19:45:46 2006
@@ -1,72 +1,72 @@
-/*
- * 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;
-
-import org.apache.catalina.tribes.util.Arrays;
-import java.io.Serializable;
-
-/**
- * <p>Title: Represents a globabally unique Id</p>
- *
- * <p>Company: </p>
- *
- * @author Filip Hanik
- * @version 1.0
- */
-public final class UniqueId implements Serializable{
- protected byte[] id;
-
- public UniqueId() {
- }
-
- public UniqueId(byte[] id) {
- this.id = id;
- }
-
- public UniqueId(byte[] id, int offset, int length) {
- this.id = new byte[length];
- System.arraycopy(id,offset,this.id,0,length);
- }
-
- public int hashCode() {
- if ( id == null ) return 0;
- return Arrays.hashCode(id);
- }
-
- public boolean equals(Object other) {
- boolean result = (other instanceof UniqueId);
- if ( result ) {
- UniqueId uid = (UniqueId)other;
- if ( this.id == null && uid.id == null ) result = true;
- else if ( this.id == null && uid.id != null ) result = false;
- else if ( this.id != null && uid.id == null ) result = false;
- else result = Arrays.equals(this.id,uid.id);
- }//end if
- return result;
- }
-
- public byte[] getBytes() {
- return id;
- }
-
- public String toString() {
- StringBuffer buf = new StringBuffer("UniqueId");
- buf.append(org.apache.catalina.tribes.util.Arrays.toString(id));
- return buf.toString();
- }
-
+/*
+ * 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;
+
+import org.apache.catalina.tribes.util.Arrays;
+import java.io.Serializable;
+
+/**
+ * <p>Title: Represents a globabally unique Id</p>
+ *
+ * <p>Company: </p>
+ *
+ * @author Filip Hanik
+ * @version 1.0
+ */
+public final class UniqueId implements Serializable{
+ protected byte[] id;
+
+ public UniqueId() {
+ }
+
+ public UniqueId(byte[] id) {
+ this.id = id;
+ }
+
+ public UniqueId(byte[] id, int offset, int length) {
+ this.id = new byte[length];
+ System.arraycopy(id,offset,this.id,0,length);
+ }
+
+ public int hashCode() {
+ if ( id == null ) return 0;
+ return Arrays.hashCode(id);
+ }
+
+ public boolean equals(Object other) {
+ boolean result = (other instanceof UniqueId);
+ if ( result ) {
+ UniqueId uid = (UniqueId)other;
+ if ( this.id == null && uid.id == null ) result = true;
+ else if ( this.id == null && uid.id != null ) result = false;
+ else if ( this.id != null && uid.id == null ) result = false;
+ else result = Arrays.equals(this.id,uid.id);
+ }//end if
+ return result;
+ }
+
+ public byte[] getBytes() {
+ return id;
+ }
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer("UniqueId");
+ buf.append(org.apache.catalina.tribes.util.Arrays.toString(id));
+ return buf.toString();
+ }
+
}
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/UniqueId.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/AbsoluteOrder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/AbsoluteOrder.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java?view=diff&rev=467206&r1=467205&r2=467206
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java Mon Oct 23 19:45:46 2006
@@ -1,318 +1,318 @@
-/*
- * 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.group;
-
-import org.apache.catalina.tribes.ChannelException;
-import org.apache.catalina.tribes.ChannelMessage;
-import org.apache.catalina.tribes.ChannelReceiver;
-import org.apache.catalina.tribes.ChannelSender;
-
-import org.apache.catalina.tribes.Member;
-import org.apache.catalina.tribes.MembershipService;
-import org.apache.catalina.tribes.MessageListener;
-import org.apache.catalina.tribes.transport.SenderState;
-import org.apache.catalina.tribes.transport.ReplicationTransmitter;
-import org.apache.catalina.tribes.membership.McastService;
-import org.apache.catalina.tribes.transport.nio.NioReceiver;
-import org.apache.catalina.tribes.Channel;
-import org.apache.catalina.tribes.util.Logs;
-import org.apache.catalina.tribes.UniqueId;
-import org.apache.catalina.tribes.util.Arrays;
-
-
-/**
- * The channel coordinator object coordinates the membership service,
- * the sender and the receiver.
- * This is the last interceptor in the chain.
- * @author Filip Hanik
- * @version $Revision: 304032 $, $Date: 2005-07-27 10:11:55 -0500 (Wed, 27 Jul 2005) $
- */
-public class ChannelCoordinator extends ChannelInterceptorBase implements MessageListener {
- private ChannelReceiver clusterReceiver = new NioReceiver();
- private ChannelSender clusterSender = new ReplicationTransmitter();
- private MembershipService membershipService = new McastService();
-
- //override optionflag
- protected int optionFlag = Channel.SEND_OPTIONS_BYTE_MESSAGE|Channel.SEND_OPTIONS_USE_ACK|Channel.SEND_OPTIONS_SYNCHRONIZED_ACK;
- public int getOptionFlag() {return optionFlag;}
- public void setOptionFlag(int flag) {optionFlag=flag;}
-
- private int startLevel = 0;
-
- public ChannelCoordinator() {
-
- }
-
- public ChannelCoordinator(ChannelReceiver receiver,
- ChannelSender sender,
- MembershipService service) {
- this();
- this.setClusterReceiver(receiver);
- this.setClusterSender(sender);
- this.setMembershipService(service);
- }
-
- /**
- * Send a message to one or more members in the cluster
- * @param destination Member[] - the destinations, null or zero length means all
- * @param msg ClusterMessage - the message to send
- * @param options int - sender options, see class documentation
- * @return ClusterMessage[] - the replies from the members, if any.
- */
- public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException {
- if ( destination == null ) destination = membershipService.getMembers();
- clusterSender.sendMessage(msg,destination);
- if ( Logs.MESSAGES.isTraceEnabled() ) {
- Logs.MESSAGES.trace("ChannelCoordinator - Sent msg:" + new UniqueId(msg.getUniqueId()) + " at " +new java.sql.Timestamp(System.currentTimeMillis())+ " to "+Arrays.toNameString(destination));
- }
- }
-
-
- /**
- * Starts up the channel. This can be called multiple times for individual services to start
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will start all services <BR>
- * MBR_RX_SEQ - starts the membership receiver <BR>
- * MBR_TX_SEQ - starts the membership broadcaster <BR>
- * SND_TX_SEQ - starts the replication transmitter<BR>
- * SND_RX_SEQ - starts the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- public void start(int svc) throws ChannelException {
- this.internalStart(svc);
- }
-
- /**
- * Shuts down the channel. This can be called multiple times for individual services to shutdown
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will shutdown all services <BR>
- * MBR_RX_SEQ - stops the membership receiver <BR>
- * MBR_TX_SEQ - stops the membership broadcaster <BR>
- * SND_TX_SEQ - stops the replication transmitter<BR>
- * SND_RX_SEQ - stops the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- public void stop(int svc) throws ChannelException {
- this.internalStop(svc);
- }
-
-
- /**
- * Starts up the channel. This can be called multiple times for individual services to start
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will start all services <BR>
- * MBR_RX_SEQ - starts the membership receiver <BR>
- * MBR_TX_SEQ - starts the membership broadcaster <BR>
- * SND_TX_SEQ - starts the replication transmitter<BR>
- * SND_RX_SEQ - starts the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- protected synchronized void internalStart(int svc) throws ChannelException {
- try {
- boolean valid = false;
- //make sure we don't pass down any flags that are unrelated to the bottom layer
- svc = svc & Channel.DEFAULT;
-
- if (startLevel == Channel.DEFAULT) return; //we have already started up all components
- if (svc == 0 ) return;//nothing to start
-
- if (svc == (svc & startLevel)) throw new ChannelException("Channel already started for level:"+svc);
-
- //must start the receiver first so that we can coordinate the port it
- //listens to with the local membership settings
- if ( Channel.SND_RX_SEQ==(svc & Channel.SND_RX_SEQ) ) {
- clusterReceiver.setMessageListener(this);
- clusterReceiver.start();
- //synchronize, big time FIXME
- membershipService.setLocalMemberProperties(getClusterReceiver().getHost(), getClusterReceiver().getPort());
- valid = true;
- }
- if ( Channel.SND_TX_SEQ==(svc & Channel.SND_TX_SEQ) ) {
- clusterSender.start();
- valid = true;
- }
-
- if ( Channel.MBR_RX_SEQ==(svc & Channel.MBR_RX_SEQ) ) {
- membershipService.setMembershipListener(this);
- membershipService.start(MembershipService.MBR_RX);
- valid = true;
- }
- if ( Channel.MBR_TX_SEQ==(svc & Channel.MBR_TX_SEQ) ) {
- membershipService.start(MembershipService.MBR_TX);
- valid = true;
- }
-
- if ( !valid) {
- throw new IllegalArgumentException("Invalid start level, valid levels are:SND_RX_SEQ,SND_TX_SEQ,MBR_TX_SEQ,MBR_RX_SEQ");
- }
- startLevel = (startLevel | svc);
- }catch ( ChannelException cx ) {
- throw cx;
- }catch ( Exception x ) {
- throw new ChannelException(x);
- }
- }
-
- /**
- * Shuts down the channel. This can be called multiple times for individual services to shutdown
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will shutdown all services <BR>
- * MBR_RX_SEQ - starts the membership receiver <BR>
- * MBR_TX_SEQ - starts the membership broadcaster <BR>
- * SND_TX_SEQ - starts the replication transmitter<BR>
- * SND_RX_SEQ - starts the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- protected synchronized void internalStop(int svc) throws ChannelException {
- try {
- //make sure we don't pass down any flags that are unrelated to the bottom layer
- svc = svc & Channel.DEFAULT;
-
- if (startLevel == 0) return; //we have already stopped up all components
- if (svc == 0 ) return;//nothing to stop
-
- boolean valid = false;
- if ( Channel.SND_RX_SEQ==(svc & Channel.SND_RX_SEQ) ) {
- clusterReceiver.stop();
- clusterReceiver.setMessageListener(null);
- valid = true;
- }
- if ( Channel.SND_TX_SEQ==(svc & Channel.SND_TX_SEQ) ) {
- clusterSender.stop();
- valid = true;
- }
-
- if ( Channel.MBR_RX_SEQ==(svc & Channel.MBR_RX_SEQ) ) {
- membershipService.stop(MembershipService.MBR_RX);
- membershipService.setMembershipListener(null);
- valid = true;
-
- }
- if ( Channel.MBR_TX_SEQ==(svc & Channel.MBR_TX_SEQ) ) {
- valid = true;
- membershipService.stop(MembershipService.MBR_TX);
- }
- if ( !valid) {
- throw new IllegalArgumentException("Invalid start level, valid levels are:SND_RX_SEQ,SND_TX_SEQ,MBR_TX_SEQ,MBR_RX_SEQ");
- }
-
- startLevel = (startLevel & (~svc));
-
- }catch ( Exception x ) {
- throw new ChannelException(x);
- } finally {
-
- }
-
- }
-
- public void memberAdded(Member member){
- SenderState.getSenderState(member);
- if ( clusterSender!=null ) clusterSender.add(member);
- super.memberAdded(member);
- }
-
- public void memberDisappeared(Member member){
- SenderState.removeSenderState(member);
- if ( clusterSender!=null ) clusterSender.remove(member);
- super.memberDisappeared(member);
- }
-
- public void messageReceived(ChannelMessage msg) {
- if ( Logs.MESSAGES.isTraceEnabled() ) {
- Logs.MESSAGES.trace("ChannelCoordinator - Received msg:" + new UniqueId(msg.getUniqueId()) + " at " +new java.sql.Timestamp(System.currentTimeMillis())+ " from "+msg.getAddress().getName());
- }
- super.messageReceived(msg);
- }
-
-
- public ChannelReceiver getClusterReceiver() {
- return clusterReceiver;
- }
-
- public ChannelSender getClusterSender() {
- return clusterSender;
- }
-
- public MembershipService getMembershipService() {
- return membershipService;
- }
-
- public void setClusterReceiver(ChannelReceiver clusterReceiver) {
- if ( clusterReceiver != null ) {
- this.clusterReceiver = clusterReceiver;
- this.clusterReceiver.setMessageListener(this);
- } else {
- if (this.clusterReceiver!=null ) this.clusterReceiver.setMessageListener(null);
- this.clusterReceiver = null;
- }
- }
-
- public void setClusterSender(ChannelSender clusterSender) {
- this.clusterSender = clusterSender;
- }
-
- public void setMembershipService(MembershipService membershipService) {
- this.membershipService = membershipService;
- this.membershipService.setMembershipListener(this);
- }
-
- public void hearbeat() {
- if ( clusterSender!=null ) clusterSender.heartbeat();
- super.heartbeat();
- }
-
- /**
- * has members
- */
- public boolean hasMembers() {
- return this.getMembershipService().hasMembers();
- }
-
- /**
- * Get all current cluster members
- * @return all members or empty array
- */
- public Member[] getMembers() {
- return this.getMembershipService().getMembers();
- }
-
- /**
- *
- * @param mbr Member
- * @return Member
- */
- public Member getMember(Member mbr){
- return this.getMembershipService().getMember(mbr);
- }
-
-
- /**
- * Return the member that represents this node.
- *
- * @return Member
- */
- public Member getLocalMember(boolean incAlive) {
- return this.getMembershipService().getLocalMember(incAlive);
- }
-
-
-}
+/*
+ * 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.group;
+
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelMessage;
+import org.apache.catalina.tribes.ChannelReceiver;
+import org.apache.catalina.tribes.ChannelSender;
+
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.MembershipService;
+import org.apache.catalina.tribes.MessageListener;
+import org.apache.catalina.tribes.transport.SenderState;
+import org.apache.catalina.tribes.transport.ReplicationTransmitter;
+import org.apache.catalina.tribes.membership.McastService;
+import org.apache.catalina.tribes.transport.nio.NioReceiver;
+import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.util.Logs;
+import org.apache.catalina.tribes.UniqueId;
+import org.apache.catalina.tribes.util.Arrays;
+
+
+/**
+ * The channel coordinator object coordinates the membership service,
+ * the sender and the receiver.
+ * This is the last interceptor in the chain.
+ * @author Filip Hanik
+ * @version $Revision$, $Date$
+ */
+public class ChannelCoordinator extends ChannelInterceptorBase implements MessageListener {
+ private ChannelReceiver clusterReceiver = new NioReceiver();
+ private ChannelSender clusterSender = new ReplicationTransmitter();
+ private MembershipService membershipService = new McastService();
+
+ //override optionflag
+ protected int optionFlag = Channel.SEND_OPTIONS_BYTE_MESSAGE|Channel.SEND_OPTIONS_USE_ACK|Channel.SEND_OPTIONS_SYNCHRONIZED_ACK;
+ public int getOptionFlag() {return optionFlag;}
+ public void setOptionFlag(int flag) {optionFlag=flag;}
+
+ private int startLevel = 0;
+
+ public ChannelCoordinator() {
+
+ }
+
+ public ChannelCoordinator(ChannelReceiver receiver,
+ ChannelSender sender,
+ MembershipService service) {
+ this();
+ this.setClusterReceiver(receiver);
+ this.setClusterSender(sender);
+ this.setMembershipService(service);
+ }
+
+ /**
+ * Send a message to one or more members in the cluster
+ * @param destination Member[] - the destinations, null or zero length means all
+ * @param msg ClusterMessage - the message to send
+ * @param options int - sender options, see class documentation
+ * @return ClusterMessage[] - the replies from the members, if any.
+ */
+ public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException {
+ if ( destination == null ) destination = membershipService.getMembers();
+ clusterSender.sendMessage(msg,destination);
+ if ( Logs.MESSAGES.isTraceEnabled() ) {
+ Logs.MESSAGES.trace("ChannelCoordinator - Sent msg:" + new UniqueId(msg.getUniqueId()) + " at " +new java.sql.Timestamp(System.currentTimeMillis())+ " to "+Arrays.toNameString(destination));
+ }
+ }
+
+
+ /**
+ * Starts up the channel. This can be called multiple times for individual services to start
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will start all services <BR>
+ * MBR_RX_SEQ - starts the membership receiver <BR>
+ * MBR_TX_SEQ - starts the membership broadcaster <BR>
+ * SND_TX_SEQ - starts the replication transmitter<BR>
+ * SND_RX_SEQ - starts the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ public void start(int svc) throws ChannelException {
+ this.internalStart(svc);
+ }
+
+ /**
+ * Shuts down the channel. This can be called multiple times for individual services to shutdown
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will shutdown all services <BR>
+ * MBR_RX_SEQ - stops the membership receiver <BR>
+ * MBR_TX_SEQ - stops the membership broadcaster <BR>
+ * SND_TX_SEQ - stops the replication transmitter<BR>
+ * SND_RX_SEQ - stops the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ public void stop(int svc) throws ChannelException {
+ this.internalStop(svc);
+ }
+
+
+ /**
+ * Starts up the channel. This can be called multiple times for individual services to start
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will start all services <BR>
+ * MBR_RX_SEQ - starts the membership receiver <BR>
+ * MBR_TX_SEQ - starts the membership broadcaster <BR>
+ * SND_TX_SEQ - starts the replication transmitter<BR>
+ * SND_RX_SEQ - starts the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ protected synchronized void internalStart(int svc) throws ChannelException {
+ try {
+ boolean valid = false;
+ //make sure we don't pass down any flags that are unrelated to the bottom layer
+ svc = svc & Channel.DEFAULT;
+
+ if (startLevel == Channel.DEFAULT) return; //we have already started up all components
+ if (svc == 0 ) return;//nothing to start
+
+ if (svc == (svc & startLevel)) throw new ChannelException("Channel already started for level:"+svc);
+
+ //must start the receiver first so that we can coordinate the port it
+ //listens to with the local membership settings
+ if ( Channel.SND_RX_SEQ==(svc & Channel.SND_RX_SEQ) ) {
+ clusterReceiver.setMessageListener(this);
+ clusterReceiver.start();
+ //synchronize, big time FIXME
+ membershipService.setLocalMemberProperties(getClusterReceiver().getHost(), getClusterReceiver().getPort());
+ valid = true;
+ }
+ if ( Channel.SND_TX_SEQ==(svc & Channel.SND_TX_SEQ) ) {
+ clusterSender.start();
+ valid = true;
+ }
+
+ if ( Channel.MBR_RX_SEQ==(svc & Channel.MBR_RX_SEQ) ) {
+ membershipService.setMembershipListener(this);
+ membershipService.start(MembershipService.MBR_RX);
+ valid = true;
+ }
+ if ( Channel.MBR_TX_SEQ==(svc & Channel.MBR_TX_SEQ) ) {
+ membershipService.start(MembershipService.MBR_TX);
+ valid = true;
+ }
+
+ if ( !valid) {
+ throw new IllegalArgumentException("Invalid start level, valid levels are:SND_RX_SEQ,SND_TX_SEQ,MBR_TX_SEQ,MBR_RX_SEQ");
+ }
+ startLevel = (startLevel | svc);
+ }catch ( ChannelException cx ) {
+ throw cx;
+ }catch ( Exception x ) {
+ throw new ChannelException(x);
+ }
+ }
+
+ /**
+ * Shuts down the channel. This can be called multiple times for individual services to shutdown
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will shutdown all services <BR>
+ * MBR_RX_SEQ - starts the membership receiver <BR>
+ * MBR_TX_SEQ - starts the membership broadcaster <BR>
+ * SND_TX_SEQ - starts the replication transmitter<BR>
+ * SND_RX_SEQ - starts the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ protected synchronized void internalStop(int svc) throws ChannelException {
+ try {
+ //make sure we don't pass down any flags that are unrelated to the bottom layer
+ svc = svc & Channel.DEFAULT;
+
+ if (startLevel == 0) return; //we have already stopped up all components
+ if (svc == 0 ) return;//nothing to stop
+
+ boolean valid = false;
+ if ( Channel.SND_RX_SEQ==(svc & Channel.SND_RX_SEQ) ) {
+ clusterReceiver.stop();
+ clusterReceiver.setMessageListener(null);
+ valid = true;
+ }
+ if ( Channel.SND_TX_SEQ==(svc & Channel.SND_TX_SEQ) ) {
+ clusterSender.stop();
+ valid = true;
+ }
+
+ if ( Channel.MBR_RX_SEQ==(svc & Channel.MBR_RX_SEQ) ) {
+ membershipService.stop(MembershipService.MBR_RX);
+ membershipService.setMembershipListener(null);
+ valid = true;
+
+ }
+ if ( Channel.MBR_TX_SEQ==(svc & Channel.MBR_TX_SEQ) ) {
+ valid = true;
+ membershipService.stop(MembershipService.MBR_TX);
+ }
+ if ( !valid) {
+ throw new IllegalArgumentException("Invalid start level, valid levels are:SND_RX_SEQ,SND_TX_SEQ,MBR_TX_SEQ,MBR_RX_SEQ");
+ }
+
+ startLevel = (startLevel & (~svc));
+
+ }catch ( Exception x ) {
+ throw new ChannelException(x);
+ } finally {
+
+ }
+
+ }
+
+ public void memberAdded(Member member){
+ SenderState.getSenderState(member);
+ if ( clusterSender!=null ) clusterSender.add(member);
+ super.memberAdded(member);
+ }
+
+ public void memberDisappeared(Member member){
+ SenderState.removeSenderState(member);
+ if ( clusterSender!=null ) clusterSender.remove(member);
+ super.memberDisappeared(member);
+ }
+
+ public void messageReceived(ChannelMessage msg) {
+ if ( Logs.MESSAGES.isTraceEnabled() ) {
+ Logs.MESSAGES.trace("ChannelCoordinator - Received msg:" + new UniqueId(msg.getUniqueId()) + " at " +new java.sql.Timestamp(System.currentTimeMillis())+ " from "+msg.getAddress().getName());
+ }
+ super.messageReceived(msg);
+ }
+
+
+ public ChannelReceiver getClusterReceiver() {
+ return clusterReceiver;
+ }
+
+ public ChannelSender getClusterSender() {
+ return clusterSender;
+ }
+
+ public MembershipService getMembershipService() {
+ return membershipService;
+ }
+
+ public void setClusterReceiver(ChannelReceiver clusterReceiver) {
+ if ( clusterReceiver != null ) {
+ this.clusterReceiver = clusterReceiver;
+ this.clusterReceiver.setMessageListener(this);
+ } else {
+ if (this.clusterReceiver!=null ) this.clusterReceiver.setMessageListener(null);
+ this.clusterReceiver = null;
+ }
+ }
+
+ public void setClusterSender(ChannelSender clusterSender) {
+ this.clusterSender = clusterSender;
+ }
+
+ public void setMembershipService(MembershipService membershipService) {
+ this.membershipService = membershipService;
+ this.membershipService.setMembershipListener(this);
+ }
+
+ public void hearbeat() {
+ if ( clusterSender!=null ) clusterSender.heartbeat();
+ super.heartbeat();
+ }
+
+ /**
+ * has members
+ */
+ public boolean hasMembers() {
+ return this.getMembershipService().hasMembers();
+ }
+
+ /**
+ * Get all current cluster members
+ * @return all members or empty array
+ */
+ public Member[] getMembers() {
+ return this.getMembershipService().getMembers();
+ }
+
+ /**
+ *
+ * @param mbr Member
+ * @return Member
+ */
+ public Member getMember(Member mbr){
+ return this.getMembershipService().getMember(mbr);
+ }
+
+
+ /**
+ * Return the member that represents this node.
+ *
+ * @return Member
+ */
+ public Member getLocalMember(boolean incAlive) {
+ return this.getMembershipService().getLocalMember(incAlive);
+ }
+
+
+}
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java?view=diff&rev=467206&r1=467205&r2=467206
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java Mon Oct 23 19:45:46 2006
@@ -1,172 +1,172 @@
-/*
- * 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.group;
-
-import org.apache.catalina.tribes.ChannelException;
-import org.apache.catalina.tribes.ChannelInterceptor;
-import org.apache.catalina.tribes.ChannelMessage;
-import org.apache.catalina.tribes.Member;
-
-/**
- * Abstract class for the interceptor base class.
- * @author Filip Hanik
- * @version $Revision: 304032 $, $Date: 2005-07-27 10:11:55 -0500 (Wed, 27 Jul 2005) $
- */
-
-public abstract class ChannelInterceptorBase implements ChannelInterceptor {
-
- protected static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(
- ChannelInterceptorBase.class);
-
- private ChannelInterceptor next;
- private ChannelInterceptor previous;
- //default value, always process
- protected int optionFlag = 0;
-
- public ChannelInterceptorBase() {
-
- }
-
- public boolean okToProcess(int messageFlags) {
- if (this.optionFlag == 0 ) return true;
- return ((optionFlag&messageFlags) == optionFlag);
- }
-
- public final void setNext(ChannelInterceptor next) {
- this.next = next;
- }
-
- public final ChannelInterceptor getNext() {
- return next;
- }
-
- public final void setPrevious(ChannelInterceptor previous) {
- this.previous = previous;
- }
-
- public void setOptionFlag(int optionFlag) {
- this.optionFlag = optionFlag;
- }
-
- public final ChannelInterceptor getPrevious() {
- return previous;
- }
-
- public int getOptionFlag() {
- return optionFlag;
- }
-
- public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws
- ChannelException {
- if (getNext() != null) getNext().sendMessage(destination, msg, payload);
- }
-
- public void messageReceived(ChannelMessage msg) {
- if (getPrevious() != null) getPrevious().messageReceived(msg);
- }
-
- public boolean accept(ChannelMessage msg) {
- return true;
- }
-
- public void memberAdded(Member member) {
- //notify upwards
- if (getPrevious() != null) getPrevious().memberAdded(member);
- }
-
- public void memberDisappeared(Member member) {
- //notify upwards
- if (getPrevious() != null) getPrevious().memberDisappeared(member);
- }
-
- public void heartbeat() {
- if (getNext() != null) getNext().heartbeat();
- }
-
- /**
- * has members
- */
- public boolean hasMembers() {
- if ( getNext()!=null )return getNext().hasMembers();
- else return false;
- }
-
- /**
- * Get all current cluster members
- * @return all members or empty array
- */
- public Member[] getMembers() {
- if ( getNext()!=null ) return getNext().getMembers();
- else return null;
- }
-
- /**
- *
- * @param mbr Member
- * @return Member
- */
- public Member getMember(Member mbr) {
- if ( getNext()!=null) return getNext().getMember(mbr);
- else return null;
- }
-
- /**
- * Return the member that represents this node.
- *
- * @return Member
- */
- public Member getLocalMember(boolean incAlive) {
- if ( getNext()!=null ) return getNext().getLocalMember(incAlive);
- else return null;
- }
-
- /**
- * Starts up the channel. This can be called multiple times for individual services to start
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will start all services <BR>
- * MBR_RX_SEQ - starts the membership receiver <BR>
- * MBR_TX_SEQ - starts the membership broadcaster <BR>
- * SND_TX_SEQ - starts the replication transmitter<BR>
- * SND_RX_SEQ - starts the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- public void start(int svc) throws ChannelException {
- if ( getNext()!=null ) getNext().start(svc);
- }
-
- /**
- * Shuts down the channel. This can be called multiple times for individual services to shutdown
- * The svc parameter can be the logical or value of any constants
- * @param svc int value of <BR>
- * DEFAULT - will shutdown all services <BR>
- * MBR_RX_SEQ - stops the membership receiver <BR>
- * MBR_TX_SEQ - stops the membership broadcaster <BR>
- * SND_TX_SEQ - stops the replication transmitter<BR>
- * SND_RX_SEQ - stops the replication receiver<BR>
- * @throws ChannelException if a startup error occurs or the service is already started.
- */
- public void stop(int svc) throws ChannelException {
- if (getNext() != null) getNext().stop(svc);
- }
-
- public void fireInterceptorEvent(InterceptorEvent event) {
- //empty operation
- }
-
-
-}
+/*
+ * 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.group;
+
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelInterceptor;
+import org.apache.catalina.tribes.ChannelMessage;
+import org.apache.catalina.tribes.Member;
+
+/**
+ * Abstract class for the interceptor base class.
+ * @author Filip Hanik
+ * @version $Revision$, $Date$
+ */
+
+public abstract class ChannelInterceptorBase implements ChannelInterceptor {
+
+ protected static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(
+ ChannelInterceptorBase.class);
+
+ private ChannelInterceptor next;
+ private ChannelInterceptor previous;
+ //default value, always process
+ protected int optionFlag = 0;
+
+ public ChannelInterceptorBase() {
+
+ }
+
+ public boolean okToProcess(int messageFlags) {
+ if (this.optionFlag == 0 ) return true;
+ return ((optionFlag&messageFlags) == optionFlag);
+ }
+
+ public final void setNext(ChannelInterceptor next) {
+ this.next = next;
+ }
+
+ public final ChannelInterceptor getNext() {
+ return next;
+ }
+
+ public final void setPrevious(ChannelInterceptor previous) {
+ this.previous = previous;
+ }
+
+ public void setOptionFlag(int optionFlag) {
+ this.optionFlag = optionFlag;
+ }
+
+ public final ChannelInterceptor getPrevious() {
+ return previous;
+ }
+
+ public int getOptionFlag() {
+ return optionFlag;
+ }
+
+ public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws
+ ChannelException {
+ if (getNext() != null) getNext().sendMessage(destination, msg, payload);
+ }
+
+ public void messageReceived(ChannelMessage msg) {
+ if (getPrevious() != null) getPrevious().messageReceived(msg);
+ }
+
+ public boolean accept(ChannelMessage msg) {
+ return true;
+ }
+
+ public void memberAdded(Member member) {
+ //notify upwards
+ if (getPrevious() != null) getPrevious().memberAdded(member);
+ }
+
+ public void memberDisappeared(Member member) {
+ //notify upwards
+ if (getPrevious() != null) getPrevious().memberDisappeared(member);
+ }
+
+ public void heartbeat() {
+ if (getNext() != null) getNext().heartbeat();
+ }
+
+ /**
+ * has members
+ */
+ public boolean hasMembers() {
+ if ( getNext()!=null )return getNext().hasMembers();
+ else return false;
+ }
+
+ /**
+ * Get all current cluster members
+ * @return all members or empty array
+ */
+ public Member[] getMembers() {
+ if ( getNext()!=null ) return getNext().getMembers();
+ else return null;
+ }
+
+ /**
+ *
+ * @param mbr Member
+ * @return Member
+ */
+ public Member getMember(Member mbr) {
+ if ( getNext()!=null) return getNext().getMember(mbr);
+ else return null;
+ }
+
+ /**
+ * Return the member that represents this node.
+ *
+ * @return Member
+ */
+ public Member getLocalMember(boolean incAlive) {
+ if ( getNext()!=null ) return getNext().getLocalMember(incAlive);
+ else return null;
+ }
+
+ /**
+ * Starts up the channel. This can be called multiple times for individual services to start
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will start all services <BR>
+ * MBR_RX_SEQ - starts the membership receiver <BR>
+ * MBR_TX_SEQ - starts the membership broadcaster <BR>
+ * SND_TX_SEQ - starts the replication transmitter<BR>
+ * SND_RX_SEQ - starts the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ public void start(int svc) throws ChannelException {
+ if ( getNext()!=null ) getNext().start(svc);
+ }
+
+ /**
+ * Shuts down the channel. This can be called multiple times for individual services to shutdown
+ * The svc parameter can be the logical or value of any constants
+ * @param svc int value of <BR>
+ * DEFAULT - will shutdown all services <BR>
+ * MBR_RX_SEQ - stops the membership receiver <BR>
+ * MBR_TX_SEQ - stops the membership broadcaster <BR>
+ * SND_TX_SEQ - stops the replication transmitter<BR>
+ * SND_RX_SEQ - stops the replication receiver<BR>
+ * @throws ChannelException if a startup error occurs or the service is already started.
+ */
+ public void stop(int svc) throws ChannelException {
+ if (getNext() != null) getNext().stop(svc);
+ }
+
+ public void fireInterceptorEvent(InterceptorEvent event) {
+ //empty operation
+ }
+
+
+}
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.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