All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.catalina.tribes.ChannelInterceptor Maven / Gradle / Ivy

/*
 * 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.group.InterceptorPayload;

/**
 * A ChannelInterceptor is an interceptor that intercepts
 * messages and membership messages in the channel stack.
 * This allows interceptors to modify the message or perform
 * other actions when a message is sent or received.
* Interceptors are tied together in a linked list. * @see org.apache.catalina.tribes.group.ChannelInterceptorBase */ public interface ChannelInterceptor extends MembershipListener, Heartbeat { /** * An interceptor can react to a message based on a set bit on the * message options.
* When a message is sent, the options can be retrieved from ChannelMessage.getOptions() * and if the bit is set, this interceptor will react to it.
* A simple evaluation if an interceptor should react to the message would be:
* boolean react = (getOptionFlag() == (getOptionFlag() & ChannelMessage.getOptions()));
* The default option is 0, meaning there is no way for the application to trigger the * interceptor. The interceptor itself will decide.
* @return int * @see ChannelMessage#getOptions() */ int getOptionFlag(); /** * Sets the option flag * @param flag int * @see #getOptionFlag() */ void setOptionFlag(int flag); /** * Set the next interceptor in the list of interceptors * @param next ChannelInterceptor */ void setNext(ChannelInterceptor next) ; /** * Retrieve the next interceptor in the list * @return ChannelInterceptor - returns the next interceptor in the list or null if no more interceptors exist */ ChannelInterceptor getNext(); /** * Set the previous interceptor in the list * @param previous ChannelInterceptor */ void setPrevious(ChannelInterceptor previous); /** * Retrieve the previous interceptor in the list * @return ChannelInterceptor - returns the previous interceptor in the list or null if no more interceptors exist */ ChannelInterceptor getPrevious(); /** * The sendMessage method is called when a message is being sent to one more destinations. * The interceptor can modify any of the parameters and then pass on the message down the stack by * invoking getNext().sendMessage(destination,msg,payload)
* Alternatively the interceptor can stop the message from being sent by not invoking * getNext().sendMessage(destination,msg,payload)
* If the message is to be sent asynchronous the application can be notified of completion and * errors by passing in an error handler attached to a payload object.
* The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten * to simulate a message sent from another node.
* @param destination Member[] - the destination for this message * @param msg ChannelMessage - the message to be sent * @param payload InterceptorPayload - the payload, carrying an error handler and future useful data, can be null * @throws ChannelException if a serialization error happens. * @see ErrorHandler * @see InterceptorPayload */ void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException; /** * the messageReceived is invoked when a message is received. * ChannelMessage.getAddress() is the sender, or the reply-to address * if it has been overwritten. * @param data ChannelMessage */ void messageReceived(ChannelMessage data); /** * The heartbeat() method gets invoked periodically * to allow interceptors to clean up resources, time out object and * perform actions that are unrelated to sending/receiving data. */ @Override void heartbeat(); /** * Intercepts the Channel.hasMembers() method * @return boolean - if the channel has members in its membership group * @see Channel#hasMembers() */ boolean hasMembers() ; /** * Intercepts the Channel.getMembers() method * @return the members * @see Channel#getMembers() */ Member[] getMembers() ; /** * Intercepts the Channel.getLocalMember(boolean) method * @param incAliveTime boolean * @return the member that represents this node * @see Channel#getLocalMember(boolean) */ Member getLocalMember(boolean incAliveTime) ; /** * Intercepts the Channel.getMember(Member) method * @param mbr Member * @return Member - the actual member information, including stay alive * @see Channel#getMember(Member) */ Member getMember(Member mbr); /** * 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
* Channel.DEFAULT - will start all services
* Channel.MBR_RX_SEQ - starts the membership receiver
* Channel.MBR_TX_SEQ - starts the membership broadcaster
* Channel.SND_TX_SEQ - starts the replication transmitter
* Channel.SND_RX_SEQ - starts the replication receiver
* @throws ChannelException if a startup error occurs or the service is already started. * @see Channel */ void start(int svc) throws ChannelException; /** * 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
* Channel.DEFAULT - will shutdown all services
* Channel.MBR_RX_SEQ - stops the membership receiver
* Channel.MBR_TX_SEQ - stops the membership broadcaster
* Channel.SND_TX_SEQ - stops the replication transmitter
* Channel.SND_RX_SEQ - stops the replication receiver
* @throws ChannelException if a startup error occurs or the service is already started. * @see Channel */ void stop(int svc) throws ChannelException; /** * Fire an event. * @param event the event */ void fireInterceptorEvent(InterceptorEvent event); /** * Return the channel that is related to this interceptor * @return Channel */ Channel getChannel(); /** * Set the channel that is related to this interceptor * @param channel The channel */ void setChannel(Channel channel); interface InterceptorEvent { int getEventType(); String getEventTypeDesc(); ChannelInterceptor getInterceptor(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy