250 likes | 408 Views
Introductie tot de SEESCOA methodologie en de Draco Runtime omgeving. Yves Vandewoude Peter Rigole. Overzicht. Concepten van SEESCOA Implementatie van een SEESCOA component Hoe gaat het in zijn werk at runtime? Voorbeeldje op Draco Draco architectuur Core Modules Messageflow
E N D
Introductie tot de SEESCOA methodologie en de Draco Runtime omgeving Yves Vandewoude Peter Rigole
Overzicht • Concepten van SEESCOA • Implementatie van een SEESCOA component • Hoe gaat het in zijn werk at runtime? Voorbeeldje op Draco • Draco architectuur • Core Modules • Messageflow • Extension Modules • Voorbeeld van een extension module: distribution • Open Issues / Future work
camera Motion detector switch Video recorder SEESCOA • Componenten methodologie met als concepten: • Component • Blueprint • Instance • Port • Blueprint • Instance • Connector
Draco • Implementatie van SEESCOA componenten • .component file (en eventueel .java files) Templates zullen worden gegenereerd met de CCOM tool van David Urting • De .component files worden gepreprocessed en omgezet naar .java files • Uiteindelijke resultaat van is een .jar die door Draco kan worden geinstantieerd
Draco • Voorbeeld van .component file: • NumberGenerator & NumberDisplay NumberDisplay: package components.numberdisplay; component NumberDisplay { portgroup Input 1 { message Number() { System.out.println("Received number: " + $$inmessage::value); } } }
Implementatie van Componenten NumberGenerator: component NumberGenerator{ protected int $delay = 1000; ... multicastport Value 10; portgroup Control 1 { message start() { ... $delay = Integer.parseInt((String) $$inmessage::timer); $ex = new Execution(NumberGenerator.this); new Thread($ex, "Execution").start(); } message stop() { ... } }}
Implementatie van Componenten NumberGenerator (2): class Execution implements Runnable { ... private NumberGenerator $ng; Execution(NumberGenerator ng) { $ng = ng; } public void run() { ... Integer valueToSend = new Integer($rnd.nextInt(100)); message mNew = Number; mNew::value = valueToSend ... $ng.Value..mNew; } }}}
Implementatie van Componenten NumberGenerator (2): class Execution implements Runnable { ... private NumberGenerator $ng; Execution(NumberGenerator ng) { $ng = ng; } public void run() { ... Integer valueToSend = new Integer($rnd.nextInt(100)); message mNew = Number; mNew::value = valueToSend ... $ng.Value..mNew; } }}}
At Runtime • Start Draco
At Runtime • Load Components
At Runtime • Connect Components
At Runtime • Start Components
At Runtime • Start Components
Draco Architectuur • Core Modules worden gekozen at startup time • Voor zeer ingrijpende aanpassingen kan een custom core module worden geschreven • Zijn niet wijzigbaar at runtime • Profielen laten toe makkelijk te switchen tussen verschillende systemen: CoreModules.xml • Mogelijke toepassingen: • Totaal andere component structuur • Andere scheduler
Draco Startup Profiles <Draco> <Profile name="DefaultProfile"> <ComponentManager> draco.core.componentmanager.defaultcomponentmanager.DefaultComponentManager </ComponentManager> <Scheduler> draco.core.scheduler.defaultscheduler.DefaultScheduler </Scheduler> <ModuleManager> draco.core.modulemanager.defaultmodulemanager.DefaultModuleManager </ModuleManager> <ConnectorManager> draco.core.connectormanager.defaultconnectormanager.DefaultConnectorManager </ConnectorManager> <MessageManager> draco.core.messagemanager.defaultmessagemanager.DefaultMessageManager </MessageManager> </Profile> </Draco>
Draco Message Delivery: Implementation Sending Chain: Delivery Chain:
Draco Extensie Modules • Een extensiemodule laat toe om de functionaliteit van Draco uit te breiden. Vb: • Dynamic Updating • Distributie • CRuMB: Contract negotiation • Kunnen dynamisch worden ingeladen en verwijderd in Draco • Koppelen zich aan Draco door: • MessageHandlers toe te voegen om berichten te onderscheppen • Zich te registreren bij de coremodules via Publish-Subscribe mechanisme • Geen Controlemechanisme: een module heeft volledige toegang tot de interne werking van Draco en wordt als dusdanig vertrouwd (itt componenten die worden afgeschermd)
Draco Distribution Module (DM) • Concepts: • Connection • Proxy component (very light-weight component) • Completely transparant for the Draco Core • Simply use proxy components as ordinary components • Creating connections: • DM monitors creation • DM automatically creates equivalent connection on the other side • DM creates necessary proxy components on other side if necessary
Switch proxy camera Motion detector Video Recorder proxy switch Video recorder Transparent proxy components Connection
camera Camera proxy host 2 host 3 Camera proxy proxy Switch proxy proxy switch Switch proxy Transparent Ad Hoc Routing host 1
Draco DM: internals • Fully extensible • Connection is an abstract concept • May be implemented by ANY type of connection • loaded at runtime by factory method • Creation of proxies Load Module dist from Distribution.jar ModuleCommand dist CreateConnectionServer TcpIpConnection tcpserver 2222 ModuleCommand distribution RenewRemoteComponentCache testconnection ModuleCommand distribution RetrieveRemoteComponents testconnection ModuleCommand dist CreateProxyComponent testconnection:Switch
Open Issues / Future work • Ontwikkeling eigen classloader voor Draco • Uitbreiding van connectoren • Aanpasbare syntactic vertaling • Multi-Party connectoren • Centraal Threadbeheer door Draco ipv actieve componenten zelf Threads te laten aanmaken • Hierarchische componenten? • Eerder een statisch issue
The End Bedankt voor de opportuniteit om deze voordracht te mogen houden. Het is een onbeschrijfelijke eer en een ervaring die we niet snel zullen vergeten. Yves & Peter