Kapitola 1. Přednáška 2 - SW architektury, nástroje správy SW projektů, skriptování

Obsah

Architektury rozsáhlých aplikací v Javě
Charakteristika a požadavky
Modely
Vrstvy
Komponenty
Orientace na služby
Správa
Zabezpečení
Kontejnery a rámce
Komponentní vs. objektové programování
Objektové programování - principy
Objektové programování - terminologie
Objektové programování - přednosti
Objektové programování - nedostatky
Komponentní programování - principy
Komponentní programování - výhody oproti OOP
Komponentní programování - souvislosti
Architektury orientované na služby (Service-oriented Architectures - SOA)
Motivace k SOA
Principy SOA
Pojmy SOA
Charakteristiky SW architektur
Charakteristiky SOA
Extreme Programming (XP)
Motivace pro Extreme Programming (XP)
Co je XP
Charakteristika XP
Východiska řízení týmu podle XP
Hlavní zásady XP
Vedlejší zásady XP
Vývojové činnosti XP
Hlavní techniky XP
Fáze XP projektu
Správa sestavování - Ant
Charakteristika
Motivace
Struktura projektu
Příklad 1
Závislosti
Příklad 2
Systémy správy verzí
Motivace
Principy
Klasická řešení - RCS a CVS
Typické příkazy správy verzí
Klienti
Pro co se systémy nehodí?
Subversion
Subversion - klient Tortoise pro Windows
Tortoise -- vzdálený přístup
Maven
Motivace
Maven - charakteristika
Project Object Model (POM)
Projekt v Mavenu
Maven repository
Instalace a nastavení
Příklad POM (project.xml)
Příklad POM - pokračování
Struktura POM obecně
Proměnné (properties) v POM
Struktura repository
Cíle v Mavenu
Maven Plugins
Často používané cíle
Vytvoření projektu
Reporting
Rozšíření možností Mavenu
Skriptování v javovém prostředí - BSF
Co je skriptování?
Proč skriptovat?
Proč skriptovat právě teď?
Bean Scripting Framework
BSF - co nabízí
BSF - typické použití
BSF - download a další info
Skriptování v javovém prostředí - Groovy
Groovy - motivace
Stažení
Instalace
Spuštění
Příklad - iterace
Příklad - mapa
Příklad - switch
Řízení a sledování aplikací - protokolování
Protokolování (logging)
Protokolování - výhody
Protokolování - možnosti v Javě
Protokolování - API
Protokolování - příklad

Architektury rozsáhlých aplikací v Javě

Charakteristika a požadavky

Modely

Vrstvy

Komponenty

Orientace na služby

Správa

Zabezpečení

Kontejnery a rámce

Komponentní vs. objektové programování

Objektové programování - principy

Obecné, známé principy OO jazyků:

  • možnost (a nutnost) zapouzdření dat a metod ned nimi pracujících do podoby objektu,

  • dědičnost (inheritance) - odvozování nových typů s děděním vlastností typů rodičovských,

  • polymorfizmus (mnohotvarost) - využitelnost objektů poděděných typů v roli předků

Objektové programování - terminologie

Na obecných principech OOP není mezi teoretiky a vývojáři (v různých jazycích) až taková shoda, jak by se mohlo zdát:

  • bezespornou charakteristikou OOP je zapouzdření,

  • další char. jako dědičnost (inheritance) je už v různých jazycích pojímána různě, příp. chybí - a přesto můžeme ještě hovořit o OO jazyku,

  • polymorfizmus (mnohotvarost)

Objektové programování - přednosti

Výhody OOP (za předpokladu kvalitního návrhu) jsou dobře známy:

  • dobrá čitelnost a udržovatelnost kódu,

  • rozšiřitelnost,

  • určitá vnitřní nahraditelnost částí - např. třídu lze nahradit potomkem

  • aspoň teoreticky - využitelnost i jako "black-box"/černá skříňka - bez znalosti zdrojového kódu

Objektové programování - nedostatky

Ale tak skvělé to zase není:

  • bez zdrojového kódu lze dobře znovupoužít jen kvalitní objektový kód,

  • kód je znovupoužitelný většinou jen na mikroúrovni - jednotlivé třídy

  • k znovupoužití je třeba detailní znalosti celého prostředí programu, rozhraní větších programů bývá většinou komplikované - i proto, že komponenty (objekty) jsou příliš malé, jemné

Komponentní programování - principy

V zásadě vychází z objektového, ale:

  • komponenty jsou VELKÉ (coarse-grained) objekty zapouzdřující ucelený kus aplikační logiky nebo dat,

  • komponenty jsou nezřídka přístupné i vzdáleně (tj. po síti, často i z jiných platforem/jazyků),

  • komponenty mohou (za podpory middleware) existovat relativně samostatně

  • vazby k ostatním jsou dobře kontrolovatelné a obecně spíše volné

  • jako protokoly, datové formáty atd. jsou přednostně použity standardní, byť třeba ne tak efektivní

Komponentní programování - výhody oproti OOP

Oproti OOP to umožňuje:

  • daleko lepší znovupoužitelnost - slabší vazby, vyšší autonomie

  • vyšší robustnost komponentních systémů

  • snazší vyměnitelnost (nefunkční, zastaralé) komponenty

  • lepší testovatelnost komponent vzhledem ke slabším vazbám

  • vývoj mohou dělat nezávislejší mikro-týmy

Komponentní programování - souvislosti

V javovém světě jsou minimálně tyto trendy a možnosti odpovídající KP:

  • pro výstavbu velkých systémů (aplikací) se používají Enterprise JavaBeans,

  • existují tzv. aplikační servery, které pro ně zajišťují middleware,

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

Charakteristiky SOA

  1. Nahraditelnost služeb
  2. Interoperabilita
  3. Ladění
  4. Integrace systémů třetích stran

Extreme Programming (XP)

Motivace pro Extreme Programming (XP)

Na vývoj software má vliv mnoho faktorů, které se neustále mění (zadání, návrh, technologie, trh, složení týmu apod.). Obecně lze říci, že změna je jedinou konstantou vývoje software. Problémem vývoje softwaru je schopnost úspěšného zvládnutí těchto změn za přijatelné náklady.

  • Toto je východisko pro řadu moderních metodik programování (řízení SW projektů), které se souhrnně označují jako agile programming.

  • Mezi ně patří i Extreme Programming (XP).

Co je XP

Viz J. Ministr, IT pro praxi, 2004:

  • Extrémní programování (XP) je metodika vývoje softwaru, která je postavena na tvorbě zdrojového textu v týmech, jež tvoří dva až deset programátorů. XP používá obecně známé principy a postupy vývoje softwaru, tyto však dotahuje do extrémů.

Charakteristika XP

Od ostatních metodik se XP odlišuje v následujících vlastnostech:

Automatizované testování

testy jsou tvořeny před samotnou tvorbou zdrojového textu za účelem následného ověření skutečného pokroku ve vývoji softwaru z hlediska jeho požadované funkcionality (testy navrhuje zákazník) a architektury programového modulu (testy navrhuje programátor).

Verbální komunikace

společně s testy a zdrojovým textem slouží ke sdělování systémové struktury a záměru projektu.

Intuice

Postupy, které podporují intuici programátorů a dlouhodobé zájmy projektu (testování, refaktorizace, integrace apod.).

Východiska řízení týmu podle XP

Komunikace

Udržení řádných komunikačních toků ovlivňuje kvalitu jednotlivých postupů XP (testování modulů, párové programování, stanovení metrik apod.).

Jednoduchost

Vývoj software je řízen zásadou, že je lepší udělat jednoduchou věc dnes, s vědomím, že zítra bude možná nutné provést další změnu, spíše než udělat složitější změnu dnes, která nemusí být uživatelem využita. Jednoduchost a komunikace jsou spolu komplementární. Čím více tým komunikuje, tím je mu jasnější co přesně má dělat. Naopak čím je jednodušší systém, tím méně potřebujeme komunikovat.

Odvaha

Členové týmu jsou ochotni experimentovat s vyšším rizikem a ziskem.

Hlavní zásady XP

Kvalitní práce

představuje fixní proměnnou ze čtyř proměnných pro posouzení projektu (šíře zadání, náklady, čas a kvalita) s hodnotou vynikající, při horší hodnotě členy týmu práce nebude bavit a projekt může skončit neúspěchem.

Vedlejší zásady XP

Hraní na výhru

představuje soustředění práce týmu na kvalitu vyvíjeného produktu, nikoli na zbytečné alibistické činnosti, kdy tým pracuje „podle předpisů“ (mnoho papírů a porad), aby se tzv. „neprohrálo“.

Konkrétní experimenty

kdy všechna abstraktní rozhodnutí by měla být převedena do řady experimentů, které jsou následně otestovány.

Práce v souladu s lidskými instinkty

a nikoli proti nim představuje práci s krátkodobými zájmy lidí, kteří se rádi učí, vyhrávají, komunikují s ostatními apod.

Cestování nalehko

představuje hodnotné a účinné nástroje vývoje softwaru, které tvoří především testy a zdrojový text.

Vývojové činnosti XP

  1. Psaní zdrojového textu

  2. Testování

  3. Poslouchání

  4. Navrhování logiky systému

Hlavní techniky XP

  • Plánovací hra stanoví šíři zadání následující verze software pomocí kombinace obchodních priorit a technických odhadů.

  • Malá verze představuje rychlé uvedení jednoduchého systému do provozu. Následně jsou uvolňovány malé přírůstky systému ve velmi krátkých cyklech.

  • Metafora pomáhá všem v projektu pochopit základní prvky systému a vztahy mezi nimi na základě jednoduchého přirovnání.

  • Jednoduchý návrh u něhož je nadbytečná složitost ihned odstraněna v okamžiku jejího zjištění z návrhu.

  • Testování představuje činnost programátorů a zákazníků, kdy programátoři testují zdrojový text z hlediska jeho programových vlastností, aby mohli pokračovat v jeho dalším psaní, a kdy uživatelé otestují funkcionalitu modulu, která je úspěšným provedením testu dokončena.

  • Refaktorizace představuje restrukturalizaci systému s cílem zdokonalení jeho nefunkčních kvalit (pružnost, zjednodušení) bez vlivu na jeho chování.

  • Párové programování představuje vývoj zdrojového textu dvěma programátory na jednom počítači.

  • Společné vlastnictví

  • Nepřetržitá integrace - okamžitá integrace dokončeného otestovaného přírůstku do systému.

  • 40 hodinový týden plus se nepracuje nikdy přesčas dva týdny za sebou.

  • Zákazník na pracovišti - odpovídá na otázky programátorů při vývoji software.

  • Standardy pro psaní zdrojového textu

Fáze XP projektu

Plánování

představuje stanovení termínu programátory společně se zákazníky na základě postupu plánovací hry. Do uvolnění první verze by mělo trvat mezi dvěma až šesti měsíci.

Smrt

představuje stav systému, kdy je software neschopen své existence z důvodu neekonomického rozšíření jeho funkcionality, entropie (tendence k většímu počtu chyb). Zákazníci i manažeři by měli souhlasit s ukončením údržby systému s tím, že se snaží identifikovat příčiny zániku systému.

Správa sestavování - Ant

Charakteristika

  • Ant je platformově přenositelnou alternativou nástroje typu Make
  • Ant je 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í (platformové) 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ý

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.
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
[Varování]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
  • 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

RCS
Revision Control System
CVS
Concurrent Version System

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ádát 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í

  • 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)
  • server existuje jako samostatná aplikace, standardní použití je však s webových serverem Apache

  • 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ý přístup

  • Tortoise umožňuje bezpečný přístup k vzdálenému úložišti i prostřednictvím šifrovaných protokolů
  • (server potom ale musí běžet přes Apache...)

  • používá se upravený klient PuTTY

Maven

Motivace

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.

Oproti klasickým nástrojům typu unixového make poskytoval Ant platformově 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

Artefaktem může být typicky:

  • .jar - obyčejná aplikace nebo knihovna (javové třídy, soubory .properties, obrázky...)

  • .war - webová aplikace (servlety, 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 project.xml:

<project>
   <pomVersion>3</pomVersion><!-- verze POM - zatím vždy 3 -->
   <id>RunningCalculator</id><!-- jednoznačné id projektu -->
   <name>RunningCalculator</name><!-- (krátké) jméno/nemusí být jednoznačné -->
   <currentVersion>0.1</currentVersion><!-- momentální verze -->
   <organization><!-- organizace vytvářející projekt -->
      <name>Object Computing, Inc.</name>
   </organization>
   <inceptionYear>2004</inceptionYear><!-- rok zahájení projektu -->
   <shortDescription>calculates running pace</shortDescription><!-- stručný popis -->
   <developers/>

Příklad POM - pokračování

Příklad minimálního popisovače project.xml:

   <dependencies><!-- závislosti -->
      <dependency><!-- závislost -->
         <groupId>junit</groupId><!-- skupina artefaktu -->
         <artifactId>junit</artifactId><!-- označení artefaktu -->
         <version>3.8.1</version><!-- verze artefaktu -->
      </dependency>
   </dependencies>
   <build><!-- odkud se co a jak sestavuje... -->
      <sourceDirectory>src/java</sourceDirectory><!-- adresář zdrojů -->
      <unitTestSourceDirectory>src/test</unitTestSourceDirectory><!-- adresář zdrojů testů -->
      <unitTest><!-- které soubory jsou třídy testů -->
         <includes>
            <include>**/*Test.java</include>
         </includes>
      </unitTest>
   </build>
</project>

Struktura POM obecně

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="MAVEN_HOME/maven-project.xsd">
   <pomVersion>3</pomVersion>
   <id>unique-project-id</id>
   <name>project-name</name>
   <groupId>repository-directory-name</groupId>
   <currentVersion>version</currentVersion>
   <!-- Management Section -->
   <!-- Dependency Section -->
   <!-- Build Section -->
   <!-- Reports Section -->
</project>

Proměnné (properties) v POM

  • Jsou podobně jako u Antu definovatelné a využitelné (odkazovatelné) 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. project.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-directory/jars/jar-file

konkrétní např.: repository/junit/jars/junit-3.8.1.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 plugin-name[: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

Často používané cíle

clean

smaže vygenerované soubory (podstrom target)

java:compile

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 předgeneruje jednu třídu.)

  3. tím se vytvoří následující soubory:

    • project.xml, project.properties

    • src/conf/app.properties

    • src/java/package-dirs/App.java

    • src/test/package-dirs/AbstractTestCase.java

    • src/test/package-dirs/AppTest.java

    • src/test/package-dirs/NaughtyTest.java

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:

<reports>
   <report>maven-checkstyle-plugin</report>
   <report>maven-javadoc-plugin</report>
   <report>maven-junit-report-plugin</report>
</reports>

Rozšíření možností Mavenu

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 project.xml nebo

  2. v zásuvném modulu (pluginu)

Zcela nové cíle je možné napsat ve skriptovacím jazyku jelly (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 udržovatelnost, 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 Javě) 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 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]Poznámka

Takové rychlovýtvory nezřídka mívají delší životnost než složitě a dlouho budované "pořádné" 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, NetRexx ...)
  • naopak ze skriptů je možno používat javové objekty
[Poznámka]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
  • z něj přes BSFEnginespouštět skripty s možností přístupu k objektům v kontextu manažeru.

BSF - download a další info

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 Javě a na míru 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 bajtkódu, je tedy na běhové úrovni dobře interoperabilní s Javou.

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 GROOVY_HOME na tento adresář
  • přidat $GROOVY_HOME/bin do PATH

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) {
  println "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, 'inList']:
        result = "list"
        break
    case 12..30:
        result = "range"
        break
    case Integer:
        result = "integer"
        break
    case Number:
        result = "number"
    break    default:
        result = "default"
}
assert result == "number"

Řízení a sledování aplikací - protokolování

Protokolování (logging)

Protokolování je základní činností sledující běh software v

  • testovacím i

  • ostrém nasazení.

Protokolování - výhody

Protokolování má oproti klasickým přístupům

  • System.out.println nebo o něco lepším

  • System.err.println

jasné výhody:

  • snadná konfigurovatelnost

  • nezaměnitelnost s jinými (neladicími) výstupy programu

  • možnost vazby na zasílání zpráv mailem, ukládání do souborů, databáze

Protokolování - možnosti v Javě

V zásadě dva možné přístupy:

  • použít standardní API

  • použít API daného aplikačního prostředí (ap. serveru)

Standardní API je však často ap. serverem také podporováno a má jasné výhody:

  • je známé, existuje široká komunita se zkušenostmi

  • obsluhu obvykle již sami známe

Protokolování - API

Existuje několik "standardních" protokolovacích API:

  • od Java 1.4: balík java.util.logging

  • již dříve nezávislé open-source řešení log4j

Obě řešení jsou srovnatelná, log4j je o něco elegantnější a propracovanější. Nejlépe (pokud to stačí) je použít zastřešujícího API:

  • balík Apache Commons Logging

Protokolování - příklad

Existuje několik "standardních" protokolovacích API:

  • od Java 1.4: balík java.util.logging

  • již dříve nezávislé open-source řešení log4j

Obě řešení jsou srovnatelná, log4j je o něco elegantnější a propracovanější. Nejlépe (pokud to stačí) je použít zastřešujícího API:

  • balík Apache Commons Logging