River Container Core

Introduction

This is the core code that implements the Apache River Container. The purpose of the Apache River Container is to host Jini services and clients using the libraries provided by Apache River.

Jini services and clients have some special requirements.

First, they need to have particular control over the codebase. For exported objects, the download code needs to be made available through a web server (there is talk that in the future, the clients might be able to load code directly from a repository server like Maven does. There‘s no reason this can’t be added to the River Container), and the location of that web server needs to be included in the codebase annotation generated by the RMIClassLoader. Also the codebase generally doesn't call out the same jar file that contains the implementation code. Rather, it calls out a special “download jar” that only contains the classes that should be present on the client. Further, the API should be downloadable.

Second, Jini clients and services make heavy use of remote code, so they need to be run in a VM with security enabled.

So, the River Container has provisions for this. Also, it has the flexibility to allow deployments to take various forms.

The following documents describe parts of the River Container architecture:

  • Bootstrap How the container starts up and loads all its modules.
  • Management Use of the JMX management facilities.
  • Security Details on the security environment and security manager.
  • Service Starter Services Support for existing services (like Reggie) that were designed to be run using the ServiceStarter classes.
  • State Machine Information on the annotation-based state machine implementation used in various places in the container.
  • Surrogate Deployment Deployer used to host Jini Surrogates.
  • Work Manager Considerations Design thoughts on work/thread management in the container.
  • To Do To-do list for the development.