<?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>Privates Blog von Karsten Gresch &#187; apache</title>
	<atom:link href="http://blog.gresch.de/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gresch.de</link>
	<description>Varia, Miscellania</description>
	<lastBuildDate>Wed, 06 Jul 2011 18:23:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Vermisst: Hardware-Benchmark für Entwickler</title>
		<link>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/</link>
		<comments>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:28:22 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Berufsleben]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vermisstes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[karsten]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=312</guid>
		<description><![CDATA[Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- [...]]]></description>
			<content:encoded><![CDATA[<p>Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.<br />
Oberflächlich mag der typische Softwareentwickler Quellcode <em>schreiben</em>, was nicht so entfernt vom Schreiben von Textdateien zu sein scheint.</p>
<p>Tatsächlich ist der Quellcodeeditor nur ein Bestandteil von vielen, die die <a href="http://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung">Integrierte Entwicklungsumgebung</a> (&#8220;IDE&#8221;) eines Entwicklers ausmachen: Damit der Quellcode überhaupt ausgeführt werden kann, muss er kompiliert werden. Bisweilen muss ein Entwickler während der Ausführung des Programms an bestimmten Stellen den Ausführungsfluss Schritt-für-Schritt  überwachen (&#8220;debuggen&#8221;), wozu die Anwendung in den Arbeitsspeicher geladen werden muss.</p>
<p>Der Quelltext bewegt sich auch nicht im luftleeren Raum: Anwendungen werden in Projekte und Bibliotheken aufgeteilt, häufig handelt es sich um einige hunderte bis tausende Dateien, die gemeinsam kompiliert und in den Arbeitsspeicher geladen werden müssen. Allein das Lesen der Quelltexte und das Erstellen der Kompilate kann bei mittelgroßen Anwendungen mehrere Minuten, bei größeren sogar viele Stunden andauern.</p>
<p>Auch wenn IDEs inkrementelles Kompilieren ermöglichen, wird des öfteren ein &#8220;<a href="http://de.wikipedia.org/wiki/Erstellungsprozess">Build</a>&#8221; (alle Kompilate und dazugehörige Dateien) wieder gelöscht und vollständig neu erstellt.Zudem sind Softwareanwendungen im Unternehmensumfeld verteilt und kommunizieren mit Datenbanken, anderen Systemen und/oder der im Unternehmen eingesetzten Middleware.</p>
<p>Normalerweise ist der Entwickler bestrebt, auf seinem Rechner die Bedingungen, unter denen seine Anwendung später ausgeführt werden soll, en miniature nachzubilden: Auf diese Weise ist er unabhängig von Wartezeiten und kann ggf. auch offline (z.B. im Zug) arbeiten.</p>
<p>Was deshalb wirklich entscheidend für einen Entwicklerrechner?</p>
<p>Die Leistung:</p>
<p>Ein Softwareentwickler benötigt ein für seine Ansprüche äußerst leistungsfähiges System, was sich insbesondere auf<strong></strong></p>
<p><strong>a)</strong> die Festplatte<strong><br />
b)</strong> den Hauptspeicher<strong><br />
c)</strong> die CPU und<strong><br />
d)</strong> Grafikkarte + Display bezieht.</p>
<p>Die <strong>Festplatte</strong> ist deshalb so wichtig, weil zum Erstellen von &#8220;Builds&#8221; oft tausende Dateien gelesen und geschrieben werden. Normalerweise liegt in langsamen Festplatten <em>der</em> Schwachpunkt von Entwicklersystemen (abgesehen von Virenscanner, die die Buildverzeichnisse überwachen). Sinnvoll können hier <a href="http://de.wikipedia.org/wiki/Solid_State_Drive">Solid State Discs</a> (flash-basiert) oder <a href="http://de.wikipedia.org/wiki/RAID">RAID</a>-Systeme (RAID 0 oder 0+1, aber nicht 5) mit <a href="http://de.wikipedia.org/wiki/Serial_ATA">SATA</a> oder <a href="http://de.wikipedia.org/wiki/Serial_Attached_SCSI">SAS</a> sein, die den Datendurchsatz erhöhen.</p>
<p>Der <strong>Hauptspeicher</strong> muss sehr großzügig dimensioniert sein: Zur Zeit sollte ein Rechner für die Anwendungsentwicklung verteilter Systeme über mindestens 8 GByte Hauptspeicher verfügen, besser wäre gleich das Doppelte (einige Notebook-Workstations bieten mittlerweile 16 GByte an).</p>
<p>Softwareseitig bedingt dies den Einsatz von 64-Bit-Betriebssystemen.Wird mit virtuellen Maschinen gearbeitet (was immer mehr zunimmt), ist ein <strong>Mehrprozessor</strong>- wenigstens ein Multicoresystem sinnvoll. Um die Fülle an Informationen einer IDE wie <a href="http://www.eclipse.org/">Eclipse</a>, <a href="http://netbeans.org/">Netbeans</a> oder <a href="http://qt.nokia.com/">Qt</a> auf einen Bildschirm zu bekommen, empfiehlt sich zudem ein hochauflösendes Display und eine entsprechende Grafikkarte.</p>
<p>Wie separat dargelegt, macht sich eine <a href="http://blog.gresch.de/2009/08/30/der-wahre-prei…ger-hardware-2/">Leistungssteigerung bei Entwicklerrechnern schnell bezahlt</a>. Um Entscheidern (und nach besserer Hardware strebenden Entwicklern) eine objektivere Entscheidungsgrundlage an die Hand zu geben, würde ich mir einen Benchmark wünschen, der</p>
<p><strong>a)</strong> die Leistungsfähigkeit eines Systems hinsichtlich der o.a. Kriterien für einen Entwicklerrechner misst,<strong><br />
b)</strong> kostenlos verfügbar,<strong><br />
c)</strong> plattformunabhängig und<strong><br />
d)</strong> einfach bedienbar ist.</p>
<p>Ein Benchmark der mit Referenzprojekten arbeitet, der gängige IDEs startet, auf denen kleine, mittelgroße und große Referenzprojekte mit der IDE erstellt werden, wobei dies noch mit parallel laufenden Middlewareservern kombiniert werden sollte.</p>
<p>Falls jemandem ein solcher Benchmark bekannt ist, wäre ich dankbar für einen Hinweis ()! Interessenten, die ein derartiges Projekt auf die Beine stellen möchten, können mich gerne ansprechen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der wahre Preis billiger Hardware</title>
		<link>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/</link>
		<comments>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 18:42:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Berufsleben]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=315</guid>
		<description><![CDATA[In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen. Tatsächlich ist [...]]]></description>
			<content:encoded><![CDATA[<p>In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.</p>
<p>Tatsächlich ist das Schreiben von Quellcode nur die Spitze des Eisbergs: Auf dem Entwicklerrechner wird dieser Quellcode nicht nur zu ausführbarer Software gemacht, sondern häufig eine vollständige Simulation der Unternehmensanwendungen ausgeführt, in deren Umgebung die Software verwendet werden soll. Also Datenbanken, Webserver, E-Mail-Server etc. etc.</p>
<p>Für den Entwicklerrechner bedeutet dies, dass er um ein Vielfaches leistungsfähiger sein muss als die Rechner, die man zur Erfüllung von Büroaufgaben verwendet.</p>
<p>Im Gegensatz zu <a href="http://www.joelonsoftware.com">Joel Spolsky</a> statten viele Unternehmen ihre Softwareentwickler aber mit billiger Standardbürohardware aus. Meist muss schon die Aufrüstung des Arbeitsspeichers gesondert beantragt werden.</p>
<p>Was bedeutet das für die Entwickler? Vor allem müssen sie längere Wartezeiten in Kauf nehmen: Beim Kompilieren, beim Debuggen und Testen ihrer Anwendungen sowie beim Starten der IDE.</p>
<p>Was bedeutet das für die Unternehmen? Berechnen wir das einmal an einem <strong>Beispiel (aus meiner Praxis)</strong>:</p>
<p>Die Entwickler eines größeren Finanzdienstleisters arbeiten mit Eclipse, die Anwendung wird in der Programmiersprache Java erstellt und ist in 10 voneinander abhängige Projekte (genauer: <a href="http://maven.apache.org">Maven</a>-Module) gegliedert. Insgesamt handelt es sich um über viertausend Dateien, die kompiliert werden müssen (zuzügl. einiger Konfigurationsdateien).</p>
<p>Der durchschnittliche Rechner der Entwickler benötigt für das Erstellen eines Builds eine knappe halbe Stunde (mit Virenscanner über zweieinhalb Stunden).</p>
<p>In dieser Zeit können die Entwickler zumindest nicht programmieren, häufig nicht einmal mehr E-Mails lesen, weshalb der Arbeitsalltag so ausgerichtet ist, dass vollständige Builds zum einen vermieden und zum anderen auf den Morgen (Rechnerstart &#8211; Zeit für einen Kaffee) und die Mittagspause verlegt werden.</p>
<p>Im Team wird verteilt gearbeitet und regelmäßig integriert (d.h., Entwickler, die an Modul A arbeiten, stellen ihre Änderungen zur Verfügung, Entwickler, die an Modul B arbeiten, holen sich die aktualisierten Quelltexte von der Versionsverwaltung, was häufiger zur Folge hat, dass ein vollständiges Build erzeugt werden muss), wodurch <em>zwei vollständige Builds am Tag die Regel</em> sind.</p>
<p>Gehen wir <a href="http://www.sueddeutsche.de/jobkarriere/821/470371/text/">vorsichtig</a> von einem Durchschnittsgehalt von 60 T EUR für einen Entwickler mit mehr als sechs Jahren Berufserfahrung aus, ergeben sich folgende Kosten (Berechnungsgrundlage 223 Arbeitstage: 365 Kalendertage abzügl. Wochenenden (104 Tage), Feiertage (8 Tage) und Urlaub (30 Tage), 40-Stundenwoche):</p>
<p><strong>Stundensatz</strong><br />
60.000 / 223 / 8 = <strong>33,62 EUR </strong></p>
<p>Auf zwei Builds zu je einer knappen halben Stunde am Tag bezogen bedeutete dies im ungünstigsten Fall (die Entwickler warten einfach nur, während das Build erstellt wird und sind ansonsten nicht weiter produktiv) jährliche Kosten von</p>
<p>223 x 33,62 EUR = <strong>7.497,26 EUR</strong> <strong>pro Entwickler</strong> und</p>
<p>16 x 7.497,26 EUR = <strong>119.956,16 EUR</strong> <strong>für das</strong> aus sechzehn Personen bestehende <strong>Team</strong>.</p>
<p>Die Verdopplung des Arbeitsspeichers und der Einbau schnellerer Festplatten bewirkte, dass ein vollständiges Build in gut 15 Minuten erstellt werden konnte.</p>
<p>Vergleicht man die Kosten für die Aufrüstung pro PC (450,- EUR für die Hardware, etwa 150,- EUR Personalkosten [Einbau durch Supporttechniker, Procurement] ) sieht man sofort, dass sich selbst bei einem geringeren Produktivitätsausfall als 100 % eine Investition in bessere Hardware schnell amortisiert:</p>
<p><strong>Ersparnis rein rechnerisch</strong>:<br />
119.956,16 EUR / 2* = 59978,08 EUR abzüglich 9.600,- EUR Hardwarekosten = <strong>50.378,08 EUR</strong></p>
<p>*Halbierung der Kompilierzeit</p>
<p>(Aufs Jahr bezogen wird somit eine Aufrüstung rentabel, sobald die festgestellte Produktivitätseinbuße bei über 8% liegt, was in jedem Fall gegeben ist.).</p>
<p>Weiterhin ist interessant, dass dieselben Rechner auch allen extenen Beratern zur Verfügung gestellt wurden. Deren Stundensatz lag dabei weitaus höher, wodurch sich die Investition noch schneller amortisierte.</p>
<p>Positive Seiteneffekte des Einsatzes leistungsfähigerer Entwicklerrechner sind zudem verbessertes Time-To-Market (offensichtlich) sowie ein besseres Betriebsklima (lange Buildzeiten frustrieren Entwickler, schnelle Rechner hingegen erfreuen sie).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse + Maven: Debuggen im Sourcecode benachbarter Projekte</title>
		<link>http://blog.gresch.de/2009/01/10/eclipse-maven-debuggen-im-sourcecode-benachbarter-projekte/</link>
		<comments>http://blog.gresch.de/2009/01/10/eclipse-maven-debuggen-im-sourcecode-benachbarter-projekte/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 21:46:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sourcecode]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=285</guid>
		<description><![CDATA[Problem Bei der Arbeit mit Maven und Eclipse an einer modular aufgebauten Anwendung (mehrere Eclipse-Projekte, Maven mit dem m2Eclipse-Plugin, &#34;Mama-POM&#34; und Modulprojekte) vermeide ich abh&#228;ngige Projekte, da es einen Unterschied macht, ob man mit dem physikalischen Ergebnis, also dem Maven-Artefakt, oder mit einem verkn&#252;pften Eclipse-Projekt arbeitet. Vielen Probleme damit f&#252;hrten dazu, standardm&#228;&#223;ig Disable Workspace Resolution [...]]]></description>
			<content:encoded><![CDATA[<p><b><br />
Problem</b><br />
Bei der Arbeit mit Maven und Eclipse an einer modular aufgebauten Anwendung (mehrere <a href="http://www.eclipse.org">Eclipse</a>-Projekte, <a href="http://maven.apache.org">Maven</a> mit dem <a href="http://m2eclipse.codehaus.org/">m2Eclipse</a>-Plugin, &quot;Mama-POM&quot; und <a href="http://maven.apache.org/guides/mini/guide-ide-eclipse.html#Multiple_Module_Project">Modulprojekte</a>) vermeide ich <a href="http://books.sonatype.com/maven-book/reference/eclipse-sect-resolving-dependencies.html">abh&auml;ngige Projekte</a>, da es einen Unterschied macht, ob man mit dem physikalischen Ergebnis, also dem Maven-Artefakt, oder mit einem verkn&uuml;pften Eclipse-Projekt arbeitet.</p>
<p>
Vielen Probleme damit f&uuml;hrten dazu, standardm&auml;&szlig;ig <i>Disable Workspace Resolution</i> und <i>Disable Nested Modules</i> zu w&auml;hlen.</p>
<p>
Das macht aber das Debuggen schwierig: Beim Debuggen m&ouml;chte man beim Debuggen direkt in den Quellcode der mit der Startanwendung verbundenen Modulprojekte springen.</p>
<p>
Defaultm&auml;&szlig;ig ist das nicht m&ouml;glich, vielmehr wird die <i>.class</i>-Datei im Editor angezeigt. Hier hilft auch nicht, den Ort des Source-Codes in den Maven-Abh&auml;ngigkeiten manuell mitzuteilen.</p>
<p>
Verlinkte Quellordner (siehe <a href="http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.platform.doc.user/concepts/concepts-13.htm">linked resources</a>) helfen hier nicht.</p>
<p><b></b><br />
<b>L&ouml;sung</b><br />
In den Debug-Einstellungen als Quellordner die Modulprojekte angeben &uuml;ber <i>Debug</i>-&gt;<i>Open Debug Dialog</i>-&gt;<i>Source.</i></p>
<p><b></b></p>
<p><b><br />
Tip</b> <br />
Wenns beim Debuggen von <a href="http://www.eclipse.org/webtools/">WTP</a>-Projekten dennoch nicht funktioniert, daran denken, den Server im Debug-Modus zu starten <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2009/01/10/eclipse-maven-debuggen-im-sourcecode-benachbarter-projekte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven: test-jar für andere Projekte erstellen.</title>
		<link>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/</link>
		<comments>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 23:21:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=290</guid>
		<description><![CDATA[Manchmal ben&#246;tigt man ein JAR, das nur Testklassen enth&#228;lt, um diese in mehreren Projekten zu verwenden. Dieses erstellt man wie folgt: 1. Test-JAR im Ausgangsprojekt erstellen In der pom.xml des Projekts, dessen Testklassen verwendet werden sollen, erstellt man ein separates JAR &#252;ber eine &#196;nderung des maven-jar-plugins: &#60;plugins&#62; &#60;!-- Weitere Plugins --&#62; &#60;plugin&#62; &#60;groupId&#62;org.apache.maven.plugins&#60;/groupId&#62; &#60;artifactId&#62;maven-jar-plugin&#60;/artifactId&#62; &#60;executions&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal ben&ouml;tigt man ein <a href="http://de.wikipedia.org/wiki/Java_Archive">JAR</a>, das nur Testklassen enth&auml;lt, um diese in mehreren Projekten zu verwenden. Dieses erstellt man wie folgt:</p>
<p><b></b></p>
<p><b><br />
1. Test-JAR im Ausgangsprojekt erstellen</b></p>
<p>In der <i>pom.xml</i> des Projekts, dessen Testklassen verwendet werden sollen, erstellt man ein separates JAR &uuml;ber eine &Auml;nderung des maven-jar-plugins:</p>
<pre>
&lt;plugins&gt;
</pre>
<pre><span style="color: rgb(51, 153, 102);">&lt;!-- Weitere Plugins --&gt;  </span>  </pre>
<pre>
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
      &lt;execution&gt;
        &lt;goals&gt;
          &lt;goal&gt;test-jar&lt;/goal&gt;
        &lt;/goals&gt;
      &lt;/execution&gt;
    &lt;/executions&gt;
  &lt;/plugin&gt;
&lt;/plugins&gt;
</pre>
<p>&nbsp;</p>
<p><b></b></p>
<p><b>2. Test-JAR verwenden</b></p>
<p>In der <i>pom.xml</i> eines Projekts, welches das JAR mit den Testklassen verwenden soll, tr&auml;gt man eine Dependency mit einem <i>classifier</i> ein:</p>
<pre>
&lt;dependency&gt;
  &lt;groupId&gt;de.buergel.bas&lt;/groupId&gt;
  &lt;artifactId&gt;bas-spring.server&lt;/artifactId&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;scope&gt;test&lt;/scope&gt;
  &lt;classifier&gt;tests&lt;/classifier&gt;
&lt;/dependency&gt;
</pre>
<p>Siehe dazu den <a href="http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html">ausf&uuml;hrlichen Blogeintrag von Walter Cedric (Englisch)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social DNA</title>
		<link>http://blog.gresch.de/2008/09/04/social-dna/</link>
		<comments>http://blog.gresch.de/2008/09/04/social-dna/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 20:45:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[bildung]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Ideen]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Literatur]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=286</guid>
		<description><![CDATA[Letztens eine Nachricht über XING erhalten. Der Absender zeigte sich erfreut über meine dort hinterlegten Interessen, als da wären: Softwareentwicklung mit agilen Methoden, Java EE (JEE), J2EE, Java2EE, Java, Ruby, Linux, JSF, Spring, Hibernate, SCALA, JBoss Seam, Maven, Apache Software Foundation, Eclipse, Eclipse RCP, NetBeans, Rules Engines, Middleware, SOA, BPM, ITIL, TOGAF, Zachman, Lean Management, [...]]]></description>
			<content:encoded><![CDATA[<p>Letztens eine Nachricht über XING erhalten. Der Absender zeigte sich erfreut über meine dort hinterlegten Interessen, als da wären:</p>
<p><em>Softwareentwicklung mit agilen Methoden, Java EE (JEE), J2EE, Java2EE, Java, Ruby, Linux, JSF, Spring, Hibernate, SCALA, JBoss Seam, Maven, Apache Software Foundation, Eclipse, Eclipse RCP, NetBeans, Rules Engines, Middleware, SOA, BPM, ITIL, TOGAF, Zachman, Lean Management, IT-Strategie, Neue Musik, Klassische Musik, Musizieren, Klavier, Klarinette, Literatur (speziell Lyrik), Literatur, Bildende Künste, Kunst, Kulturgeschichte, Kunstgeschichte, Berlin, London, Venedig, Paris, Florenz, Rechtsinformatik, Italien, Großbritannien, English Literature, English Verse. Werke u.a. folgender Personen: Fowler, Tiepolo, Eisenstein, Braudel, Schnitzler, Ligeti, Knuth, Pushkin, Satie, Bellini, Monteverdi, Adams, Veronese, Shelley, Brecht, Dowson, Brahms, Montaigne, Schumann, Kubrick, Rameau, Bartok, Huizinga, Mahler, v. Bingen, Lenau, Frisch, Lenz, Olbrisch, Brunelleschi, Lichtenberg, Turner, Günther, Trakl, Scelsi, Redon, Streeruwitz, Flaubert, Friedell, Naso, Wilde, Bernhard, Erasmus, Gernhardt, Klimt, Palladio, Rückert, Härtling, Flaccus, v.d. Weyden, Balthus, Reynaldo Hahn, Caroll, Borodin, Verlaine, Mörike, Schobert, Villon, Greenaway, Heym, Thelen, Watteau, Abschatz, Jelinek, Bach (4x), Huysmans, Schiele, Ravel, Walser, V. Klemperer, Augustinus, Kling, Mann (2x), Gombrich, Stroustrup, Auster, Brüder Limburg, Franck, Purcell, Fellini, Truffaut, Hofmannsthal, Pollock, Schubert, Bresdins, Ariès/Duby, Bulgakow, Lenz, Proust, Neruda, de Beauvoir, Brouwer, Fragonard, Degas, Kurtag, Zelenka, Pepys, Rimbaud, Giorgione, Bachmann, Vian, Wilder, Wilmot/Rochester, Brinkmann, Callot, Opitz, Couperin, Ockeghem, Giacometti, Celan, Klinger, Catull, Sterne. Laufen, Laufsport, Joggen, Marathon.</em></p>
<p><em> </em><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p>Diese hatte ich schon vor längerer Zeit einmal zusammengekramt, um einer <a href="http://blog.gresch.de/2005/05/05/computersprache/">schmerzhaft</a> Geliebten zu erkennen zu geben, ich wäre der richtige für sie, allein meiner Interessen wegen. (Magisches Denken, Zaubersprüche der Kindheit, nur transzendiert.).</p>
<p>Tatsächlich erkannte ich nach einer Weile, dass diese Frau sich weder für mich noch für wenigstens 10% der aufgeführten &#8220;Inhalte&#8221; hinter den Namen interessierte.</p>
<p>Wär mir letzteres wiederum von Anfang an bekannt gewesen, hätte ich gar nicht damit begonnen, ihr nichtvorhandene Gemeinsamkeiten zu unterstellen (Gegengeschlechtlichkeit ist ja wirklich keine Gemeinsamkeit.).</p>
<p>Und auch kein ernsthaftes Interesse für sie entwickelt.</p>
<p>Das wirft bei mir die Frage auf, ob es nicht irgendeinen Social-Web-Dienst gibt, bei dem man solche Informationen nicht hinterlegen kann, um eine &#8220;Interest Map&#8221; zu erstellen, die man dann mit der anderer Nutzer vergleichen kann. Auf diese Weise könnte man eine <a href="/index.php?/archives/212-Frisch-Lektuere-Rueckzug-aufs-Selbst.html">Sozial-DNA</a> erstellen, und Menschen finden, die ähnliche Interessen haben / Ziele verfolgen.</p>
<p>Am besten noch mobil die Sozial-DNA gegeneinander abgleichen können. Und das noch für berufliche Profile und private. Und eine &#8220;Heat Map&#8221;, die anzeigt, wo sich im Raum die Leute befinden, mit denen man zumindest die Interessen teilt. Etc. Etc. (z.B. mit sozioökonomischen und politischen Kriterien).</p>
<p>Datenschutz wäre da ein noch sensibleres Thema als bei den gängigen &#8220;Social Tools&#8221;. Mir erschiene <em>so etwas</em> jedenfalls sinnvoller als die ganzen &#8220;Legacy DNA&#8221; Startups wie <a href="http://www.navigenics.com/">Navigenics </a>etc., die einem alles und nichts zu der eigenen DNA mitteilen. Die Möglichkeit, die &#8220;Social DNA&#8221; (die keinen Status ausdrückt, sondern mikroindividuelle Differenzierung) verändern zu können, ist hier entscheidend: Jeder Mensch hat ja die Möglichkeit, sein Profil zu verändern. Ggf. sollte man sogar von vornherein angeben können, in welche Richtung man sich entwickeln möchte, was man nicht kennt, aber kennen möchte etc.</p>
<p>Konkreter sollte das ganze so gestaltet sein, dass für den Grunddatenbestand eine Anzahl von etwa 100 unterschiedlichen &#8220;Leads&#8221; (Schlüsselpersonen) ihre inhaltlichen, kulturellen, religiösen, sportlichen, politischen Interessen und Kenntnisse, Ziele und Vorlieben mitteilen, am besten über eine Liste von Stichwörtern wie oben dargestellt.</p>
<p>Diese wird dann geparst, bestehenden Schlüsselobjekten und semantisch zugeordnet. Danach erfolgt dann eine Auswertung / Neuindexierung der ermittelten Objekte durch die Nutzer. Sind die Schlüsselbobjekte zugeordnet, werden sie bewertet: Bei &#8220;Werken&#8221;, Künstlerinnen, Musikstücken (kristalline Intelligenz) vor allem nach Vorlieben (mag ich / mag nicht / mir unbekannt), bei konzeptionellen Schlüsselobjekten (fluider Intelligenz) auch nach Fähigkeit (verstehe/kann ich, verstehe/kann ich nicht / mir unbekannt).</p>
<p>Dieser Grunddatenbestand kann dann von anderen übernommen und weiter angepasst werden.</p>
<p>Das ganze mit der Möglichkeit, sich mit anderen Nutzern &#8220;zu verbinden&#8221;, von ihnen Objekte zu übernehmen und für sich selbst zu bewerten, zu suchen und sich finden zu lassen und sich eine Timeline anzeigen zu lassen, aus der man später ermitteln kann, wie sich die eigene Social DNA verändert hat.</p>
<p>Falls jemand einen solchen Dienst kennt, wär ich für einen Hinweis sehr dankbar <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/09/04/social-dna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven-Snippets</title>
		<link>http://blog.gresch.de/2008/07/12/maven-snippets/</link>
		<comments>http://blog.gresch.de/2008/07/12/maven-snippets/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 16:27:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=270</guid>
		<description><![CDATA[Hier einige Kniffe f&#252;r Maven, die h&#228;ufiger angefragt (oder von mir selbst ben&#246;tigt) werden. Siehe auch die Maven-FAQ (die Code-Snippets lassen leider immer noch auf sich warten) und die FAQ vom Codehaus-Wiki. &#160; Ein Tip: Installiert man das mittlerweile stark ausgereifte m2 Maven-Plugin von Codehaus, findet man weitere sehr n&#252;tzliche Hinweise in der Eclipse-Hilfe, die [...]]]></description>
			<content:encoded><![CDATA[<p>Hier einige Kniffe f&uuml;r Maven, die h&auml;ufiger angefragt (oder von mir selbst ben&ouml;tigt) werden. Siehe auch die <a href="http://maven.apache.org/general.html">Maven-FAQ</a> (die Code-Snippets lassen leider immer noch auf sich warten) und die FAQ vom <a href="http://docs.codehaus.org/display/MAVENUSER/FAQs-1">Codehaus-Wiki</a>.</p>
<p>&nbsp;</p>
<p>
Ein Tip: Installiert man das mittlerweile stark ausgereifte <a href="http://m2eclipse.codehaus.org/">m2 Maven-Plugin von Codehaus</a>, findet man weitere sehr n&uuml;tzliche Hinweise in der Eclipse-Hilfe, die den gesamten &quot;<a href="http://www.sonatype.com/book/reference/public-book.html">Definite Guide</a>&quot; integriert, mit Suchfunktion.</p>
<p>&nbsp;</p>
<p>Die letzten Versionen des Plugins w&auml;ren eigentlich einen eigenen Eintrag wert: Es kommt jetzt mit einem schon ansprechenden POM-Editor daher, der an die Editoren f&uuml;r die Eclipse-RCP-Entwicklung erinnert (etc. etc. etc., WTP-Unterst&uuml;tzung ist im <a href="http://docs.codehaus.org/display/M2ECLIPSE/WTP+mini+howto">Codehaus-Wiki</a> beschrieben), aber Achtung: Die Eclipse-Update-URL hat sich ge&auml;ndert zu <b>http://m2eclipse.sonatype.org/update/</b> resp. <b>http://m2eclipse.sonatype.org/update-dev</b> !<b></b></p>
<p><b></p>
<p>Test umgehen</b></p>
<p>An der Kommandozeile:</p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-Dmaven.test.skip=true</div></div>
</p>
<p>&nbsp;</p>
<p>In der <i>pom.xml</i>:</p>
<pre>
&lt;plugins&gt;<span style="color: rgb(51, 153, 102);">     </span>
<span style="color: rgb(51, 153, 102);">&lt;!-- ...weitere Plugins... --&gt;</span>
  &lt;plugin&gt;
    &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
    &lt;configuration&gt;
    &lt;skip&gt;true&lt;/skip&gt;
    &lt;/configuration&gt;
  &lt;/plugin&gt;
&lt;/plugins&gt;
</pre>
<p><b></b><b><br />
Fremdes Archiv in lokales Repository deployen</b></p>
<p>Kommt insb. vor, wenn man kommerzielle Archive, die nicht &ouml;ffentlich verf&uuml;gbar sind, in sein lokales Repository &uuml;bernehmen m&ouml;chte. Oder irgendwelche obskuren Legacy-jars, die mit Ant gebaut werden <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )))</p>
<p>Man ben&ouml;tigt eine rudiment&auml;re pom-Datei, Teil-Struktur ggf. von <a href="http://www.mvnrepository.com/">http://www.mvnrepository.com/</a> holen.</p>
<p>Hier ein POM f&uuml;rs Substance L&amp;F:</p>
<p><tt>&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br />
&nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;<br />
&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp; &lt;groupId&gt;org.jvnet&lt;/groupId&gt;<br />
&nbsp; &lt;artifactId&gt;substance&lt;/artifactId&gt;<br />
&nbsp; &lt;version&gt;4.3.11&lt;/version&gt;<br />
&nbsp; &lt;packaging&gt;jar&lt;/packaging&gt;<br />
&nbsp; &lt;name&gt;Substance Look and Feel&lt;/name&gt;<br />
&nbsp; &lt;url&gt;https://substance.dev.java.net/&lt;/url&gt;<br />
&nbsp; &lt;description&gt;Private deplomyent, not from Sun!</tt><tt>&lt;/description&gt;</tt><br />
<tt>&nbsp; &lt;dependencies /&gt;<br />
&lt;/project&gt;</tt></p>
<p>Jetzt an der Kommandozeile in das Verzeichnis wechseln, in dem sich jar und Dummy-POM-Datei befinden und deployen (diesmal f&uuml;rs jnlp-Servlet):</p>
<pre>
mvn deploy:deploy-file -Dfile=jnlp-servlet-1.0.jar -DpomFile=openswing-jnlp-servlet.pom -DrepositoryId=release -Durl=http://10.45.7.7:7575/archiva/repository/internal -e
</pre>
<p><b><br />
Wirksame Konfiguration anzeigen</b></p>
<p><tt>mvn help:<em>effective</em>-pom</tt> (Siehe die n&uuml;tzlichen weiteren Features <a href="http://maven.apache.org/plugins/maven-help-plugin/usage.html">hier</a>).</p>
<p><b><br />
War erstellen</b></p>
<p>In <i>pom.xml</i> (Unterelement von <i>&lt;project&gt;</i>):</p>
<p><tt>&lt;packaging&gt;war&lt;/packaging&gt;</tt></p>
<p>Ggf. das Maven-War-Plugin verwenden und &lt;exclusion&gt; f&uuml;r JEE-Bibliotheken.</p>
<p>Zum Bauen</p>
<p><tt>mvn package</tt></p>
<p><b><br />
Build ausf&uuml;hren (sic)<br />
</b></p>
<p><tt>mvn compile</tt> / <tt>mvn package</tt> </p>
<p>(Und den &quot;<a href="http://www.sonatype.com/book/reference/public-book.html">Definite Guide</a>&quot; lesen, um das Konzept zu verstehen &lt;kicher&gt;).</p>
<p><b><br />
JDK festlegen (zum Kopieren)<br />
</b></p>
<pre>
&lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.0.2&lt;/version&gt;
    &lt;configuration&gt;
        &lt;source&gt;1.6&lt;/source&gt;<span style="color: rgb(51, 153, 102);">&lt;!-- oder 1.4 oder 1.5 etc.--&gt;</span>
        &lt;target&gt;1.6&lt;/target&gt;<span style="color: rgb(51, 153, 102);">&lt;!-- oder 1.4 oder 1.5 etc.--&gt;</span>
    &lt;/configuration&gt;
&lt;/plugin&gt;
</pre>
<p>(Fortsetzung folgt&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/07/12/maven-snippets/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>VerÃ¤ndertes Dependency-Management: Maven &gt; 2.05</title>
		<link>http://blog.gresch.de/2007/12/01/veraendertes-dependency-management-maven-2-05/</link>
		<comments>http://blog.gresch.de/2007/12/01/veraendertes-dependency-management-maven-2-05/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 15:19:32 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[andromda]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[mda]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=225</guid>
		<description><![CDATA[Beim Arbeiten mit AndroMDA auf ein Problem gesto&#223;en, als sich ein Projekt nicht mehr erzeugen lie&#223;; im Forum schlie&#223;lich diesen Hinweis gefunden. Der Grund: Abh&#228;ngige Module ben&#246;tigen ab Maven 2.06 immer in ihrer eigenen pom.xml ebenfalls die Angabe der Versionsnummer. Zur Umstellung siehe die gesonderte Seite hier. Gl&#252;cklicherweise arbeite ich mit einer Struktur, in der [...]]]></description>
			<content:encoded><![CDATA[<p>Beim Arbeiten mit AndroMDA auf ein Problem gesto&szlig;en, als sich ein Projekt nicht mehr erzeugen lie&szlig;; im Forum schlie&szlig;lich <a href="http://galaxy.andromda.org/forum/viewtopic.php?t=4935&amp;highlight=cannot+empty">diesen Hinweis</a> gefunden.</p>
<p>Der Grund: Abh&auml;ngige Module ben&ouml;tigen ab Maven 2.06 immer in ihrer eigenen pom.xml ebenfalls die Angabe der Versionsnummer. Zur Umstellung siehe die gesonderte Seite <a href="http://maven.apache.org/plugins/maven-dependency-plugin/examples/preparing-dependencies.html">hier</a>. </p>
<p>Gl&uuml;cklicherweise arbeite ich mit einer Struktur, in der ich Build-Tools in ein Defaultverzeichnis &quot;current&quot; packe, so dass schnell auf eine andere Version gewechselt werden kann. </p>
<p>Nichtsdestotrotz finde ich es wenig verst&auml;ndlich, wenn in einem Minor-Release eine derart elementare strukturelle Ver&auml;nderung vorgenommen wird. Als Maven-Anwender h&auml;tte ich mir allenfalls eine Warnung gew&uuml;nscht mit R&uuml;ckfall auf die &auml;ltere Funktionalit&auml;t.</p>
<p>Wozu gibt man denn in Maven die Versionsnummer im &lt;modelVersion&gt;-Element der <i>pom.xml</i> &uuml;berhaupt an, wenn nicht auch f&uuml;r eine Abw&auml;rtskompatibilit&auml;t? Sehr merkw&uuml;rdig. </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/12/01/veraendertes-dependency-management-maven-2-05/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat (5/6) &#8211; Aelfred Fehlermeldung beim Start aus MyEclipse heraus</title>
		<link>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/</link>
		<comments>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 04:32:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[webapp]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=217</guid>
		<description><![CDATA[Hier half, &#252;ber Windows, Preferences, MyEclipse, Application Servers, [TC-#] folgendes hinzuzuf&#252;gen: &#160; -Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl-Dorg.xml.parsers.sax.parser=org.apache.xerces.parsers.SAXParser&#160; Siehe dazu auch nur Xerces als Default-Parser setzen.&#160; &#160; &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Hier half, &uuml;ber <em>Windows</em>, <em>Preferences</em>, <em>MyEclipse</em>, <em>Application Servers</em>, [TC-#] folgendes hinzuzuf&uuml;gen:</p>
<pre>&nbsp;</pre>
<pre>-Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl-Dorg.xml.parsers.sax.parser=org.apache.xerces.parsers.SAXParser&nbsp;</pre>
<p>Siehe dazu auch nur <a href="index.php?/archives/184-Xerces-als-Default-Parser-setzen.html">Xerces als Default-Parser setzen</a>.&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Tomcat und Apache in der Produktion (Peter RoÃŸbach)</title>
		<link>http://blog.gresch.de/2007/04/25/jax-2007-tomcat-und-apache-in-der-produktion-peter-roabach/</link>
		<comments>http://blog.gresch.de/2007/04/25/jax-2007-tomcat-und-apache-in-der-produktion-peter-roabach/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 11:58:08 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=176</guid>
		<description><![CDATA[Verbindung HTTP + TC. http://tomcat.objektpark.org/index.html ProxyLoadBalancer Apache httpd &#8211; ist am Browser-bug-resistentesten.Analyse mit Live HTTP Headers Catalina Architecture: Non Blocking IO Handler. ThreadHandler von Session separat. APR f&#252;r NBZ.B. 10.000 gleichzeitige Verbindungen auf derselben Box. Viele Verbindungen, die aber nicht alle gleichzeitig aktiv sind. Tomcat-Pipeline intern: Datenstr&#246;me werden &#34;mundgerecht&#34; zerlegt in Objektrepr&#228;sentationen.Was, wenn ein Server [...]]]></description>
			<content:encoded><![CDATA[<p>Verbindung HTTP + TC. <a href="http://tomcat.objektpark.org/index.html">http://tomcat.objektpark.org/index.html</a> ProxyLoadBalancer Apache httpd &#8211; ist am Browser-bug-resistentesten.<br />Analyse mit Live HTTP Headers</p>
<p><b>Catalina Architecture</b>: Non Blocking IO Handler. ThreadHandler von Session separat.</p>
<p><b>APR</b> f&uuml;r NB<br />Z.B. 10.000 gleichzeitige Verbindungen auf derselben Box. Viele Verbindungen, die aber nicht alle gleichzeitig aktiv sind.</p>
<p>Tomcat-Pipeline intern: Datenstr&ouml;me werden &quot;mundgerecht&quot; zerlegt in Objektrepr&auml;sentationen.<br />Was, wenn ein Server nicht mehr ausreicht?</p>
<p><b>mod_jk</b> -Konzept. &Uuml;ber httpd analysiert und an via <b>A</b>pache <b>J</b>ava <b>P</b>rotocol verbundene Tomcat-Instanzen. &quot;Sauschnell&quot; &#8211; stehende TCP/IP-Verbindungen, wie RPC.</p>
<p><b>jserv</b> -Protokoll: Senden von Kommandos und Datenbl&ouml;cken statt Stream mit Header und Body. Einziges Problem: 8k-Header-Beschr&auml;nkung bei SSL-Verbindungen. Kann aber vergr&ouml;&szlig;ert werden, zu Lasten des allgemeinen Speicherverbrauchs.<br />2-Byte-Kodierung mit Header-Strings. 30%-40% Perfomancegewinn iVglz <i>http_proxy</i>.<br />mod_jk-Konfiguration</p>
<p><i>JKWorkerProperty (ies) setzen:</i></p>
<p><i>worker.list=loadbalancer,jkstatus<br />~node01.port=8009/host=lch/type=ajp13<br />~loadbalancer.type=lb<br />~.balance_workers=node01<br />worker.jkstatus.type=status<br />JkMount /jkstatus status<br />JkMount /myapps* loadbalancer</i></p>
<p>server.xml:<br />jvmRoute=&quot;node01&quot;<br />protocol=&quot;AJP/1.3&quot;</p>
<p><b>AJP im Einsatz</b></p>
<p><b>Real Connect</b>: CPING-Paket hin, CPONG zur&uuml;ck<br />Request: RQ Header<br />Response: Nur wenn Requests beendet sind.<br />LogLevel Trace</p>
<p><b>Template</b><br />einmalige Konfiguration, auf die f&uuml;r viele Instanzen referenziert werden kann.</p>
<p><b>Timeouts</b><br />socket_timeout, connection_pool_~, connect_~, prepost_~, reply_~</p>
<p><b>Recovery </b> +4 Recovery-mode: connection close after ERROR<br /> 3 &#8211; Lieblingsmodus von P.R.</p>
<p> <b>Z&auml;hler-Methoden</b> : Requests, Sessions (PR f&uuml;r statusbehaftete), Busy (kleinste Anzahl von Anfragen, von PR f&uuml;r statuslose Sessions), Traffic (kleinster r+w Traffic); nur Requests, die keine JSessionId erhalten haben.</p>
<p> LB-Algorithmus (PSEUDO-CODE)<br /> DEF service<br /> FIND &lt;worker that handles request&gt;<br /> CALL_get_most_suitable_worker<br /> IF EXISTS &lt;worker candidate&gt;<br /> FIND &lt;worker_endpoint&gt;<br /> IF EXIST &lt;worker_endpoint&gt;<br /> SET WORKER.ATTR.state_busy<br /> SET ATTR.lbvalue<br /> IF LB.ATTR</p>
<p>[###von Folie holen!###]<br /> Weiter mit FIND MOST SUITABLE Algorithmus<br /> Weiter mit FIND BEST Algorithmen<br /> <b>Retries</b></p>
<p>Loadbalancer oder Worker</p>
<p> <i>jk_status</i> : F&uuml;r Analyse zur Ermittlung des geeigneten LoadBalancers.<br /><i>mo_jk</i> <b>State</b> &#8211; Recoverable, Force Recoverable. <b>JKRequestLogFormat</b> &#8211; dezidierte Analysen. <br /> <b>Location Mapping</b>. Eine Maschine liefert statischen Content aus. Loadbalancer immer nutzen, schon wegen <i>jk_status</i>.</p>
<p>Empfohlene Mindestkonfiguration: Zwei Rechner mit je zwei Instanzen (stabiler und updatef&auml;hig.).</p>
<p><b>Hot Standby</b> -<br /><b>Routing</b> &#8211; Konfiguration: Szenario &quot;Monatschabschlussbericht.&quot;reportlb zustandslos einrichten<br /><b>Cluster-Session State</b> &#8211; &uuml;ber Domainen hinweg. Nodes bleiben nicht gleich. State auf anderen Rechner auslagern.<br /><b>Zellen</b> &#8211; <b>Distance</b>: Auch zum Trennen unterschiedlicher Standorte weltweit.<br /><b>Virtual Server via Direct Routing</b>. LoadBalancer &auml;ndert R&uuml;ckroute IPVS wird dadurch nicht zum Flaschenhals.<br /><b>Tomcat APR Connector</b>: Direkter OpenSSL-Support in Tomcat. Senden statischer Ressourcen mit OS sendfile (*ix); Viele KeepAlive &#8211; Verbindungskonstrukte jetzt m&ouml;glich (z.B. f&uuml;r AJAX)<b>IOPointer</b> wird Poller zugewiesen. </p>
<p><b>ApacheBench</b> &#8211; TestClient</p>
<p>IO ist derzeit der Performanceblocker, CPU nicht mehr. Gr&ouml;&szlig;te Installation mit 80 Tomcat-Instanzen auf 30-40-Maschinen.</p>
<p>&nbsp;</p>
<p> <span id="more-176"></span><br />
<h2 style="font-size: 11pt; width: 410px"> </h2>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/25/jax-2007-tomcat-und-apache-in-der-produktion-peter-roabach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007 &#8211; Hands on Apache Axis (Thilo Frotscher, Marc Teufel)</title>
		<link>http://blog.gresch.de/2007/04/23/jax-2007-hands-on-apache-axis-thilo-frotscher-marc-teufel/</link>
		<comments>http://blog.gresch.de/2007/04/23/jax-2007-hands-on-apache-axis-thilo-frotscher-marc-teufel/#comments</comments>
		<pubDate>Mon, 23 Apr 2007 07:12:06 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[axis]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[ws]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=167</guid>
		<description><![CDATA[Einf&#252;hrung Axis 1 &#8211; Retro; u.a. in WAS integriert, Inkompatibilit&#228;ten; Axis 2 &#8211; Anforderungen ge&#228;ndert, nicht mit Axis 1 erreichbar; WS-Security; Performance; 3rd Generation WS Framwework; andere XFire, MS Indigo; Axis 2 mit asynchronem Modell; MEP &#8211; Message Exchange Pattern; Pull-Parser / StAX; Unterschiedliche Data Bindingm&#246;glichkeiten; MTOM/SwA Attachments; WSDL 2.0; Handlerketten dynamisch; Hot Deployment/Hot Update [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Einf&uuml;hrung</strong><br />
Axis 1 &#8211; Retro; u.a. in WAS integriert, Inkompatibilit&auml;ten;</p>
<p>Axis 2 &#8211; Anforderungen ge&auml;ndert, nicht mit Axis 1 erreichbar; WS-Security; Performance; 3rd Generation WS Framwework; andere XFire, MS Indigo; </p>
<p>Axis 2 mit asynchronem Modell; <strong>MEP</strong> &#8211; Message Exchange Pattern; Pull-Parser / StAX; Unterschiedliche Data Bindingm&ouml;glichkeiten; MTOM/SwA Attachments; WSDL 2.0;<br />
Handlerketten dynamisch; Hot Deployment/Hot Update f. Services; Modularisierungsf&auml;higkeit;</p>
<p>Erl&auml;uterung Streaming-Parser  vers. DOM-Parser; Push (z.B. SAX) vers. Pull Parser; StAX &#8211; Streaming API for XML</p>
<p><b>Axiom</b> <br />
eingest&auml;ndiges Projekt, wrappt StAX;<br />
Simuliertes baumbasiertes Parsing; &quot;deferred building&quot;; in Wirklichkeit Stream-Parser im Hintergrund;</p>
<p>Spez. SOAP-API;</p>
<p><b>Service Archive</b><br />
*.aar; neues Deploymentmodell; Ant-, Eclipse-Unterst&uuml;tzung; META-INF muss zumindest  services.xml enthalten, normalerweise auch die WSDL-Dateien.<b></p>
<p>Repository</b><br />
Ein R. f&uuml;r jede Axis-Installation; Standalone-Services m&ouml;glich; HTTP;TCP;SMTP/JMS-Listener; zwei Ordner: <i>services</i> (&#8230;) und <i>modules</i> (Erweiterungen);</p>
<p>
Automatischer REST-Support (muss gesondert disabled werden).</p>
<p>
&Auml;nderungen in Axis-Konsole <b>nicht</b> persistent, also nicht f&uuml;r Produktivbetrieb geeignet!  &Auml;nderungen m&uuml;ssen in Service-Archiven vorgenommen werden, um persistent zu sein;</p>
<p><b>XML Data Binding</b></p>
<ul>
<li>ADB (Axis D.B.); Default;</li>
<li>XMLBeans;</li>
<li>JiBX;</li>
<li>JaxME;</li>
<li>JAXB-Reference Implementation;</li>
</ul>
<p>Entscheidender Einfluss auf Gesamtperformance; ggf. auf DB-Framework verzichten;</p>
<p><b>Axis2-Engine</b></p>
<p>SOAP-Request (HTTP)<br />
=&gt;AxisServlet~MessageContext-MC_req~<br />
=&gt;AxisEngine~H1&#8230;n (Message Handler, weitergeben, transformieren, filterm&auml;&szlig;ig)~[end in-flow]<br />
=&gt;<b>MessageReceiver</b> (ruft WS auf, dieser kann alles durch Java Aufrufbare sein; leicht selbst zu implemetieren)<br />
=&gt;WS-Aufruf<br />
=&gt;MessageReceiver (wei&szlig; um Synchronit&auml;tsinformationen)~MC_resp~<br />
=&gt;[falls Antwort]: neue AxisEngine-Instanz[start out-flow]~H1..n~neu<br />
=&gt;<b>Transport Sender</b>-&gt;MC_resp<br />
=&gt;AxisServlet<br />
=&gt;SOAP response</p>
<p>Frage: Muss Factory f&uuml;r Identifzierung des Clients erstellt werden (im Message Receiver)? Antwort: Letztlich &uuml;ber Message Context</p>
<p><b><br />
Axis auf Clientseite</b><br />
OutInAxisOperation: Verwaltet MC_req und _resp; Vier Flows f&uuml;r Frage/Antwort; Komplement&auml;re Handler; Konfigurierbar, nicht programmatisch, Beispiel: Verschl&uuml;sselung.</p>
<p><b>Phasen</b></p>
<p>&bull; Eine Phase ist</p>
<p><span id="1209368654874E" style="display: none;">&nbsp;</span>&bull; Handler sind mit Regeln verkn&uuml;pft</p>
<blockquote>
<ul type="circle">
<li>In welche Phase soll der Handler kommen?</li>
<li>Soll er erster Handler einer Phase sein oder letzter?</li>
<li>&bdquo;Handler A immer vor/nach Handler B ausf&uuml;hren&ldquo;</li>
</ul>
</blockquote>
<p>&bull; Standard-Phasen:</p>
<blockquote><p>    Transport, Security, Pre-Dispatch, Dispatch, Policy Determination</p></blockquote>
<p>&bull; Konzept erlaubt dynamische Anordnung von Handlern</p>
<p>&nbsp;</p>
<p><b>Module</b></p>
<ul>
<li>Gruppieren Menge von Handler;</li>
<li>Separat deployed (*.mar);</li>
<li>Beispiele f&uuml;r Module; Z.B. Transformation &auml;lterer Nachrichtenstrukturversionen. SOAP-Monitor.</li>
<li>Engaging-Konzept &#8211; Modul wird f&uuml;r bestimmte Services/Service Gruppen aktiviert;</li>
</ul>
<p><b><br />
Client-API</b><br />
AXIOM-basiert; RPC-Kommunikation unterst&uuml;tzt; Dual protocol transport in request + response;  WS-Addressing support; echte Asynchronizit&auml;t;</p>
<p><b><br />
Code-Generierung</b><br />
Derzeit: Java, C#, C++. XML-Darstellung von Konfiguration und WSDL. Ant-Unterst&uuml;tzung. Java2WSDL (&#8230;). Maven2 bald. WS-Policy basierte Erweiterungen. Lifecycle-Management (f. Inbetriebnahme etc.).</p>
<p>JAX-WS + Annotations. JSON.</p>
<p><b><br />
Entwicklungsbeispiel</b><br />
Code-first (Implementierung zuerst) / Contract first (WSDL/Schema zuerst). Problematisierung des Code-first-Ansatzes. Arbeit von WS-I unterst&uuml;tzt Interoperabilit&auml;t besser, deshalb geringeres Risiko. Hinweis: Generierte WSDL-Datei mit WS-I-Tools pr&uuml;fen!</p>
<p>
<b>POJO-Beispiel</b></p>
<ol>
<li>POJO programmieren.</li>
<li>Service-Konfigurationsdatei schreiben (<i>service<b>s</b>.xml</i>).</li>
<li>Service-Archiv erstellen.</li>
<li>Deployment.</li>
</ol>
<p>RPC-Message-Receiver f. POJOS. Bestimmte Methoden k&ouml;nnen ausgeschlossen werden (in <i>services.xml</i>, excludeOperations-Tag). Dateiname d. Service-Archivs bestimmt den Namen.</p>
<p>
Einfaches Beispiel. Besondere Lektion: &Uuml;berschreiben der Methoden nicht m&ouml;glich, keine Polymorhpie.</p>
<p>
Document-Style sollte vorgezogen werden. RPC &uuml;ber Reflection. Document-Attribut allgemeiner, deshalb nur scheinbarer Widerspruch, das Struktur RPC entspricht.</p>
<p>
Target-Namespace kann festgelegt werden.</p>
<p>
invokeBlocking (RPCClient): synchroner Aufruf. RPCInOnlyMessageReceiver.</p>
<p><b><br />
Services und Service-Gruppen</b></p>
<p>Gruppen &#8211; einfacher zu deployen. Kommunikation unter Services m&ouml;glich. Dateiname des Servicearchivs: Jeder Service hat ein Name-Attribut. Dateiname = Name der Service-Gruppe.</p>
<p><b><br />
Code-Generierung</b></p>
<p>WSDL2Code-Optionen (&Uuml;bersicht); Eclipse-Plugin l&auml;sst nicht alle Kommandozeilenoptionen zu.</p>
<p>Session-Verwaltung</p>
<p>Handler/Phasen/Module</p>
<p><span id="more-167"></span>
<p>Restaurantservice</p>
<p>Trennung Schemata. WSDL beim PortType beginnen. Data-Binfinh, Service-Klassen,Client Classen; ExtensionMapper &#8211; Hilfsklasse, ignorieren. Generierte Klassen serializeable machen.</p>
<p>Von SkeletonImpl-Datei ableiten und implementieren. Dann Referenz auf &uuml;berschreibende Datei, nicht mehr auf Skeleton.</p>
<p><b>axis2.xml</b> &#8211; zentrale Konfigurationsdatei;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/23/jax-2007-hands-on-apache-axis-thilo-frotscher-marc-teufel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web.xml für JSF</title>
		<link>http://blog.gresch.de/2007/04/10/web-xml-fuer-jsf/</link>
		<comments>http://blog.gresch.de/2007/04/10/web-xml-fuer-jsf/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 20:52:56 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[andromda]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[mda]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=164</guid>
		<description><![CDATA[Diese hier ist einigerma&#223;en sinnvoll; was von Genuitec angeboten wird, ist eher zweifelhaft, insb. das servlet-mapping. Am einfachsten geht&#39;s aber mittlerweile mit Maven, siehe http://wiki.apache.org/myfaces/MyFaces_Archetypes_for_Maven. Eigentlich sind solche Archteypen ja etwas f&#252;r MDA-&#34;FUDders&#34;, denn der Unterschied hinsichtlich der Vorgehensweise zur JSF-Cartridge von AndroMDA ist gar nicht so gro&#223;.&#160; &#160; Zur Dokumentation:&#160; &#60;?xml version=&#34;1.0&#34;?&#62;&#60;web-app version=&#34;2.4&#34; xmlns=&#34;http://java.sun.com/xml/ns/j2ee&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>Diese hier ist einigerma&szlig;en sinnvoll; was von Genuitec angeboten wird, ist eher zweifelhaft, insb. das <i>servlet-mapping</i>.</p>
<p>Am einfachsten geht&#39;s aber mittlerweile mit Maven, siehe <a href="http://wiki.apache.org/myfaces/MyFaces_Archetypes_for_Maven">http://wiki.apache.org/myfaces/MyFaces_Archetypes_for_Maven</a>.</p>
<p>Eigentlich sind solche Archteypen ja etwas f&uuml;r MDA-&quot;FUDders&quot;, denn der Unterschied <i>hinsichtlich der Vorgehensweise</i> zur <a href="http://galaxy.andromda.org/docs-3.1/andromda-jsf-cartridge/index.html">JSF-Cartridge von AndroMDA</a> ist gar nicht so gro&szlig;.&nbsp;</p>
<p>&nbsp;</p>
<p>Zur Dokumentation:&nbsp;</p>
<pre>&lt;?xml version=&quot;1.0&quot;?&gt;<web-app xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"><context-param><description>&lt;web-app version=&quot;2.4&quot; xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;&gt; 

    &lt;context-param&gt;        &lt;description&gt;            State saving method: &quot;client&quot; or &quot;server&quot; (= default)            See JSF Specification 2.5.2        &lt;/description&gt;            &lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;        &lt;param-value&gt;server&lt;/param-value&gt;    &lt;/context-param&gt;

    &lt;context-param&gt;        &lt;description&gt;            This parameter tells MyFaces if javascript code should be allowed in the            rendered HTML output.            If javascript is allowed, command_link anchors will have javascript code            that submits the corresponding form.            If javascript is not allowed, the state saving info and nested parameters            will be added as url parameters.            Default: &quot;true&quot;        &lt;/description&gt;            &lt;param-name&gt;org.apache.myfaces.ALLOW_JAVASCRIPT&lt;/param-name&gt;        &lt;param-value&gt;true&lt;/param-value&gt;    &lt;/context-param&gt;

    &lt;context-param&gt;        &lt;description&gt;            This parameter tells MyFaces if javascript code should be allowed in the            rendered HTML output.            If javascript is allowed, command_link anchors will have javascript code            that submits the corresponding form.            If javascript is not allowed, the state saving info and nested parameters            will be added as url parameters.            Default: &quot;false&quot;

            Setting this param to true should be combined with STATE_SAVING_METHOD &quot;server&quot; for            best results.

            This is an EXPERIMENTAL feature. You also have to enable the detector filter/filter mapping below to get            JavaScript detection working.        &lt;/description&gt;        &lt;param-name&gt;org.apache.myfaces.DETECT_JAVASCRIPT&lt;/param-name&gt;        &lt;param-value&gt;false&lt;/param-value&gt;    &lt;/context-param&gt;

    &lt;context-param&gt;        &lt;description&gt;            If true, rendered HTML code will be formatted, so that it is &quot;human readable&quot;.            i.e. additional line separators and whitespace will be written, that do not            influence the HTML code.            Default: &quot;true&quot;        &lt;/description&gt;        &lt;param-name&gt;org.apache.myfaces.PRETTY_HTML&lt;/param-name&gt;        &lt;param-value&gt;true&lt;/param-value&gt;    &lt;/context-param&gt;

    &lt;context-param&gt;        &lt;description&gt;            If true, a javascript function will be rendered that is able to restore the            former vertical scroll on every request. Convenient feature if you have pages            with long lists and you do not want the browser page to always jump to the top            if you trigger a link or button action that stays on the same page.            Default: &quot;false&quot;        &lt;/description&gt;            &lt;param-name&gt;org.apache.myfaces.AUTO_SCROLL&lt;/param-name&gt;        &lt;param-value&gt;true&lt;/param-value&gt;    &lt;/context-param&gt;

    &lt;!-- Extensions Filter --&gt;    &lt;filter&gt;        &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;        &lt;filter-class&gt;org.apache.myfaces.webapp.filter.ExtensionsFilter&lt;/filter-class&gt;        &lt;init-param&gt;            &lt;description&gt;Set the size limit for uploaded files.                Format: 10 - 10 bytes                        10k - 10 KB                        10m - 10 MB                        1g - 1 GB            &lt;/description&gt;        			&lt;param-name&gt;maxFileSize&lt;/param-name&gt;			&lt;param-value&gt;20m&lt;/param-value&gt;        &lt;/init-param&gt; &lt;/filter&gt; &lt;filter-mapping&gt;  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;  &lt;!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry --&gt;  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt; &lt;/filter-mapping&gt; &lt;!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.)  --&gt; &lt;filter-mapping&gt;  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;  &lt;url-pattern&gt;/faces/myFacesExtensionResource/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;filter-mapping&gt;  &lt;filter-name&gt;MyFacesExtensionsFilter&lt;/filter-name&gt;  &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt; &lt;/filter-mapping&gt;

 &lt;!-- Listener, that does all the startup work (configuration, init). --&gt; &lt;listener&gt;  &lt;listener-class&gt;org.apache.myfaces.webapp.StartupServletContextListener&lt;/listener-class&gt; &lt;/listener&gt; &lt;!-- Faces Servlet --&gt; &lt;servlet&gt;  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;  &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt;  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;  &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet-mapping&gt;  &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;  &lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;login-config&gt;  &lt;auth-method&gt;BASIC&lt;/auth-method&gt; &lt;/login-config&gt;&lt;/web-app&gt;</description></context-param></web-app></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/10/web-xml-fuer-jsf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Typo3: &#8220;No cookies, no Typo3&#8243;&#8230;</title>
		<link>http://blog.gresch.de/2007/02/27/typo3-no-cookies-no-typo3/</link>
		<comments>http://blog.gresch.de/2007/02/27/typo3-no-cookies-no-typo3/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 20:39:56 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=154</guid>
		<description><![CDATA[Ziemlich unerfreulich, so ein Update auf PHP5, aber es gibt ja Google, da findet man dann z.B: http://lists.netfielders.de/pipermail/typo3-english/2005-November/015469.html]]></description>
			<content:encoded><![CDATA[<p>Ziemlich unerfreulich, so ein Update auf PHP5, aber es gibt ja Google, da findet man dann z.B:</p>
<p><a href="http://lists.netfielders.de/pipermail/typo3-english/2005-November/015469.html">http://lists.netfielders.de/pipermail/typo3-english/2005-November/015469.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/02/27/typo3-no-cookies-no-typo3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create certificates with OpenSSH</title>
		<link>http://blog.gresch.de/2006/11/22/create-certificates-with-openssh/</link>
		<comments>http://blog.gresch.de/2006/11/22/create-certificates-with-openssh/#comments</comments>
		<pubDate>Wed, 22 Nov 2006 16:11:11 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[cyrus]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=66</guid>
		<description><![CDATA[Die Anleitung von Dr. Lotz wurde leider nicht &#252;berarbeitet, deshalb hier eine Schritt-f&#252;r-Schritt-Anleitung&#8230; 1. Als root einloggen. 2. openssl.conf anpassen, falls noch nicht geschehen (siehe openssl.cnf &#8211; &#34;myWonderfulHostname&#34; mit entsprechendem Servernamen ersetzen&#8230;). Am wichtigsten ist das commonName-Attribut! 3. Verzeichnis anlegen &#160; cd ~ &#38;&#38; mkdir myWonderfulHostnameCA &#38;&#38; cd myWonderfulHostnameCA &#160; 4. Unterverzeichnisse anlegen &#160; mkdir [...]]]></description>
			<content:encoded><![CDATA[<p>Die <a href="http://www.dr-lotz.de/cyrus-imap.php">Anleitung von Dr. Lotz</a> wurde leider nicht &uuml;berarbeitet, deshalb hier eine Schritt-f&uuml;r-Schritt-Anleitung&#8230;</p>
<p>1. Als root einloggen.</p>
<p>2. openssl.conf anpassen, falls noch nicht geschehen (siehe <a href="/kgblog/uploads/linux/openssl.cnf" title="openssl.cnf" target="_blank">openssl.cnf</a> &#8211; <font color="#ff0000"><strong>&quot;myWonderfulHostname&quot; mit entsprechendem Servernamen ersetzen&#8230;</strong></font>). Am wichtigsten ist das <strong>commonName</strong>-Attribut!</p>
<p>3. Verzeichnis anlegen</p>
<p>&nbsp;</p>
<pre>cd ~ &amp;&amp; mkdir myWonderfulHostnameCA &amp;&amp; cd myWonderfulHostnameCA</pre>
<p>&nbsp;</p>
<p>4. Unterverzeichnisse anlegen</p>
<p>&nbsp;</p>
<pre>mkdir certs newcerts crl private &amp;&amp; touch index.txt &amp;&amp; echo &quot;01&quot; &gt; serial</pre>
<p>&nbsp;</p>
<p>5. Jetzt wird die CA erzeugt. Zur Sicherheit commonName manuell eingeben. Passphrase gut sichern!!!</p>
<p>&nbsp;</p>
<pre>openssl req -new -x509 -keyout private/myWonderfulHostnameCA_prv_key.pem -out myWonderfulHostnameCA_cert.pem -days 3650</pre>
<p>&nbsp;</p>
<p>6. Schl&uuml;sselpaar f&uuml;r den Server erzeugen.</p>
<p>&nbsp;</p>
<pre>openssl req -new -keyout certs/myWonderfulHostname_prv_key.pem -out certs/myWonderfulHostname_req.pem -days 3650</pre>
<p>&nbsp;</p>
<p>7. Unverschl&uuml;sselten Key erzeugen. &#8211; Wenn dieser benutzt wird, sollte man sich um die Rechte so k&uuml;mmern, dass nur die Prozesse darauf zugreifen k&ouml;nnen, die ihn ben&ouml;tigen! Das ginge ggf. mit ACLs.</p>
<p>&nbsp;</p>
<pre>openssl rsa &lt; certs/myWonderfulHostname_prv_key.pem &gt; myWonderfulHostname_prv_key-unverschluesselt.pem</pre>
<p>&nbsp;</p>
<p>8.</p>
<p>9. &Ouml;ffentlichen Schl&uuml;ssel mit privatem der CA unterschreiben:</p>
<p>&nbsp;</p>
<pre>openssl ca -policy policy_anything -notext -out certs/myWonderfulHostname_cert.pem -infiles certs/myWonderfulHostname_req.pem</pre>
<p>&nbsp;</p>
<p>10. Jetzt gehts daran, Apache unsere Files bekannt zu machen. Erst einmal <em>/etc/httpd/conf/ssl</em>. sichern! Apache ben&ouml;tigt:</p>
<ul>
<li>&bull; SSLCertificateFile (default: server.crt) =&gt; Das entspricht dem von uns generierten <em>/root/myWonderfulHostnameCA/certs/myWonderfulHostname_cert.pem</em>.</li>
<li>&bull; SSLCertificateKeyFile (default: server.key) =&gt; Wenn wir die unverschl&uuml;sselte Version verwenden m&ouml;chten (keine PW-Abfrage beim Apache reboot) nehmen wir: <em>/root/myWonderfulHostnameCA/myWonderfulHostname_prv_key-unverschluesselt.pem</em> , ansonsten benutzt der Hardcore-Admin bestimmt viel lieber <em>/root/myWonderfulHostnameCA/certs/myWonderfulHostname_prv_key.pem</em></li>
</ul>
<p>&#8230; Also:</p>
<p>&nbsp;</p>
<pre>mv /etc/httpd/conf/ssl.crt/server.crt /etc/httpd/conf/ssl.crt/server.crt.bak &amp;&amp; cp /root/myWonderfulHostnameCA/certs/myWonderfulHostname_cert.pem /etc/httpd/conf/ssl.crt/server.crt</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>und</p>
<p>&nbsp;</p>
<pre>mv /etc/httpd/conf/ssl.key/server.key /etc/httpd/conf/ssl.key/server.key.bak &amp;&amp; cp /root/myWonderfulHostnameCA/myWonderfulHostname_prv_key-unverschluesselt.pem /etc/httpd/conf/ssl.key/server.key</pre>
<p>&nbsp;</p>
<p>11.</p>
<p>12. Apache neustarten.</p>
<pre>apachectl stop &amp;&amp; apachectl start</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2006/11/22/create-certificates-with-openssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>API-Programmierer vers. Effizienz-Programmierer?</title>
		<link>http://blog.gresch.de/2006/05/24/api-programmierer-vers-effizienz-programmierer/</link>
		<comments>http://blog.gresch.de/2006/05/24/api-programmierer-vers-effizienz-programmierer/#comments</comments>
		<pubDate>Wed, 24 May 2006 17:33:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=19</guid>
		<description><![CDATA[Heute eine interessante Unterhaltung mit einem Programmierer gehabt, der wissen wollte, ob und inwieweit man Maps via WebServices &#252;bergibt und ein Objekt zur&#252;ckerh&#228;lt (dazu vielleicht ein andermal mehr). Die sich daraus entspinnende Diskussion ergab, dass geplant war, eine Schnittstelle, die auch via Corba-IDL an externe Kunden f&#252;r deren Software herausgegeben wurde, dramatisch zu &#228;ndern: Anstelle [...]]]></description>
			<content:encoded><![CDATA[<p>Heute eine interessante Unterhaltung mit einem Programmierer gehabt, der wissen wollte, ob und inwieweit man Maps via WebServices &uuml;bergibt und ein Objekt zur&uuml;ckerh&auml;lt (dazu vielleicht ein andermal mehr).  </p>
<p>Die sich daraus entspinnende Diskussion ergab, dass geplant war, eine Schnittstelle, die auch via Corba-IDL an externe Kunden f&uuml;r deren Software herausgegeben wurde, dramatisch zu &auml;ndern: Anstelle der vorhandenen statischen Methoden, die im &quot;Apache-Commons-Stil&quot; viele Komfortmethoden bereitstellten, um bestimmte Werte zu berechnen, sollte <b>ein einziges</b> generisches Interface angeboten werden.   </p>
<p>Dieses Interface s&auml;he so aus, dass &uuml;ber eine generische Klasse f&uuml;r <b>alle</b> Produktlinien eine Klasse instantiiert werden soll, der im Konstruktor eine Map &uuml;bergeben wird, der man alle Werte f&uuml;r den jeweils gew&uuml;nschten &quot;Methodenersatz&quot; in einer Map &uuml;bergeben soll. (Ggf. soll aber doch auch eine entsprechende statische Methode mit einer Map als einzigem Parameter verwendet werden). </p>
<p>R&uuml;ckgabewert sollte dann immer ein java.lang.Object sein, das unabh&auml;ngig von Konstruktor/Methode (ich bevorzugte in diesem Fall ohnehin die statische Methode) entsprechend der Dokumentation erst in ein Map gecastet, dieses iteriert und die einzelnen Werte erneut gecastet werden sollen. </p>
<p>IMHO ist dieser &quot;generische Ansatz&quot; zwar u.U. geeignet, um interne Strukturen zu verbessern, aber nicht, um ein API zur Verf&uuml;gung zu stellen:  </p>
<ul>
<li>Entwickler k&ouml;nnen nicht mehr mit derselben Typsicherheit programmieren. Wurden &#8211; unter anderem &#8211; f&uuml;r dieses Problem nicht gerade Generics eingef&uuml;hrt? <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> <br />Im Ernst &#8211; entsprechend Joshua Blochs Effective Java Programming (Advice 32) sollte man Strings nur verwenden, wo sie Sinn machen, nicht als beliebigen Ersatz von eindeutig verwendbaren Typen.<br />Ducktpye mag ja angehen, aber ich finde nicht, dass die Aufgabe von Typsicherheit etwas mit Faulheit (Neal Ford) oder mit Unflexibilit&auml;t zu tun hat. Typen ausdr&uuml;cken zu k&ouml;nnen, hat etwas mit der Ausdrucksst&auml;rke der Sprache zu tun.</li>
<li>Man kann keine Methodensignaturen mehr &quot;deprecated&quot; machen. Ich denke, dass die Verwendung von @deprecated f&uuml;r ein API bewusst eingesetzt werden soll. Die L&ouml;sung des erw&auml;hnten Programmierers lag darin, dass f&uuml;r den Fall, dass eine Berechnung eine ge&auml;nderte &quot;Signatur&quot; erh&auml;lt, eine entsprechende &#8211; durchaus aussagekr&auml;ftige &#8211; Exception geworfen werden sollte. Damit gingen die &quot;Segnungen&quot; der Fehlermeldungen zur Compilezeit f&uuml;r Typpr&uuml;fungen allerdings verloren.</li>
<li>Manche Programmierer benutzen ja &quot;Outlines&quot; in ihrer IDE, manchmal ist auch n&uuml;tzlich, UML aus Methodensignaturen etc. zu extrahieren. Das Domain-Wissen, das hier&uuml;ber *reflektiert* wird, ginge verloren und w&auml;re g&uuml;nstigenfalls ausgelagert in Javadoc ausgelagert (an eine Annotations-basierte L&ouml;sung zu denken, w&auml;re vielleicht ein wenig gewagt, ich habs deshalb gar nicht erw&auml;hnt). </li>
<li></li>
<li>
<ul></ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2006/05/24/api-programmierer-vers-effizienz-programmierer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

