SEAL Framework & Services LCG AA Internal Review 20 October, 2003 Radovan Chytracek / CERN on behalf of SEAL team.

Slides:



Advertisements
Similar presentations
1 Mind Visual Diff An architecture comparison tool December 16 th, 2014 – v0.2.2 Seyvoz Stephane Assystem.
Advertisements

Software Frame Simulator (SFS) Technion CS Computer Communications Lab (236340) in cooperation with ECI telecom Uri Ferri & Ynon Cohen January 2007.
D. Düllmann - IT/DB LCG - POOL Project1 POOL Release Plan for 2003 Dirk Düllmann LCG Application Area Meeting, 5 th March 2003.
Component Patterns – Architecture and Applications with EJB copyright © 2001, MATHEMA AG Component Patterns Architecture and Applications with EJB JavaForum.
The Architecture Design Process
Lecture 9 Concepts of Programming Languages
Experiment Support Introduction to HammerCloud for The LHCb Experiment Dan van der Ster CERN IT Experiment Support 3 June 2010.
SEAL V1 Status 12 February 2003 P. Mato / CERN Shared Environment for Applications at LHC.
M Gallas CERN EP-SFT LCG-SPI: SW-Testing1 LCG-SPI: SW-Testing LCG Applications Area GridPP 7 th Collaboration Meeting LCG/SPI LCG.
An Introduction to Software Architecture
Magnetic Field Measurement System as Part of a Software Family Jerzy M. Nogiec Joe DiMarco Fermilab.
K. Harrison CERN, 20th April 2004 AJDL interface and LCG submission - Overview of AJDL - Using AJDL from Python - LCG submission.
SEAL Project Status and Plans LHCC Comprehensive Review of LCG-AA November 2003 P. Mato / CERN.
Conditions DB in LHCb LCG Conditions DB Workshop 8-9 December 2003 P. Mato / CERN.
1 Cisco Unified Application Environment Developers Conference 2008© 2008 Cisco Systems, Inc. All rights reserved.Cisco Public Introduction to Etch Scott.
ALICE, ATLAS, CMS & LHCb joint workshop on
Area Detector Drivers Towards A Pattern Jon Thompson.
ADTs and C++ Classes Classes and Members Constructors The header file and the implementation file Classes and Parameters Operator Overloading.
SEAL Project Overview Lorenzo Moneta/ CERN-EP on behalf of the SEAL team ACAT03 IX International Workshop on Advanced Computing and Analysis Techniques.
C# G 1 CSC 298 Object Oriented Programming Part 2.
SEAL Core Libraries and Services CLHEP Workshop 28 January 2003 P. Mato / CERN Shared Environment for Applications at LHC.
SEAL Project Core Libraries and Services 18 December 2002 P. Mato / CERN Shared Environment for Applications at LHC.
Mantid Stakeholder Review Nick Draper 01/11/2007.
GDB Meeting - 10 June 2003 ATLAS Offline Software David R. Quarrie Lawrence Berkeley National Laboratory
1 OOP - An Introduction ISQS 6337 John R. Durrett.
Design Patterns David Talby. This Lecture Re-routing method calls Chain of Responsibility Coding partial algorithms Template Method The Singleton Pattern.
Ideas from ARC about the CORBA FL interface Interface ideas learned from K9 and K10 (Lorenzo) CORBA usage and wrapping ideas learned from MIRO (Hans)
NOVA A Networked Object-Based EnVironment for Analysis “Framework Components for Distributed Computing” Pavel Nevski, Sasha Vanyashin, Torre Wenaus US.
Mantid Stakeholder Review Nick Draper 01/11/2007.
INFSO-RI Enabling Grids for E-sciencE ARDA Experiment Dashboard Ricardo Rocha (ARDA – CERN) on behalf of the Dashboard Team.
Inheritance Initialization & Destruction of Derived Objects Protected Members Non-public Inheritance Virtual Function Implementation Virtual Destructors.
G.Govi CERN/IT-DB 1 September 26, 2003 POOL Integration, Testing and Release Procedure Integration  Packages structure  External dependencies  Configuration.
SEAL Project Overview LCG-AA Internal Review October 2003 P. Mato / CERN.
A. Aimar - EP/SFT LCG - Software Process & Infrastructure1 SPI Software Process & Infrastructure for LCG Project Overview LCG Application Area Internal.
Advanced Object-oriented Design Patterns Creational Design Patterns.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
PROGRAMMING TESTING B MODULE 2: SOFTWARE SYSTEMS 22 NOVEMBER 2013.
Reconfigurable Communication Interface Between FASTER and RTSim Dec0907.
1 Java Server Pages A Java Server Page is a file consisting of HTML or XML markup into which special tags and code blocks are inserted When the page is.
Steven Perry Dave Vieglais. W a s a b i Web Applications for the Semantic Architecture of Biodiversity Informatics Overview WASABI is a framework for.
ATLAS Database Access Library Local Area LCG3D Meeting Fermilab, Batavia, USA October 21, 2004 Alexandre Vaniachine (ANL)
D. Duellmann - IT/DB LCG - POOL Project1 The LCG Dictionary and POOL Dirk Duellmann.
INFSO-RI Enabling Grids for E-sciencE gLite C++ Configurator Practical experience gLite Configuration Meeting, March 1, 2005 Peter.
CINT & Reflex – The Future CINT’s Future Layout Reflex API Work In Progress: Use Reflex to store dictionary data Smaller memory footprint First step to.
The SEAL Component Model Radovan Chytracek CERN IT/DB, LCG AA On behalf of LCG/SEAL team This work received support from Particle Physics and Astronomy.
SEAL Project Status SC2 Meeting 16th April 2003 P. Mato / CERN.
CPT Week, November , 2002 Lassi A. Tuura, Northeastern University Core Framework Infrastructure Lassi A. Tuura Northeastern.
Project Work Plan SEAL: Core Libraries and Services 7 January 2003 P. Mato / CERN Shared Environment for Applications at LHC.
Status of SEAL LCG Applications Area Meeting 22 July 2003 P. Mato / CERN Contents Overview Work Packages Status Summary.
Building KFS using KNS Presented by James SmithJustin Beltran University of ArizonaUniversity of California, Irvine.
Elements of LCG Architecture Application Architecture Blueprint RTAG 8 th June 2002 P. Mato / CERN.
FASTFAST All rights reserved © MEP Make programming fun again.
POOL Based CMS Framework Bill Tanenbaum US-CMS/Fermilab 04/June/2003.
SEAL Project Overview Lorenzo Moneta/ CERN-EP ACAT03
Abstract Factory Pattern
Passing from design to implementation
(on behalf of the POOL team)
Data Transport for Online & Offline Processing
Delegates and Events 14: Delegates and Events
Intent To provide a framework to manage the process of software salvage and promote loose coupling through message passing. Salvage means recycling significant.
About the Presentations
POOL persistency framework for LHC
Dirk Düllmann CERN Openlab storage workshop 17th March 2003
Object-Orientated Programming
Abstract Factory Pattern
CAE-SCRUB for Incorporating Static Analysis into Peer Reviews
Simulation Framework Subproject cern
Overview Before You Start Structure of a Module Ports and Datatypes
SEAL Project Core Libraries and Services
Programming to Interfaces
Presentation transcript:

SEAL Framework & Services LCG AA Internal Review 20 October, 2003 Radovan Chytracek / CERN on behalf of SEAL team

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 2 Motivation  Allow LCG developers and users to write portable and modular code across all LCG projects  Provide developers with handy abstractions for modeling software systems  Learn from mistakes in the past and come with software component system which gets the best ideas which work well in existing systems

 There are simply too many to list here –Too many parties and interests involved –Very often controversial between two parties  Inspired by technologies in HEP and outside –Gaudi, Iguana, J2EE, Qt, COM,.NET, Python  Basic requirements: –KISS, flexible, type-safe, fast(if possible)  Features: –contextual composition, type-safe lookup, abstract interface support, plug-ins friendly 20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 3 Requirements

Requirements (2)  Encourage well-known communication protocols –call-backs, signals/slots,, observer-notification  Encourage simple services –direct use, targeted interfaces –configurable components via state/context instead of a->b->c->d style of navigation  Aim at lightweight framework, simple, repeatable usage pattern –common wiring, not a lot imposed on experiment framework  Component model must fit needs of majority and must be easily adopted by the rest

How we did it  Baseline taken from Iguana component system –Re-design followed to make it independent  The design we agreed was first prototyped in Python –Focus on functionality & component collaboration apects  2 quick independent C++ prototypes followed –The first goal to achieve the Python prototype look-alike –The second to achieve minimal amount of code needed to build and use components in a C++ application  Internal review of the prototypes –Benchmark, C++ implementations comparison, identifying performance bottle-necks and points of inflexibility

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 6 Component Model  Designed as hierarchy of bases classes to support the component model  Each Component lives in a Context  Contexts form their own hierarchy  Support for component look-up –If not in local context, look in parent  A Service provides its own local Context –Components of a Service live in the scope defined by its own Context  User classes inherit from Component or Service –Plug-in functionality for free Component Service MyComponentMyService Context RefCounted * * 1 Component Factory Component Loader 1

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 7 Context Hierarchy  Any Component may attempt to locate another Component in the running application (collaboration network) –By “type” or by “key” –If the not found in the current context, the parent context is searched recursively Context Application C1 C2 Component Svc2 C1C6C1C7 Svc1 C1C3C1C4C1C5 Svc1 Service C1C7

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 8 Component Model: How-To (1) #include "SealKernel/Component.h“ class MyComponent : public seal::Component{ DECLARE_SEAL_COMPONENT; public: MyComponent (seal::Context* context); MyComponent (seal::Context* context, const std::string & label); // implicit copy constructor // implicit assignment operator // implicit destructor //.....component member functions.. void doSomething(); }; MyComponent.h

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 9 Component Model: How-To (2) #include "MyComponent.h“ #include DEFINE_SEAL_COMPONENT (MyComponent, "seal/example/MyComponent"); MyComponent::MyComponent (seal::Context* context) : Component (context, classContextKey ()){} MyComponent::MyComponent (seal::Context* context, const std::string & label) : Component (context, label){} // member function implementations void MyComponent::doSomething() { std::cout << "MyComponent: Hello World ! " << std::endl; } #include "MyComponent.h“ #include "SealKernel/ComponentFactory.h“ #include "PluginManager/ModuleDef.h“ DEFINE_SEAL_MODULE (); DEFINE_SEAL_PLUGIN (seal::ComponentFactory, MyComponent, MyComponent::classContextLabel ()); MyComponent.cpp Module.cpp

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 10 Component Model: How-To (3) #include “SealKernel/ComponentLoader.h” #include “MyComponent.h” Handle handle = component (); handle->doSomething(); OtherComponent.cpp #include “SealKernel/ComponentLoader.h” #include “MyComponent.h” Handle handle = component ( “seal/example/MyComponent2” ); handle->doSomething(); OtherComponent1.cpp Look-up by type Look-up by key

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 11 Component Model: How-To (4) class IFaceComponent : public IFace, public Component { public: DECLARE_SEAL_COMPONENT; IFaceComponent( Context* c ) : Component( c, IFaceComponent::classContextKey() ) {} IFaceComponent( Context* c, const ContextKey& key ) : Component( c, key ) {} IFaceComponent( Context* c, const std::string& key ) : Component( c, key ) {} virtual ~IFaceComponent() {} public: // IFace implementation virtual void ifaceCall(void); }; DEFINE_SEAL_COMPONENT(IFaceComponent,"seal/example/IFaceComponent") void IFaceComponent::ifaceCall(void) { MessageStream optimist( this, "Optimistic" ); optimist << "I live!" << flush; } IFaceComponent.cpp #include "IFace.h" int main() { Application theApp; Handle loader = theApp.context()->component (); loader->load("seal/example/IFaceComponent"); IHandle ifacehandle = theApp.context()->query ("seal/example/IFaceComponent"); if( ifacehandle ) ifacehandle->ifaceCall(); return 0;} Main.cpp Using abstract interface class IFace { public: virtual void ifaceCall(void)=0; virtual ~Iface(){} }; IFace.h

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 12 Basic Framework Services  The first set of Basic Services came with the new Component Model  Application –Defines the top level Context –Possibility to set the initial set of Components to be loaded in the application  Message Service –Message composition, filtering and reporting –Closely related to MessageStream  Configuration Service –Management of Component properties and loading configurations –Multiple backends foreseen: »Gaudi style options,.INI style, CMS style, XML,...

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 13 Future development  New Services –Whiteboard service »Design started and discussed with the interested experiments »Waiting for feedback from experiments »Implementation plan similar to that of component model –DictionaryService - loading of dictionary libraries on-demand »Design and prototyping in progress  More ConfigurationService back-ends  Get feedback (from experiments + POOL+…) about Component model and Framework services –Corrections and re-designs are foreseen and possible

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 14 Summary  Component model & basic services came with SEAL –Combining existing designs into a “common” one is not trivial –Base classes to support the model provided –First set of basic Framework services  Ready to be used (tested) by experiments frameworks, however: –POOL is waiting for the component model to stabilize –LHCb may jump on it after POOL integration in Gaudi is O.K. –CMS similar attitude as LHCb, going for minimalist approach –ATLAS not there yet

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 15 Application  Establishes the “top” Context –But, it can be inserted in an exiting Context  Instantiates a basic number of Components (or Services) useful to all applications –ComponentLoaded (interface to Plug-in manager) –PropertyManager (application level configuration parameters) –MessageService –ConfigurationService int main(int,char**) { Application theApp; //----Get Loader Handle loader = theApp.component (); //----Instantiate the plug-in loader->load("SEAL/Kernel/Test/Loadable"); //----Get a handle to it Handle loadable = theApp.component (); } main.cpp

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 16 Message Service  The user instantiates a MessageStream to compose messages. It reports to the MessageService when message is completed  MessageService dispatches and filters all messages of the application #include “SealKernel/MessageStream.h” MessageStream info( this,”MyName”, MSG::INFO); info << “Hello world” << flush; MessageStream log( this, “OtherName”); log(MSG::ERROR) << “This is an error” << flush; OtherComponent.cpp MyName INFO Hello World OtherName ERROR This is an error output

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 17 Configuration Service  A Component may declare its own Properties –Templated Property instances (any type with a stream operator<<) –References to data members (any type with a stream operator<<) –Possibility to associate “callback” update function –Properties have a “name” (scoped) and a “description”  The PropertyCatalogue is the repository of all properties of the application –It is filled from the “configuration file” (Gaudi JobOptions format currently) struct callObj { operator()(const Propertybase&) {…} }; int m_int; Property m_double(“double”, 0.0,”descr”, callObj); propertyManager()->declareProperty(“int”, m_int, 0, “descr”); propertyManager()->declareProperty(m_double); Component.cpp

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 18 Single Context Look-up object model ContextKey next 8 a b c d e f g h Top Context Child Context 1 Child Context a b c d e f g h Mapping from labels to keys to objects A B C D E F G H ? Handle Context::query(“key”) { return m_vec[ ContextKey::m_keys[“key”] ] } F 0123 D AB 67 H

20 October 2003SEAL Review - Framework & Services R. Chytracek/CERN 19 SEAL Team (credits)  Christian Arnault(Dictionary)  Radovan Chytracek(Foundation, Framework)  Jacek Generowicz(Scripting, Framework, Documentation)  Fred James(MathLibs)  Wim Lavrijsen(Scripting)  Massimo Marino(Foundation, Framework, Scripting)  Pere Mato(Framework, Dictionary, Scripting)  Lorenzo Moneta(Foundation, Framework)  Stefan Roiser(Dictionary)  RD Schaffer(Dictionary)  Lassi Tuura(Foundation, Framework, Infrastructure)  Matthias Winkler(MathLibs)  Zhen Xie(Dictionary)