Class FragmentationInterceptor
java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor
- All Implemented Interfaces:
ChannelInterceptor, FragmentationInterceptorMBean, Heartbeat, MembershipListener
public class FragmentationInterceptor
extends ChannelInterceptorBase
implements FragmentationInterceptorMBean
The fragmentation interceptor splits up large messages into smaller messages and assembles them on the other end.
This is very useful when you don't want large messages hogging the sending sockets and smaller messages can make it
through.
Configuration Options
FragmentationInterceptor.expire=<milliseconds> - how long do we keep the fragments in memory and wait for the rest to arrive default=60,000ms -> 60seconds This setting is useful to avoid OutOfMemoryErrors
FragmentationInterceptor.maxSize=<max message size> - message size in bytes default=1024*100 (around a tenth of a MB)
Configuration Options
FragmentationInterceptor.expire=<milliseconds> - how long do we keep the fragments in memory and wait for the rest to arrive default=60,000ms -> 60seconds This setting is useful to avoid OutOfMemoryErrors
FragmentationInterceptor.maxSize=<max message size> - message size in bytes default=1024*100 (around a tenth of a MB)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classCollection that holds the fragments of a message for reassembly.static classKey used to identify a set of fragments belonging to the same original message.Nested classes/interfaces inherited from interface ChannelInterceptor
ChannelInterceptor.InterceptorEvent -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanFlag indicating whether deep cloning is enabled for fragments.protected final Map<FragmentationInterceptor.FragKey, FragmentationInterceptor.FragCollection> Map of fragment keys to their fragment collections for reassembly.protected static final StringManagerString manager for internationalization support.Fields inherited from class ChannelInterceptorBase
optionFlag -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoiddefrag(ChannelMessage msg) Reassembles a fragmented message from its parts.voidfrag(Member[] destination, ChannelMessage msg, InterceptorPayload payload) Fragments a large message into smaller pieces and sends them.longReturns the expiration time for fragments in milliseconds.Gets the fragment collection for the given key, creating one if it does not exist.intReturns the maximum size of a fragment in bytes.voidTheheartbeat()method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.voidThemessageReceivedis invoked when a message is received.voidRemoves the fragment collection for the given key.voidsendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) ThesendMessagemethod is called when a message is being sent to one more destinations.voidsetExpire(long expire) Sets the expiration time for fragments in milliseconds.voidsetMaxSize(int maxSize) Sets the maximum size of a fragment in bytes.Methods inherited from class ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop
-
Field Details
-
sm
String manager for internationalization support. -
fragpieces
protected final Map<FragmentationInterceptor.FragKey, FragmentationInterceptor.FragCollection> fragpiecesMap of fragment keys to their fragment collections for reassembly. -
deepclone
protected final boolean deepcloneFlag indicating whether deep cloning is enabled for fragments.- See Also:
-
-
Constructor Details
-
FragmentationInterceptor
public FragmentationInterceptor()Creates a new FragmentationInterceptor instance.
-
-
Method Details
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException Description copied from interface:ChannelInterceptorThesendMessagemethod 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 invokinggetNext().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.
- Specified by:
sendMessagein interfaceChannelInterceptor- Overrides:
sendMessagein classChannelInterceptorBase- Parameters:
destination- Member[] - the destination for this messagemsg- ChannelMessage - the message to be sentpayload- InterceptorPayload - the payload, carrying an error handler and future useful data, can be null- Throws:
ChannelException- if a serialization error happens.- See Also:
-
messageReceived
Description copied from interface:ChannelInterceptorThemessageReceivedis invoked when a message is received.ChannelMessage.getAddress()is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceivedin interfaceChannelInterceptor- Overrides:
messageReceivedin classChannelInterceptorBase- Parameters:
msg- ChannelMessage
-
getFragCollection
public FragmentationInterceptor.FragCollection getFragCollection(FragmentationInterceptor.FragKey key, ChannelMessage msg) Gets the fragment collection for the given key, creating one if it does not exist.- Parameters:
key- The fragment keymsg- The channel message used to initialize a new collection if needed- Returns:
- The fragment collection for the given key
-
removeFragCollection
Removes the fragment collection for the given key.- Parameters:
key- The fragment key to remove
-
defrag
Reassembles a fragmented message from its parts.- Parameters:
msg- The channel message fragment to process
-
frag
public void frag(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException Fragments a large message into smaller pieces and sends them.- Parameters:
destination- The destination membersmsg- The channel message to fragmentpayload- The interceptor payload- Throws:
ChannelException- if an error occurs during fragmentation
-
heartbeat
public void heartbeat()Description copied from interface:ChannelInterceptorTheheartbeat()method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.- Specified by:
heartbeatin interfaceChannelInterceptor- Specified by:
heartbeatin interfaceHeartbeat- Overrides:
heartbeatin classChannelInterceptorBase
-
getMaxSize
public int getMaxSize()Description copied from interface:FragmentationInterceptorMBeanReturns the maximum size of a fragment in bytes.- Specified by:
getMaxSizein interfaceFragmentationInterceptorMBean- Returns:
- The maximum fragment size
-
getExpire
public long getExpire()Description copied from interface:FragmentationInterceptorMBeanReturns the expiration time for fragments in milliseconds.- Specified by:
getExpirein interfaceFragmentationInterceptorMBean- Returns:
- The fragment expiration time
-
setMaxSize
public void setMaxSize(int maxSize) Description copied from interface:FragmentationInterceptorMBeanSets the maximum size of a fragment in bytes.- Specified by:
setMaxSizein interfaceFragmentationInterceptorMBean- Parameters:
maxSize- The maximum fragment size
-
setExpire
public void setExpire(long expire) Description copied from interface:FragmentationInterceptorMBeanSets the expiration time for fragments in milliseconds.- Specified by:
setExpirein interfaceFragmentationInterceptorMBean- Parameters:
expire- The fragment expiration time
-