001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.catalina.tribes.transport;
019:
020: import org.apache.catalina.tribes.ChannelException;
021: import org.apache.catalina.tribes.ChannelMessage;
022: import org.apache.catalina.tribes.ChannelSender;
023: import org.apache.catalina.tribes.Member;
024: import org.apache.catalina.tribes.util.StringManager;
025: import org.apache.catalina.tribes.transport.nio.PooledParallelSender;
026:
027: /**
028: * Transmit message to other cluster members
029: * Actual senders are created based on the replicationMode
030: * type
031: *
032: * @author Filip Hanik
033: * @version $Revision: 532800 $ $Date: 2007-04-26 18:52:29 +0200 (jeu., 26 avr. 2007) $
034: */
035: public class ReplicationTransmitter implements ChannelSender {
036: private static org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory
037: .getLog(ReplicationTransmitter.class);
038:
039: /**
040: * The descriptive information about this implementation.
041: */
042: private static final String info = "ReplicationTransmitter/3.0";
043:
044: /**
045: * The string manager for this package.
046: */
047: protected StringManager sm = StringManager
048: .getManager(Constants.Package);
049:
050: public ReplicationTransmitter() {
051: }
052:
053: private MultiPointSender transport = new PooledParallelSender();
054:
055: /**
056: * Return descriptive information about this implementation and the
057: * corresponding version number, in the format
058: * <code><description>/<version></code>.
059: */
060: public String getInfo() {
061: return (info);
062: }
063:
064: public MultiPointSender getTransport() {
065: return transport;
066: }
067:
068: public void setTransport(MultiPointSender transport) {
069: this .transport = transport;
070: }
071:
072: // ------------------------------------------------------------- public
073:
074: /**
075: * Send data to one member
076: * @see org.apache.catalina.tribes.ClusterSender#sendMessage(org.apache.catalina.tribes.ClusterMessage, org.apache.catalina.tribes.Member)
077: */
078: public void sendMessage(ChannelMessage message, Member[] destination)
079: throws ChannelException {
080: MultiPointSender sender = getTransport();
081: sender.sendMessage(destination, message);
082: }
083:
084: /**
085: * start the sender and register transmitter mbean
086: *
087: * @see org.apache.catalina.tribes.ClusterSender#start()
088: */
089: public void start() throws java.io.IOException {
090: getTransport().connect();
091: }
092:
093: /*
094: * stop the sender and deregister mbeans (transmitter, senders)
095: *
096: * @see org.apache.catalina.tribes.ClusterSender#stop()
097: */
098: public synchronized void stop() {
099: getTransport().disconnect();
100: }
101:
102: /**
103: * Call transmitter to check for sender socket status
104: *
105: * @see SimpleTcpCluster#backgroundProcess()
106: */
107:
108: public void heartbeat() {
109: if (getTransport() != null)
110: getTransport().keepalive();
111: }
112:
113: /**
114: * add new cluster member and create sender ( s. replicationMode) transfer
115: * current properties to sender
116: *
117: * @see org.apache.catalina.tribes.ClusterSender#add(org.apache.catalina.tribes.Member)
118: */
119: public synchronized void add(Member member) {
120: getTransport().add(member);
121: }
122:
123: /**
124: * remove sender from transmitter. ( deregister mbean and disconnect sender )
125: *
126: * @see org.apache.catalina.tribes.ClusterSender#remove(org.apache.catalina.tribes.Member)
127: */
128: public synchronized void remove(Member member) {
129: getTransport().remove(member);
130: }
131:
132: // ------------------------------------------------------------- protected
133:
134: }
|