Hlavní navigace

JBoss: Aplikační server

18. 2. 2008
Doba čtení: 9 minut

Sdílet

Aplikační server je v dnešní době poměrně moderní a často používané slovní spojení. Jak si ale takový aplikační server představit? A je skutečně k něčemu potřeba? V tomto článku se pokusíme odpovědět na tyto otázky a představíme si jeden z nejpoužívanějších open-source aplikačních serverů: JBossAS.

Co to je aplikační server?

Aplikační server tvoří vrstvu mezi operačním systémem a aplikacemi. Podobně, jako operační systém poskytuje základní funkce programům (například pro přístup k souborovému systému, nebo ke správě procesů), poskytuje aplikační server často používané funkce enterprise aplikacím. Vytváří další vrstvu abstrakce, aby bylo psaní aplikací jednodušší. Příkladem takových funkcí mohou být podpora transakčního zpracování požadavků, persistence objektů do databáze, výměna zpráv mezi aplikacemi a další. Nabízí se samozřejmě otázka, co to vlastně je enterprise aplikce a jak se liší od běžné aplikace. Není to nic složitého, de facto se jedná o běžnou aplikaci, na kterou jsou kladeny určité nároky co se týče spolehlivosti, dostupnosti, robustnosti, výkonnosti. Typická je také potřeba obsloužit současně velké množství požadavků (klientů). Klasickými zástupci enterprise aplikací jsou moderní webové aplikace a řešení postavená na servisně orientované architektuře (SOA).

Většina aplikačních serverů je vyvíjena v programovacím jazyce Java. Není to jenom tím, že Java je nezávislá na platformě, ale také tím, že existuje standard pro implementaci enterprise aplikací právě v jazyce Java. Tento standard se nazývá Java Enterprise Edition (JEE). Pokud bychom hledali paralelu se světem operačních systémů, mohli bychom zmínit standard POSIX.

Implementací JEE existuje celá řada. Jedním z nejpoužívanějších aplikačních serverů je JBoss aplikační server (JBossAS) a právě o něm je tento článek.

Jak získat JBossAS?

Aplikační server, stejně jako ostatní JBoss projekty, je open source. Můžete si proto snadno stáhnout jeho zdrojové kódy i binarní distribuci. V tomto článku budeme pracovat s verzí 5.0.0.Beta4 (z 10.2.2008). Kromě přímého stažení zip souboru, můžeme také získat aktuální zdrojové kódy z SVN repozitáře. Například takto:

$ svn co http://anonsvn.jboss.org/repos/jbossas/trunk

Rozdíl mezi zip souborem a SVN repozitářem je kromě aktuálnosti zdrojových kódů ještě jeden. Aplikační server závisí na celé řadě komponent třetích stran. Jedná se o různé knihovny jako Apache Logging, JFreeChart, XmlUnit a další. Archív se zdrojovými kódy tyto komponenty přímo obsahuje. Při zahájení kompilace se nejdříve ověřuje dostupnost aktuálních verzí těchto komponent. Pokud získáte verzi z SVN, budou se všechny tyto komponenty teprve stahovat. Jinak se budou stahovat pouze aktuálnější verze.

Kompilace ze zdrojových kódů

Pokud chcete pracovat přímo s binární distribucí, můžete celou část o kompilaci přeskočit.

Pro sestavení binární distribuce potřebujeme pouze jedinou věc – správně nainstalovaný Java Development Kit (JDK) verze 5 a vyšší. Po instalaci bychom měli mít nastaveny správně dvě proměnná prostředí:

  • PATH  – tato proměnná by měla spolu s jinými cestami obsahovat i cestu ke spustitelným souborům jako javajavac
  • JAVA_HOME  – zde by měla být cesta k instalaci Javy

Správnost instalace můžeme ověřit příkazem java -version.

K úspěšné kompilaci je potřeba ještě ještě program Ant (obdoba make). Ten je jako nástroj součástí zdrojových kódů. Nyní můžete přejít do adresáře, kam jste rozbalili/stáhnuli zdrojové kódy. Přepněte se ještě do adresáře build a spusťte build.sh, případně build.bat.

Pokud vše proběhlo hladce, měli byste nyní mít v adresáři build/output výslednou binární distribuci.

Ověření distribuce – test suite

Známé rčení říká: důvěřuj, ale prověřuj. Navíc by bylo asi poměrně těžké udržovat tak rozsáhlý projekt, jako aplikační server (AS), bez pořádných unit testů. Pokud máte AS i se zdrojovými kódy, naleznete testy v adresáři testsuite. Testy se zkompilují spuštěním build.sh nebo build.bat. Všechny testy se spustí příkazem

$ ./build.sh tests

případně

build.bat tests

Některé testy jsou clusterové a potřebují spustit souběžně dvě instance aplikačního serveru. Aby nedocházelo ke kolizím na síťových portech, používají se dvě rozdílné síťové adresy – localhost (127.0.0.1) a skutečná síťová adresa počítače. Pro změnu tohoto výchozího chování je potřeba vytvořit soubor testsuite/local.properties se seznamem adres, například:

node0=127.0.0.1
node1=192.168.1.1

Je běžné, že všechny testy neprojdou úspěšně, pokud nemáte počítačovou platformu, na kterou je AS certifikován. Pro Beta verzi AS to platí dvojnásob, protože vše ještě nemusí být doladěné do ideálního stavu. Současná verze 5.0.0.Beta4 má například ještě problémy s JCA modulem.

Některé jiné chyby je možné opravit vhodným nastavením počítače, operačního systému nebo samotných testů. To ale není tématem dnešního dílu. Užitečná je ještě možnost spouštět jednotlivé testy individuálně:

$ ./build.sh one-test -Dtest=<název třídy s testy>

V tomto případě ale nedochází k automatickému spouštění a ukončování AS a je potřeba jej ve správné konfiguraci nastartovat manuálně (viz další část).

Testy zde nejsou zmíněny jen tak samoúčelně. Prověřují totiž velkou část funkcionality AS. Můžete v nich tudíž najít mnoho užitečných příkladů použití různých komponent a použít je jako odrazový můstek pro vaše vlastní aplikace.

Podrobnější informace o soustavě testů naleznete na JBoss Wiki.

Používání AS

Jak již bylo zmíněno, naleznete výsledek kompilačního procesu v adresáří build/output. Odtud můžete AS kamkoliv okopírovat nebo přesunout. Je to vše, co potřebujete pro správné fungování serveru. Veškeré další příklady budou mít adresářovou strukturu vztaženou právě k binární distribuci – v našem případě tedy k build/output/jboss-5.0.0.Beta4.

AS můžete snadno nastartovat, pokud se přesunete do adresáře bin a spustíte run.sh, případně  run.bat.

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /home/mvecera/jboss-5.0.0.Beta4

  JAVA: /usr/lib/jvm/java-1.5.0-sun/bin/java

  JAVA_OPTS: -Dprogram.name=run.sh -server -Xms128m -Xmx512m
             -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true
             -Dsun.rmi.dgc.client.gcInterval=3600000
             -Dsun.rmi.dgc.server.gcInterval=3600000
-Djava.net.preferIPv4Stack=true

  CLASSPATH: /home/mvecera/jboss-5.0.0.Beta4/bin/run.jar:/lib/tools.jar

=========================================================================

16:08:36,309 INFO  [ServerImpl] Starting JBoss (Microcontainer)...
16:08:36,310 INFO  [ServerImpl] Release ID: JBoss [Morpheus] 5.0.0.Beta4
(build: SVNTag=JBoss_5_0_0_Beta4 date=200802121052)
16:08:36,311 INFO  [ServerImpl] Home Dir: /home/mvecera/jboss-5.0.0.Beta4
16:08:36,311 INFO  [ServerImpl] Home URL: file:/home/mvecera/
jboss-5.0.0.Beta4/
16:08:36,311 INFO  [ServerImpl] Library URL: file:/home/mvecera/
jboss-5.0.0.Beta4/lib/
...
16:09:32,684 INFO  [ServerImpl] JBoss (Microcontainer) [5.0.0.Beta4 (build:
SVNTag=JBoss_5_0_0_Beta4 date=200802121052)] Started in 56s:369ms

Nezkrácený výpis je poměrně dlouhý. Pro nás je důležitý poslední řádek, který říká, že server kompletně nastartoval a je připraven k použití. To je možné ověřit v prohlížeči na portu 8080 vašeho stroje – např. http://localhos­t:8080/.

JBoss main

Od verze 5 je JBoss AS postaven na JBoss Microcontaineru (MC). Ten plní funkci jádra (podobně jako v operačním systému) do kterého se registrují veškeré poskytované služby. Služby, které mají být přístupné vně AS, se registrují v podobě tzv. managed beans (MBeans). Úkolem MC je tyto služby spravovat a řídit jejich běh. Jako služba se do AS zaregistruje de facto veškerá jeho funkcionalita – web server, datová persistence, zasílání zpráv… MC také implementujeJava Management Extension (JMX), které umožňuje pohodlnou správu všech zaregistrovaných služeb za běhu serveru.

Veškeré MBeans je možné spravovat přes webové rozhraní. Na hlavní stránce vašeho nastartovaného serveru (http://local­host:8080/) klikněte na JMX Console. Zobrazí se seznam s kategoriemi a všemi zaregistrovanými MBeans. Zkuste nyní zadat do ObjectName Filter text jboss.system a kliknout na Apply Filter. Váš filtr byl automaticky upraven na jboss.system:* a vidíte pouze příslušnou kategorii.

JBoss filter

Kliknete-li nyní na libovolnou MBean, zobrazí se vám její atributy a metody (s možností jejich spuštění). Na obrázku je příklad MBean type=ServerInfo.

JBoss mbean

Základní adresářovou strukturu a význam jednotlivých adresářů v binární distribuci AS ukazuje následující tabulka. Vzhledem ke svojí architektuře, je AS velmi snadno konfigurovatelný. Aby nebylo nutné vždy stávající konfiguraci měnit, je možné mít na disku uložen libovolný počet konfigurací a při startu serveru specifikovat tu, která se má použít. Jednotlivé konfigurace jsou uloženy v adresáři server a výběr konfigurace se provádí parametrem -c, například takto: ./run.sh -c all. Výchozí konfigurace (v případě, že žádnou neurčíte) se jmenuje default.

bin
Spustitelné soubory serveru. Zejména run.sh a shutdown.sh (eventuálně  *.bat).
client
Knihovny pro použití v klientských aplikacích.
docs
Dokumentace.
lib
Sdílené knihovny používané všemi konfiguracemi serveru.
server
Jednotlivé konfigurace serveru. Po spuštění testů jich zde může být více než standardní tři.
server/all
Obsahuje vše dostupné v AS.
server/default
Základní JEE konfigurace. Neobsahuje věci jako IIOP, JAXR, clustering… Pokud nevíte, co jednotlivé zkratky znamenají, patrně tyto služby ani potřebovat nebudete.
server/minimal
Minimální konfigurace. K dispozici je jen jádro, logování, JNDI a spouštění (deployment) služeb.
server/*/conf
Obsahuje jboss-service.xml  – definice základních služeb, které jsou fixní po celou dobu běhu serveru. Jsou zde také konfigurační soubory těchto služeb (např. Log4j).
server/*/data
Prostor pro služby, které během svého běhu potřebují ukládat data do souborového systému. Obsah souborů přežije restart serveru.
server//deploy
Stěžejní adresář celé konfigurace. Je určen pro služby, které mohou být přidány a odebrány kdykoliv během běhu serveru (tzv. hot-deployment). Obsahuje také uživatelské aplikace. Adresář je pravidelně monitorován a v případě aktualizace dojde ke znovu vystavení služby či aplikace.
server//deployers
Adresář pro služby, které mohou do serveru registrovat další služby v nestandardním formátu z adresáře server/*/deploy. Takovou službou je například EJB3 deployer.
server/*/lib
Knihovny potřebné pro běh dané konfigurace. Např. databázový (JDBC) ovladač.
server/*/log
Výstup logovacího nástroje (Log4j). Konfiguraci je možné změnit v souboru  server/*/conf/jboss-log4j.xml.
server/*/tmp
Dočasné soubory služeb. Při vystavení aplikace v archívu (WAR, EAR) dojde například k jejímu rozbalení do tohoto adresáře.
server/*/work
Webový server používá tento adresář pro zkompilované JSP soubory.

Bylo uvedeno, že služby mají k dispozici adresář pro ukládání dat. Nabízí se otázka, jestli si služby skutečně musí veškerá svá data samy organizovat v nějakém externím souboru. To samozřejmě nemusí a ani to není možné. AS pro svůj běh potřebuje databázový server. Standardně se používá databáze Hypersonic SQL (někdy také HSQLDB), která je kompletně napsaná v Javě. Tato databáze díky svým omezeným možnostem (jako nepodpora transakční izolovanosti) nemůže a ani nemá sloužit jako produkční. V dalším díle seriálu naleznete informace, jak tuto databázi „vyměnit“ za jinou (např. PostgreSQL). Pro účely našeho testování však naprosto postačuje.

Pro zajímavost se můžeme podívat, co si služby do této databáze ukládají. Použijeme k tomu další nástroj, který je standardně v AS obsažen. Jedná se o JBoss Web Console a odkaz nalezneme na hlavní stránce naší běžící instance (http://local­host:8080/). Web Console je v podstatě vylepšená JMX Console, kterou jsme před chvílí viděli. Do běžné konzole přidává applet pro lepší organizaci služeb. Nabízí tak vyšší úroveň pohledu na to, co se v serveru ukrývá. Po otevření Web Console rozbalte postupně System, JMX MBeans, jbossa vyberte jboss:service=Hy­personic,data­base=localDB.

JBoss web

V pravé části okna se zobrazí standardní výpis informací o příslušné MBean. Najděte operaci startDatabase­Manager a klikněte na Invoke. Pokud má AS možnost pracovat s grafickým displayem, spustí se HSQL Database Manager. V něm si můžete prohlížet data, která AS uchovává. Umožňuje také spouštění libovolných SQL dotazů.

ict ve školství 24

JBoss hsqldb

Pokud jste si vyzkoušeli vše, co jste chtěli, zbývá poslední úkol – zastavit AS. To je možné několika různými způsoby, například:

  1. stiskem Ctrl+C v konzoli, kde jsme server spustili
  2. skriptem shutdown.sh (příp. shutdown.bat)
  3. v JMX nebo Web konzoli spuštěním operace shutdown na MBean jboss.system:ty­pe=Server

Závěr

Představili jsme si jeden z hojně používaných open source aplikačních serverů současnosti JBoss AS. Je nesnadný úkol popsat v jednom díle seriálu tak složitý projekt vyčerpávajícím způsobem. Proto se k němu ještě příště vrátíme a podíváme se, jak konfigurovat jednotlivé služby. Zmíníme praxí často vyžadované možnosti nastavení a jejich realizaci. Proto si na disku ponechejte zkompilovanou verzi aplikační serveru – bude se ještě hodit!

Autor článku