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