Package org.jgroups

Class ObjectMessage

java.lang.Object
org.jgroups.BaseMessage
org.jgroups.ObjectMessage
All Implemented Interfaces:
Constructable<Message>, Message, SizeStreamable, Streamable

public class ObjectMessage extends BaseMessage
A Message with an object as payload. The object won't get serialized until sent by the transport.

Note that the object passed to the constructor (or set with setObject(Object)) must not be changed after the creation of an ObjectMessage.

Since:
5.0
  • Field Details

  • Constructor Details

    • ObjectMessage

      public ObjectMessage()
    • ObjectMessage

      public ObjectMessage(Address dest)
      Constructs a message given a destination address
      Parameters:
      dest - The Address of the receiver. If it is null, then the message is sent to the group. Otherwise, it is sent to a single member.
    • ObjectMessage

      public ObjectMessage(Address dest, Object obj)
      Constructs a message given a destination address and the payload object
      Parameters:
      dest - The Address of the receiver. If it is null, then the message is sent to the group. Otherwise, it is sent to a single member.
      obj - To be used as payload.
    • ObjectMessage

      public ObjectMessage(Address dest, SizeStreamable obj)
      Constructs a message given a destination address and the payload object
      Parameters:
      dest - The Address of the receiver. If it is null, then the message is sent to the group. Otherwise, it is sent to a single member.
      obj - The SizeStreamable object to be used as payload. Note that this constructor has fewer checks (e.g. instanceof) than ObjectMessage(org.jgroups.Address,java.lang.Object).
  • Method Details

    • create

      public Supplier<Message> create()
      Description copied from interface: Constructable
      Creates an instance of the class implementing this interface
    • getType

      public short getType()
      Description copied from interface: Message
      Returns the type of the message, e.g. BYTES_MSG, OBJ_MSG etc
    • hasPayload

      public boolean hasPayload()
      Description copied from interface: Message
      Returns true if the message has a payload, e.g. a byte[] array in a BytesMessage or an object in an ObjectMessage. This is more generic than Message.hasArray(), as it is not just applicable to a byte array.
      Returns:
      True if the message has a payload
    • hasArray

      public boolean hasArray()
      Description copied from interface: Message
      Returns true if this message has a byte[] array as payload (even if it's null!), false otherwise
    • getOffset

      public int getOffset()
      Description copied from interface: Message
      Returns the offset of the byte[] array at which user data starts. Throws an exception if the message does not have a byte[] array payload (if Message.hasArray() is false).

      Note that this is a convenience method, as most messages are of type BytesMessage.

    • getLength

      public int getLength()
      Description copied from interface: Message
      Returns the length of the byte[] array payload. If the message does not have a byte[] array payload (Message.hasArray() is false), then the serialized size may be returned, or an implementation may choose to throw an exception
    • getArray

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

      Even if offset and length are used: we return the entire array, not a subset.

      Throws an exception if the message does not have a byte[] array payload (Message.hasArray() is false).

      Note that this is a convenience method, as most messages are of type BytesMessage. It is recommended to downcast a Message to the correct subtype and use the methods available there to get/set the payload.

    • setArray

      public ObjectMessage setArray(byte[] b, int off, int len)
      Description copied from interface: Message
      Sets the byte array in a message.

      Throws an exception if the message does not have a byte[] array payload (Message.hasArray() is false).

      Note that this is a convenience method, as most messages are of type BytesMessage. It is recommended to downcast a Message to the correct subtype and use the methods available there to get/set the payload.

    • setArray

      public ObjectMessage setArray(ByteArray buf)
      Description copied from interface: Message
      Sets the byte array in a message.

      Throws an exception if the message does not have a byte[] array payload (Message.hasArray() is false).

      Note that this is a convenience method, as most messages are of type BytesMessage. It is recommended to downcast a Message to the correct subtype and use the methods available there to get/set the payload.

    • isWrapped

      public boolean isWrapped()
    • setWrapped

      public ObjectMessage setWrapped(boolean b)
    • setObject

      public ObjectMessage setObject(Object obj)
      Sets the object. If the object doesn't implement SizeStreamable, or is a primitive type, it will be wrapped into an ObjectWrapperSerializable (which does implement SizeStreamable)
    • setObject

      public ObjectMessage setObject(SizeStreamable obj)
      Sets the payload to a SizeStreamable (or null). This method has fewer checks (e.g. instanceof) than setObject(Object).
      Parameters:
      obj - The SizeStreamable to be used as payload (or null)
    • setSizeStreamable

      public ObjectMessage setSizeStreamable(SizeStreamable s)
    • getObject

      public <T> T getObject()
      Description copied from interface: Message
      Gets an object from the payload. If the payload is a byte[] array (e.g. as in BytesMessage), an attempt to de-serialize the array into an object is made, and the object returned.

      If the payload is an object (e.g. as is the case in ObjectMessage), the object will be returned directly.

    • size

      public int size()
      Description copied from interface: Message
      Returns the exact size of the marshalled message
      Specified by:
      size in interface Message
      Overrides:
      size in class BaseMessage
      Returns:
      The number of bytes for the marshalled message
    • writePayload

      public void writePayload(DataOutput out) throws IOException
      Throws:
      IOException
    • readPayload

      public void readPayload(DataInput in) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException
    • copyPayload

      protected Message copyPayload(Message copy)
      Description copied from class: BaseMessage
      Copies the payload
      Overrides:
      copyPayload in class BaseMessage
    • toString

      public String toString()
      Overrides:
      toString in class BaseMessage
    • objSize

      protected int objSize()