The JACK® package includes a standard communications layer that uses UDP/IP based messaging with a reliability layer. While JACK is delivered with a communications infrastructure of its own, an application may also use a pre-existing or other means of communications (such as CORBA, RMI, etc.).
JACK agent messages are declared in a similar way to Java classes and end up being Java objects to be sent and received. These objects are then streamed using Java serialization, or by using the companion package JACOB, for improved messaging performance and flexibility (the JACOB binary format is up to ten times faster than Java serialization).
At the programming level, JACK agents interact via "send" and "reply" primitives. These support multi-casting; that is, the same message may be sent to several recipients and an agent may wait for the replies in a resource free manner. Higher level communications protocols are implemented as "capabilities" that are reusable among agents.