
			Identity in JavaGroups
			----------------------

There are 2 levels of identity: processes and objects. The former are
identified by a host:port tuple and the latter by a host:port:object_id
tuple. Objects live in the Dispatcher, whereas processes are associated
with a Transport. There is always only a single Dispatcher and a single
Transport in each JVM (with the exception of the optional GMS server
which needs a different Transport).

A Transport usually has a number of output ports for sending messages
and a number of input ports for receiving messages. When a message is
sent, its 'source' address consists of the local host, one of the input
ports (so the receiver is able to send a response) and (in the case of
objects) an object id (generated by the Dispatcher).

The input port of the source address of a Message might be different for
messages sent by the same sender since mulitple input sockets might be
used and reception of responses should be multiplexed over multiple
input sockets. For responses, this behavior is unimportant since any of
the incoming sockets will receive the message and pass it on to the
Transport (and optionally the Dispatcher). However, if a process needs
to relate messages from the same sender, and uses the source address
(host:port) as key to differentiate between various senders, there is no
guarantee that messages from the same sender will be related as their
keys (ports) might be different.

This is for example a problem for FIFO and FRAG protocols where messages
from the same sender are related (e.g. ordered, or reassembled) before
being delivered to the application.


Therefore, an additional field has to be added to each message,
identifying the sender correctly. A good candidate would be the process
id of the JVM. However, there is currently (as of JDK 1.1.3) no means to
get the process ID of the JVM. Therefore, we need to generate a sender
ID that is as unique as possible over multiple JVMs.

We currently use the system time (in milliseconds) as ID, but will
switch to the JVM's process ID as soon as it will be available.

The system time is retrieved by the Transport as it starts up and
stored. The combination of host address, system time and (optionally)
port uniquely identifies each process/object in the system.

The additional field is added to UnicastAddress as 'transport_id'.

When sending a message to a single destination (UnicastAddress), the
field is 0. It is not 0 when used as source address in a message.
