<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-4722905579699085960</id><updated>2009-12-26T02:04:01.285-08:00</updated><title type='text'>Programming</title><subtitle type='html'>Aus dem praktischen Leben eines Programmierers. Hier geht's um die Kleinigkeiten zwischen Java, Eclipse, Ant, Maven, JUnit, agiler Softwareentwicklung und und und ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default?start-index=26&amp;max-results=25&amp;orderby=updated'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6398760657899380241</id><published>2009-12-22T11:49:00.000-08:00</published><updated>2009-12-26T01:24:37.750-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Joel on Software</title><content type='html'>Es ist schon erstaunlich, dass viele Entwickler ähnliche Probleme haben, zumindest die Guten :-D. Hier ein interessanter Blog: &lt;a href="http://www.JoelOnSoftware.com/"&gt;Joel on Software&lt;/a&gt; von Joel Spolsky. Joel Spolsky ist ein ehemaliger Fallschirmjäger und Microsoftentwickler. Ob es zwischen diesen Fähigkeiten einen Zusammenhang gibt? In dem Blog geht es um gutes und natürlich schlechtes Projektmanagement aber auch um Programmierdinge (z.B. Blähsoftware, Bytes oder der Joel-Test). Einige Beiträge von 2000 bis 2009 sind auch auf &lt;a href="http://german.joelonsoftware.com/index.html"&gt;Deutsch&lt;/a&gt; verfügbar. Man kann auch bei der Übersetzung helfen. Spontan meine liebste Stelle:&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia, 'Times New Roman', Times, serif;font-size:medium;"&gt;&lt;blockquote&gt;...&lt;/blockquote&gt;&lt;blockquote&gt;Aber ich mache mir nicht über die Tage Sorgen, an denen ich "nur" zwei Stunden arbeite. Es sind die Tage, an denen ich &lt;em&gt;gar nichts&lt;/em&gt; tue.&lt;/blockquote&gt;&lt;blockquote&gt;...&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;Interessant ist auch der Joel-Test, obwohl er schon fast 10 Jahre alt ist, erfüllen immer noch nicht alle Softwarefirmen den Test. Selbst wenn man den Test nicht kennt, so ist sein Inhalt doch für alle guten Programmierer keine Überraschung sondern sollte der Normalfall sein. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Forderung des Test eines One-Click-Build passt gut zu Maven und Ant und zu diesem Blog. Ja und ich habe einen zweiten Monitor. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6398760657899380241?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6398760657899380241/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/12/joel-on-software.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6398760657899380241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6398760657899380241'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/12/joel-on-software.html' title='Joel on Software'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1547135361930491095</id><published>2009-12-25T02:30:00.000-08:00</published><updated>2009-12-25T09:29:21.721-08:00</updated><title type='text'>Fehlende Einträge</title><content type='html'>Hier meine unvollständige Liste noch fehlender Einträge. Ich nehme noch gerne Vorschläge für weitere Artikel entgegen.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Security, Rolls in Tomcat&lt;/li&gt;&lt;li&gt;Performancevergleich von Webservices im Vergleich zu reinem HTTP&lt;/li&gt;&lt;li&gt;Optimierter Code&lt;/li&gt;&lt;li&gt;DB Zugriffe&lt;/li&gt;&lt;li&gt;XSL&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1547135361930491095?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1547135361930491095/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/12/fehlende-eintrage.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1547135361930491095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1547135361930491095'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/12/fehlende-eintrage.html' title='Fehlende Einträge'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-312699800098843368</id><published>2009-07-10T12:52:00.000-07:00</published><updated>2009-12-24T14:17:02.282-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Noch so ein Programmierer-Blog</title><content type='html'>Scheinbar gibt es noch ähnlich angelegte Blogs, wie diesen &lt;a href="http://code4j.wordpress.com/"&gt;Blog&lt;/a&gt;. Schaut mal rein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-312699800098843368?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/312699800098843368/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/noch-so-ein-blog.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/312699800098843368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/312699800098843368'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/noch-so-ein-blog.html' title='Noch so ein Programmierer-Blog'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4626434520921013406</id><published>2009-08-14T05:32:00.000-07:00</published><updated>2009-08-14T06:16:58.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>CCD: clean code developer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/ccd%20full%20size%20banner.gif?format=raw"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 468px; height: 60px;" src="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/ccd%20full%20size%20banner.gif?format=raw" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Viele Dinge in diesem Blog thematisieren die täglichen Probleme. Auch gibt es paar etwas grundlegendere Beiträge nur leider keine grundlegende Verarbeitung dieser Dinge. Ich hatte mir das alles auf einen späteren Zeitpunkt verschoben. Das ist dann wohl zu spät. Aber ich freue mich auf die folgende Webseite hinzuweisen: &lt;a href="http://www.clean-code-developer.de/"&gt;CCD: clean code developer&lt;/a&gt;  bzw. auf das &lt;a href="http://www.heise.de/developer/Ralf-Westphal-im-Gespraech-ueber-Clean-Code-Developer--/artikel/143437"&gt;Interview&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/dotnetpro%20ccd%20stempel%20full%20size%20banner.gif?format=raw"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 468px; height: 60px;" src="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/dotnetpro%20ccd%20stempel%20full%20size%20banner.gif?format=raw" border="0" alt="" /&gt;&lt;/a&gt;Ich glaube alle Prinzipien dieser Seite kann ich gutes Gewissens empfehlen, weil ich sie aus meiner Erfahrung selbst anwende und meinen Studenten rate. Die dort beschriebenen Prinzipien lassen sich durch eine Reihe von Werkzeugen sinnvoll unterstützen. Dazu werde ich demnächst einen Beitrag schreiben.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4626434520921013406?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4626434520921013406/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/08/ccd-clean-code-developer.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4626434520921013406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4626434520921013406'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/08/ccd-clean-code-developer.html' title='CCD: clean code developer'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7213184866620124327</id><published>2009-08-10T11:07:00.000-07:00</published><updated>2009-08-10T11:23:14.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Internationalisierung</title><content type='html'>Oft stößt man bei Internationalisierung von Java-basierter Software auf das Problem das die &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Property&lt;/span&gt;-Dateien von Java mit einem festen &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Encoding&lt;/span&gt; (ISO-8859-1) eingelesen werden, das man auch nicht ändern kann. Diese &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Property&lt;/span&gt;-Datei dienen zur Aufnahme der lokalisierten Zeichenketten. Wenn es sich nur um gelegentliche Zeichen handelt, die nicht in diesem &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Encoding&lt;/span&gt; vorhanden sind kann man diese Zeichen in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;UTF&lt;/span&gt;-Schreibweise eingeben. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Alternatif&lt;/span&gt; schreibt man sich eine eigene Klasse die &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Proppertie&lt;/span&gt;-Dateien mit unterschiedlichen &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Encodings&lt;/span&gt; einlesen kann. Dann muss man nur noch eine Methode schreiben mit denen man auf diese lokalisierten &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;String&lt;/span&gt; zugreifen kann. Besonders elegant finde ich, folgende Methode &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;String&lt;/span&gt; _(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;String&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Key&lt;/span&gt;)&lt;/b&gt; zu definieren und diese dann statisch zu importieren. Noch eleganter wird es wenn man den &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Key&lt;/span&gt; als &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Fallbackwert&lt;/span&gt; zurückgibt wenn der &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Key&lt;/span&gt; nicht vorhanden ist. Natürlich sollt man das in Fehlerlog dann eintragen. Ein wirkliche Alternative zu der Lokalisierung via &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Property&lt;/span&gt;-Dateien ist die Benutzung von &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;XLIFF&lt;/span&gt; (XML &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Localization&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Interchange&lt;/span&gt; File Format).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7213184866620124327?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7213184866620124327/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/08/internationalisierung.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7213184866620124327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7213184866620124327'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/08/internationalisierung.html' title='Internationalisierung'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4536071231409026110</id><published>2009-07-30T05:31:00.000-07:00</published><updated>2009-07-31T00:43:08.785-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Vereinheitlichung von GUIs komplexer Applikationen</title><content type='html'>In vielen komplexeren Projekten hat man das Problem das verschiedene Leute GUI-Teile implementieren. Das führt in vielen Fällen zu einer inkonsistenten GUIs. Dieses Problem kann man auf verschiedenen Wegen angehen. Der Weg 1 wäre einen eigenen Style Guide zu entwickeln und  umzusetzen. Dieser Weg erzeugt sehr gute Resultate ist aber aufwendig. Bei der Umsetzung in Java hat man zusätzlich das Problem, dass einige Anforderungen des Style Guides in den Java-Klassen selbst umgesetzt werden müssen andere Dinge hingegen eine Anpassung des Look and Feels (L&amp;amp;F) erfordern.&lt;br /&gt;Der 2. Weg ist pragmatischer und wesentlich einfacher und schneller umzusetzen, dafür sind die Resultate nicht ganz so gut, stellen aber in den meisten Fällen eine wesentlich Verbesserung gegenüber der Ausgangssituation dar. Folgende Regeln sind dafür umzusetzen:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Verwendung möglichst wenigen Layout Manager z.B. BoxLayout, wenn komplizierter ist und sonst BorderLayout bzw. FlowLayout für Button-Reihen&lt;/li&gt;&lt;li&gt;Einen Entwickler montiert bzw. überarbeitet der alle Oberflächen&lt;/li&gt;&lt;li&gt;Convenience Methoden z.B. wenn man Textabschnitte bold setzt&lt;/li&gt;&lt;li&gt;Minimale und sehr einfache Klassen die alle Entwickler nutzen z.B. für Fenster, dort sind dann Font, Rahmen und Layoutmanager werden schon richtig gesetzt&lt;/li&gt;&lt;li&gt;Kreuzprüfung der GUI-Teile, d.h. die Entwickler testen die GUI-Teile die von anderen Entwicklern erstellt wurden&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Diese Punkte garantieren kein einheitliches L&amp;amp;F der Oberflächen aber sie wirken Wunder und kosten fast nix. Ein weiterer wichtiger Punkt wenn es um das Interface zwischen Maschine und Mensch geht ist die Usability. Aus meiner Sicht ist es wichtig nicht nur in den Evaluationsphase Usability-Tests einzusetzen sondern schon in der Konzeptionsphase. Usability sollte den Entwicklungsprozess begleiten. Hier der &lt;a href="http://www.useit.com/"&gt;Link&lt;/a&gt; zur bekanntesten Usability-Web-Seite. ES lohnt sich immer auf dieser Seite zu stöbern.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4536071231409026110?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4536071231409026110/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/vereinheitlichung-von-guis-komplexer.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4536071231409026110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4536071231409026110'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/vereinheitlichung-von-guis-komplexer.html' title='Vereinheitlichung von GUIs komplexer Applikationen'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4290911559330767440</id><published>2009-07-09T12:34:00.000-07:00</published><updated>2009-07-10T05:11:36.005-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Tomcat Buch</title><content type='html'>Dieses Buch ist ein gutes Nachschlagewerk, wenn man mit der Entwicklung von Webapps vertraut ist und Spezialitäten des Apache Tomcat nutzen will. Vor allem für komplexere Web-Projekte jenseits von Spring ist es zu empfehlen als auch für Administratoren. Schon das Vorgängerbuch ist empfehlenswert.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?t=p0cf-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0471753610&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4290911559330767440?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4290911559330767440/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-buch.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4290911559330767440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4290911559330767440'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-buch.html' title='Tomcat Buch'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8024993759235138841</id><published>2009-07-10T04:37:00.000-07:00</published><updated>2009-07-10T04:45:48.017-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Log4J'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Buch zum Logging</title><content type='html'>Logging ist wenig beachteter Teil von vielen Projekten. Oft wird wenig Zeit in das Logging investiert, weil es kein zentrales Feature der Software ist. Dem entsprechend gut funktioniert es auch. Zur Zeit werden primär drei verschiedene Logging-APIs eingesetzt, log4j, commons-logging und das Logging des JDK (Bestandteil seit dem JDK 1.4). Mein persönlicher Favoriet log4j war aus meiner Sicht lange Zeit nicht allzu gut dokumentiert, vor allem nicht die Möglichkeit der XML-Konfiguration. Aus diesem Grund habe ich mir auch folgendes Buch gekauft. In ihm wird nicht nur log4j erläutert sondern auch das Logging-API des JDK. Aus meiner Sicht könnte es noch weiter in die Tiefe gehen obwohl es schon ein paar Spezialitäten anreisst. Es bietet allgemein ein recht guten Einstieg ins Logging für Programmierer die nicht nur den Logging-Code aus einem alten Projekt kopieren.&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=p0cf-21&amp;o=3&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1M6ABJKN5YT3337HVA02&amp;asins=1590590996" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8024993759235138841?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8024993759235138841/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/buch-zum-logging.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8024993759235138841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8024993759235138841'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/buch-zum-logging.html' title='Buch zum Logging'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-9095087615949312903</id><published>2009-07-10T00:16:00.001-07:00</published><updated>2009-07-10T00:17:18.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Bücherregal</title><content type='html'>Ich werde hier in loser Folge einige Bücher empfehlen die ich für meine Arbeit nutze. Den Anfang machte gestern ein Buch zu Tomcat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-9095087615949312903?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/9095087615949312903/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/bucherregal.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9095087615949312903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9095087615949312903'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/bucherregal.html' title='Bücherregal'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-9060658211360694048</id><published>2009-07-08T00:08:00.001-07:00</published><updated>2009-07-09T05:17:32.738-07:00</updated><title type='text'></title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'Helvetica Neue', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-9060658211360694048?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/9060658211360694048/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/g9efmsk8qv.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9060658211360694048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9060658211360694048'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/g9efmsk8qv.html' title=''/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5384724828912659319</id><published>2009-07-09T05:16:00.000-07:00</published><updated>2009-07-09T05:17:03.921-07:00</updated><title type='text'>c2in7y8qwm</title><content type='html'>c2in7y8qwm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5384724828912659319?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5384724828912659319/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/c2in7y8qwm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5384724828912659319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5384724828912659319'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/c2in7y8qwm.html' title='c2in7y8qwm'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4132862237319849289</id><published>2009-07-09T00:12:00.000-07:00</published><updated>2009-07-09T00:46:24.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Blog: Java ist auch nur eine Insel</title><content type='html'>Die meisten Programmierer werden das &lt;a href="http://openbook.galileodesign.de/javainsel5/index.htm"&gt;Buch "Java ist auch nur Insel"&lt;/a&gt; (Open Book) aus dem Galileo-Verlag  kennen und als gutes, schnelles Nachschlagewerk schätzen. Der Autor des Buches, Christian Ullenboom , schreibt nicht nur Bücher, sondern auch noch einen interessanten &lt;a href="http://www.tutego.com/blog/javainsel/"&gt;Blog&lt;/a&gt; mit Tipps zum Thema Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4132862237319849289?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4132862237319849289/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/blog-java-ist-auch-nur-eine-insel.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4132862237319849289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4132862237319849289'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/blog-java-ist-auch-nur-eine-insel.html' title='Blog: Java ist auch nur eine Insel'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1495375148931922350</id><published>2009-07-08T05:36:00.000-07:00</published><updated>2009-07-08T05:47:21.619-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Develop your developers</title><content type='html'>Tests ein mal anders. &lt;a href="http://www.javablackbelt.com/"&gt;JavaBlackBelt&lt;/a&gt; ist ein Community-Website, die Test und Kurse zu vielen aktuellen Themen bietet. Diese stammen primär aus dem Bereich der Java-Programmierung. Je nach dem, wie viele Examen man erfolgreich absolviert hat bekommt man einen entsprechenden, farbigen Gürtel. Der schwarze Gürtel ist dann der höchste zu erreichende Gürtel. Natürlich stellt sich bei einigen Test die Frage, wie relevant sie in der Praxis sind und ob es sich bei dem Code nicht um gefährlichen Code (potentieller Bug) handelt. Trotzdem ist es aus meiner Sicht eine sehr gelungene Site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1495375148931922350?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1495375148931922350/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/develop-your-developers.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1495375148931922350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1495375148931922350'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/develop-your-developers.html' title='Develop your developers'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5085551603713190408</id><published>2009-07-08T00:46:00.000-07:00</published><updated>2009-07-08T01:24:30.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Log4J'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Log4J Pattern Layout</title><content type='html'>&lt;div&gt;Oft hat man beim Logging das Problem, dass ein Logmeldung länger ist als eine Zeil auf dem Bildschirm. Das führt dazu dass diese lange Zeile am Bildschirmrand umgebrochen wird. Für den Programmierer ist dies auf den ersten Blick nicht immer zu sehen, wo die Zeile weitergeht. Für mehr Übersichtlichkeit kann man durch folgendes Pattern sorgen:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt layout class="org.apache.log4j.PatternLayout"&amp;gt&lt;br /&gt;        &amp;lt param name="ConversionPattern" value="%d [%t] %-5p %c.%M%n: %m%n" /&amp;gt&lt;br /&gt;&amp;lt/layout&amp;gt&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Das ergibt dann folgendes:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;2009-07-08 06:59:06,470 [main] INFO  me.alif.App.&lt;br /&gt;App starts up&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Bei diesem Pattern wird der Inhalt der Logausgabe, also dass was der Programmierer in die Klammer des Log-Methodenaufruf schreibt, in einer neuen Zeile ausgegeben, die mit einem Doppelpunkt beginnt. Dies führ aus meiner Sicht zu einer höheren Lesbarkeit der Log-Ausgabe.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5085551603713190408?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5085551603713190408/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/log4j-pattern-layout.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5085551603713190408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5085551603713190408'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/log4j-pattern-layout.html' title='Log4J Pattern Layout'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-454277915653764909</id><published>2009-07-03T03:11:00.001-07:00</published><updated>2009-07-03T03:18:15.575-07:00</updated><title type='text'>Tomcat JNDI Realm</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Man man &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Tomcat&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; nicht nur gegen Datenbanken &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;authentifizieren&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; lassen sondern auch gegen andere &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Naming&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;and&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Directory Services. Hier ein Beispiel für die &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Authentifizierung&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; gegen einen &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;LDAP&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-Server:&lt;/span&gt;&lt;div&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#3f7f7f;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Realm&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"org.apache.catalina.realm.JNDIRealm"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;connectionURL&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"ldap://ldap.rostock.xxx.de"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;userPatter=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"|(cn={0},ou=XXX,o=XX1)(cn={0},ou=XX1,o=XXX)(cn={0},ou=XXX,ou=XY,o=XX1)(cn={0},ou=XX1,ou=XY,o=XY)"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;userRoleName&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"SmartBluUserRole"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;roleSearch&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"(uniqueMember={0})"&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 128, 128); "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);  font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Jetzt muss man nur noch das formulieren des LDAP-Such-Pattern beherrschen.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-454277915653764909?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/454277915653764909/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jndi-realm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/454277915653764909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/454277915653764909'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jndi-realm.html' title='Tomcat JNDI Realm'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1264767351415056455</id><published>2009-07-03T01:23:00.000-07:00</published><updated>2009-07-03T03:09:50.624-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Fluent Interface - schlechter Stil hat einen Namen</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Gester oder war es Vorgestern bin ich gleich zweimal auf ein Problem gestossen, dass einige Programmierer in einer Codezeile lange, komplexe, häufig ineinander geschachtelte Anweisungen schreiben. In einigen Fällen sieht da sehr elegant aus und es spart Platz, d.h. man muss nicht so viel scrollen im Editor.  Diese Art des Code Schreibens hat aus meiner Sicht zwei Mankos, auch wenn ich weniger scrollen muss sinkt die Verständlichkeit des Codes und wenn ein Fehler in dieser Zeile auftritt (Nullpointer in Zeile 137), muss diesen Ausdruck zerlegen um den Bug zu finden. Aus diesem Grund halte ich auch trinäre Ausdrücke für potentielle Fehler.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Daraufhin habe ich in der Newsgroup &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;de.comp.lang.java&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; den Verweis auf die Idee des &lt;/span&gt;&lt;a href="http://de.wikipedia.org/wiki/Fluent_Interface"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Fluent Interface&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; gefunden. Die oben beschrieben Art der Programmierung ist &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;kein&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Fluent Interface. Fluent Interface ist eine elegante Art der Programmierung die vor allem Domain-spezifisch, sehr effizient sein kann. Der Vorteil der Natürlichsprachlichkeit dieser Ausdrücke halte ich nicht unbedingt für einen Vorteil, das mag vielleicht auch mit mit meinen mit Lingo (&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-style: italic; line-height: 19px; font-family:sans-serif, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Macromedia Director, jetzt Adobe Director&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-style: normal; line-height: normal; font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;) gemachten Erfahrungen zusammenhängen. Die Natürlichsprachlichkeit war ja ein Kernfeature von Lingo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1264767351415056455?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1264767351415056455/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/fluent-interface-schlechter-stil-hat.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1264767351415056455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1264767351415056455'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/fluent-interface-schlechter-stil-hat.html' title='Fluent Interface - schlechter Stil hat einen Namen'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7106308240466220560</id><published>2009-07-03T02:33:00.000-07:00</published><updated>2009-07-03T03:09:23.501-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><category scheme='http://www.blogger.com/atom/ns#' term='Webapp'/><title type='text'>Tomcat JDBC Realm</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Mit Hilfe des JDBC Realms kann man in Tomcat sehr einfach und elegant eine Benutzerauthentifizierung und Zugriffsteuerung durchführen, bzw. von Tomcat durchführen lassen. Dafür muss man in der Datei &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;context.xm&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;l der Webapp folgenden Abschnitt einfügen:&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Realm&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"sb.realm.SmartBLURealm"&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;debug&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"99"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;driverName&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionURL&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"jdbc:mysql://localhost:3306/test"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionName&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"smartblu"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionPassword&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userTable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"USER"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userNameCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"LoginName"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userCredCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Password"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userRoleTable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"user_roles"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;roleNameCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"role_name"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;digest&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"sha"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Tomcat versucht dann die Benutzer zu Authentifizieren gegen eine Datenbank &lt;/span&gt;&lt;span class="Apple-style-span"  style="  color: rgb(42, 0, 255); font-family:Monaco, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;jdbc:mysql://localhost:3306/test &lt;/span&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;mit den entsprechenden Parametern. Der Datenbank-Table heisst hier &lt;/span&gt;&lt;span class="Apple-style-span"  style="  color: rgb(42, 0, 255); font-family:Monaco, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;USER&lt;/span&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. Die Passwörter der Benutzer sind mit SHA gehasht. &lt;/span&gt;&lt;a href="http://de.wikipedia.org/wiki/Secure_Hash_Algorithm"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SHA&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; bedeutet in der Java-Welt meines Wissens nach SHA2.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In diesem Beispiel wir nicht der normale JDBC Realm verwandt sondern ein eigener Realm, der von JDBC Realm abgeleitet wurde aber gleichzeitig ein Migrationsfunktion (das Altsystem verwendete nicht SHA sondern Crypt) besitzt. Die Jar-Datei die die hier verwandte Klasse enthält muss für Tocat verfügbar sein, sie muss sich also im Verzeichnis &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;tomcat/libs&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; befinden. Alternativ kann in dieses Beispiel auch der JDBC Realm (org.apache.catalina.realm.JDBCRealm) eingetragen werden.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Der Realm ist aber nur ein Baustein bei der Authentifizierung mit Tomcat. Die weiterne Bausteine (Login-Config, Rollen und Security Constraints) sind in der Datei &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;web.xml&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; des Projektes enthalten. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7106308240466220560?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7106308240466220560/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jdbc-realm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7106308240466220560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7106308240466220560'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jdbc-realm.html' title='Tomcat JDBC Realm'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7330930645983785153</id><published>2009-04-21T00:26:00.000-07:00</published><updated>2009-07-03T01:06:48.959-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Texlipse</title><content type='html'>Zur Zeit erstelle ich ein Liste meiner Programmierwerkzeuge. Heute ist der Abschnitt zu Texlipse fertig geworden. Teclipse ist ein Eclipse-Plugin zur Erstellung von Latex-Dokumenten. Weiters ist hier zu finden: &lt;a href="http://sites.google.com/site/mirkoebert/Home/werkzeuge"&gt;http://sites.google.com/site/mirkoebert/Home/werkzeuge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7330930645983785153?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7330930645983785153/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/texlipse.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7330930645983785153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7330930645983785153'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/texlipse.html' title='Texlipse'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3479293403852354409</id><published>2009-07-03T00:59:00.000-07:00</published><updated>2009-07-03T01:05:45.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Texte für LaTeX-Dokumente schreiben.</title><content type='html'>Die aktuellen Office-Pakete glänzen heute durch eine recht gute Rechtschreib- und Grammatikprüfung, ein Feature das vielen LaTeX-Editoren fehlt. Ein Möglichkeit dies zu kompensieren ist die Verwendung von Open Office mit der Erweiterung &lt;a href="http://extensions.services.openoffice.org/project/writer2latex"&gt;Writer2LaTeX&lt;/a&gt;. Mit ihr kann man Open Office Textdokumente als LaTeX-Dokumente exportieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3479293403852354409?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3479293403852354409/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/texte-fur-latex-dokumente-schreiben.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3479293403852354409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3479293403852354409'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/texte-fur-latex-dokumente-schreiben.html' title='Texte für LaTeX-Dokumente schreiben.'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4612141480967733874</id><published>2009-06-25T05:57:00.000-07:00</published><updated>2009-06-25T06:18:16.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Wo sollen die JUnit-Tests ausgeführt werden?</title><content type='html'>&lt;div style="text-align: left;"&gt;Wenn man ein Projekt mit Hilfe Mavens realisiert und steht man meist vor dem Problem wo man die JUnit-Tests ausführt. Natürlich in Maven, das funktioniert prima auf Grund der meist durch Maven definierten Projektstruktur (ich weiss, sie ist natürlich änderbar). Das Problem was ich dann habe, es dauert länger bis ich weiss wie das Ergebnis der Test ist, dazu kommt das die Integration der Testergebnisse und deren graphische Darstellung (lange List in der Console) im Vergleich zur JUnit-Komponnente aus Eclipse mau ist. Wenn ich versuche einzelne Tests oder alle Tests des Projekts via Run-Menü in Eclipse ausführen zu lassen schlägt dies fehl. Abhilfe schafft dort ein anderer Weg (siehe Bild), wähle im &lt;i&gt;Package Explorer&lt;/i&gt; das Projekt aus, gehe dann auf den Menüpunkt &lt;i&gt;Run As&lt;/i&gt; und dort weiter auf den Punkt 5 &lt;i&gt;JUnit Test&lt;/i&gt;. Das wars, jetzt können alle Tests sowohl in Maven als auch in Eclipse ausgeführt werden.&lt;/div&gt;&lt;div&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 242px; height: 320px;" src="http://4.bp.blogspot.com/_9ca3NMTRST4/SkN4hurkE0I/AAAAAAAAAG4/C9wusug-0q8/s320/Ohne+Titel.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351253303108047682" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4612141480967733874?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4612141480967733874/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/06/wo-sollen-die-junit-tests-ausgefuhrt.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4612141480967733874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4612141480967733874'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/06/wo-sollen-die-junit-tests-ausgefuhrt.html' title='Wo sollen die JUnit-Tests ausgeführt werden?'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9ca3NMTRST4/SkN4hurkE0I/AAAAAAAAAG4/C9wusug-0q8/s72-c/Ohne+Titel.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3792304681264789075</id><published>2009-05-21T11:21:00.000-07:00</published><updated>2009-05-21T11:54:48.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Projektmanagementfehler</title><content type='html'>Hier ein Sammlung meiner liebsten Projektmanagement-Fehler:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Es wird eine neue Software  entwickelt die am Markt verfügbar ist, aber in schlechterer Qualität.&lt;/li&gt;&lt;li&gt;Projekte mit diversen Unterprojekten werden ohne Koordinator versucht.&lt;/li&gt;&lt;li&gt;Projekte mit diversen Unterprojekten werden ohne Integrationskonzept und ohne Personalaufwand für die Integration versucht.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Einheitliche Richtlinien für grosse Projekte werden nicht entwickelt oder nicht umgesetzt bzw. es wird die Umsetzung wird nicht überwacht.&lt;/li&gt;&lt;li&gt;Usability wird als Beiwerk in Projekten betrachtet.&lt;/li&gt;&lt;li&gt;Projektpläne werden nicht an veränderte Bedingungen angepasst.&lt;/li&gt;&lt;li&gt;Hippe Techniken werden ohne Rücksicht auf die Bedingungen im Projekt eingesetzt.&lt;/li&gt;&lt;li&gt;Erkannte Architekturfehler werden ignoriert.&lt;/li&gt;&lt;li&gt;Komplexe Projekte werden ohne Entwicklungsiterationen versucht.&lt;/li&gt;&lt;li&gt;Zeitverzug in Projekten wird ignoriert, es wird dann auf auf die Selbstheilungskräfte im Projekt gesetzt.&lt;/li&gt;&lt;li&gt;Man ignoriert elementare Anforderungen des Kunden um sich selbst zu verwirklichen.&lt;/li&gt;&lt;li&gt;Man lässt den Kunden alles Bestimmen (zu diesem Thema gibt es übrigen eine Simpsons-Folge in der Homer ein Auto entwirft).&lt;/li&gt;&lt;li&gt;Gute Projektidee werden durch mangelhafte Benutzeroberflächen sabotiert, weil bei der Planung niemanden Aufgefallen ist, dass die Software durch eine GUI bedient werden soll. Selbst nach dem erkennen dieses Problem werden keine Ressourcen in die GUI investiert unter dem Motto "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Wir haben eine Software mit den versprochenen Funktionen umgesetzt.&lt;/span&gt;", dass Niemand sie bedienen kann ist nicht unser Problem.&lt;/li&gt;&lt;li&gt;Schwierigkeiten in Projekten werden nicht konsequent angegangen sondern es wird entweder versucht das Problem zu ignorieren (Probleme die ich nicht sehe sind auch nicht da.) oder es wird herum lamentiert und die sich Sachen schöngeredet und versucht es nicht wie einen Fehler aussehen zu lassen.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3792304681264789075?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3792304681264789075/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/projektmanagementfehler.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3792304681264789075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3792304681264789075'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/projektmanagementfehler.html' title='Projektmanagementfehler'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4055351785705269332</id><published>2009-05-20T04:43:00.000-07:00</published><updated>2009-05-20T05:12:20.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring</title><content type='html'>Zur Zeit arbeiten wir an einem Projekt (Server, Fat-Client) in welchem Spring eingesetzt wird. Primär wird dort nur &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Dependency Injection&lt;/span&gt; (DI) verwand. Andere Dinge wie Aspekte, Lokalisierungsunterstützung oder Messageing kamen nicht zum Einsatz. Ein Probleme die dort auftrat waren:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hohe Startup-Zeiten des Clients&lt;/li&gt;&lt;li&gt;Inkonsistentes Logging&lt;/li&gt;&lt;li&gt;Laufzeit-Spring-Fehler &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unzureichende Integration von Spring in Eclipse&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Die hohen Startup-Zeiten in Kombination mit dem Problem das viele Spring-Fehlermeldungen erst zur Laufzeit auftraten haben aus meiner Sicht die ganze Entwicklung des Projektes behindert. Aus diesen Gründen wäre es besonders sinnvoll gewesen, wenn der Projektcode &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Test Driven&lt;/span&gt; entwickelt worden wäre. So hätte man viele Zeit-fressende Iterationen den Entwicklern erspart. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4055351785705269332?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4055351785705269332/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/spring.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4055351785705269332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4055351785705269332'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/spring.html' title='Spring'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3200623826988729155</id><published>2009-05-19T00:50:00.000-07:00</published><updated>2009-05-20T00:56:17.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><title type='text'>TDD Vorlesung - Einführung</title><content type='html'>Bei iTunes gibt es den etwas weniger bekannten Bereich iTunes U. Dort können Universitäten Podcast oder Videopodcast veröffentlichen. Hier habe ich unter anderem eine Vorlesung von RWTH Aachen zu Thema &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Test Driven Development&lt;/span&gt;  von Prof. Jan Borchers (&lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/rwth-aachen.de.1974222834.01974222836.1990456993?i=1335072304"&gt;Link&lt;/a&gt;) gefunden. Auch wenn dort Xcode als Entwicklungsumgebung verwandt wird, so ist es doch eine gute Einführung in das Thema für Leute die sich das erste Mal mit dem Thema beschäftigen wollen. Leider enthält diese Vorführung einen sehr entscheidenden Fehler. Es wird hier demonstriert wie man Test schreibt. Was fehlt ist, wie man den Code schreibt. Bei TDD ist das schreiben von Code nicht equivalent zum schreiben von herkömmlichen Code, das hängt mit den kurzen Round-Trip-Zeiten zusammen, d.h. zwischen schreiben eines Test und dem schreiben des dazugehörigen Codes vergeht sehr wenig Zeit, z.B. eine Minute auch wird dort nur beiläufig angerissen, wie Test zu schreiben sind. Dies hat aber aus meiner Erfahrung einen entscheidenden Einfluss auf den späteren Code. Aber solche Dinge könnte man ja schon als Vertiefung des TDD ansehen. Sauberer wäre es schon gewesen, die wichtigen Dinge des TDD gleich am Anfang zu erwähnen:&lt;br /&gt;&lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/rwth-aachen.de.1974222834.01974222836.1990456993?i=1335072304"&gt;&lt;/a&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Test first&lt;/li&gt;&lt;li&gt;Kurze Round-Trip-Zeiten&lt;/li&gt;&lt;li&gt;Boundary Test&lt;/li&gt;&lt;li&gt;Testen mit falschen Parametern (Fehlerbehandlung)&lt;/li&gt;&lt;li&gt;Einbeziehung von Code-Überdeckung&lt;/li&gt;&lt;li&gt;Übergang vom Black-Box-Testen zum White-Box-Testen&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3200623826988729155?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3200623826988729155/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/ttd-vorlesung.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3200623826988729155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3200623826988729155'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/ttd-vorlesung.html' title='TDD Vorlesung - Einführung'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3860248816461359448</id><published>2009-05-08T00:50:00.001-07:00</published><updated>2009-05-08T00:51:40.527-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Spassvögel bei Sun</title><content type='html'>Warum heisst die grundlegende Klasse in Java eigentlich &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Object&lt;/span&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3860248816461359448?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3860248816461359448/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/spassvogel-bei-sun.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3860248816461359448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3860248816461359448'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/spassvogel-bei-sun.html' title='Spassvögel bei Sun'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5453220050712025706</id><published>2009-05-08T00:30:00.000-07:00</published><updated>2009-05-08T00:42:38.110-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><title type='text'>Test Driven Development (TDD)</title><content type='html'>Letztens wurde ich gefragt, wie ich das Problem löse, schwer testbare Klassen zu testen. Eine Möglichkeit wären natürlich Mock-Objekte, also Objekte die fürs Testen gewisse Funktionen als Dummy bereitstellen ggf. auch Datenbanken mit Testdaten aufbauen. Dies ist zwar etwas aufwendiger als das schreiben reiner Tests aber sonst nicht weiter aufregend. Da diese Antwort scheinbar nicht ausreichte, war meine nächste Antwort, dass das Objektmodell dann wohl fehlerhaft wäre und man dort ansätzen müsste. Diese Antwort war wohl nichts für Verfechter der reinen Objekt-orientierten Analyse und Entwurfs. Es wurde daraufhin auch deutlich, dass das Gegenüber unter &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Extreme Programming&lt;/span&gt; (XP) und TDD wohl nur als eine Technik wie z.B. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Hibernate&lt;/span&gt; verstanden. XP und TDD sind an dieser Stelle mehr, sie sind ein Wechsel bei der Art und Weise wie Software entwickelt wird. Das heisst natürlich nicht, dass sich XP, TDD und Objekt-orientierte Softwareentwicklung sich ausschliessen. XP und TDD sind die nächste Evolutionsstufe der Softwareentwicklung, der Objekt-orientierten Softwareentwicklung.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5453220050712025706?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5453220050712025706/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/test-driven-development-tdd.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5453220050712025706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5453220050712025706'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/test-driven-development-tdd.html' title='Test Driven Development (TDD)'/><author><name>mirko</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09215910403105168817'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>