Wojciech Buczak, Wojciech Sliwinski BE-CO-IN for the Middleware team Vito Baggiolini, Roman Gorbonosov BE-CO-DA
Agenda What is JAPC ? Overal achitecture Core functionality Implementation of Diverse Parameters Interface – basic abstractions JAPC extensions ParameterMetafactory Summary 2JAPC im a Nutshell24th April 2013
What is JAPC ? 24th April 2013JAPC im a Nutshell3 JAPC is a unified API for all different kinds of parameters present in CERN control system JAPC = CORE + extensions + services
JAPC: overal architecture 4JAPC im a Nutshell24th April 2013 JAPC API JAPC CORE japc-ext-cmwrda2japc-ext-remote japc-ext-snmp Java Control Programs GUI Components Diagnostic Tools General Purpose Services japc-ext-simjapc-ext-tgm japc-ext-referencejapc-ext-sim japc-ext-mockito RDA devices SNMP devices JMS Databases japc-ext-cmwrda3 CMW directory service ConfigurationDatabaseCCDB
JAPC: core functionality 24th April 2013JAPC im a Nutshell5 JAPC: “Java API for Parameter Control” Parameter a value you need to supervise and/or control (aka control value, I/O point, I/O channel, signal, device property) Hardware, timing, remote server, db, alarms, simulation, ??.. Core functionality provided by JAPC: SET/GET and MONITOR > Synchronous and asynchronous operations > Timing-dependent and periodic actions Obtain meta-information about the parameter Processing and changing a parameter value on-the-fly Grouping information from several parameters into a single value
JAPC: Implementation of Diverse Parameters 24th April 2013JAPC im a Nutshell6 6 HW Devices (Front-ends) Database or Files Virtual Devices (J2EE Server) Simulated parameters Timing System JAPC CORE Specfic applications GUI components Diagnostic Tools General Purpose Services JAPC Interface CMW Parameter set() get() subscribe() CMW Parameter set() get() subscribe() DB Parameter set() get() subscribe() DB Parameter set() get() subscribe() TIMING Parameter set() get() subscribe() TIMING Parameter set() get() subscribe() Parameter set() get() subscribe() Parameter set() get() subscribe()
JAPC Interface – basic abstractions Parameter = the “handle” provides set/get and subscribe functionality ParameterValue = Data container Transports all data types supported by our front-ends Simple types (byte, int, double, String, etc) arrays, enums Composite types (contain several simple types) CycleSelector specifies when data shall be accessed Cycle-Event: timing system event at which the data shall be acquired Descriptor provides meta information on the parameter for self-configuring GUI components getDescription() isWritable(), isReadable(), isSubscribable() Information retrieved from CERN directory service ParameterFactory a class that knows how to create parameters 24th April 2013JAPC im a Nutshell7
JAPC: extensions Many extensions (plugins) available, with the most commonly used: JAPC remoting extension (japc-ext-remote) Used to represent middle-tier servers as virtual devices and/or parameters provides set/get and subscribe functionality Supports GET/SET/MONITOR operations using serveral remoting technologies (RMI/HTTP/JMS) Parameter configuration storred in a JAPC registry JAPC device access extension (japc-ext-cmwrda) Used to access hardware devices and represent them as a collection of parameters. Access done through Common Middleware (CMW) All basic operations supported (GET/SET/MONITOR) Optimization: support of array-calls New extensions can eaisily be written on demand 24th April 2013JAPC im a Nutshell8
JAPC: Metafactory Part of JAPC core Client programs use a Factory to create parameters Before: only one type of devices in a JVM Now: combination of all devices Metafactory knows what type of parameter to create Naming prefixes: protocol://service/device/property#field e.g. ○ jms://cngs/CNGS.TBID/Acquisition#counts Name-to-service resolvers ○ One resolver per known type of parameter ○ Factory asks each resolver if it knows the parameter name ○ No protocol://service prefix needed ○ Example: directory service for RDA 9JAPC im a Nutshell24th April 2013
JAPC: summary Clients at CERN Many projects: LSA, INCA, CNGS, CESAR, Oasis, DIAMON, TIM WorkingSets/Knobs Is there a project at CERN that does not use JAPC ?? Easily extendable – plugin architecture Dependencies JAPC CORE: NONE extensions have various dependencies Some numbers JAPC core: 350 Classes, 60’000 Lines of Code; 12 extensions: each Classes, 1’000-3’000 Lines of Code 10JAPC im a Nutshell24th April 2013