Overview

The ALMA Common Software (ACS) is located in between the ALMA application software (Applications) and other basic commercial or shared software on top of the operating systems. In particular, ACS is based on CORBA (CORBA Middleware), which provides the whole infrastructure for the exchange of messages between distributed objects. Whenever possible, ACS features will be provided using off the shelf components and ACS itself will provide the packaging and the glue between these components.

The ACS is also based on an Object Oriented architecture [RD01 - 13.1.1 Distributed Objects and commands].

The following UML Package Diagram shows the main packages in which ACS has been subdivided.

Figure 2.1: ACS Packages

Each package provides a basic set of services and tools that shall be used by all ALMA applications.

Packages have been grouped in 4 layers. Packages are allowed to use services provided by other packages on the lower layers and on the same layer, but not on higher layers.

A 5th group contains packages for software that is used by many ALMA Subsystems, but that is not used by other ACS packages. These packages are for convenience integrated and distributed together with ACS but are not integral parts of ACS.

A brief description of the layers and the packages is provided hereafter, while the next chapter will contain a detailed description of the features included in the packages.

1 - Base Tools

The bottom layer contains base tools that are distributed as part of ACS to provide a uniform development and run time environment on top of the operating system for all higher layers and applications. These are essentially off-the-shelf components and ACS itself just provides packaging and installation and distribution support. This ensures that all installations of ACS (development and run-time) will have the same basic set of tools with versions kept under configuration control.

The exact set of tools and versions are described in the documentation coming with each ACS release. Being these normally big packages the ACS installation procedures will have to offer the options of installing the tools in binary format, building them from sources or using an independent installation.

Three main packages have been identified in this layer:

2 - Core components

This second layer provides essential components that are necessary for the development of any application

3 - Services

The third layer implements services that are not strictly necessary for the development of prototypes and test applications or that are meant to allow optimization of the performances of the system:

4 - API and High-level tools

The fourth and last layer provides high level APIs and tools. More will be added in the future. The main goals for these packages is to offer a clear path for the implementation of applications, with the goal of obtaining implicit conformity to design standards and maintainable software[RD01 - 3.1.2. Design].

5 - Integrated APIs and tools

The 5th  group of packages contains software that is used by many ALMA Subsystems, but that is not used by other ACS packages. These packages are for convenience integrated and distributed together with ACS but are not integral parts of ACS. The list of packages will be extended according to the ALMA integration needs. If considered useful, some packages can be hidden on the back of an ACS abstraction layer with the purpose of facilitating the usage of the package and its integration with other ACS facilities (like error and alarm handling). In this case the package would be moved in layer 4 of the ACS architecture.

Component Container model

The Technical Architecture in the ALMA Software Architecture document [RD33]identifies a Container-Component model for software organization and development as our primary instrument for achieving separation of functional from technical concerns.

A Component is defined in [RD33] as a software element that exposes its services through a published interface and explicitly declares its dependencies on other components and services, can be deployed independently and, in addition:

The division of responsibilities between Components and Containers enables decisions about where individual components are deployed to be deferred until runtime. If the container manages component security as well, authorization policies can be configured at run time in the same way.

A Component is required to provide:

A Container is required to provide:

ACS provides a simple implementation of the Component-Container model implemented in C++, Java and Python.

In order to decouple the Component and Container implementations, the ACS Component package contains the definition of all the interfaces needed for the implementation of Components and the default implementation of the interface which can be used as base classes for the Components themselves.

The ACS Container package contains the actual implementation for the Container model, including the high level management of Containers (Manager). The following diagram provides an overview class diagram of the Component-Container model. More details are given in the description of the Component and Container architectural packages.

Figure 2.2: ACS Component-Container overview class diagram

For a more detailed discussion of rationale behind the choice of the Component-Container model, see the ALMA Software Architecture document [RD33].

Deployment

The choice of CORBA for the implementation of a Component/Container model and of all services that are part of the previously described packages makes it possible to have every software operation available in a transparent way both locally and at the Control Center in San Pedro. This applies also to all data, logs and alarms[RD01 - 12.1.6 Location]. The choice for the LAN and access optimization mechanisms, described in the following sections, will ensure that no significant degradation in performance will take place [RD01 - 3.2.4. Local and central operation].

In principle, this same mechanism allows reliable remote access from the US and Europe, although with reduced performance. It is anyway necessary that applications are designed in order to prevent unauthorized access and undesired side effects on the performance of the control system [RD01 - 3.2.5. Remote access]. ACS provides the basic building blocks for the implementation of these mechanisms.

All packages in the lower ACS layers are available for developing code both for the Linux[RD01 - 10.5.4 OS] and the VxWorks[RD01 - 10.5.3 RTOS] platforms. The usage of the ACE C++ toolkit allows writing portable code that can migrate, for example, from Linux to VxWorks and vice versa according to development and run-time needs.

Real Time Linux has replaced VxWorks as the real time development platform in ALMA (limited support for VxWorks is maintained for other projects). In this configuration, only hard real time tasks will run in the real time kernel, while every other task will run in the normal Linux kernel. ACS provides "bridge modules" that allow the real time tasks to communicate with non real time tasks in a standard way. For example, a logging "bridge module" allows the generation of logs on the real time side and their further propagation on the non real time side.

Higher-level components are not usually needed on the real-time platform. In this case Java will be used to provide portability among non real-time platforms (for example Linux and Windows). This will apply in particular for user interface applications.

Some development tools can be required to run or can be more convenient to use on Windows platforms.

Via CORBA, all objects publishing an IDL interface will be available to any environment, host and programming language where a CORBA implementation is available. In particular it will be possible to write client applications for Components in any CORBA-aware platform. ACS explicitly supports C++, Java, C and Python [RD01 - 10.3.3. Compiled Languages] [RD01 - 10.5.6. Scripting language].

The ACS Component/Container model is then implemented in C++, Java and Python. The three implementations are not identical, but are tailored to the specific application domain of the language. For example, the C++ implementation provides strong support for the Component/Property/Characteristic pattern of interest for Control Applications and provides a more sophisticated threading model handling of interest for the Pipeline and Offline Data Reduction applications. On the other hand, the Java implementation provides Tight Containers and transparent XML serialization.

The ACS installation procedures will allow selecting the installation platform and will allow selecting between development and run time installations. For a development installation, all development tools will be installed, including compilers and debuggers, while a run-time installation will be much lighter and include only the libraries and components needed at run-time. There is also a separate installation for "pure Java" applications that will be installable and usable from any machine supporting a Java Virtual Machine. This is based on Web Start technology to make installation as simple and automatic as possible, as well as software upgrades.

Per each package, it will be specified at design time what components will be available on each platform and for run-time and development installations.

We foresee 7 different types of deployment nodes (connections in the diagram show the foreseen communication paths among node types, for example a Remote User Station is allowed to communicate only with a Linux run-time workstation):

Figure 2.3: ACS Deployment