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)- Version:
- 1.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FragmentationInterceptor.FragCollection
static class
FragmentationInterceptor.FragKey
-
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
deepclone
protected java.util.HashMap<FragmentationInterceptor.FragKey,FragmentationInterceptor.FragCollection>
fragpieces
protected static StringManager
sm
-
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
-
-
Constructor Summary
Constructors Constructor Description FragmentationInterceptor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
defrag(ChannelMessage msg)
void
frag(Member[] destination, ChannelMessage msg, InterceptorPayload payload)
long
getExpire()
FragmentationInterceptor.FragCollection
getFragCollection(FragmentationInterceptor.FragKey key, ChannelMessage msg)
int
getMaxSize()
void
heartbeat()
Theheartbeat()
method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.void
messageReceived(ChannelMessage msg)
themessageReceived
is invoked when a message is received.void
removeFragCollection(FragmentationInterceptor.FragKey key)
void
sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)
ThesendMessage
method is called when a message is being sent to one more destinations.void
setExpire(long expire)
void
setMaxSize(int maxSize)
-
Methods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
-
fragpieces
protected final java.util.HashMap<FragmentationInterceptor.FragKey,FragmentationInterceptor.FragCollection> fragpieces
-
deepclone
protected final boolean deepclone
- See Also:
- Constant Field Values
-
-
Method Detail
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
Description copied from interface:ChannelInterceptor
ThesendMessage
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 invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().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:
sendMessage
in interfaceChannelInterceptor
- Overrides:
sendMessage
in 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:
ErrorHandler
,InterceptorPayload
-
messageReceived
public void messageReceived(ChannelMessage msg)
Description copied from interface:ChannelInterceptor
themessageReceived
is invoked when a message is received.ChannelMessage.getAddress()
is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceived
in interfaceChannelInterceptor
- Overrides:
messageReceived
in classChannelInterceptorBase
- Parameters:
msg
- ChannelMessage
-
getFragCollection
public FragmentationInterceptor.FragCollection getFragCollection(FragmentationInterceptor.FragKey key, ChannelMessage msg)
-
removeFragCollection
public void removeFragCollection(FragmentationInterceptor.FragKey key)
-
defrag
public void defrag(ChannelMessage msg)
-
frag
public void frag(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
- Throws:
ChannelException
-
heartbeat
public void heartbeat()
Description copied from interface:ChannelInterceptor
Theheartbeat()
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:
heartbeat
in interfaceChannelInterceptor
- Specified by:
heartbeat
in interfaceHeartbeat
- Overrides:
heartbeat
in classChannelInterceptorBase
-
getMaxSize
public int getMaxSize()
- Specified by:
getMaxSize
in interfaceFragmentationInterceptorMBean
-
getExpire
public long getExpire()
- Specified by:
getExpire
in interfaceFragmentationInterceptorMBean
-
setMaxSize
public void setMaxSize(int maxSize)
- Specified by:
setMaxSize
in interfaceFragmentationInterceptorMBean
-
setExpire
public void setExpire(long expire)
- Specified by:
setExpire
in interfaceFragmentationInterceptorMBean
-
-