Classes in this package implement distribution in GemFire. Every virtual machine working with distributed data (client VMs, the GemFire console) has an instance of {@link org.apache.geode.distributed.internal.DistributionManager} that is responsible for sending and receiving {@link org.apache.geode.distributed.internal.DistributionMessage}s. A DistributionManager has a unique {@link org.apache.geode.distributed.internal.DistributionManager#getId id} and uses a JavaGroups com.gemstone.org.javagroups.Channel channel to discover the other members of the distributed system. It also uses JavaGroups to detect when a member has left the group. Note that GemStone has org.apache.geode.distributed.internal.direct.DirectChannel#patchUpAddress modified the implementation of the JavaGroups com.gemstone.org.jgroups.stack.IpAddress to hold the port on which the distribution manager's direct channel runs. This optimization allows us to start a distribution manager without having to send out a "startup" message. (GemStone has also modified JGroups to perform less XML parsing. This greatly improves the performace of creating a JavaGroups channel.) While some messages may be broadcast to all members of the group, the vast majority of messages are only intended for a subset of the group are sent point-to-point over a {@link org.apache.geode.distributed.internal.direct.DirectChannel}. The JGroups channel and DirectChannel are combined into a {@link org.apache.geode.distributed.internal.DistributionChannel} that is used by the DistributionManager.