Arkiv för 'Webbutveckling'
Stoppa Tomcat ”med våld”
Postat av Ulf den 18 januari, 2010, i Java, Linux, Tomcat, Webbutveckling.
Ibland hänger sig Tomcat, och hur man än försöker går den inte att stanna. Med kommandot
ps -ef | grep "tomcat"
kan man se om det finns någon Tomcat-process kvar efter det att man försökt stoppa servern. Skulle så vara fallet, kan man med kommandot
kill -9 tomcat
stoppa Tomcat med våld.
Dynamiskt deployment med Ant på Tomcat
Postat av Ulf den 21 april, 2009, i Java, Tomcat, Webbutveckling.
Det finns en mycket smidig möjlighet att via Ant installera och ladda om Java-webbapplikationer på Tomcat. Man definerar helt enkelt Ant-targets som installerar webbaplikationen via Tomcats manager.
Konfigurera Ant
För att detta skall fungera måste man
1. först kopiera filen catalina-ant.jar från Tomcats lib-katalog till Ants lib-katalog
2. definera en manager-användare Ant kan använda sig av i Tomcats användarfil /conf/tomcat-users.xml, till exempel så här:
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <user username="ant" password="ant_password" roles="manager"/> </tomcat-users>
3. lägga till nya targets i Ants build.xml, till exempel så här:
<!-- Konfigurera build-katalogen -->
<property name="build" value="${build.dir}"/>
<!-- Konfigurera sökvägen för applikationen (context path) -->
<property name="path" value="/myContextPath"/>
<!-- Konfigurera access till Tomcats manager -->
<property name="url" value="http://localhost:8080/manager"/>
<property name="username" value="ant"/>
<property name="password" value="ant_password"/>
<!-- Konfigurera de tasks som man vill köra mot managern -->
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"/>
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
<taskdef name="remove" classname="org.apache.catalina.ant.RemoveTask"/>
<!-- Konfigurera targets. -->
<!-- Detta exempel förusätter att det finns ett target "war" som bygger den war-fil som skall deployas-->
<target name="deploy" description="Install web application"
depends="war">
<deploy url="${url}" username="${username}" password="${password}"
path="${path}" war="file:${build}${war}"/>
</target>
<target name="reload" description="Reload web application"
depends="war">
<reload url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
<target name="undeploy" description="Remove web application">
<undeploy url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
<target name="remove" description="Remove web application">
<undeploy url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
Därefter skall det gå att via
ant deploy
bygga applikationen och installera den på Tomcat, utan att behöva starta om servern.
Problem 1: Låsta JARs
Ett problem jag stötte på var att vid ett
ant undeploy
blev en del jar-filer hängande kvar i applikationens lib-katalog. Tomcat låser dessa när applikationen exekveras, och tas därför inte bort vid ett undeploy. ant deploy misslyckas med följande felmeddelande:
[deploy] FAIL - Application already exists at path /myContextPath
Man måste därför tala om för Tomcat att inga filer får låsas. Detta görs genom att man i katalogen META-INF (ligger i samma katalog som WEB-INF) lägger till en fil context.xml med följande innehåll:
<Context antiJARLocking="true" antiResourceLocking="true"> </Context>
En nackdel med det här är att Tomcat sedan inte märker när en fil uppdateras, och laddar den dynamsikt på nytt. Gör inget i en produktionsomgivning, men stör under utvecklingen.
Problem 2: ClassCastException
Ett annat problem jag stötte på vid
ant reload
var att applikationen inte kunde startas på grund av en ClassCastException:
Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
Jag hade Xerces som bibliotek i min applikation. Helt i onödan, visade det sig, jag kunde ta bort det utan att det uppstod några kompilerings- eller runtime-fel. Tydligen krockar Xerces med Tomcats egen XML-parser. Lite lustigt, då jag i Tomcats bibliotek inte kunde hitta någon Xerces. Men efter det att jag tagit bort Xerces och gjort en ant undeploy och en ant deploy funkade allt som det skulle.
Installera och konfigurera Subversion
Postat av Ulf den 3 april, 2009, i Linux, Webbutveckling.
Installation
Att installera Subversion på en linuxmaskin var lättare än jag trott. På min virtuella maskin i Tyskland finns ett OpenSuse 10.1, så med ett enkelt
yast2 --install subversion
laddades Subversion ner och installerades lokalt. Verkligen praktiskt med dessa bibliotek med open-source-program, en stor fördel jämtemot Windows och Mac, där man måste söka på nätet och ladda ner manuellt för att få det man behöver.
Skapa kataloger och repository
Följde därfter instruktionerna på denna sida: How to Setup Subversion
och skapade först katalogen
mkdir /home/svn/
och en svn-användare
useradd svn
passw svn
För att svn-användaren skall kunna ta sig in i den nya katalogen måste man ändra rättigheterna på den:
cd /home chmod 777 svn
Något som jag som linux-newbie inte är helt förtrodd med, på windows brukar man inte behöva vara så petnoga. Men på en server är det säkert vettigt att hantera rättigheterna så detaljerat.
Bytte därefter användare och gick skapade nödvändiga kataloger:
su svn
cd /home/svn
mkdir repositories
cd repositories
Skapade ett nytt repository kallat myrepos
svnadmin create myrepos
Bara användaren svn skall kunna skriva i repositoryt:
chmod 700 myrepos
Starta Subversion-servern:
svnserve −−daemon −−root /home/svn/repositories
Konfiguration
Gå ner i konfigurationskatalogen:
cd myrepos/conf
Editera konfigurationsfilen:
vi synserve.conf
Texteditorn vi är inte direkt intuitiv i användningen, men man flyttar markören till rätt ställe i texten, och trycker ”i” för att växla till editeringsmodus. Under rubriken [general] ändrar man följande:
Tillåt ingen anonym access:
anon-access = none
Tillåt autoriserad write-access:
auth-access = write
Avkommentera denna rad för att använda standard-lösenordsfil:
password-db = passwd
Tryck <esc> i vi för att lämna editeringsmodus, och skriv in
:wq
för att spara och stänga filen.
Lägg därefter till passande användare genom att editera filen passwd:
vi passwd
Skriv varje användare på en ny rad, enligt schemat
username = password
Arbeta med Subversion
Därefter är det bara att checka ut ett repository lokalt. Antag att man vill checka ut koden i en katalog ”work”:
svn checkout −−username ditt_namn svn://localhost/myrepos work
Ett mera konfortabelt sätt är att använda an lokal klient, som hanterar in- och utcheckning utan att varje gång behöva ange användarnamn och sökväg. TortoiseSVN är en klient för Windows, som integrerar sig med Windows Explorers kontextmeny, dvs man checkar in och ut genom att högerklicka på kataloger och filer i Explorern. Mycket konfortabelt och stabilt.
Arbetar man med Eclipse så är Subclipse ett bra plugin för att kunna checka in och ut utan att behöva lämna Eclipse. Fungerar lika bra som den äldre CVS-integrationen.