River

River is a toolkit to build distributed systems with. The basic communication between client and service is based on RPC.

Communication

Client and service communicate with a protocol called JERI. There are JERI implementations for plain-TCP, plain-SSL, HTTP, HTTPS and Kerberos-TCP. For compatibility with RMI there is also a JRMP transport.

From small to big

The smallest river system is comprised of a service and a client. They only make use of JERI to communicate. No dynamic discovery is possible.

The next system in size is a combination of a service, client and a registry. This allows for automatic discovery of client, service and registry. The VM hosting the service registers the service in the registry.

For a system that also provides for ondemand distribution of compiled code, you will need a service, client, registry and class-server.

Basic services

There are several basic services. For locking, distributed events, leasing, transactions.

Extended services

River has an implementation of 'Tuple spaces' called JavaSpaces.