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 24th April 2013 JAPC im a Nutshell 2 What is JAPC ? JAPC is a unified API for all different kinds of parameters present in CERN control system JAPC = CORE + extensions + services 24th April 2013 JAPC im a Nutshell 3 JAPC: overal architecture Java Control Programs GUI Components General Purpose Services Diagnostic Tools JAPC API CMW directory service JAPC CORE japc-ext-cmwrda2 Configuration Database CCDB japc-ext-sim 24th April 2013 japc-ext-tgm japc-ext-reference RDA devices japc-ext-remote japc-ext-mockito japc-ext-sim SNMP devices japc-ext-snmp japc-ext-cmwrda3 Databases JAPC im a Nutshell JMS 4 JAPC: core functionality 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 24th April 2013 JAPC im a Nutshell 5 JAPC: Implementation of Diverse Parameters Specfic applications GUI components Diagnostic Tools General Purpose Services JAPC Interface Parameter ----------------------------set() get() subscribe() CMW Parameter ----------------------------set() get() subscribe() DB Parameter ----------------------------set() get() subscribe() Controls Middleware Database 24th April 2013 JAPC CORE HW Devices (Front-ends) Simulated parameters Virtual Devices (J2EE Server) Database or Files Timing System TIMING Parameter ----------------------------set() get() subscribe() JAPC im a Nutshell 6 6 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 2013 JAPC im a Nutshell 7 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 2013 JAPC im a Nutshell 8 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 24th April 2013 JAPC im a Nutshell 9 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 10-20 Classes, 1’000-3’000 Lines of Code 24th April 2013 JAPC im a Nutshell 10