SlideShare a Scribd company logo
1 of 25
Download to read offline
Jiří Kučera
kalwi@students.zcu.cz
   Vývojář komponent
    ◦ Uložit komponentu
    ◦ Spustit testy nad komponentou
   Rozšíření úložiště (pluginy)
    ◦ Běh testů nad komponentou
    ◦ Generování metadat
   Uživatel komponent, cílové zařízení
    ◦   Získat seznam dostupných komponent
    ◦   Zjistit nejnovější verzi komponenty
    ◦   Získat popisná metadata komponenty
    ◦   Porovnat kompatibilitu
    ◦   Stáhnout komponentu
   RFC-0112 Bundle Repository (draft)
   Snaha vytvořit centrální repository
    ◦ OBR vs. Maven repository
   Definuje
    ◦ XML formát pro popis repository a jeho obsahu
    ◦ Službu pro přístup k repository
   Umožňuje nebo usnadňuje
    ◦   Popis vlastností bundlů
    ◦   Vyhledávání dostupných bundlů
    ◦   Popis a řešení závislostí mezi bundly
    ◦   Deployment bundlů do kontejneru
Převzato z http://felix.apache.org
   Artefakty uloženy v adresářové struktuře
   Obsah repository popisuje XML soubor
    ◦ repository.xml
    ◦ Uložen v kořenovém adresáři
   Repository lze seskupovat do stromové struktury

<repository name='Vzorové repository' time='20110131133541.062'>
  <resource … />
  <resource … />
    …
  <referral depth='1' url='http://vnořené.repository/repository.xml' />
</repository>




                                                     Viz také OSGi BIndex
   Popisuje artefakt, jeho vlastnosti a závislosti
   ID artefaktu – symbolicname + version
   URI – cesta k artefaktu
    ◦ Absolutní – teoreticky i mimo strukturu repository
    ◦ Relativní – vůči adresáři s repository.xml
   Další proměnné (properties)
    ◦ presentationname, description, size, license...
    ◦ Uživatelsky definovatelné
   Kategorie
    ◦ Usnadňují vyhledávání artefaktů
<resource id='Bundle1/1.0.0' symbolicname='Bundle1' version='1.0.0'
    uri='cz/zcu/kiv/Bundle1.jar' presentationname='Bundle č. 1'>
  <description>Ukázkový bundle č. 1</description>
  <size>6477</size>
  <category id='osgi' />
  <category id='spring-dm' />
    …
  <capability … />
  <capability … />
    …
  <require … />
    …
</resource>
   Cokoliv, co lze popsat množinou proměnných
    ◦ package, service, execution environment apod.
   Má název
    ◦ Není to ale ID
    ◦ Na capability se mapují requirements se stejným názvem
   Proměnné (properties)
    ◦ Název
    ◦ Hodnota
    ◦ Typ
      string (výchozí), version, uri, long, double, set
<capability name='package'>
  <p n='package' v='cz.zcu.kiv.jacc' />
  <p n='version' t='version' v='1.0.0' />
  <p n='uses:' v='org.osgi.framework' />
</capability>

<capability name='example'>
  <p n='some-string' v='this is a string' />
  <p n='some-version' t='version' v='1.2.3' />
  <p n='some-uri' t='uri' v='this:/is.an.uri/' />
  <p n='some-set' t='set' v='values,separated,by,commas' />
  <p n='some-long' t='long' v='12345' />
  <p n='some-double' t='double' v='123.45' />
</capability>
   Požadavek na capability se shodným názvem
   Vyjádřen jako OSGi (LDAP) filtr – RFC 1960
    ◦ Např. (&(package=cz.zcu.kiv.jacc)(version>=1.0.0))
   Proměnné capability musí odpovídat filtru
   Další možnosti požadavku
    ◦ optional – požadavek je pouze volitelný
    ◦ multiple – může být použito více řešení požadavku
    ◦ extend – obrací model, volí artefakty, pro které
      může být naopak užitečný, např. jako plugin
    ◦ Popis vysvětlující důvod požadavku
<require name='package' optional='false' multiple='false' extend='false'
    filter='(&amp;(package=cz.zcu.kiv.jacc)(version&gt;=1.0.0))'>
  Import package cz.zcu.kiv.kacc; version is equal or greater than 1.0.0
</require>


Pozn.: Znaky &, >, <, ' a " je třeba nahradit XML entitami.

<require name='example' optional='true' multiple='true' extend='true'
    filter='(!(some-long=12345))'>
  Optional extension for all example capabilities whose some-long
  value is not equal to 12345
</require>
<repository name='Příklad' lastmodified='20110131135021.012'>

  <resource id='Bundle1/1.0.0' symbolicname='Bundle1' version='1.0.0' uri='Bundle1.jar'>
    <capability name='vlastnost'>
      <p n='promenna' t='double' v='123.45'>
      <p n='verze' t='version' v='1.2.3'>
    </capability>
  </resource>

  <resource id='Bundle2/1.2.0' symbolicname='Bundle2' version='1.2.0' uri='Bundle2.jar'>
    <require filter='(&amp;(promenna&gt;=100.00)(verze=1.2.3))'
        name='vlastnost' extend='false' optional='false' multiple='false'>
    </require>
  </resource>

</repository>
   Analyzuje závislosti předem určených artefaktů
    ◦ Zjistí requirements, které vůbec žádný artefakt nesplňuje
    ◦ Zjistí requirements, kvůli kterým je vyžadován nějaký
      artefakt z repository
    ◦ Zjistí artefakt, který má nesplnitelné requirements
    ◦ Zjistí artefakty, které se nacházejí v repository a jsou
      potřeba k vyřešení závislostí
   Výsledkem je určení, zda jsou požadavky artefaktů
    splněny
   Provede deploy zvolených artefaktů do kontejneru
    ◦ Pokud jsou vyřešeny všechny závislosti
RepositoryAdmin repoAdmin = ... // Get repo admin service

String filter="(&(symbolicname=Bundle1)(version>2.0.0))";
Resource resource = repoAdmin.discoverResources(filter);

Resolver resolver = repoAdmin.resolver();
resolver.add(resource);

if (resolver.resolve()) {
    resolver.deploy(true);
} else {
    Requirement[] reqs = resolver.getUnsatisfiedRequirements();
    for (Requirement req : reqs) {
        System.out.println("Unable to resolve: " + req);
    }
}
   Integrace nástrojů pro kontrolu kompatibility
    ◦ Verzování bundlů
    ◦ Mimofunkční charakteristiky
    ◦ Simulace běhu
   Možná integrace s Apache ACE
    ◦ Framework pro centrální správu komponent,
      konfigurace a jiných artefaktů
    ◦ Distribuce artefaktů na cílová zařízení
    ◦ Definuje množinu artefaktů (distribuce), cílová
      zařízení sama kontrolují nové verze ke stažení
   Modulární architektura
    ◦ OSGi
    ◦ Apache Felix Dependency Manager
   Využívá OBR
    ◦ Reprezentace vložených artefaktů jako OBR Resource
    ◦ Neomezuje použití OBR pouze na OSGi bundly
    ◦ Do OBR ukládá i výsledky běhu testů
   Rozšiřitelné prostřednictvím pluginů
    ◦ Modifikovaný Chain of Responsibility
    ◦ Výběr pluginů dle priority a informací v OBR
   Volání se váže na události lifecycle
   Paralelní běh pluginů
    ◦ Výhradní běh pluginů modifikujících artefakt
   Vzájemné závislosti pluginů → pořadí volání
    ◦ Nejsou přímo vyjádřené
    ◦ Spuštění možné po splnění určitých requirements
    ◦ Volaný plugin modifikuje OBR metadata,
      umožní tím spuštění jiného pluginu
    ◦ V případně nerozhodnosti rozhodne priorita
   Statická metadata – neměnitelná
    ◦ Manifest, Declarative Services, Spring DM…
   Rychlé zjištění statických metadat artefaktu
    ◦ Požadavek na rychlou odezvu UI
   Pro urychlení možnost hierarchizace indexerů
    ◦   Využití kategorií v OBR Resource
    ◦   Indexer definuje kategorie, které umí nastavit
    ◦   …a kategorie podmiňující pro daný indexer
    ◦   Stromová struktura (nebo podobná)
   Další možné indexery
    ◦ CoSi komponenty, konfigurační soubory, apod.
   Vhodnost OBR formátu
   Požadavky
    ◦   na   lifecycle
    ◦   na   vnitřní API
    ◦   na   vnější API
    ◦   na   rozhraní
   Možná rozšíření (semestrální práce)
    ◦   Indexace OSGi Declarative Services a Spring DM
    ◦   Indexace CoSi komponent
    ◦   Ukládání OBR metadat do DB
    ◦   Webové rozhraní
   OSGi RFC-0112 Bundle Repository
    ◦ http://www2.osgi.org/download/rfc-0112_BundleRepository.pdf
   Apache Felix OSGi Bundle Repository (OBR)
    ◦ http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html
   OSGi BIndex
    ◦ http://www.osgi.org/Repository/BIndex
   RFC 1960 LDAP Search Filters
    ◦ http://www.ietf.org/rfc/rfc1960.txt
   Apache ACE
    ◦ http://incubator.apache.org/ace/
   SVN
    ◦ https://kalwi.eu/svn/crce

More Related Content

What's hot

What's hot (8)

Doctrine ORM & model
Doctrine ORM & modelDoctrine ORM & model
Doctrine ORM & model
 
Vývoj aplikací pro iOS
Vývoj aplikací pro iOSVývoj aplikací pro iOS
Vývoj aplikací pro iOS
 
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
 
Kdyby/Redis
Kdyby/RedisKdyby/Redis
Kdyby/Redis
 
CQRS v rohlik.cz
CQRS v rohlik.czCQRS v rohlik.cz
CQRS v rohlik.cz
 
Využití NodeJS pro Javisty - jOpenSpace 2014
Využití NodeJS pro Javisty - jOpenSpace 2014Využití NodeJS pro Javisty - jOpenSpace 2014
Využití NodeJS pro Javisty - jOpenSpace 2014
 
mDevCamp - Android a práce na pozadí
mDevCamp - Android a práce na pozadímDevCamp - Android a práce na pozadí
mDevCamp - Android a práce na pozadí
 
Zend Framework - Autentizace
Zend Framework - AutentizaceZend Framework - Autentizace
Zend Framework - Autentizace
 

Viewers also liked (6)

CRCE Architecture Overview
CRCE Architecture OverviewCRCE Architecture Overview
CRCE Architecture Overview
 
Brada -semantic-versioning-tool
Brada -semantic-versioning-toolBrada -semantic-versioning-tool
Brada -semantic-versioning-tool
 
ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)
 
Safe Bundle Updates
Safe Bundle UpdatesSafe Bundle Updates
Safe Bundle Updates
 
Presentation -rmc-to-rtc
Presentation -rmc-to-rtcPresentation -rmc-to-rtc
Presentation -rmc-to-rtc
 
UML-test Application for Automated Validation of Students’ UML Class Diagram
UML-test Application for Automated Validation of Students’ UML Class DiagramUML-test Application for Automated Validation of Students’ UML Class Diagram
UML-test Application for Automated Validation of Students’ UML Class Diagram
 

Similar to CRCE - přehled datového modelu a vybraná API

Similar to CRCE - přehled datového modelu a vybraná API (20)

Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
Test stack CzechTest 2016
Test stack   CzechTest 2016Test stack   CzechTest 2016
Test stack CzechTest 2016
 
Symfony vs Nette vs Phalcon
Symfony vs Nette vs PhalconSymfony vs Nette vs Phalcon
Symfony vs Nette vs Phalcon
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
2010 JBoss Application Server
2010 JBoss Application Server2010 JBoss Application Server
2010 JBoss Application Server
 
Database Cloud Backup DEMO
Database Cloud Backup DEMODatabase Cloud Backup DEMO
Database Cloud Backup DEMO
 
Database Cloud Backup DEMO
Database Cloud Backup DEMODatabase Cloud Backup DEMO
Database Cloud Backup DEMO
 
Zálohování Oracle databáze do cloudu prakticky
Zálohování Oracle databáze do cloudu praktickyZálohování Oracle databáze do cloudu prakticky
Zálohování Oracle databáze do cloudu prakticky
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
Revoluce v cloudu: první autonomně řízená databáze na světě
Revoluce v cloudu: první autonomně řízená databáze na světěRevoluce v cloudu: první autonomně řízená databáze na světě
Revoluce v cloudu: první autonomně řízená databáze na světě
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Jak jsme si vybrali Apache Derby
Jak jsme si vybrali Apache DerbyJak jsme si vybrali Apache Derby
Jak jsme si vybrali Apache Derby
 
Czech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisCzech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - Solaris
 
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
 
Czech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - SolarisCzech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - Solaris
 
Infrastruktura památníku českého webu a zkušenosti s Heritrixem
Infrastruktura památníku českého webu a zkušenosti s HeritrixemInfrastruktura památníku českého webu a zkušenosti s Heritrixem
Infrastruktura památníku českého webu a zkušenosti s Heritrixem
 
Dependency injection v .Net Frameworku
Dependency injection v .Net FrameworkuDependency injection v .Net Frameworku
Dependency injection v .Net Frameworku
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 

CRCE - přehled datového modelu a vybraná API

  • 2.
  • 3. Vývojář komponent ◦ Uložit komponentu ◦ Spustit testy nad komponentou  Rozšíření úložiště (pluginy) ◦ Běh testů nad komponentou ◦ Generování metadat  Uživatel komponent, cílové zařízení ◦ Získat seznam dostupných komponent ◦ Zjistit nejnovější verzi komponenty ◦ Získat popisná metadata komponenty ◦ Porovnat kompatibilitu ◦ Stáhnout komponentu
  • 4. RFC-0112 Bundle Repository (draft)  Snaha vytvořit centrální repository ◦ OBR vs. Maven repository  Definuje ◦ XML formát pro popis repository a jeho obsahu ◦ Službu pro přístup k repository  Umožňuje nebo usnadňuje ◦ Popis vlastností bundlů ◦ Vyhledávání dostupných bundlů ◦ Popis a řešení závislostí mezi bundly ◦ Deployment bundlů do kontejneru
  • 6. Artefakty uloženy v adresářové struktuře  Obsah repository popisuje XML soubor ◦ repository.xml ◦ Uložen v kořenovém adresáři  Repository lze seskupovat do stromové struktury <repository name='Vzorové repository' time='20110131133541.062'> <resource … /> <resource … /> … <referral depth='1' url='http://vnořené.repository/repository.xml' /> </repository> Viz také OSGi BIndex
  • 7. Popisuje artefakt, jeho vlastnosti a závislosti  ID artefaktu – symbolicname + version  URI – cesta k artefaktu ◦ Absolutní – teoreticky i mimo strukturu repository ◦ Relativní – vůči adresáři s repository.xml  Další proměnné (properties) ◦ presentationname, description, size, license... ◦ Uživatelsky definovatelné  Kategorie ◦ Usnadňují vyhledávání artefaktů
  • 8. <resource id='Bundle1/1.0.0' symbolicname='Bundle1' version='1.0.0' uri='cz/zcu/kiv/Bundle1.jar' presentationname='Bundle č. 1'> <description>Ukázkový bundle č. 1</description> <size>6477</size> <category id='osgi' /> <category id='spring-dm' /> … <capability … /> <capability … /> … <require … /> … </resource>
  • 9. Cokoliv, co lze popsat množinou proměnných ◦ package, service, execution environment apod.  Má název ◦ Není to ale ID ◦ Na capability se mapují requirements se stejným názvem  Proměnné (properties) ◦ Název ◦ Hodnota ◦ Typ  string (výchozí), version, uri, long, double, set
  • 10. <capability name='package'> <p n='package' v='cz.zcu.kiv.jacc' /> <p n='version' t='version' v='1.0.0' /> <p n='uses:' v='org.osgi.framework' /> </capability> <capability name='example'> <p n='some-string' v='this is a string' /> <p n='some-version' t='version' v='1.2.3' /> <p n='some-uri' t='uri' v='this:/is.an.uri/' /> <p n='some-set' t='set' v='values,separated,by,commas' /> <p n='some-long' t='long' v='12345' /> <p n='some-double' t='double' v='123.45' /> </capability>
  • 11. Požadavek na capability se shodným názvem  Vyjádřen jako OSGi (LDAP) filtr – RFC 1960 ◦ Např. (&(package=cz.zcu.kiv.jacc)(version>=1.0.0))  Proměnné capability musí odpovídat filtru  Další možnosti požadavku ◦ optional – požadavek je pouze volitelný ◦ multiple – může být použito více řešení požadavku ◦ extend – obrací model, volí artefakty, pro které může být naopak užitečný, např. jako plugin ◦ Popis vysvětlující důvod požadavku
  • 12. <require name='package' optional='false' multiple='false' extend='false' filter='(&amp;(package=cz.zcu.kiv.jacc)(version&gt;=1.0.0))'> Import package cz.zcu.kiv.kacc; version is equal or greater than 1.0.0 </require> Pozn.: Znaky &, >, <, ' a " je třeba nahradit XML entitami. <require name='example' optional='true' multiple='true' extend='true' filter='(!(some-long=12345))'> Optional extension for all example capabilities whose some-long value is not equal to 12345 </require>
  • 13. <repository name='Příklad' lastmodified='20110131135021.012'> <resource id='Bundle1/1.0.0' symbolicname='Bundle1' version='1.0.0' uri='Bundle1.jar'> <capability name='vlastnost'> <p n='promenna' t='double' v='123.45'> <p n='verze' t='version' v='1.2.3'> </capability> </resource> <resource id='Bundle2/1.2.0' symbolicname='Bundle2' version='1.2.0' uri='Bundle2.jar'> <require filter='(&amp;(promenna&gt;=100.00)(verze=1.2.3))' name='vlastnost' extend='false' optional='false' multiple='false'> </require> </resource> </repository>
  • 14.
  • 15. Analyzuje závislosti předem určených artefaktů ◦ Zjistí requirements, které vůbec žádný artefakt nesplňuje ◦ Zjistí requirements, kvůli kterým je vyžadován nějaký artefakt z repository ◦ Zjistí artefakt, který má nesplnitelné requirements ◦ Zjistí artefakty, které se nacházejí v repository a jsou potřeba k vyřešení závislostí  Výsledkem je určení, zda jsou požadavky artefaktů splněny  Provede deploy zvolených artefaktů do kontejneru ◦ Pokud jsou vyřešeny všechny závislosti
  • 16. RepositoryAdmin repoAdmin = ... // Get repo admin service String filter="(&(symbolicname=Bundle1)(version>2.0.0))"; Resource resource = repoAdmin.discoverResources(filter); Resolver resolver = repoAdmin.resolver(); resolver.add(resource); if (resolver.resolve()) { resolver.deploy(true); } else { Requirement[] reqs = resolver.getUnsatisfiedRequirements(); for (Requirement req : reqs) { System.out.println("Unable to resolve: " + req); } }
  • 17. Integrace nástrojů pro kontrolu kompatibility ◦ Verzování bundlů ◦ Mimofunkční charakteristiky ◦ Simulace běhu  Možná integrace s Apache ACE ◦ Framework pro centrální správu komponent, konfigurace a jiných artefaktů ◦ Distribuce artefaktů na cílová zařízení ◦ Definuje množinu artefaktů (distribuce), cílová zařízení sama kontrolují nové verze ke stažení
  • 18. Modulární architektura ◦ OSGi ◦ Apache Felix Dependency Manager  Využívá OBR ◦ Reprezentace vložených artefaktů jako OBR Resource ◦ Neomezuje použití OBR pouze na OSGi bundly ◦ Do OBR ukládá i výsledky běhu testů  Rozšiřitelné prostřednictvím pluginů ◦ Modifikovaný Chain of Responsibility ◦ Výběr pluginů dle priority a informací v OBR
  • 19.
  • 20. Volání se váže na události lifecycle  Paralelní běh pluginů ◦ Výhradní běh pluginů modifikujících artefakt  Vzájemné závislosti pluginů → pořadí volání ◦ Nejsou přímo vyjádřené ◦ Spuštění možné po splnění určitých requirements ◦ Volaný plugin modifikuje OBR metadata, umožní tím spuštění jiného pluginu ◦ V případně nerozhodnosti rozhodne priorita
  • 21.
  • 22. Statická metadata – neměnitelná ◦ Manifest, Declarative Services, Spring DM…  Rychlé zjištění statických metadat artefaktu ◦ Požadavek na rychlou odezvu UI  Pro urychlení možnost hierarchizace indexerů ◦ Využití kategorií v OBR Resource ◦ Indexer definuje kategorie, které umí nastavit ◦ …a kategorie podmiňující pro daný indexer ◦ Stromová struktura (nebo podobná)  Další možné indexery ◦ CoSi komponenty, konfigurační soubory, apod.
  • 23.
  • 24. Vhodnost OBR formátu  Požadavky ◦ na lifecycle ◦ na vnitřní API ◦ na vnější API ◦ na rozhraní  Možná rozšíření (semestrální práce) ◦ Indexace OSGi Declarative Services a Spring DM ◦ Indexace CoSi komponent ◦ Ukládání OBR metadat do DB ◦ Webové rozhraní
  • 25. OSGi RFC-0112 Bundle Repository ◦ http://www2.osgi.org/download/rfc-0112_BundleRepository.pdf  Apache Felix OSGi Bundle Repository (OBR) ◦ http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html  OSGi BIndex ◦ http://www.osgi.org/Repository/BIndex  RFC 1960 LDAP Search Filters ◦ http://www.ietf.org/rfc/rfc1960.txt  Apache ACE ◦ http://incubator.apache.org/ace/  SVN ◦ https://kalwi.eu/svn/crce