Tomcat: Difference between revisions
Line 271: | Line 271: | ||
Seni on tundunud Tomcati kasutus läbi IDE mugav, kuid probleemide tekkimisel olen hätta jäänud. Kuna tegemist on siiski Java ärirakendusi toetava veebikonteineriga, mis pakub muu hulgas JNDI-nimeteenust ja andmebaasiühenduste haldamist, siis pole selle ülesehitus sugugi lihtne. Siiski aitab algtõdede teadmine ka lihtsamini lahendada tekkivaid probleeme läbi IDE kasutades. | Seni on tundunud Tomcati kasutus läbi IDE mugav, kuid probleemide tekkimisel olen hätta jäänud. Kuna tegemist on siiski Java ärirakendusi toetava veebikonteineriga, mis pakub muu hulgas JNDI-nimeteenust ja andmebaasiühenduste haldamist, siis pole selle ülesehitus sugugi lihtne. Siiski aitab algtõdede teadmine ka lihtsamini lahendada tekkivaid probleeme läbi IDE kasutades. | ||
=Viiteid= | |||
Palju vajalikku võib leida [http://tomcat.apache.org/tomcat-8.0-doc/index.html Tomcat 8 dokumentatsioonist] | Palju vajalikku võib leida [http://tomcat.apache.org/tomcat-8.0-doc/index.html Tomcat 8 dokumentatsioonist] |
Revision as of 00:44, 3 January 2014
Autor
Kristjan Veskimäe D32
2013
Sissejuhatus
Tomcat on vabalt kättesaadav server Java veebirakendustele. Põhimõtteliselt on tegemist Servlet/JSP spetsifikatsiooni toetava konteineriga. Kiire käivitumise ning rakenduste käigultvahetuse tõttu on Tomcat hea valik väiksemate ning keskmise suurusega Java veebirakenduste käitamiseks.
Antud töö kirjeldab Tomcati 8. versiooni. Põhiosa on üldiselt samasugune võrreldes paari eelmise versiooniga. Suuremad erinevused on versioonispetsiifilistes probleemides ja nende lahendamises, mida käesolev töö ei vaatle.
Töö vaatleb Tomcati paigaldamist ja seadistamist Unix-laadsesse keskkonda ning eeldab lugejalt algteadmisi sarnastes süsteemides. Tomcati on võimalik paigaldada ka Windows-keskkonda, kuid antud veebiserver eeldab kasutaja poolt käsureal töötamist ning Tomcati failihierarhias orienteerumist. Põhimõtteliselt on Java veebirakenduste arendamiseks IDE-abil võimalik siiski ka kasutada IDE-sse integreeritud Tomcati serverit - näiteks pakuvad sellist võimalust Eclipse EE ja NetBeans - kuid seda käesolev töö ei vaatle.
Mõisted
- Kontekst (context) - Tomcati mõistes üks konkreetne veebiaplikatsioon
- Konteiner (container) - veebiserver Tomcat ise
- Kontekstikirjeldus (context descriptor) - Tomcati-spetsiifiline konteksti konfiguratsioonimääratlus; peremehepõhine osa loetakse failist $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml ja sellele lisatakse kontekstispetsiifilised täpsustused failist $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml; kontekstikirjeldus määrab näiteks nimed ressurssidele, sessioonihalduse parameetrid jmt. (olgu märgitud, et Tomcati varasemates versioonides sisaldusid kontekstikirjeldused põhikonfiguratsioonifailis server.xml)
- Dokumendipõhi (docBase) - kontekstile vastav kataloog Tomcati "webapps" kataloogis, mis tekib veebiaplikatsiooni serverisse rakendamisel
- Veebiarhiiv (Web application ARchive, war-file) - Java veebiaplikatsiooni jagatakse hea tava kohaselt selle üheainsa veebiarhiivi failina, mille laienditüübiks on "war". Tegemist on zip-protokolliga kokkupakitud kataloogiga, millel on Java veebirakenduste spetsifikatsioonile vastav ülesehitus. Siiski võib veebiaplikatsioon olla juurutamisel ka lahtipakendatud olekus (inglisekeelne termin on "war is exploded").
Ülesehitus
$CATALINA_HOME | baaskataloog, kuhu on Tomcat paigutatud |
$CATALINA_BASE | parasjagu töösoleva Tomcati eksemplari baaskataloog, mille alusel lahendatakse teed ülejäänud kataloogide ja failideni; ainult ühe kasutusel oleva Tomcati eksemplari puhul on see sama, mis $CATALINA_HOME |
$CATALINA_BASE/bin | serveri käivitus- ja abiskriptid |
$CATALINA_BASE/conf | konfiguratsioonifailid |
$CATALINA_BASE/lib | Tomcatile vaikimisi kättesaadavad Java klassiteegid (class libraries) ehk .jar-failid kuhu on Java kompileeritud kood kokku pakendatud |
$CATALINA_BASE/logs | logifailid paigutatakse vaikimisi siia |
$CATALINA_BASE/webapps | kataloog, kuhu paigutatakse serverisse juurutatavad veebiaplikatsioonid |
$CATALINA_BASE/bin/startup.sh | serveri käivitusskript |
$CATALINA_BASE/bin/shutdown.sh | serveri peatusskript |
$CATALINA_BASE/conf/server.xml | konteineri peamine konfiguratsioonifail |
$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml | serveri administraatori jaoks konteinerisse endasse ümber kopeeritud rakendusepõhine kontekstikirjelduse konfiguratsioon failist $CATALINA_BASE/webapps/[ApplicationName]/META-INF/context.xml |
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml | fail, mis aitab administraatoril konteksti kohta käivat infot kirjeldada peremeesmasina-põhiselt ja halduseks mõeldud automaat-tööriistadel (näiteks Tomcat Manager ja TCD) oma tööd teha |
$CATALINA_BASE/$CATALINA_BASE/conf/[enginename]/[hostname]/manager.xml | fail, mis võimaldab lisada rakendustele ligipääsufiltreid |
$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml | kontekstikirjeldusfail, mille veebirakenduse programmeerija on pakendanud oma aplikatsiooniga kaasa ning millega ta saab võimaluse kontekstikirjeldust omalt poolt mõjutada; kirjutatakse rakenduse uuestijuurutamisel üle, mistõttu administraator peaks muutma selle asemel konteinerisse ümber kopeeritud püsieksemplari $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml |
$CATALINA_BASE/webapps/[webappname]/WEB-INF/web.xml | ka üks oluline Java veebiaplikatsiooni konfiguratsioonifail, mille pakendatakse koos veebiarhiiviga; enamasti muudab seda ainult programeerija; määrab muu hulgas millised aplikatsiooni osad vajavad autentimist või kui kiiresti veebisessioon aegub |
Installeerimine
Installeerimine paketihalduriga
apt-cache search tomcat apt-get install tomcat[version]-webapps apt-get install tomcat[version]-admin apt-get install tomcat[version]
Installeerimine käsitsi
Paketihalduriga installeerides ei pruugi viimane Tomcati versioon olla kättesaadav ja see pakub ka vähem võimalusi kataloogide määramiseks jms. Käsitsi installeerimiseks tuleb laadida Tomcat kodulehelt alla. Lahtipakkimisel tekib kataloog, milles sisalduv fail "RUNNING.txt" on kõige kindlam allikas installeerimisel tekkivate probleemide vältimiseks ning lahendamiseks.
Vajaliku versiooni installeerimisfaili asukoha saab vaadata Tomcati kodulehelt sektsioonist "Download". Järgnevas näites installeerime Tomcati kõige uuema ebastabiilse kandidaatversiooni, mida näitab nimes sisalduv RC ehk "release candidate". Produktsioonikeskkonda tuleks siiski valida stabiilse versiooni. Käsitsi installeerimine on sarnane järgmisega:
wget http://mirror.nexcess.net/apache/tomcat/tomcat-8/v8.0.0-RC5/bin/apache-tomcat-8.0.0-RC5.tar.gz tar -zxvf apache-tomcat-8.0.0-RC5.tar.gz mv /Users/kristjanveskimae/downloads/apache-tomcat-8.0.0-RC5 /usr/local/apache-tomcat-8.0.0-RC5 rm -f /Library/Tomcat ln -s /usr/local/apache-tomcat-8.0.0-RC5/ /Library/Tomcat chown -R kristjanveskimae /Library/Tomcat chmod +x /Library/Tomcat/bin/*.sh
Käivitamine ja aplikatsiooni juurutamine
Konteineri käivitamine
Tomcati käivitamise eelduseks on Java paigaldamine masinasse ning keskkonnamuutujate "JAVA_HOME" ja "JRE_HOME" defineerimine. Peale installeerimist võib kasutada skripte kataloogist $CATALINA_BASE/bin . Järgneb üks võimalik käivitamise ja peatamise näide, mis on kasutatav eelnevalt kirjeldatud käsitsi installeerimise juhul:
/Library/Tomcat/bin/startup.sh
ja peatamiseks
/Library/Tomcat/bin/shutdown.sh
Näiteaplikatsiooni juurutamine
Java veebiaplikatsiooni jagatakse hea tava kohaselt üheainsa veebiarhiivi failina. Siiski võib Tomcati juurutada ka lahtipakendatud olekus ("exploded") Java veebiaplikatsiooni.
Käsitsi juurutamine ja mahavõtmine
Näiteaplikatsiooni juurutamiseks lae selle veebiarhiivifail alla ning kopeeri oma konteineri juurutamiskataloogi 'webapps':
wget http://tomcat.apache.org/tomcat-8.0-doc/appdev/sample/sample.war cp /Users/kristjanveskimae/downloads/sample.war /Library/Tomcat/webapps/sample.war
Kui konfiguratsioonifailis $CATALINA_BASE/conf/server.xml on märgendi "Host" atribuudi "autoDeploy" väärtus "true", installeerib ja uuendab Tomcat aplikatsioone dünaamiliselt töötamise ajal. Kui väärtuseks on "false", käib installeerimine staatiliselt ning serverisse juurutamiseks tuleb teha konteineri taaskäivitus. 1 Mõlemal juhul pakib konteiner arhiveeritud faili ise lahti samasse kausta $CATALINA_BASE/webapps ning ka juurutab selle. Tekkiv aplikatsioon on lokaalsest masinast seejärel kättesaadav aadressil http://localhost:8080/sample/ . Kui rakendamine õnnestub, siis peaks olema brauserist nähtav sarnane lehekülg nagu pildil 1.
Veebirakenduse käsitsi mahavõtmiseks tuleb kustutada talle vastav dokumendipõhja kataloog "webapps" kataloogist. Samuti tuleks kustutada .war-fail olemaks kindel, et Tomcat ei rakenda uuel käivitamisel veebiaplikatsiooni veebiarhiivifailist. Veelgi lihtsam on mahavõtmine brauseriga haldusrakenduse kaudu.
Rakenduste baaskataloogi "webapps" asukohta saab muuta failis $CATALINA_BASE/conf/server.xml peremehepõhiselt määratava atribuudiga "appBase", sealjuures Tomcati vaikimisi peremees ehk "Host" on "localhost".
Tomcati vahendid juurutamiseks
Veebiaplikatsioonide juurutamine ja mahajuurutamine on võimalik ka kaughalduse teel tänu Tomcati internetipõhisele haldusrakendusele. Näiteks saab veebibrauserit kasutades teha serveri põhitoiminguid Tomcati enda HTML-põhise rakendusega "Tomcat Manager". Veebipõhine haldusrakendus töötab ka käsupõhise veebiteenusena, millele on valmis ehitatud Anti ja Maveni integratsioonid. Samuti eksisteerib käsurea kliendirakendus TCD (Tomcat Client Deployer). TCD ei kuulu Tomcati baaskoosseisu, kuid pakub peale serveri administreerimise tavatoimingute ka lisafunktsionaalsust nagu veebirakenduse kokkukompileerimine ja pakendamine. 1
Haldurakendus "Tomcat Manager"
Tomcati haldusrakendus "Tomcat Manager" (antud alamjaotuses lihtsalt haldusrakendus) on Tomcati enda veebiaplikatioon Tomcati brauseripõhiseks kaughalduseks, võimaldades muu hulgas järgnevat 1:
- Rakendada uue veebiaplikatsiooni war-faili üleslaadimisega;
- Näha kõiki rakendatud veebiaplikatsioone koos aktiivsete sessioonidega;
- Taasrakendada veebirakendust, näiteks veebiarhiivi pakitud klassifailide /WEB-INF/classes või teekide /WEB-INF/lib uuendamisel, kinnijooksmisel jms.;
- Peatada veebirakendust ilma serverist eemaldamata, samuti koos serverist eemaldamisega;
- Vaadata operatsioonisüsteemi ja Java parameetrite väärtusi;
- Näha kõiki saadaolevaid JNDI ressursse, k.a. andmebaasiühendusi, mis aitavad rakenduste programmeerijail defineerida <ResourceLink> elemendid web.xml konfiguratsioonifailis.
Tomcati installatsioon sisaldab haldusrakendust juba vaikimisi. Haldusrakenduse töölepanemiseks tuleb peremeesmasina konfiguratsioonikataloogi $CATALINA_BASE/conf/[enginename]/[hostname] lisada ka fail manager.xml. Vaikimisi valmiskonfigureeritud testrakendusel on see fail juba olemas asukohas $CATALINA_BASE/conf/Catalina/localhost/manager.xml . Rakendus asub vaikimisi aadressil http://[host]/manager/ , vaikimisi konfiguratsioone kasutades lahendub see asukohaks http://localhost:8080/manager/ . 1
"Tomcat Manager" ligipääsu konfigureerimine
Vaikimisi on turvalisuspõhjustel ligipääs haldusrakendusele maha keeratud. Mismoodi täpselt kasutajatel ligipääsu võimaldada sõltub kasutatavast valdusest (realm). Vaikimisi defineerib $CATALINA_BASE/conf/server.xml valduseks "MemoryRealm". Vaikimisi loeb valdus "MemoryRealm" kasutajad failist $CATALINA_BASE/conf/tomcat-users.xml. Antud failis tuleb iga kasutaja defineerida omaette märgendiga <user>, mis näeb välja umbes järgmine 1:
<user name="craig" password="secret" roles="manager-gui,manager-script" />
Antud kasutajale on defineeritud korraga kaks rolli. Ligipääsu võimaldamiseks tulebki lihtsamal juhul kasutajatefailis $CATALINA_BASE/conf/tomcat-users.xml defineerida enda kasutaja. Kasutaja rolliks võib määrata näiteks "manager-gui", mis võimaldab ligipääsu kogu HTML liidese funktsionaalsusele.
Teised valdused on "JDBCRealm", mille puhul hoitakse kasutajatega seonduvat infot andmebaasis ja JNDIRealm, mille puhul kasutatakse lihtsustatud kataloogisirvimise protokolli (LDAP). Lisaks saab haldusrakendusele keelata ligipääsu mujalt kui kindlaksmääratud IP-aadressidelt, lisades filtri "RemoteAddrValve" või "RemoteHostValve" konfigureerimisfaili manager.xml näiteks järgmiselt 1:
<Context privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context>
Juurutamine ja mahavõtmine haldusrakendusega "Tomcat Manager"
Juurutamiseks lae kõigepealt veebiarhiivifail üles, kasutades esilehel asuvat sektsiooni "WAR file to deploy". Veebiarhiivi üleslaadimise liides on kujutatud plidil 2.
Rakendus kuvatakse seejärel hallatavate rakenduste nimekirjas. Kui konteiner pole seadistatud üleslaetud aplikatsiooni kohe ka ise rakendama, tuleb vajutada "Start". Rakenduse peatamiseks kasuta "Stop", uuesti rakendamiseks "Redeploy" ja serverist eemaldamiseks "Undeploy". Nupud on näha ka pildil 3 olevas rakenduste nimekirjas.
Näpunäiteid Tomcati reaalseks kasutamiseks
Juurutamise järjekord
Tomcati käivitumisel juurutatakse aplikatsioonid sellises järjekorras 2:
- Konteinerisse kopeeritud kontekstikirjelduste järgi $CATALINA_BASE/conf/[EngineName]/[HostName]/[ApplicationName].xml ;
- Lahtipakitud rakendused "webapps" kataloogis;
- Pakitud rakenduste veebiarhiivid "webapps" kataloogis.
Seetõttu peaks käsitsi taasjuurutamisel kindluse mõttes eelnevalt kustutama rakenduse lahtipakitud dokumendipõhja kataloogi "webapps" kataloogist. Kontekstikirjelduse muutumisel tuleb jälgida, kas kirjeldus on juba kopeeritud serverisse ning vajadusel eelmise versiooni ümber muuta või kustutada.
Reaalsele domeenile konfigureerimine
Järgnevalt eeldame, et domeen www.minukodukas.ee on juba serverimasinaga seostatud. Et Tomcat hakkaks ka reaalselt Internetist tulevatele päringutele vastama, tuleb muuta failis $CATALINA_BASE/conf/server.xml konteinerile Catalina vastava teenusemärgendi sisu sarnaselt järgnevaga:
<Service name="Catalina"> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> <Engine name="Catalina" defaultHost="www.minukodukas.ee"> <Host name="www.minukodukas.ee" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="kodukas" debug="0" reloadable="true" /> </Host> </Engine> </Service>
Ülal defineerime põhiliselt selle, et Tomcat kuulaks domeeni www.minukodukas.ee ja kasutaks HTTP päringute jaoks porti 80. Ühtlasti otsib Tomcat juurutatavat rakendust failist $CATALINA_BASE/webapps/kodukas.war. Kuna rajalisandiks on määratud tühi sõne (path=""), siis juurutataksegi aplikatsioon aadressile www.minukodukas.ee ilma rajalisandita (a'la www.minukodukas.ee/wiki). Seetõttu pakitakse ka veebiarhiiv tegelikult lahti kataloogi $CATALINA_BASE/webapps/ROOT mitte kataloogi $CATALINA_BASE/webapps/kodukas nagu võiks eeldada.
Käigultvahetus
Võimaldamaks käigultvahetust (hot deployment) peab konteineri konfiguratsioonifailis $CATALINA_BASE/conf/server.xml olema peremehepõhise märgendi "Host" atribuudi "autoDeploy" väärtus "true". Sel juhul installeerib ja uuendab Tomcat aplikatsioone dünaamiliselt töötamise ajal. Kui väärtuseks on "false", käib installeerimine staatiliselt ning serverisse juurutamiseks tuleb teha konteineri taaskäivitus. Käigultvahetust saab määrata ka peremehe defineerimisel "Host Manager" rakendusega, mis on kättesaadav aadressil http://localhost:8080/host-manager/html . Kasutamiseks tuleb lisada oma kasutajale rolli "admin-gui" (vt. alajaotus ""Tomcat Manager" ligipääsu konfigureerimine"). Antud rakenduse veebiliides on kujutatud joonisel 4.
Käigultvahetust päästikuks on vaikimisi uuendatud veebiarhiivifaili või lahtipakitud veebirakenduse paigutamine "webapps" kataloogi. Käigultvahetuse päästikutele võib failis $CATALINA_BASE/conf/server.xml ka ise lisada kuulatavaid ressursse nagu web.xml muutmine või mõne teegifaili vahetamine (märgendis "Host").
Klassiteekide väljatõstmine veebiarhiivifailist
Kõik konteksti poolt kasutatavad Java klassiteegid võib pakendada veebiarhiivi sisse kataloogi "lib", kuid nii võib osutuda veebiarhiivi üleslaadimine ajakulukaks, eriti arenduskeskkonnas. Kui ei teki ohtu, et erinevad rakendused kasutavad sama teegi erinevaid versioone, siis on vahel parem lisada osa teeke konteineri kataloogi $CATALINA_BASE/libs, kust need tehakse siis konteineri poolt kättesaadavaks kõigile konteineris jooksutatavatele kontekstidele. Nii võib vähendada veebiarhiivi faili suurust märgatavalt, mis tõstab kokkuvõttes juurutamiskiirust ja ühes sellega programmeerijate tööviljakust.
Mälukasutus
Konteineri poolt kasutatavat mälu saab vaadata haldusrakendusest vajutades lingile "Server Status". Mälukasutus on toodud jaotuses "JVM", kus näidatakse nii maksimaalselt kättesaadavat mälu kui ka parasjagu reserveeritud mälu.
Free memory: 41.16 MB Total memory: 123.37 MB Max memory: 1027.56 MB
Mälu suurendamiseks võib näiteks defineerida skriptis $CATALINA_BASE/bin/catalina.sh muutuja "JAVA_OPTS" ning määrata Java mälukasutuse miinimum- ja maksimumväärtused sarnaselt järgnevatega 3:
JAVA_OPTS="-Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m"
Logifailid
Vaikimisi defineerib Tomcat failiga $CATALINA_BASE/conf/logging.properties viis logerit, mis tekitavad viis eraldi logifaili.
Fail | Kasutus |
---|---|
catalina.out | Tomcati käivitus- ja peatamisskriptide väljund, samuti juurutatud rakenduste prindilaused System.out ja veaväljundid System.err |
catalina.[yyyy]-[mm]-[dd].log | Pööratud (rotated) logifail catalina.out |
host-manager.[yyyy]-[mm]-[dd].log | Logi peremehehalduse rakendusele (rakendus on kättesaadav kohalikust masinast aadressil http://localhost:8080/host-manager/html ) |
localhost.[yyyy]-[mm]-[dd].log | Peremehe "localhost" logi; mitme virtuaalse peremehe korral tekitatakse igale peremehele oma logi |
localhost_access_log.[yyyy]-[mm]-[dd].txt | Konteinerisse Internetist saabunud päringute logi |
manager.[yyyy]-[mm]-[dd].log | Haldusrakenduse tegevuste logi |
Kokkuvõte
Antud juhend aitab Unix-keskkonnas (ja operatsioonisüsteemi administreerimise algteadmiste olemasolul) Tomcati installeerida, käivitada ja juurutada Tomcatile ka Java näite veebiaplikatsioon. Lisaks on ära toodud ka mõned esmased näpunäited Tomcati kasutamiseks reaalse veebiserverina. Loodetavasti aitab juhend lugeja esmasel kokkupuutel Tomcatiga tekkivatest probleemidest jagu saada ja süveneda iseseisvalt veebiserveri Tomcat põhjalikumasse uurimisse.
Autori märkused
Tööl pole ma kahjuks Tomcati reaalselt kasutada saanud. Kuigi olen tegelenud Java ärirakendustega, on IT-juhtimise poolel seni otsustatud JBoss või Jetty kasuks. Siiski olen oma huviprojekte arendades või Java veebirakenduste tegemist õppides valinud just Tomcati. Seda eelkõige hea integreerituse tõttu IDE-dega. Tomcat töötab näiteks kohe koos NetBeansi installeerimisega, samuti pole kuigi keeruline tööle panna koos Java EE versiooniga Eclipse-ist. Tean ka vähemalt üht Eesti ettevõttet, mis kasutabki Tomcati reaalseks äriteenuste pakkumiseks.
Seni on tundunud Tomcati kasutus läbi IDE mugav, kuid probleemide tekkimisel olen hätta jäänud. Kuna tegemist on siiski Java ärirakendusi toetava veebikonteineriga, mis pakub muu hulgas JNDI-nimeteenust ja andmebaasiühenduste haldamist, siis pole selle ülesehitus sugugi lihtne. Siiski aitab algtõdede teadmine ka lihtsamini lahendada tekkivaid probleeme läbi IDE kasutades.
Viiteid
Palju vajalikku võib leida Tomcat 8 dokumentatsioonist
Lisaks üks viide põhjalikule Tomcati versioon seitsme ülevaatele: http://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_More.html