<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>perished.de &#187; Development</title>
	<atom:link href="http://perished.de/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://perished.de</link>
	<description>perished but still open minded</description>
	<lastBuildDate>Sat, 16 Jul 2011 19:37:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>70% aller laufenden Business Applikationen laufen mit COBOL</title>
		<link>http://perished.de/2011/06/07/70-aller-laufenden-business-applikationen-laufen-mit-cobol/</link>
		<comments>http://perished.de/2011/06/07/70-aller-laufenden-business-applikationen-laufen-mit-cobol/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 13:33:19 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[Gerüchte]]></category>
		<category><![CDATA[Programmiersprachen]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=1571</guid>
		<description><![CDATA[Seit einiger Zeit höre ich immer wieder das Gerücht: &#8220;70% aller weltweit laufenden Business Applikationen laufen mit COBOL&#8220;. Weil dieses Blabla in meinen Augen totaler Quatsch ist und ich es langsam leid bin so einen Blödsinn zu hören, will ich mal hier auf die Facts of Reality hinweisen: 1. &#8220;70 percent of the world&#8217;s active [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit höre ich immer wieder das Gerücht: &#8220;70% aller weltweit laufenden Business Applikationen laufen mit <a href="http://www.cobolstandards.com">COBOL</a>&#8220;. Weil dieses Blabla in meinen Augen totaler Quatsch ist und ich es langsam leid bin so einen Blödsinn zu hören, will ich mal hier auf die Facts of Reality hinweisen:</p>
<p><strong>1. &#8220;70 percent of the world&#8217;s active business applications are written in COBOL&#8221;</strong><br />
Das scheint mir der Ursprung allen Übels zu sein. Dieses Gerücht kann auf eine Untersuchung der <a href="http://www.gartner.com">Gartner Group</a> zurück geführt werden. Und das nicht gestern sondern im Jahre 2000. Was ein deutliches Zeichen für die Aktualität dieser Behauptung ist. Der Käse wurde vor über 10 Jahren mal gesagt und dann im Internet in die Zukunft gewatscht. Die 70% wurden im Jahre 2000 übrigens an den &#8220;lines of code&#8221; festgemacht. Was auch hirnrissig ist und womit wir beim nächsten Punkt sind.</p>
<p><strong>2. lines of code</strong><br />
Die Einsatzhäufigkeit einer Programmiersprache wird hin und wieder anhand der aktuell weltweit produktiv laufenden lines of code gemessen. Auch das ist wieder totaler Quatsch. Und natürlich liegt COBOL da richtig weit vorne. Eine nicht-objektorientierte Programmiersprache die fast ausschließlich nur aus dem Befehl MOVE besteht, braucht schon mal ein paar tausend Zeilen um die Fibonacci-Zahlen auszugeben. Das COBOL mit seinen Billionen von produktiven Source-Zeilen beim Zählen der Zeilen einen Blumentopf gewinnt, scheint mir wenig verwunderlich. Es ist jedoch nicht immer so, dass der der viel tut viel Sinnvolles tut.</p>
<p><strong>3. TIOBE Index</strong><br />
Im <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE programming community index</a> hat COBOL sich inzwischen auf Platz 41 runter gekämpft. Dieser Index ist eine sortierte Liste der Programmiersprachen und wird aus der Frequenz der Suchanfragen mit dem Namen der Programmiersprache als Keyword zusammen gesetzt. Dafür werden zahlreiche große Suchmaschinen verwendet. Man kann das Ergebnis als eine Liste der Aktivität der Programmiersprachen werten. Und COBOL erreicht dabei gerade mal 0,331 %. Da auch produktiv laufende Anwendungen ein gewisses Volumen an Wartung benötigen und dabei ein Entwickler zur Arbeit geknechtet wird, scheint es auch hier wieder so als sei kaum eine produktive Anwendung in COBOL geschrieben, denn schließlich benutzt heute jeder eine Suchmaschine.</p>
<p><strong>Butter bei die Fische:</strong></p>
<h1><center>TOTALER UNFUG!</center></h1>
<p>COBOL, ist weiter weg von produktiv, als mindestens 40 andere Programmiersprachen auf der Welt. Und wenn es noch Unternehmen gibt, die COBOL produktiv einsetzen ohne einen Gedanken an eine Neuentwicklung ihrer Applikationen zu verschwenden, dann sind diese Unternehmen schon pleite und wissen es noch nicht und in meinen Augen maximal bemitleidenswert.</p>
<p>So&#8230; Tacheles Ende&#8230; <img src='http://perished.de/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2011/06/07/70-aller-laufenden-business-applikationen-laufen-mit-cobol/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Anti-Patterns: Werfen und Fangen von java.lang.Exception</title>
		<link>http://perished.de/2010/02/02/anti-patterns-werfen-und-fangen-von-java-lang-exception/</link>
		<comments>http://perished.de/2010/02/02/anti-patterns-werfen-und-fangen-von-java-lang-exception/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 20:36:41 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Anti Patterns]]></category>
		<category><![CDATA[Exception Handling]]></category>
		<category><![CDATA[Exceptions]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=1405</guid>
		<description><![CDATA[Immer wieder entdeckt man als Java-Entwickler Code-Abschnitte in dem ein &#8220;Exception Handling&#8221; verbaut ist. Das ist erfreulich und auch gut so. Exception Handling erlaubt es auf Fehler die zur Laufzeit der Software auftreten zu reagieren. Manchmal entdeckt man dabei jedoch Code-Stücke wie: 1 2 3 if &#40;BEDINGUNG&#41; &#123; throw new Exception&#40;&#34;An error occurred.&#34;&#41;; &#125; oder [...]]]></description>
			<content:encoded><![CDATA[<p>Immer wieder entdeckt man als Java-Entwickler Code-Abschnitte in dem ein &#8220;Exception Handling&#8221; verbaut ist. Das ist erfreulich und auch gut so. Exception Handling erlaubt es auf Fehler die zur Laufzeit der Software auftreten zu reagieren. Manchmal entdeckt man dabei jedoch Code-Stücke wie:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>BEDINGUNG<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    throw new Exception<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;An error occurred.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>oder</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// exception handling</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Diese Art mit der java.lang.Exception herumzuspringen birgt einige Nachteile und sogar Risiken. Warum Nachteile enstehen und welchen Risiken man sich aussetzt wenn man sein Exception Handling an der Basisklasse aller Exceptions ausrichtet, sei hier deshalb kurz aufgezeigt:</p>
<h1>Lesbarkeit</h1>
<p>Die Lesbarkeit des Codes leidet unter dem Werfen von java.lang.Exception.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">throw new CorruptFileException<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>sagt deutlich mehr aus als ein einfaches</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">throw new Exception<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ich selbst vergleiche das Werfen von java.lang.Exception gerne damit jemandem versehentlich auf den Fuss zu treten. Das ist ungefähr so, als träte man jemanden versehentlich auf den Fuss und bekommt als Antwort einen Schlag ins Gesicht. Es geht einfach ein großer Teil der Information der Exception verloren.</p>
<h1>Angst und Unsicherheit</h1>
<p>Bei catch-Blöcken, die java.lang.Exception fangen, wird mir immer mulmig im Bauch. Es entsteht der Eindruck als wüsste der Entwickler nicht, welche Fehler in diesem Teil seiner Software auftreten können.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// exception handling</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Um diese Unsicherheit zu beseitigen, wird fälschlicherweise oft auf java.lang.Exception gecatcht. Das ist schlecht. Besser ist es die Exception einfach &#8220;nach oben&#8221; durchkrachen zu lassen oder nur die Exceptions zu fangen, die der zugehörige Source-Code auch werfen kann. Ein catch auf java.lang.Exception ist im Zweifelsfall immer die schlechteste Wahl, da hier auch alle Exceptions gefangen werden, die an dieser Stelle des Source-Code besser nicht gefangen werden sollten. Noch schlimmer wird es wenn auf Throwable gecatcht wird.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Throwable t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// exception handling</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>An dieser Stelle werden nicht nur alle Exceptions sondern auch alle Errors gefangen. Das hat dann mit Genauigkeit gar nichts mehr zu tun.</p>
<h1>Schlechtere Wartbarkeit</h1>
<p>Ein Entwickler, der für diese Software später vielleicht mal die Pflege und/oder Änderungen übernimmt und mit der Software nicht vertraut ist, der wird sich unter Umständen tot suchen, wenn das Logging nicht Klasse und Zeile des Sources mitloggt und einen catch wie in dem folgenden Beispiel macht.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    LOG.<span style="color: #202020;">error</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dieser Fehler kann insbesondere dann kritisch werden, wenn eine Software das für das Logging das Log4J PatternLayout verwendet, das gerade beim Loggen von Klasse und Zeile sehr viel Performance frisst und deshalb für das Logfile manchmal maximal noch Datum, Uhrzeit und Log-Level ins Pattern konfiguriert wird.</p>
<h1>Verlust des Informationsgehalts</h1>
<p>Nicht nur die Message einer Exception sondern auch der Name einer Exception kann auch einen Informationsgehalt haben und den Code leserlicher machen. So ist</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>PrinterUnreachableException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// exception handling</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>mit deutlich mehr Information bestückt als</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// exception handling</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h1>RuntimeExceptions werden verschluckt</h1>
<p>Entwickler sind auch nur Menschen und Menschen passieren Fehler. Jeder Entwickler hat schon mal einen Fehler gemacht, der zum Beispiel eine NullPointerException oder eine ähnliche RuntimeException ausgelöst hat.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
    Person person <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    String <span style="color: #339933;">=</span> person.<span style="color: #202020;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    LOG.<span style="color: #202020;">error</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;An error occurred.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Diese NullPointerException wird einfach verschlammt. Sie weißt auf einen Programmierfehler hin aber verschwindet weil sie unsachgemäß verschlammt wird. Der Entwickler, der diesen Source nun debuggen soll, hat keinen sinnvollen Anhaltspunkt was schief gelaufen sein könnte.</p>
<h1>Erst fangen und dann doch lieber weiter werfen</h1>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">public <span style="color: #993333;">void</span> foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
    try <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// some code</span>
    <span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        LOG.<span style="color: #202020;">error</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        throw e<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dieser Fall ist auch mit einem negativen Beigeschmack versehen. Auch wenn er auf den ersten Blick vielleicht völlig korrekt erscheinen mag. Die gefangene Exception wird ins Logfile geschrieben und dann weitergeworfen. Was wird wohl der Source außerhalb Methode foo machen? Richtig! Er wird die Exception irgendwo erneut fangen und mit großer Wahrscheinlichkeit noch mal im Logfile versenken. Die Exception wird 2 Mal im Logfile versenkt obwohl sie nur ein mal aufgetreten ist. Ugly hoch drei!</p>
<h1>Vertuschen</h1>
<p>Leere catch-Blöcke sind genauso gefährlich wie das Fangen von java.lang.Exception. Doch noch viel schlimmer wird das Ganze, wenn eine java.lang.Exception gefangen wird und dann zusätzlich auch noch der catch-Block leer bleibt.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dieser Fall ist der Supergau. Der Fehler wird weder behandelt noch wird er jemals auffindbar. Er wird vertuscht und &#8220;das große Suchen&#8221; beginnt. Eine weitere Form des Vertuschens ist das Loggen der Exception-Message innerhalb catch-Blocks auf java.lang.Exception.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    LOG.<span style="color: #202020;">error</span><span style="color: #009900;">&#40;</span>e.<span style="color: #202020;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Diese Art der Vertuschung wird manchmal damit begründet, dass das Logfile nicht zu lang werden soll und/oder der Logfile Inhalt nicht mehr schön aussieht. Wobei wir dann natürlich bei der Frage wären, ob wir das Logfile überhaupt noch brauchen. Ein Logfile das &#8220;hübsch&#8221; aussieht, das ist genauso hilfreich bei einer eventuellen Fehlersuche als wenn man die Software ohne Logfile im Blindflug betreibt. Noch eine weitere Form des Vertuschens ist das einfache returnen von null im Fehlerfall.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Diese Möglichkeit kann zwar in einigen Fällen sinnvoll erscheinen aber weißt auf alles andere als einen guten Entwicklungstil hin. Und gerade bei umfangreicheren Methoden ist die Lösung pauschal schon falsch.</p>
<p>Wie man jetzt sicher einfach versteht, ist das direkte arbeiten mit java.lang.Exception eher so der &#8220;Holzfäller-Style&#8221; der Programmierung. Deshalb sollte man sich neben &#8220;Fail fast! Fail early! Fail loud!&#8221; auch mit den für den jeweiligen Source-Bereich passenden Exceptions arbeiten.</p>
<p>In diesem Sinne&#8230;<br />
Lasst es krachen! Aber richtig!</p>
<p>Für weiter Interessierte empfehle ich:<br />
<a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html">http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2010/02/02/anti-patterns-werfen-und-fangen-von-java-lang-exception/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jetzt schalten wir einen Gang hoch&#8230;</title>
		<link>http://perished.de/2009/11/14/jetzt-schalten-wir-einen-gang-hoch/</link>
		<comments>http://perished.de/2009/11/14/jetzt-schalten-wir-einen-gang-hoch/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 09:49:55 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Bamboo]]></category>
		<category><![CDATA[Build Tools]]></category>
		<category><![CDATA[Cobertura]]></category>
		<category><![CDATA[Coverage]]></category>
		<category><![CDATA[Emma]]></category>
		<category><![CDATA[Hudson]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=1303</guid>
		<description><![CDATA[Für meine aktuell laufenden &#8220;Privatprojekte&#8221; habe ich aktuell nichts weiter eingerichtet als ein Subversion Repository. Aber mehr und mehr wird ein Build-Server notwendig. *grml* Aber welchen nimmt man da!? Ist man mit Hudson richtig beraten? Oder lieber den Bamboo von Atlassian? Atlassian hat für kleinere Entwicklergruppen (2 Personen) zum Teil recht attraktive Lizenzmodelle anzubieten. Da [...]]]></description>
			<content:encoded><![CDATA[<p>Für meine aktuell laufenden &#8220;Privatprojekte&#8221; habe ich aktuell nichts weiter eingerichtet als ein <a title="Subversion" href="http://subversion.tigris.org/">Subversion</a> Repository. Aber mehr und mehr wird ein Build-Server notwendig. *grml* Aber welchen nimmt man da!? Ist man mit <a title="Hudson CI" href="http://hudson-ci.org/">Hudson</a> richtig beraten? Oder lieber den <a title="Atlassian Bamboo" href="http://www.atlassian.com/software/bamboo/">Bamboo</a> von Atlassian? Atlassian hat für kleinere Entwicklergruppen (2 Personen) zum Teil recht attraktive Lizenzmodelle anzubieten. Da sich aber schon abzeichnet, dass wir mit mehr als 2 Personen entwickeln, bin ich eher skeptisch. Aktuell habe ich mich fast für Hudson entschieden, da ich den schon mal vor einiger Zeit alleine eingesetzt habe. Aber eine wirkliche &#8220;Entscheidungsgrundlage&#8221; habe ich nicht. Ich bin mir total unschlüssig. Ein wichtiges Kriterium ist mit Sicherheit dass ich mich nicht unendlich lange mit irgendeiner crazy Konfiguration rumschlagen möchte. Im Grunde brauchen wir nur einen Build-Server, der unsere Projekte vom SVN-Server abholt, einen Maven-Build anstößt und einen Build-Report inklusive Coverage erstellt. Für Hudson gibt es sogar ein <a title="Emma" href="http://emma.sourceforge.net/">Emma</a> Plugin das einen Coverage Report erstellt. Alternativ gibt es auch ein Plugin für <a title="Cobertura" href="http://cobertura.sourceforge.net/">Cobertura</a>. Emma habe ich schon als Eclipse-Plugin getestet. Das war ganz brauchbar. Das sich ein Build-Server auch für Privatprojekte lohnt steht mittlerweile wohl völlig außer Frage. Aber welchen nimmt man da? Gibt es irgendwelche empfehlenswerten Produkte?</p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2009/11/14/jetzt-schalten-wir-einen-gang-hoch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jetzt schreibe ich Tutorials</title>
		<link>http://perished.de/2009/04/21/jetzt-schreibe-ich-tutorials/</link>
		<comments>http://perished.de/2009/04/21/jetzt-schreibe-ich-tutorials/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 06:42:46 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Maven 2]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[united-coders]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=1049</guid>
		<description><![CDATA[Ich habe gerade auf united-coders.com den ersten Teil meiner ersten Tutorial-Serie über Maven 2 verfasst. Ich verlinke es mal hier falls es jemanden von Euch interessiert. Ich lasse mich auch gerne kritisieren. Eventuell gefundene inhaltliche oder sprachliche Fehler (Englisch) bitte ich deshalb direkt an mich zu reporten. ;o) Vielen Dank und viel Spaß&#8230; Phil http://united-coders.com/phillip-steffensen/maven-2-part-1-setting-up-a-simple-apache-maven-2-project]]></description>
			<content:encoded><![CDATA[<p>Ich habe gerade auf <a title="http://united-coders.com" href="http://united-coders.com">united-coders.com</a> den <a title="united coders: Maven 2 (Part 1): Setting up a simple Apache Maven 2 Project" href="http://united-coders.com/phillip-steffensen/maven-2-part-1-setting-up-a-simple-apache-maven-2-project">ersten Teil meiner ersten Tutorial-Serie</a> über Maven 2 verfasst. Ich verlinke es mal hier falls es jemanden von Euch interessiert. Ich lasse mich auch gerne kritisieren. Eventuell gefundene inhaltliche oder sprachliche Fehler (Englisch) bitte ich deshalb direkt an mich zu reporten. ;o)</p>
<p>Vielen Dank und viel Spaß&#8230;</p>
<p>Phil</p>
<p><a title="united coders: Maven 2 (Part 1): Setting up a simple Apache Maven 2 Project" href="http://united-coders.com/phillip-steffensen/maven-2-part-1-setting-up-a-simple-apache-maven-2-project">http://united-coders.com/phillip-steffensen/maven-2-part-1-setting-up-a-simple-apache-maven-2-project</a></p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2009/04/21/jetzt-schreibe-ich-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Es ist jetzt&#8230;</title>
		<link>http://perished.de/2009/02/14/es-ist-jetzt/</link>
		<comments>http://perished.de/2009/02/14/es-ist-jetzt/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 23:31:33 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Aus dem Leben]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Nerdshit]]></category>
		<category><![CDATA[Uhrzeit]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Unixtimestamp]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=843</guid>
		<description><![CDATA[0 Uhr 31 Minuten und 30 Sekunden&#8230; Oder besser gesagt: 1234567890 (Unixtimestamp) Seit dem 01.01.1970 sind genau 1234567890 Sekunden vergangen. Das ist ein Grund zum feiern, weil dieser Termin einmalig ist. Diesen Termin gibt es nur ein einziges Mal. Heilig Abend, Sylvester und Ostern gibt es jedes Jahr. Das sind so die Mainstream-Chicks unter den [...]]]></description>
			<content:encoded><![CDATA[<p>0 Uhr 31 Minuten und 30 Sekunden&#8230; Oder besser gesagt:</p>
<p style="text-align: center; font-size: 35px;"><strong><code>1234567890</code></strong><br />
<code>(Unixtimestamp)</code></p>
<p>Seit dem 01.01.1970 sind genau 1234567890 Sekunden vergangen. Das ist ein Grund zum feiern, weil dieser Termin einmalig ist. Diesen Termin gibt es nur ein einziges Mal. Heilig Abend, Sylvester und Ostern gibt es jedes Jahr. Das sind so die Mainstream-Chicks unter den Feiertagen. Also eher uninteressant. Deshalb sollte man heute Mal so richtig die Sau raus lassen. Von diesem Tag dürfen wir unseren Kindern und Kindeskindern noch erzählen. <img src='http://perished.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2009/02/14/es-ist-jetzt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was ich nicht mag&#8230;</title>
		<link>http://perished.de/2008/10/18/was-ich-nicht-mag/</link>
		<comments>http://perished.de/2008/10/18/was-ich-nicht-mag/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 11:20:51 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Pinax]]></category>
		<category><![CDATA[Wartung]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=430</guid>
		<description><![CDATA[PHP. Kennt Ihr die Situation, wenn man sich am Wochenende um seine Altlasten alten Applikationen und Software-Tools kümmert. Genau das mache ich gerade. Und ich stelle fest: &#8220;I hate PHP.&#8221; Diesen Mist trage ich nun seit dem ersten Semester mit mir rum. Und wenn man es genau betrachtet, dann ist PHP eine Skriptsprache, die zwar [...]]]></description>
			<content:encoded><![CDATA[<p>PHP. Kennt Ihr die Situation, wenn man sich am Wochenende um seine <strike>Altlasten</strike> alten Applikationen und Software-Tools kümmert. Genau das mache ich gerade. Und ich stelle fest: &#8220;I hate PHP.&#8221; Diesen Mist trage ich nun seit dem ersten Semester mit mir rum. Und wenn man es genau betrachtet, dann ist PHP eine Skriptsprache, die zwar für einfache Dinge (wie z.B.: Blogs) durchaus geeignet ist. Aber sobald mal etwas komplexer wird, erfordert PHP oberste Disziplin, damit die Applikationen auch zukünftig gut wartbar bleiben. Professionelles WebDevelopment wird eben nicht mit PHP gemacht. Ich für meinen Teil empfehle <i>Java/Spring WebMVC</i> und <i>Python/<a title="http://www.djangoproject.com" mce_href="http://www.djangoproject.com/" href="http://www.djangoproject.com/">Django</a></i> (plus eventuell <a title="http://pinaxproject.com" mce_href="http://pinaxproject.com" href="http://pinaxproject.com"><i>Pinax</i></a>). Java ist typsicher und stabil. Allerdings ziehen die meisten Java-Projekte auch immer einen riesigen Boilerplate-Code-Rattenschwanz hinter sich her. Wesentlich felxibler und schneller ist man mit Python/Django. Genau aus diesem Grund werde ich meine Webapps alle auf Python/Django umstellen. Dann bin ich den bösen Fluch PHP los.</p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2008/10/18/was-ich-nicht-mag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress aus Java</title>
		<link>http://perished.de/2008/10/08/wordpress-aus-java/</link>
		<comments>http://perished.de/2008/10/08/wordpress-aus-java/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 07:08:51 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring MVC]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=390</guid>
		<description><![CDATA[WTF? Bye Bye PHP? Es gibt jetzt eine WordPress-Variante aus Java auf Basis des Spring MVC Frameworks. KLicht gut, oder? Das Ding heißt nWordPress und wurde von numiton.org released. Numiton hat sich auf die Fahne geschrieben Open Source Projekte, die PHP entwickelt wurden, auf Java umzustellen. Komische Idee. Aber sie bringt auch Vorteile mit, denn [...]]]></description>
			<content:encoded><![CDATA[<p>WTF? Bye Bye PHP? Es gibt jetzt eine WordPress-Variante aus Java auf Basis des Spring MVC Frameworks. KLicht gut, oder? Das Ding heißt <a title="numiton.org: nWordPress" href="http://www.numiton.org/nwordpress/overview.html">nWordPress</a> und wurde von <a title="http://www.numiton.org" href="http://www.numiton.org">numiton.org</a> released. Numiton hat sich <a title="numiton.org: Mission summary" href="http://www.numiton.org/mission.html">auf die Fahne geschrieben</a> Open Source Projekte, die PHP entwickelt wurden, auf Java umzustellen. Komische Idee. Aber sie bringt auch Vorteile mit, denn schließlich werden die &#8220;Gefahren von PHP&#8221; so ganz gut umgangen. Ich glaube heute abend schaue ich mir mal den Source von dem Ding an. Wenn das sauber umgesetzt ist, dann kann man damit sicher ne Menge Spaß haben. Ich brauche sowieso einen neuen Blog: Den &#8220;PhilDevBlog&#8221;. <img src='http://perished.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2008/10/08/wordpress-aus-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django rawks!</title>
		<link>http://perished.de/2008/10/02/django-rawks/</link>
		<comments>http://perished.de/2008/10/02/django-rawks/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 17:21:20 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Django Web Framework]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=350</guid>
		<description><![CDATA[Nachdem ich mich nun den dritten Abend in Folge mit dem Django Web Framework beschäftige, muss ich feststellen: Django rawks! (bedeutet so viel wie: Django rocks! xD) Das Django Web Framework wirklich nice. Eine Web Applikation ist innerhalb weniger Minuten aus dem Boden gestampft. Ich muss mich nicht mehr um die Datenbank kümmern. Das tut [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich mich nun den dritten Abend in Folge mit dem <a title="Django Web Framework" href="http://www.djangoproject.com/">Django Web Framework</a> beschäftige, muss ich feststellen:</p>
<p style="text-align: center;"><strong>Django rawks!</strong><br />
(bedeutet so viel wie: Django rocks! xD)</p>
<p>Das Django Web Framework wirklich nice. Eine Web Applikation ist innerhalb weniger Minuten aus dem Boden gestampft. Ich muss mich nicht mehr um die Datenbank kümmern. Das tut Django nun für mich. Ich muss mir für meine Web Applikationen kein Admin-Frontend mehr basteln. Das tut Django nun für mich. Eleganz hat einen neuen Namen: Django. Ich bleibe dran&#8230; Meine nächste Webapp werde ich definitiv mit Django bauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2008/10/02/django-rawks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Schnapp Deinen Gaul, Django! Wir reiten los&#8230;</title>
		<link>http://perished.de/2008/09/30/schnapp-deinen-gaul-django-wir-reiten-los/</link>
		<comments>http://perished.de/2008/09/30/schnapp-deinen-gaul-django-wir-reiten-los/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 17:13:59 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Django Web Framework]]></category>
		<category><![CDATA[Experimente]]></category>
		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=348</guid>
		<description><![CDATA[Vor wenigen Minuten habe ich entdeckt, dass die Version 1.0 vom Django Web Framework endlich released wurde. Das riecht förmlich nach einer kleinen Testsession. Ich habe es mir gerade Mal runtergeladen und schwinge mich nun auf meinen Gaul um mit Django zusammen durch die Prärie zu reiten.]]></description>
			<content:encoded><![CDATA[<p>Vor wenigen Minuten habe ich entdeckt, dass die Version 1.0 vom <a title="Django Web Framework" href="http://www.djangoproject.com/">Django Web Framework</a> endlich released wurde. Das riecht förmlich nach einer kleinen Testsession. Ich habe es mir gerade Mal runtergeladen und schwinge mich nun auf <a title="PyDev" href="http://pydev.sourceforge.net">meinen Gaul</a> um mit Django zusammen durch die Prärie zu reiten.</p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2008/09/30/schnapp-deinen-gaul-django-wir-reiten-los/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Tomcat Default-Konfiguration erlaubt keinen Zugriff auf das Manager-Servlet</title>
		<link>http://perished.de/2008/09/26/apache-tomcat-default-konfiguration-erlaubt-keinen-zugriff-auf-das-manager-servlet/</link>
		<comments>http://perished.de/2008/09/26/apache-tomcat-default-konfiguration-erlaubt-keinen-zugriff-auf-das-manager-servlet/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:47:18 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Servlet]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.perished.de/?p=316</guid>
		<description><![CDATA[Wenn man sich einen neuen Apache Tomcat installiert und versucht auf das Manager-Servlet (http://[Host]:[Port]/manager/html) zuzugreifen, wird man per Default von der folgenden wunderbaren Meldung begrüßt: HTTP Status 403 &#8211; Access to the requested resource has been denied Woran liegt das!? Ganz einfach: Das ist ein Sicherheits-Aspekt. Der Nutzer des Tomcats soll die Konfiguration selbst vornehmen, [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man sich einen neuen Apache Tomcat installiert und versucht auf das Manager-Servlet (http://[Host]:[Port]/manager/html) zuzugreifen, wird man per Default von der folgenden wunderbaren Meldung begrüßt:</p>
<blockquote>
<p style="text-align: center;">HTTP Status 403 &#8211; Access to the requested resource has been denied</p>
</blockquote>
<p><strong>Woran liegt das!?</strong></p>
<p>Ganz einfach: Das ist ein Sicherheits-Aspekt. Der Nutzer des Tomcats soll die Konfiguration selbst vornehmen, damit der Tomcat produktiv niemals mit einem Default-Manager-User eingesetzt wird. Die Datei tomcat-users.xml ($CATALINA_HOME/conf/tomcat-users.xml) sieht per Default wie folgt aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">'1.0'</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">'utf-8'</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;admin&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;both&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;tomcat,role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Man erkennt auf den ersten Blick: Da gibt es ja gar keinen Manager-User. Aha!</p>
<p><strong>Aber was ist zu tun, wenn man nun doch die Manager-Applikation nutzen möchte!?</strong></p>
<p>Auch das ist wieder denkbar einfach. Man fügt einfach einen neuen Tomcat-User mit einer Manager-Rolle ein. Dazu muss die tomcat-users.xml ($CATALINA_HOME/conf/tomcat-users.xml) wie folgt angepasst werden:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">'1.0'</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">'utf-8'</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;manager&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;admin&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;both&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;tomcat,role1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;manager&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;manager&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;manager,admin&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Danach muss der Tomcat neu gestartet werden, so dass die Einstellungen übernommen werden können. Jetzt kann man sich mit dem User &#8220;manager&#8221; und dem Passwort &#8220;manager&#8221; bequem ins Manager-Servlet einloggen.</p>
<p><strong>Wichtig!</strong></p>
<p>Bevor der Tomcat produktiv eingesetzt wird, sollte diese Änderung jedoch abgewandelt oder rückgängig gemacht werden, da sonst von außen auf das Manager-Servlet zugegriffen werden könnte und ganze Anwendungen undeployt (vom Server entfernt) werden können.</p>
<p><strong>Warum schreibe ich das hier?</strong></p>
<p>Ich habe diese Lösung schon mehrfach gegoogelt und muss irgendwie jedes Mal wieder nachschlagen. Und weil mich das so nervt, pumpe ich die Lösung jetzt in meinen Blog, dann weiß ich wo sie steht. <img src='http://perished.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://perished.de/2008/09/26/apache-tomcat-default-konfiguration-erlaubt-keinen-zugriff-auf-das-manager-servlet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

