Kapitola 1. Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Obsah Architektury rozsáhlých aplikací v Jávě...........................................................................2 Charakteristika a požadavky..................................................................................2 Modely .............................................................................................................2 Vrstvy...............................................................................................................2 Komponenty ......................................................................................................2 Orientace na služby .............................................................................................2 Správa ..............................................................................................................3 Zabezpečení.......................................................................................................3 Kontejnery a rámce .............................................................................................3 Architektury orientované na služby (Service-oriented Architectures - SOA) ...........................3 Motivace k SOA .................................................................................................3 Princípy SOA.....................................................................................................3 Pojmy SOA .......................................................................................................3 Charakteristiky SW architektur..............................................................................3 Charakteristiky SOA............................................................................................4 Správa sestavování - Ant ..............................................................................................4 Charakteristika ...................................................................................................4 Motivace ...........................................................................................................4 Struktura projektu ...............................................................................................4 Přikladl............................................................................................................5 Závislosti...........................................................................................................5 Príklad 2............................................................................................................5 Systémy správy verzí ...................................................................................................5 Motivace ...........................................................................................................5 Principy ............................................................................................................5 Klasická řešení - RCS a CVS.................................................................................6 Typické příkazy správy verzí.................................................................................6 Klienti ..............................................................................................................6 Pro co se systémy nehodí? ....................................................................................7 Subversion.........................................................................................................7 Subversion - klient Tortoise pro Windows................................................................7 Tortoise ~ vzdálený přístup...................................................................................7 Maven ......................................................................................................................7 Motivace ...........................................................................................................7 Maven - charakteristika........................................................................................8 Project Object Model (POM).................................................................................8 1 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Projekt v Mavenu................................................................................................8 Maven repository ................................................................................................9 Instalace a nastavení ............................................................................................9 Přiklad POM (project.xml)....................................................................................9 Příklad POM - pokračování.................................................................................10 Struktura POM obecně .......................................................................................10 Proměnné (properties) v POM .............................................................................11 Struktura repository ...........................................................................................11 Cíle v Mavenu..................................................................................................11 Maven Plugins..................................................................................................11 Často používané cíle..........................................................................................12 Vytvoření projektu ............................................................................................12 Reporting ........................................................................................................12 Rozšíření možností Mavenu ................................................................................12 Skriptování v javovém prostředí - BSF ..........................................................................13 Co je skriptování? .............................................................................................13 Proč skriptovat? ................................................................................................13 Proč skriptovat právě teď? ..................................................................................13 Bean Scripting Framework..................................................................................14 BSF-co nabízí.................................................................................................14 BSF - typické použití .........................................................................................14 BSF - download a další info ................................................................................15 Skriptování v javovém prostředí - Groovy......................................................................15 Groovy - motivace.............................................................................................15 Stažení............................................................................................................15 Instalace..........................................................................................................15 Spuštění ..........................................................................................................16 Příklad - iterace ................................................................................................16 Příklad - mapa..................................................................................................16 Příklad - switch.................................................................................................16 Architektury rozsáhlých aplikací v Jávě Charakteristika a požadavky Modely Vrstvy Komponenty Orientace na služby 2 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Správa Zabezpečení Kontejnery a rámce Architektury orientované na služby (Service-oriented Architectures - SOA) Motivace k SOA • Obecný příklon k chápání IT jako poskytovatele služby - servisu - nikoli jen technologie. Stejně se začíná přistupovat i k vazbě mezi SW komponentami. • Orientace na služby se ve vývoji SW stává vůdčím směrem. Principy SOA T. Hnilica, teze disertační práce, 2004: SOA lze chápat jako virtuální peer-to-peer sít softwarových komponent (služeb), které jsou vzájemně propojeny. Služba bývá obvykle aplikace, k níž je známé rozhraní. Vlastní implementace služby je pro celý SOA systém skrytá a služba v něm figuruje jako „černá skříňka". Pojmy SOA Charakteristiky SW architektur Granularita Síla vazeb 3 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Charakteristiky SOA 1. Nahraditelnost služeb 2. Interoperabilita 3. Ladění 4. Integrace systémů třetích stran Správa sestavování - Ant Charakteristika • Antje platformove přenositelnou alternativou nástroje typu Make • Antje rozšiřitelný - lze psát nejen nové "cíle", ale i definovat dílčí kroky - "úlohy" • Popisovače sestavení používají XML syntaxi, psaní není tak náročné jako makefile Motivace • Proč Ant, když je tu dlouho a dobře fungující Make? • Make byl koncipován jako doplněk shellu, psaly se skripty a nativní (platformove) nástroje Syntaxe byla složitá a neflexibilní • Make jako takový nebyl rozšiřitelný • Make byl zaměřen převážně na potřeby původního použití - jazyk C, unixový shell Struktura projektu Řízení sestavování Antem postupuje podle popisu v souboru build.xml. Ten obsahuje následující prvky: project celý projekt, obsahuje sadu cílů, jeden z nich je hlavní/implicitní target cíl, nejmenší zvenčí spustitelná jednotka algoritmu sestavování task úloha, atomický krok sestavení, lze použít task vestavěný nebo uživatelský 4 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Příklad 1 Závislosti • Mezi cíly mohou být definovány závislosti. • Závisí-li volaný cíl na jiném, musí být nejprve splněn cíl výchozí a pak teprve cíl závisející. Cíl může záviset i na více jiných. Varování Pozor na cyklické závislosti! Příklad 2 Systémy správy verzí Motivace Systémy pro správu verzí jsou nezbytností pro • údržbu větších SW projektů • projektů s více účastníky • projektů s vývojem z více míst Pouhý sdílený, vzdáleně přístupný souborový systém nestačí. Principy • efektivně ukládat více verzí souborů i adresářů (často s malými změnami) • rychle získávat aktuální verzi, ale 5 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování • mít možnost vrátit se ke starší verzi zjistit rozdíly mezi verzemi • zajišťovat proti souběžné editaci z více míst • umožnit i lokální práci s následným potvrzením do systému (commit) Klasická řešení - RCS a CVS RC Revision Control System S CV Concurrent Version System S RCS je klasický, původně na UNIXech existující systém navržený pro sledování více verzí souborů. Prvotním cílem bylo zefektivnit ukládání více verzí s novou verzí se nemusí ukládat celý soubor rychle se dají zjistit rozdíly (změny) mezi verzemi • historie změn (changelog, history) se lehce udržuje • změny lze identifikovat i názvy - pojmenovat symbolickými klíčovými slovy ($Author$, $Date$...) Typické příkazy správy verzí (podobné jsou v CVS, SVN) commit publikuje (odešle, potvrdí) změny z lokálního pracovního prostoru do skladu (repository) remove maže soubory z lokálního pracovního adresáře, ze skladu se smažou až po "commit" add přidá nový soubor do pracovního adresáře, do skladu se přidají až po "commit" update aktualizuje lokální kopii pomocí změn zaregistrovaných ostatními ve skladu ckeckout vytvoří soukromou lokální kopii požadovaných souborů ze skladu, tyto můžeme lokálně editovat a posléze potvrdit (commit) zpět Klienti Syst. správy verzí nabízejí 6 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování • nativní klienty integrované do hostujícího prostředí webové rozhraní spíše pro prohlížení • API pro přímý/programový přístup Pro co se systémy nehodí? • pro ukládání (stabilních) artefaktů • jako úložiště (read-only) souborů pro stahování ... kdyby se to hodilo na všechno, nabízel by to každý filesystém... Subversion implementace systému řízení verzí • moderní alternativa CVS • jako server dostupný na všechny běžné platf. (zejm. Linux, Win) klienti taktéž, např. na Win Subversion - klient Tortoise pro Windows Klient pro Win 2k, XP i 98... vč. integrace do GUI • kontextové nabídky • nativní nástroje Tortoise -- vzdálený pnstup • Tortoise umožňuje bezpečný přístup k vzdálenému úložišti i prostřednictvím šifrovaných protokolů • používá se upravený klient PuTTY M ave n Motivace 7 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Pro sestavování, správu a údržbu SW projektů menšího a středního rozsahu se delší dobu úspěšně využíval systém Ant [http://ant.apache.org]. Oproti klasickým nástrojům typu unixového make poskytoval Ant platformove nezávislou možnost popsat i složité postupy sestavení, testování a nasazení výsledků SW projektu. Ant měl však i nevýhody: • pro každý projekt (i když už jsme podobný řešili) musíme znovu sestavit - poměrně velmi technický - popisovač (build. xml) • popisovač je vždy téměř stejný a tudíž • neříká nic o obsahu vlastního projektu, je jen o procesu sestavení, nasazení... neumožňoval zachytit metadata nezbytná pro zařazení projektu do širšího kontextu, mezi související projekty, atd. Maven - charakteristika • nástroj řízení SW projektů • open-source, součást skupiny nástrojů kolem Apache • dostupný a popsaný na http://maven.apache.org momentálně (září 2004) již jako použitelná, ostrá, verze 1.0 Project Object Model (POM) projekt řízený Mavenem je popsán tzv. POM (Project Object Model), obvykle project .xml • POM nepopisuje postup sestavení, ale obsah projektu, jeho název, autora, umístění, licenci... • postup sestavení je "zadrátován" v Mavenu, protože je pro většinu projektů stejný • programátor není frustrován opakováním psaní popisovačů build. xml, návrhem adresářové struktury... nicméně, Maven je založen na Ant, jeho build. xml popisovače lze znovupoužít Projekt v Mavenu Základní filozofie projektu v Mavenu: • jeden projekt => jeden tzv. artefakt Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Artefaktem může být typicky: jar - obyčejná aplikace nebo knihovna (javové třídy, soubory .properties, obrázky...) .war - webová aplikace (serviety, JSP, HTML, další zdroje, popisovače) .ear - enterprise (EJB) aplikace (vše výše uvedené pro EJB, popisovače) Maven repository • základním organizačním nástrojem pro správu vytvořených (nebo používaných) artefaktů je repository • artefakt, tj. výstup projektu, se může v repository vyskytovat ve více verzích • repository je: vzdálená (remote) slouží k centralizovanému umisťování jak vytvořených, tak používaných artefaktů dosažitelná pro čtení pomocí HTTP: je to de-facto běžné webové místo lokální (local) slouží k ozrcadlení používaných artefaktů ze vzdálené repository typicky zvlášt každému uživateli - v jeho domovském adresáři slouží též k vystavení vytvořených artefaktů "pro vlastní potřebu" • Maven má nástroje (pluginy) pro vystavování artefaktů do repository Instalace a nastavení Maven lze stáhnout z http://maven.apache.org v binární i zdrojové distribuci. Binární distribuce je buďto čistě "java-based" nebo ve formě windowsového . exe. Pak se nainstaluje do Program Files Po instalace je třeba nastavit proměnnou prostředí MAVEN_HOME na adresář, kam se nainstaloval. Kromě toho ještě přidat adresář %MAVEN_HOME%\bin do PATH. Příklad POM (project.xml) Příklad minimálního popisovače pro j e et. xml: 9 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování 3 RunningCalculator RunningCalculator 0.l Object Computing, Inc. 2004 calculates running pace junit junit 3.8.l src/java src/test **/*Test.j ava Struktura POM obecně 3 unique-proj ect-id proj ect-name repository-directory-name version 10 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Proměnné (properties) v POM • Jsou podobně jako u Antu definovatelné a využitelné (odkazovatelne) v popisovači, zde project, xml. • Vyskytne-li se zavedení určité vlastnosti (property) vícekrát, uplatní se poslední. • Vlastnosti jsou vyhledávány v pořadí: 1. pro j ect. properties 2. build, properties 3. ${user.home}/build.properties 4. vlastnosti specifikované na příkazové řádce -Dkey= value • Na vlastnost se lze odvolat pomocí $ {property-name } Struktura repository Týká se jak vzdálené, tak lokální repository. Obecně je relativní cesta v rámci repository k hledanému artefaktu: repository/resource-direc-tory/jars/jar-file konkrétní např.: repository/junit/jars/junit-3.8. l.jar Cíle v Mavenu Cíle (goals) v Mavenu odpovídají zhruba antovým cílům (target). Spouštění Mavenu vlastně odpovídá příkazu k dosažení cíle ("attaining the goal"): maven plugln-namel: goal-name] Maven Plugins Zásuvné moduly (plugins) obsahují předdefinované cíle (goals) a jsou taktéž uloženy v repository. Většinou jsou jednoúčelové, slouží/směřují k jednomu typu artefaktu, např.: • checkstyle, clean, clover, cruisecontrol, dist, ear, eclipse, ejb, fo, genapp, jalopy, jar, java, javadoc, jboss, jcoverage, maven-junit-report-plugin, pom, site, test, war, xdoc 11 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Často používané cíle clean smaže vygenerované soubory (podstrom target) javaxompile přeloží všechny javové zdroje test spustí všechny testy site vygeneruje webové sídlo projektu dist vygeneruje kompletní distribuci Vytvoření projektu 1. vytvořit prázdný adresář pro vytvářený projekt 2. spustit maven genapp (Zeptá se na id projektu, jeho jméno a hlavní balík. V něm predgeneraje jednu třídu.) 3. tím se vytvoří následuj ící soubory: • projectxml, project.properties src/conf/app.properties src/java/pa cka ge -dirs/Appjava src/test/pa ckage-dírsl AbstractTestCase.java src/test/pa ckage-dírsl AppTest.java src/test/pa cJcage-dirs/NaughtyTestjava Reporting Generování reportů (zpráv) je jednou se základních funkcí Mavenu. Které reporty se generují, je regulováno v project.xml v sekci reports: maven-checkstyle-plugin maven-j avadoc-plugin maven-junit-report-plugin Rozšíření možností Mavenu 12 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Cílů (goals) je sice v Mavenu řada, ale přesto nemusejí stačit anebo je třeba měnit jejich implicitní chování. Potom lze před nebo po určitý cíl připojit další cíl pomocí preGoal a postGoal. Ty se specifikují buďto v nebo. 1. maven. xml ve stejném adresáři jako pro j e et. xml nebo 2. v zásuvném modulu (pluginu) Zcela nové cíle je možné napsat ve skriptovacimjazykuje/Zy (s XML syntaxí). Skriptování v javovém prostředí - BSF Co je skriptování? Co odlišuje skriptování od "ostatních" pg. jazyků? • Rychlý vývoj, přímočarý životní cyklus SW: napiš - spusť (- potom odlaď) • Obvyklé dynamicky (až za běhu) typovaný jazyk, nevyžaduje deklarace proměnných, definice tříd... • Jazyk je často kombinovatelný s běžnými pg. jazyky - lze volat jejich metody, používat knihovny... • Prostá, obvykle intuitivní, syntaxe • Mnohdy jde de-facto o syntaktický klon "plného" jazyka - mj. aby se snáze učilo • Obvykle malé nároky na udrzovatelnost, dokumentovatelnost, rozšiřitelnost vzniklých SW výtvorů • Jednoduché věci jdou napsat jednoduše, složité složitě, nepěkně nebo pořádně vůbec... Proč skriptovat? Kdy obvykle (nejen v Jávě) cítíme potřebu skriptovat? • Když zkoušíme, "hrajeme si", testujeme narychlo vytvořené věci • Hledáme vhodné hodnoty parametrů, hezký vzhled něčeho • Potřebujeme ovládat konfiguraci složitější aplikace - které objekty se mají vytvořit, jak je propojit... Proč skriptovat právě teď? Proč je potřeba skriptovat silná právě dnes, když je tolik dokonalých programovacích jazyků s rychlými 13 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování překladači? SW architektury jsou složité, je třeba je - mnohdy dynamicky - (re)konfigurovat. Často integrujeme - a při integraci je nutné zkoušet, ladit, ale i konfigurovat. • Máme málo času přemýšlet nad složitou architekturou "úplné" aplikace, chceme rychle něco navrhnout a vyzkoušet nebo i používat. Poznámka Takové rychlovýtvory nezřídka mívají delší životnost než složitě a dlouho budované "poradné" aplikace - přicházejí rychle a v pravý čas! Bean Scripting Framework Bean Scripting Framework (BSF) je projektem jakarta.apache.org, původně však vytvořený v IBM T.J.Watson Laboratories (jako produkt "alphaWorks"). Jedná se o rámec umožňující: • přístup z javových aplikací ke skriptování v mnoha běžných skript, jazycích (Javascript, Python, Ne-tRexx...) • naopak ze skriptů je možno používat javové objekty Poznámka To mj. dovoluje "save of investment" do stávajících skriptů - i z plnohodnotného prostředí (Java) je lze volat! BSF - co nabízí BSF obsahuje dvě hlavní komponenty: BSFManager spravuje javové objekty, k nimž má být ze skriptů přístup. Řídí provádění těchto skriptů. BSFEngine rozhraní, API, které musí hostující skriptovací jazyk nabídnout, aby jej bylo možné v rámci BSF pužívat. BSF - typické použití • je možné pouze instanciovat jeden BSFManagera 14 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování • z něj přes BS FEnginespouštět skripty s možností přístupu k objektům v kontextu manažera. BSF - download a další info • BSF (software i další info) lze získat na http://jakarta.apache.org/bsf • Vynikající články o BSF jsou k dispozici přímo na http://jakarta.apache.org/bsf/resources.html. • úvodní prezentace V. Orlikowského [http://www.dulug.duke.edu/~vjo/papers/ApacheCon_US_2002/intro_to_bsf.pdf]. • http://www.javaworld.com/javaworld/jw-03-2000/jw-03-beans.html Skriptování v javovém prostředí - Groovy Groovy - motivace • Již delší dobu pro Javu existuje rámec BSF podporovaný řadou skriptovacích jazyků. • Autorům Groovy se však většina z nich zdála syntakticky "těžko stravitelná" pro javového programátora, který "málo, ale občas přece" potřebuje skriptovat. Groovy je tedy vytvořet v Jávě a na míra pro javové programátory. • Nabízí velmi příjemnou a intuitivní syntaxi, hezkou konzolu pro spouštění atd. Skript se překládá do javového bajtkodu, je tedy na běhové úrovni dobře interoperabilní s Jávou. Stažení Groovy najdeme na http://groovy.codehaus.org. • Plná, tj. zdrojová i binární distribuce má vč. dokumentace a příkladů přes 56 MB!!! Je zároveň hezkou ukázkou netriviální projektu řízeného Mavenem. Instalace • rozbalit distribuci do zvoleného adresáře • nastavit systémovou proměnnou GROOVYHOME na tento adresář • přidat $GROOW_HOME/bin do PATH 15 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování Spuštění Tři základní způsoby: groovysh řádkový Groovy-shell groovyConsole grafická (Swing) konzola Groovy groovy SomeScript.groovy přímé (neinteraktivní) spuštění skriptu pod Groovy Příklad - iterace Iterace přes všechna celá čísla 1 až 10 s jejich výpisem: for (i in 1..10) { printin "Hello ${i}" } Příklad - mapa Definice mapy (asociativního pole) a přístup k prvku: map = ["name":"Gromit", "likes":"cheese", "id":1234] assert map['name'] == "Gromit" Příklad - switch Řízení toku pomocí switch s velmi bohatými možnostmi: x = 1.23 result = "" switch (x) { case "foo": result = "found foo" // lets fall through case "bar": result += "bar" case [4, 5, 6, 'inList1] : result = "list" break case 12..30: result = "range" break case Integer: result = "integer" break 16 Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování case Number: result = "number" break default: result = "default" } assert result == "number" 17