Topics regarding CERN Common Middleware (CMW) at GSI
The Common Middleware (CMW) Framework developed by CERN provides a Middleware Solution for the communication between Frontend tier (FECs) in form of the FESA Device Classes and the Application tier, e.g. JAPC
. CMW consist of multiple packages and components, each adding a particular function to the framework. An overview over the framework can be found here (accessible only form the CERN Network): http://wikis.cern.ch/display/MW/Home
This Section of Wiki encapsulates useful Information about the usage of the CMW framework in the GSI environment.
As everything here the information in this section is based on an actual time snapshot and may be already outdated when you are reading it. However if you think that something is missing or not more up-to-date you can contact V.Rapp.
CMW / RDA2 is adopted by GSI to use mainly as a communication layer between FESA device classes and the User Specific components. Commonly those components are using the JAPC
Framework for communication, which itself is an abstraction level for CMW - RDA calls. Since neither FESA nor JAPC
require all CMW libraries, only a particular snapshot of them is used by GSI. The snapshot contains following cmw libraries:
In particular only the cmw-rda and cmw-log components are used directly by FESA. Those however depend on the other libraries within the snapshot. An overview of all dependencies can be found here
Additionaly the cmw snapshot contains the following 3rd party libraries required to run the CMW: omniORB and iceutils. In case of the iceutils only a small cut of the original library is used.
To deploy and run the CMW Middlware it is also necessary to run the CMW Directory Server, which resolve Device or Deployment Unit Names to CORBA IORs.
CMW Directory Server
Information about the Directory Server can be found here
Information about the particular CMW Libraries used at GSI can be found here
In Juli 2014 the CERN Middleware team has released a new version of RDA libraries called RDA 3, which is a completely new development. The main motivation for a new version was the replacement of old CORBA messaging layer by the newer ZeroMQ
layer. Natively the new RDA library is not compatible with the older one, however using so called proxies it is possible to enable the communication between RDA 2 and RDA 3. Those proxies require resources, dependent libraries (omniORB) and additional effort to set up. Today there is no plans and need to set up such proxies at GSI, so there will be (probably) no compatibility. Note that this incompatibility is considering only the actual RDA to RDA communication. Frameworks build on top of RDA (FESA, JAPC
) still can provide such compatibility and user transparency.
RDA 3 @ GSI
To reduce dependencies to specific libraries a lab-specific package was introduced to RDA 3 packaging structure.
The basic C++ libraries of RDA3 are will be installed under: /opt/cern/cmw. The CWM libraries also contain a GSI specific library, which should also be linked to the project in order to comile and used. This library is installed here: /opt/gsi/cmw/. The version number of the GSI specific package corresponds to the version number of rda3 package. It also contains symbolic links to all dependent libraries, which make the linking of easier.
INCLUDE_PATH = /opt/gsi/cmw/cmw-rda3-gsi/<version>/<span>
LIB_PATH = /opt/gsi/cmw/cmw-rda3-gsi/<version>/lib/<cpu>
DEPENDENT_COMPILER_OPTIONS = -I$(INCLUDE_PATH)/include
DEPENDENT_LINKER_OPTIONS = $(LIB_PATH)/libcmw-log.a $(LIB_PATH)/libcmw-log.a ...</span>
GSI's RDA3 delivery depends on following CMW packages:
3rd party dependencies
The RDA3 delivery also depends of followng 3rdparty libraries:
- zeroMQ (incl C++ binding) v. 4.0.4 with CERN patch
- boost v. 1.54.0 (chrono, system, thread, atomic and filesystem)
The Java version of RDA3 can be obtained via maven by adding a following dependecy to the .pom file:
Other dependencies will be automatically resolved by maven.
Directory Server configuration
RDA requires a connection to a directory server to work. In C++ the location of the server is configured by the env varible e.g.:
In Java the configuration was realized with a system property
In the newer versions of RDA3 (since v. 1.1.1) the naming of the properties / variables has been changed. For C++ it is
while for Java:
In any case the variable can contain a list of directory servers, which will be sequentially connected until the connection was successful (fault tolerance of directory servers).
Collaboration with CERN
- CMW Meeting 25./26. Apr 2013