org.jgroups
Class Message

java.lang.Object
  extended byorg.jgroups.Message
All Implemented Interfaces:
java.io.Externalizable, java.io.Serializable

public class Message
extends java.lang.Object
implements java.io.Externalizable

A Message encapsulates data sent to members of a group. It contains among other things the address of the sender, the destination address, a payload (byte buffer) and a list of headers. Headers are added by protocols on the sender side and removed by protocols on the receiver's side.

Author:
Bela Ban
See Also:
Serialized Form

Field Summary
protected  byte[] buf
           
protected  Address dest_addr
           
protected  java.util.HashMap headers
           
protected  Address src_addr
           
 
Constructor Summary
Message()
          Only used for Externalization (creating an initial object)
Message(Address dest, Address src, byte[] buf)
          Public constructor
Message(Address dest, Address src, java.io.Serializable obj)
          Public constructor
 
Method Summary
protected  java.lang.Object clone()
           
 Message copy()
           
 byte[] getBuffer()
          Returns the payload (byte buffer).
 Address getDest()
           
 Header getHeader(java.lang.String key)
           
 java.util.Map getHeaders()
           
 java.lang.Object getObject()
           
 Address getSrc()
           
 Message makeReply()
           
 java.lang.String printObjectHeaders()
           
 void putHeader(java.lang.String key, Header hdr)
          Puts a header given a key into the hashmap.
 void readExternal(java.io.ObjectInput in)
           
 Header removeHeader(java.lang.String key)
           
 void removeHeaders()
           
 void reset()
          Nulls all fields of this message so that the message can be reused.
 void setBuffer(byte[] b)
           
 void setDest(Address new_dest)
           
 void setObject(java.io.Serializable obj)
           
 void setSrc(Address new_src)
           
 long size()
          Returns size of buffer, plus some constant overhead for src and dest, plus number of headers time some estimated size/header.
 java.lang.String toString()
           
 java.lang.String toStringAsObject()
          Tries to read an object from the message's buffer and prints it
 void writeExternal(java.io.ObjectOutput out)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

dest_addr

protected Address dest_addr

src_addr

protected Address src_addr

buf

protected byte[] buf

headers

protected java.util.HashMap headers
Constructor Detail

Message

public Message(Address dest,
               Address src,
               byte[] buf)
Public constructor

Parameters:
dest - Address of receiver. If it is null or a string, then it is sent to the group (either to current group or to the group as given in the string). If it is a Vector, then it contains a number of addresses to which it must be sent. Otherwise, it contains a single destination.

Addresses are generally untyped (all are of type Object. A channel instance must know what types of addresses it expects and downcast accordingly.

src - Address of sender
buf - Message to be sent. Note that this buffer must not be modified (e.g. buf[0]=0 is not allowed), since we don't copy the contents on clopy() or clone().

Message

public Message(Address dest,
               Address src,
               java.io.Serializable obj)
Public constructor

Parameters:
dest - Address of receiver. If it is null or a string, then it is sent to the group (either to current group or to the group as given in the string). If it is a Vector, then it contains a number of addresses to which it must be sent. Otherwise, it contains a single destination.

Addresses are generally untyped (all are of type Object. A channel instance must know what types of addresses it expects and downcast accordingly.

src - Address of sender
obj - The object will be serialized into the byte buffer. Object has to be serializable ! Note that the resulting buffer must not be modified (e.g. buf[0]=0 is not allowed), since we don't copy the contents on clopy() or clone().

Message

public Message()
Only used for Externalization (creating an initial object)

Method Detail

getDest

public Address getDest()

setDest

public void setDest(Address new_dest)

getSrc

public Address getSrc()

setSrc

public void setSrc(Address new_src)

getBuffer

public byte[] getBuffer()
Returns the payload (byte buffer). Note that this buffer should not be modified as we do not copy the buffer on copy() or clone(): the buffer of the copied message is simply a reference to the old buffer.


setBuffer

public void setBuffer(byte[] b)

getHeaders

public java.util.Map getHeaders()

setObject

public void setObject(java.io.Serializable obj)

getObject

public java.lang.Object getObject()

reset

public void reset()
Nulls all fields of this message so that the message can be reused. Removes all headers from the stack, but keeps the stack


putHeader

public void putHeader(java.lang.String key,
                      Header hdr)
Puts a header given a key into the hashmap. Overwrites potential existing entry.


removeHeader

public Header removeHeader(java.lang.String key)

removeHeaders

public void removeHeaders()

getHeader

public Header getHeader(java.lang.String key)

copy

public Message copy()

clone

protected java.lang.Object clone()
                          throws java.lang.CloneNotSupportedException
Throws:
java.lang.CloneNotSupportedException

makeReply

public Message makeReply()

toString

public java.lang.String toString()

toStringAsObject

public java.lang.String toStringAsObject()
Tries to read an object from the message's buffer and prints it


size

public long size()
Returns size of buffer, plus some constant overhead for src and dest, plus number of headers time some estimated size/header. The latter is needed because we don't want to marshal all headers just to find out their size requirements. If a header implements Sizeable, the we can get the correct size.

Size estimations don't have to be very accurate since this is mainly used by FRAG to determine whether to fragment a message or not. Fragmentation will then serialize the message, therefore getting the correct value.


printObjectHeaders

public java.lang.String printObjectHeaders()

writeExternal

public void writeExternal(java.io.ObjectOutput out)
                   throws java.io.IOException
Specified by:
writeExternal in interface java.io.Externalizable
Throws:
java.io.IOException

readExternal

public void readExternal(java.io.ObjectInput in)
                  throws java.io.IOException,
                         java.lang.ClassNotFoundException
Specified by:
readExternal in interface java.io.Externalizable
Throws:
java.io.IOException
java.lang.ClassNotFoundException


Copyright © 2001,2002 www.jgroups.com . All Rights Reserved.