Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokročilé zásady a metodiky návrhu aplikační logiky - Design by Contract, Inversion of Control, Aspect-oriented Programming. Kontejnery, aplikační servery.
Obsah
Aplikační vrstva javových aplikací .................................................................................3
Aplikační vrstva javových aplikací .........................................................................................3
Design by Contract......................................................................................................3
Design by Contract - návrh podle kontraktu..............................................................................3
DBC - jak dosáhnout ...........................................................................................................3
DBC - nástroj jass ...............................................................................................................3
Postup při práci s jassWlfTIPElílA ....................................................................................4
ľlip tni1 V íl u Lnibi
Odkazy .............................................................................................................................4
Inversion of Control (IoC) ............................................................................................5
Nezbytné pojmy z komponentních systémů..............................................................................5
IoC - Motivace ...................................................................................................................5
Tradiční řízení životního cyklu komponent...............................................................................5
IoC - Hlavní princip.............................................................................................................6
IoC - Možné podoby ............................................................................................................6
Interface Injection ...............................................................................................................6
Setter Injection - komponenta................................................................................................7
Setter Injection - popis komponenty........................................................................................7
Setter Injection - výhody/nevýhody ........................................................................................8
Constructor Injection ...........................................................................................................8
Constructor Injection - priklad komponenty..............................................................................8
Použití IoC - kontejnery .......................................................................................................8
Aspect Oriented Programming (AOP) .............................................................................8
AOP- Motivace..................................................................................................................8
AOP - Motivační priklad ......................................................................................................9
AOP-Principy ...................................................................................................................9
1
Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokro-
AOP-Zařazení.................................................................................................................10
AOP - Terminologie ..........................................................................................................10
AOP - Implementace .........................................................................................................10
Kontejnery a aplikační servery.....................................................................................10
Kontejnery a aplikační servery.............................................................................................10
Spring framework - podpora aplikační logiky .................................................................11
Klíčové pojmy..................................................................................................................11
Koncepce ........................................................................................................................11
Poskytované služby ...........................................................................................................11
Pod pokličkou ..................................................................................................................12
Příklad obsahu definičního souboru ......................................................................................12
Co provede Spring ............................................................................................................12
Příklad konfigurace ...........................................................................................................12
Užitečné linky ..................................................................................................................13
Java Management extension (JMX) ..............................................................................13
CojeJMX .......................................................................................................................13
Co řídí JMX.....................................................................................................................13
Principy JMX...................................................................................................................13
Který objekt (komponentu) jako JMX?..................................................................................13
Úrovně JMX modelu .........................................................................................................14
Ovládané zdroje................................................................................................................14
Jak se zdroje ovládají.........................................................................................................14
MBean............................................................................................................................14
Co obsahují/zpřístupňují rozhraní MBean ..............................................................................15
Typy MBean....................................................................................................................15
Aplikační rámec Tammi - případová studie ....................................................................15
Charakteristika Tammi.......................................................................................................15
Příklad jednoduché komponenty typu MBean.........................................................................15
Skriptování v javovém prostředí - BSF ..........................................................................16
Co je skriptování? .............................................................................................................16
Proč skriptovat? ................................................................................................................16
Proč skriptovat právě teď? ..................................................................................................16
Bean Scripting Framework..................................................................................................17
BSF - co nabízí.................................................................................................................17
BSF - typické použití .........................................................................................................17
BSF - download a další info ................................................................................................17
Skriptování v javovém prostředí - Groovy......................................................................18
Groovy - motivace.............................................................................................................18
Stažení............................................................................................................................18
Instalace..........................................................................................................................18
Spuštění ..........................................................................................................................18
Příklad - iterace ................................................................................................................19
Příklad - mapa..................................................................................................................19
Příklad - switch.................................................................................................................19
Řízení a sledování aplikací - protokolování ....................................................................20
Protokolování (logging)......................................................................................................20
Protokolování - výhody ......................................................................................................20
Protokolování - možnosti v Jávě...........................................................................................20
Protokolování - API...........................................................................................................20
2
čilé zásady a metodiky návrhu aplikační logiky - Design by Contract, In-
Protokolování - přiklad.......................................................................................................21
Aplikační vrstva javových aplikací
Aplikační vrstva javových aplikací
Aplikační vrstva javových aplikací
Design by Contract
Design by Contract - návrh podle kontraktu
Nejde o nic jiného, než o zajištění, aby výsledný navržený program splňoval specifikaci, tj.:
• aby pro každý atomický, zvenčí viditelný/volatelný kus kódu (typicky metoda) byly specifikovány vstupní a výstupní podmínky
• a aby jejich platnost byla za běhu zaručena
• mezi zadavatelem (tj. analytikem, příp. zákazníkem) a návrhářem tak vzniká
• dohoda (contract), že specifikace bude dodržena
DBC -jak dosáhnout
K dosažení tohoto ideálního stavu vede budto čistě formální cesta:
specifikace zmíněných podmínek matematickými prostředky a formální dokazování korektnosti
Dále zmiňované nástroje však toto nedokážou; omezují se na běhovou kontrolu platnosti predpsaných podmínek
DBC - nástroj jass
jass je preprocesor javového zdrojového textu. Umožňuje ve zdrojovém textu programu vyznačit podmínky, jejichž splnění je za běhu kontrolováno.
Podmínkami se rozumí:
• pre- a postconditions u metod (vstupní a výstupní podmínky metod)
• invarianty objektů - podmínky, které zůstávají pro objekt v platnosti mezi jednotlivými operacemi
3
version of Control, Aspect-oriented Programming. Kontejnery, aplikační
nad objektem
.WlĽIPFrilA
t Tkr F^i- f,.r.L1..t,
Postup při práci s jass
[http://cs.wikipedia.Org/wiki/Speci%C3%A1ln%C3%AD:S
earch?search=jass]
Postup práce s jass:
stažení a instalace balíku z http://csd.informatik.uni-oldenburg.de/~jass/
• vytvoření zdrojového textu s příponou . jassVťlKIPRÍllA
"i " 11T i.ň.iT.
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=jass], javovou syntaxí s použitím speciálních komentářových značek
takový zdrojový text je přeložitelný i normálním překladačem javacWlKIPRDlA
ľ i r r n i ■ pil i . I ■ ■ ■ ík i
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=javac], ale v takovém případě ztrácíme možnosti jass
• proto nejprve .jass
ľ i r řriT riL i. u n n L ■
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=jass] souboru převedeme preprocesorem jass na javový (. j avaWlKIPEľllA
ľ. i r p m- pil i. l-aaifa ■
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=java]) soubor
• ten již přeložíme javacWlKlPRDlA
Ípip pni1 Fib i. unikl
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=javac] a spustíme java WlKlPEDlA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=java], tedy
"Hip Vrtf Fii h L^b i
jako každý jiný zdrojový soubor v Jave
• z . jassWlKIPRillA
-* i -11 T..:, ň. i r.
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=jass] zdrojů je možné vytvořit také dokumentaci API obsahující jass značky, tj. informace, co kde musí platit za podmínky atd. - vynikající možnost!
Odkazy
JUnit homepage [http://junit.org]
Java 1.4 logging API guide [http://java.sun.eom/j2se/l.4.2/docs/guide/util/logging/]
Log4j homepage [http://jakarta.apache.org/log4j/docs/index.html]
4
servery.
• Jakarta Commons Logging homepage [http://jakarta.apache.org/commons/logging/]
• jass homepage [http://csd.informatik.uni-oldenburg.de/~jass/]
• jass demo by Tomáš Pitner [http://www.fi.muni.cz/~tomp/dbc]
• úvodní materiálek [http://www.inf.fu-berlin.de/lehre/SS01/VIS/Dokumente/Vortraege/junit.pdf] k použití junit (v němčině, jako PDF)
Inversion of Control (loC)
Nezbytné pojmy z komponentních systémů
Uvádíme pragmaticky jen to, co je potřeba zde (pro potřeby IoC), nechápat jako komplexní terminologii.
komponenta (component) objekt poskytující navenek ucelenou funkcionalitu (část aplikační ne-
bo pomocné logiky)
komponenta je obvykle chápána jako "velký objekt" nebo graf více objektů s vnějším rozhraním ("fasádou")
komponenta je sice do jisté míry samostatná, ale většinou nežije nezávisle; za běhu potřebuje návaznosti na další komponenty nebo hostující rámec (kontejner)
kontejner (container) objekt, v němž jsou za běhu aplikace uloženy a spravovány kompo-
nenty (objekty)
kontejner dokáže většinou komponenty i vytvářet a poskytovat odkazy na ně (vyhledávat je)
IoC - Motivace
V komponentních systémech bývá tradičním problémem zajistit správnou inicializaci a provoz komponent závislých na ostatních.
• jak závislosti popsat
• jak získat objekty (komponenty), na nichž vytvářená komponenta závisí
• jak tuto komponentu vytvořit
• jak závislosti předat ("injektovat") do ní
Tradiční řízení životního cyklu komponent
5
Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokro-
Co je třeba udělat při nasazení jedné nové komponenty
1. Připravit komponenty, na nichž "ta moje" závisí
2. Vytvořit "noji komponentu"
3. Nastavit závislosti
Postup vypadá přímočaře, aleje bohužel rekurentní... v bodě 1 (připravit komponenty...) se opakuje rekurentně celý postup
loC - Hlavní princip
V Inversion of Control obracíme tento (pro komponentního programátora) nepraktický, obtížný postup. O řešení závislostí se postará rámec (kontejner), komponenta pouze deklaruje na čem závisí.
loC - Možné podoby
Historicky se postupně vyvinuly tří přístupy k "injektáži" potřebných závislostí; tedy k IoC:
Interface Injection Setter Injection Constructor Injection
Blíže viz popis k IoC v systému (rámci) vraptor [http://vraptor.arca.ime.usp.b^eginner/ioc.html] a následující slídy.
Interface Injection
Komponenta MUSI IMPLEMENTOVAT určité, rámcem/kontejnerem dané rozhraní (příklad z článku Intro, to AOP [http://todayjava.net/pub/a/today/2004/02/10/ioc.html]):
import org.apache.avalon.framework.*;
public class JDBCDataManger implements Serviceable { DataSource dataSource;
public void service (ServiceManager sm) throws ServiceException { dataSource = (DataSource)sm.lookup("dataSource") ; }
public void getData() {
//use dataSource for something }
6
čilé zásady a metodiky návrhu aplikační logiky - Design by Contract, In-
Nevýhoda: musí implementovat dané rozhraní, nelze vyvíjet zcela nezávisle.
Setter Injection - komponenta
Komponenta je jako objekt JavaBean, má setOX metody:
public class JDBCDataManger { private DataSource dataSource;
public void setDataManager(DataSource dataSource {
this.dataSource = dataSource; }
public void getData() {
//use dataSource for something } }
Setter Injection - popis komponenty
Rámec (kontejner), např. Spring musí vědět, jak komponentu vytvořit a na čem závisí:
com.mydb.jdbc.Driver
jdbc:mydb://server:port/mydb
root
a druhá komponenta:
7
version of Control, Aspect-oriented Programming. Kontejnery, aplikační
Setter Injection - výhody/nevýhody
Oproti Interface Injection: netřeba implementovat rozhraní
Je ale nezřetelné, které setXXX metody jsou pro účely nastavení závislostí přes Setter Injection a které ne.
Constructor Injection
Odpovídá přístupu "Good Citizen" (označení zavedl J. Bloch ze Sun):
• objekt je po vytvoření (a aplikaci konstruktoru) plnohodnotný, plně inicializovaný, platí pro něj všechny invarianty, lze jej použít
Constructor Injection - příklad komponenty
public class JDBCDataManger { private DataSource dataSource;
public JDBCDataManger(DataSource dataSource) {
this.dataSource = dataSource; }
public void getData() {
//use dataSource for something } }
Použití loC - kontejnery
Existují jednoduché (lightweight) kontejnery pro nasazení a provoz komponent s využitím IoC.
Tyto kontejnery mnohdy neumí nic navíc, jde jen o základní správu komponent.
Příkladem je PicoContainer [http://picocontainer.org/] a Spring [http://www.springframework.org/], který je však komplexnější (a složitější).
Aspect Oriented Programming (AOP)
AOP - Motivace
• Programový kód rozsáhlejších soudobých systémů je složitý, nepřehledný, nesnadno udržovatelný.
• U systémů jsou často implementovány mimofunkční požadavky: protokolování, zabezpečení, opti-
servery.
malizace.
• Pokrytí těchto požadavků jde napřič s požadavky funkčními - současné splnění vede nezřídka ke kombinatorické explozi a (téměř) exponenciálnímu nárůstu velikosti kódu.
• Kód je nečitelný a ještě obtížněji udržovatelný.
• I rozšiřování nelze většinou provést lokálně, nezřídka je jím zasaženo více částí kódu.
AOP - Motivační příklad
Příklad převzatý z weblogu Jablok [???] Pavla Kolesnikova (typický kód aplikační logiky):
public class KusAplikacniLogiky extends ObecnejsiKus { // data tridy; // jiná pomocná data;
// pretizeni rodičovských metod
public void provedNecoPodstatneho () { // autentizace // autorizace
// dalsi nezajimavy kod
// logovani začátku operace
// vlastni aplikacni logika — konečne!
// logovani ukončeni operace // treba jeste něco } }
stále se opakující úkony na začátku před vlastní realizací "užitečné práce" a po ní
• aplikační logika tvoři jen zlomek rozsahu kódu
AOP - Principy
Překlad článku Graham O'Regana Introduction to Aspect-Oriented Programming [http://www.onjava.eom/lpt/a/4448] na onjava.com nastiňuje hlavní principy:
• AOP umožňuje přidat do statického 00 modelu programu (třídy) dynamické aspekty - např. ovlivňovat (vstupovat do) volání metod.
• Např. serviet očekává vstup z weboveho formuláře, naváže data z formuláře do vytvořeného datové-
9
Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokro-
ho objektu, ten zpracuje aplikační logikou a výsledek prezentuje. Kromě toho ale musí řešit: ošetření výjimek
• zabezpečení přístupu
• protokolovaní
AOP - Zařazení
Postupy AOP řadíme mezi deklarativní programování.
Deklarativní programování pomocí anotací bylo zmiňováno u Java Persistence API.
Pomocí anotací lze technicky vyřešit i AOP.
AOP - Terminologie
Crosscutting concern záměr jdoucí napříč třídami (přes více tříd)
Aspect v podstatě modularizace crosscutting concern
Join point význačné místo v provádění programu - např. vstup nebo opuštění me-
tody
- místo, kde se uplatní aspekt
Pointcut podmínka, za níž se v místě join point uplatní pokyn (advice)
Introduction vložení atributu nebo metody
Advice (pokyn) pokyn, co se má v daném bodě (pointcut) provést
AOP - Implementace
AspectJ (použito i ve Springu - od 2.0 pomocí anotací) Aspectwerkz
Kontejnery a aplikační servery
Kontejnery a aplikační servery
Kontejnery a aplikační servery
10
čilé zásady a metodiky návrhu aplikační logiky - Design by Contract, In-
Spring framework - podpora aplikační logiky
Klíčové pojmy
• Inversion of Control (IoC)
• návrhový vzor, o instanciaci a správu objektů aplikace se stará třetí strana - Spring
• Dependency Injection (DI)
• návrhový vzor, zajišťující provázání závislých objektů
• Plain Old Java Object (POJO)
• označení objektů, které nejsou žádným způsobem závislé na aplikačním rámci, který je spravuje, takové objekty jsou snadno znovupoužitelné v různých prostředích - ve webové aplikaci, v EJB aplikaci, v testovacím prostředí, atd.
Koncepce
Spring poskytuje specifické služby objektům aplikační (business) vrstvy
• podobný podpůrný rámec dosud chyběl (mimo EJB)
Spring se zaměřuje na správu jednotlivých objektů, nikoliv celých komponentpod
• pora zajištěna primárně prostřednictvím IoC a AOP Spring umožňuje správu POJO objektů (EJB nikoliv)
spravované objekty musí mít formát JavaBeans - bezparametrický konstruktor a set/get metody
Poskytované služby
správa životního cyklu objektů
• jednotný procedurální i deklarativní transakční management
• jednotný způsob konfigurace aplikace v době nasazení
• DI - Spring podporuje setter a custractor DI
• pokročilá procedurální i deklarativní správa zabezpečení aplikace (Acegi Security)
• pooling objektů
11
version of Control, Aspect-oriented Programming. Kontejnery, aplikační
Pod pokličkou
• Kontejner rámce Spring (nazývaný také aplikační kontext) při svém startu načte definiční soubor. Na základě definic v něm uvedených vytvoří pomocí reflexe specifikované objekty, vzájemně je prováže a tuto síť objektů spravuje po dobu běhu aplikace.
Definiční soubor:
• v drtivé většině případů je používán XML soubor
• lze použít i soubor ve formátu properties
Příklad obsahu definičního souboru
František Novák
Co provede Spring
V tomto případě by kontejner prostřednictvím reflexe provedl kód ekvivalentní tomuto:
Zaměstnavatel nejakaFirma = new Zaměstnavateli); Zamestnanec franta = new Zamestnanec(); Franta.setJméno = "František Novák"; Franta.setZaměstnavatel(nej akaFirma) ;
Příklad konfigurace
Pojmenujeme-li tento definiční XML soubor "kontext.xml" a umístíme-li jej do classpath, pak kontejner nastartujeme například takto:
ApplicationContext context = new ClassPathXmlApplicationContext("/kontext.xml");
Vytvořeného zaměstnance s id "franta" získáme z kontejneru voláním:
Zamestnanec z = (Zamestnanec)context.getBean("franta");
Pomocí dalších deklarací v tomtéž XML souboru lze definovat, jakým způsobem budou dříve vyjmenované služby poskytnuty našim objektům. Naše třídy se tedy nemusí například transakčním či bezpeč-
12
servery.
nostním managementem zabývat, vše zajistí Spring.
Užitečné linky
stránky projektu [http://springframework.org/]
• obsáhlý úvod do Springu napsaný Rodem Johnsonem, autorem Springu [http://www.theserverside.com/articles/article.tss?l=SpringFramework]
• jednoduchá aplikace krok za krokem [http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step.html]
Java Management extension (JMX)
CojeJMX
• JMX je rozhraním definujícím strukturu a chování jednotlivých prvků systému schopného snadné a standardizované správy, monitoringu....
• JMXje v současnosti řadou výrobců (i open-source vývojářů) považováno za nejlepší rozhraní pro správu takových systémů.
JMX je formálně výsledkem práce JSR003.
Co řídí JMX
Přes JMX se řídí:
• moduly
• kontejnery, v nichž jsou moduly hostovány/provozovány
• zásuvné moduly (plug-ins)
Principy JMX
• Komponenty jsou v JMX deklarovány jako lužby MBean_(MBean services).
• JMX následně umožní zavedení a správu těchto komponent.
Který objekt (komponentu) jako JMX?
13
Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokro-
Vhodnými kandidáty na JMX (MBeans) jsou takové komponenty, které:
• Interagují s (jsou ovládány) objekty z jiných vrstev aplikace.
• Objekt má stav, který má být sledován/řízen.
• Obj ekt j e konfigurován nezávisle pří startu/za běhu aplikace.
Úrovně JMX modelu
Model systému řízeného JMX zahrnuje:
Instrumentation zdroje, jež jsou spravovány
Agents kontroléry (ovladače) těchto zdrojů
Distributed Services služby, jimiž (koncové) aplikace pro správu komunikují s výše uvede-
nými agenty
Ovládané zdroje
Přes JMX se může řídit prakticky cokoli v javovém systému:
(celou) aplikaci
• komponentu služby zařízení
Jak se zdroje ovládají
JMX ovládá zdroje prostřednictvím tzv. _rapperu_ který:
• vystavuje (zpřístupňuje) vlastnosti spravovaných objektů
• díky tomu může externí, standardizovaný nástroj, přistupovat k spravovanému objektu
Jaké podoby může wrapper nabývat?
MBean
MBean javový objekt implementující jedno či více standardních MBean rozhraní a je konstruován podle odpovídajících návrhových vzorů
14
čilé zásady a metodiky návrhu aplikační logiky - Design by Contract, In-
Co obsahují/zpřístupňují rozhraní MBean
• hodnoty atributů přístupných prostřednictvím jména atributů
• operace, které lze volat
• notifikace událostí, které zde mohou vzniknout konstruktory MBean třídy
MBean
Standard MBean pouze odpovídají JavaBean konvencím a staticky definovaným (JMX) rozhraním
pro správu
Dynamic MBean
Open MBean
Model MBean
Aplikační rámec Tammi - případová studie
Charakteristika Tammi
• Komplexní (webový) aplikační rámec
• dostupný na http://tammi.sf.net
• Jedna z nejucelenějších aplikací JMX - používá se zde "na všechno"
Příklad jednoduché komponenty typu MBean
Komponenta koncipovaná jako MBean je často vytvářena takto:
1. Je vytvořen (nebo existuje) "běžný" bean s požadovanou funkcionalitou.
2. Je sestaveno rozhraní typu MBean, které bude navenek reprezentovat tuto funkcionalitu.
3. Je sestavena třída (wrapper, adaptér), který rozšiřuje původní bean a implementuje toto rozhraní.
FibonacciCounterjava - původní komponenta CounterMBeanjava - rozhraní
15
version of Control, Aspect-oriented Programming. Kontejnery, aplikační
Counter.java - třída implementující rozhraní
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 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 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
16
servery.
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, 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řistup. Ří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 BSFEngine spouštět skripty s možností přístupu k objektům v kontextu manažeru.
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.
17
Aplikační vrstva javových aplikací -řízení toku, správa komponent. Pokro-
• ú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
Spuštění
Tři základní způsoby:
groovysh řádkový Groovy-shell
18
čilé zásady a metodiky návrhu aplikační logiky - Design by Contract, In-
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 case Number:
result = "number" break default:
result = "default"
}
assert result == "number"
19
version of Control, Aspect-oriented Programming. Kontejnery, aplikační
Ří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
Systemout.prinťln nebo o něco lepším System, err.println
jasné výhody:
snadná konfigurovatelnost
• nezaměnitelnost s jinými (neladící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 Jávě
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
20
servery.
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í log4jWlKlPFMA
íli r priT r ik i. uniii
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=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í log4jWHnPFľllA
ill p k pi i" Fib u Lniii
[http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=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
21