JMaCS: Java Monitoring and Control System

Welcome to the JMaCS home page. Last updated: 2008-06-30.

JMaCS is software intended to facilitate the interactive and programmatic, monitoring and control, of some distributed target, in soft realtime, and is derived from experimental monitoring and control software written for the EISCAT Svalbard Radar (ESR).

It is designed for targets which may be represented as a collection of separate, distributed devices organised as a hierarchy, and brings to bear the remote polymorphism afforded by Java Remote-Method Invocation (RMI). (Remote polymorphism allows powerful object-oriented techniques to be applied to systems involving separate programs, typically running on separate hosts, as though the system were contained within a single program.)

The org.jmacs package itself defines a standard way for device-interface (DI) developers on the one hand to plug devices into a system supplied by a JMaCS implementation vendor on the other. Thus, a DI factory (IDi.AbstractFactory) implementation is supplied by the JMaCS implementation vendor, for inclusion in the Java classpath when a DI is deployed, and accessed using IDi.AbstractFactory.getInstance().

Rather than have to implement the IDi.IDriver directly, the org.jmacs.pd (Programmable-Device Framework) package supports the definition of actual device types (e.g. com.lafros.pd.cat.antenna.steerable.Steerable), having their own APIs (which may be abstract to varying degrees) and able to run IPrograms. New programmable devices may be defined in terms of existing ones, by means of the object-oriented techniques of composition and inheritance, resulting in the formation of programmable-device catalogues.

Plugging a device in

This involves creating a DI and binding it to a domain.like.name in the target's DI registry, thereby determining its position in a logical hierarchy.

Implementing IDi.IDriver directly

Here an IDi is obtained from the IDi.AbstractFactory directly. This requires an IDi.IDriver implementation (for executing commands and generating status), together with possible IMonitorGui and IControlsGui implementations (to be displayed by JMaCS implementation vendor-provided user interfaces).

Specifying a programmable device

Here we use a Pdi. This instead takes a fully implemented programmable device, as specified by a package name (from which the type of the device is determined) and Device.IDriver or Device.IDriver.IContainer implementation.

Known JMaCS implementation vendors

Further details

Site history