<?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>Axel Jung &#187; java</title>
	<atom:link href="http://www.ajung.de/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Tue, 22 Nov 2011 21:13:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>UnitTH  Unit Tests im zeitlichen Verlauf</title>
		<link>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/</link>
		<comments>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 21:13:42 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[Continuus Integration]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=696</guid>
		<description><![CDATA[In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://junitth.sourceforge.net/"><img class="size-full wp-image-697 alignright" title="unitth-header" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth-header.jpg" alt="" width="330" height="80" /></a>In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf alle Test Module zu haben. Bei jeden Test sollte erkennbar sein bei welchen Build Lauf er erfolgreich war oder nicht.</p>
<p><a href="http://junitth.sourceforge.net/">UnitTH</a> ist ein kleines Java Tool das aus den Unit Test Ergebnis Dateien einen Report erzeugen kann.</p>
<p>Das Tool untersucht bestehende Unit Test Report XML Dateien und erzeugt daraus ein einen Report. Die zeitliche Achse wird durch Build Läufe erzeugt. UnitTH erkennt die Build Läufe anhand von Ordnern.</p>
<p>Die Reports muss in dieser Struktur vorliegen:</p>
<p>/build1/junit_log1.xml<br />
/build1/junit_log2.xml<br />
/build2/junit_log1.xml<br />
/build2/junit_log2.xml</p>
<p>In den Ordnern können beliebig viele XML Dateien liegen.</p>
<p>Testsuiten sind für das Tool sogenannte Module. Damit wird der Report gegliedert. Man muss also darauf achten das die Suiten in den Reports eindeutige Namen haben und nicht verschachtelte Suiten haben. Meine Report Dateien haben nicht ganz dem Schema entsprochen. Ich wandel die Dateien mit XSLT um.</p>
<p>Der Aufruf erfolgt so:</p>
<p><strong>java -jar -Dunitth.report.dir=/…/unitth/report unitth.jar /…/unitth/xml/*</strong></p>
<p>Man gibt also nur das Ziel Verzeichnis für die Reports und den Pfad zu den XML Dateien.</p>
<p>In den Report bekommt man eine praktische Übersicht über den aktuellen Stand der Tests und den Trend.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png"><img class="alignnone size-full wp-image-698" title="unitth_overview" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png" alt="" width="317" height="346" /></a></p>
<p>Über die Graphen kann man erkennen, wie sich die Testdauer verhält und ob sich die Anzahl der Tests verändert.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph.png"><img class="alignnone size-medium wp-image-699" title="unitth_graph" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph-500x235.png" alt="" width="500" height="235" /></a></p>
<p>Man bekommt eine Liste der Build Läufe und darin zusammengefasst wie deren Status war. Hier sieht man auch schön die aktuellen Trends.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs.png"><img class="alignnone size-medium wp-image-700" title="unitth_runs" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs-500x154.png" alt="" width="500" height="154" /></a></p>
<p>Die Module (Testsuiten) werden auch zusammengefasst dargestellt und man kann sich auf einer Unterseite den Verlauf auf Testcase Basis anschauen. Dadurch kann man besonders kritische Testfälle erkennen und dann stabilisieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests.png"><img class="alignnone size-medium wp-image-701" title="unitth_tests" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests-500x277.png" alt="" width="500" height="277" /></a></p>
<p>Das spannendste Feature ist die Spread Ansicht. Hier sieht man, bei welchen Build die Testfälle fehlgeschlagen sind. Damit kann man sogenannte &#8220;Blinker&#8221; Test finden. Um diese dann zu Isolieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung.png"><img class="alignnone size-medium wp-image-702" title="unitth_verteilung" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung-500x241.png" alt="" width="500" height="241" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript und CSS komprimieren mit Jawr</title>
		<link>http://www.ajung.de/2009/01/13/javascript-und-css-komprimieren-mit-jawr/</link>
		<comments>http://www.ajung.de/2009/01/13/javascript-und-css-komprimieren-mit-jawr/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 18:09:05 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=478</guid>
		<description><![CDATA[Jawr ist ein Java Servlet zum komprimieren der Javascript und CSS Dateien auf dem Webserver.  Dieses Komprimieren geschieht serverseitig und der Entwickler muss die Dateien nicht per Hand komprimieren. Bundles Besonders praktisch ist die Möglichkeit, viele Dateien zu einen Bundle zusammenzufügen. Somit kann man auch die Anzahl der Request reduzieren, aber in der Entwicklung mit [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://jawr.dev.java.net/"><img class="alignright size-full wp-image-481" title="logo" src="http://www.ajung.de/wp-content/uploads/2009/01/logo.png" alt="logo" width="465" height="82" /></a><a href="https://jawr.dev.java.net/">Jawr</a> ist ein Java Servlet zum komprimieren der Javascript und CSS Dateien auf dem Webserver.  Dieses Komprimieren geschieht serverseitig und der Entwickler muss die Dateien nicht per Hand komprimieren.</p>
<h3><strong>Bundles</strong></h3>
<p>Besonders praktisch ist die Möglichkeit, viele Dateien zu einen Bundle zusammenzufügen. Somit kann man auch die Anzahl der Request reduzieren, aber in der Entwicklung mit vielen einzelnen JS und CSS Dateien arbeiten.  Optimalerweise, sollte man für jede Javascript Klasse eine eigene Datei verwenden.</p>
<h3><strong>Installation mit Maven 2</strong></h3>
<p>Die Installation<strong> </strong>in einen Maven Projekt ist genial einfach. Man fügt in die Pom Datei nur folgende Zeile ein:</p>
<pre>&lt;dependency&gt;
      &lt;groupId&gt;net.jawr&lt;/groupId&gt;
      &lt;artifactId&gt;jawr&lt;/artifactId&gt;
      &lt;version&gt;[2,]&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p>Ein Repository muss man auch noch einfügen:</p>
<pre>&lt;repository&gt;
          &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
          &lt;name&gt;Java.net Repository for Maven&lt;/name&gt;
          &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
          &lt;layout&gt;default&lt;/layout&gt;
&lt;/repository&gt;</pre>
<p>Log4J</p>
<p>Jawr benötigt zusätzlich Log4J. Deshalb muss noch folgende Abhängigkeit eingefügt werden:</p>
<pre>&lt;dependency&gt;
        &lt;groupId&gt;log4j&lt;/groupId&gt;
        &lt;artifactId&gt;log4j&lt;/artifactId&gt;
        &lt;version&gt;1.2.15&lt;/version&gt;
        &lt;type&gt;jar&lt;/type&gt;
        &lt;scope&gt;compile&lt;/scope&gt;
        &lt;exclusions&gt;
            &lt;exclusion&gt;
                &lt;groupId&gt;com.sun.jmx&lt;/groupId&gt;
                &lt;artifactId&gt;jmxri&lt;/artifactId&gt;
            &lt;/exclusion&gt;
            &lt;exclusion&gt;
                &lt;groupId&gt;com.sun.jdmk&lt;/groupId&gt;
                &lt;artifactId&gt;jmxtools&lt;/artifactId&gt;
            &lt;/exclusion&gt;
            &lt;exclusion&gt;
                &lt;groupId&gt;javax.jms&lt;/groupId&gt;
                &lt;artifactId&gt;jms&lt;/artifactId&gt;
            &lt;/exclusion&gt;
        &lt;/exclusions&gt;
 &lt;/dependency&gt;</pre>
<p>Hierbei ist es wichtig dass die <strong>JMX Abhängigkeit</strong> ausgeklammert wird, da Maven sonst eventuell nicht startet.</p>
<p>In die <strong>web.xml</strong> müssen nun noch die Servlets und das Mapping eingetragen werden:</p>
<pre>&lt;servlet&gt;
        &lt;servlet-name&gt;JavascriptServlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;net.jawr.web.servlet.JawrServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;configLocation&lt;/param-name&gt;
            &lt;param-value&gt;jawr.properties&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;CSSServlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;net.jawr.web.servlet.JawrServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
                &lt;param-name&gt;configLocation&lt;/param-name&gt;
                &lt;param-value&gt;jawr.properties&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
                &lt;param-name&gt;type&lt;/param-name&gt;
                &lt;param-value&gt;css&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;JavascriptServlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;*.js&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;CSSServlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;*.css&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;</pre>
<h3>Konfiguration</h3>
<p>Die Konfiguration geschieht in der <strong>jawr.properties</strong></p>
<pre>jawr.debug.on=false
jawr.gzip.on=true
jawr.gzip.ie6.on=false
jawr.charset.name=UTF-8</pre>
<p>Jawr erkennt automatisch ob der Browser <strong>gzip </strong>unterstützt. Wenn die Einstellung <strong>jawr.debug.on</strong> auf <strong>true </strong>steht, werden Dateien nicht komprimiert und die  Bundles werden einzeln geladen. Das ist in der Entwicklung sehr wichtig.</p>
<pre>jawr.js.bundle.basedir=/js
jawr.js.bundle.names=lib,core,model

jawr.js.bundle.lib.id=/bundles/lib.js
jawr.js.bundle.lib.mappings=/js/lib/**

jawr.js.bundle.core.id=/bundles/core.js
jawr.js.bundle.core.mappings=/js/helper/**,/js/.../version.js,/js/.../all/**

jawr.js.bundle.model.id=/bundles/model.js
jawr.js.bundle.model.mappings=/js/kosmos/cockpit/**,/js/.../../DragAndDrop.js,/js/.../reportone/**</pre>
<p>Hier definiere ich 3 verschiedene Bundles. Die Bundles können aus ganzen Ordnern oder einzeln Dateien bestehen. Doppelte Dateien überspringt Jawr automatisch.</p>
<pre>jawr.css.bundle.basedir=/css
jawr.css.bundle.names=style
jawr.css.bundle.style.id=/style.css
jawr.css.bundle.style.mappings=/css/**
jawr.csslinks.flavor = xhtml</pre>
<p>Hier wird ein CSS Bundle definiert. Wichtig ist die Einstellung<strong> jawr.csslinks.flavor = xhtml </strong>, da der Link Tag sonst nicht geschlossen wird.</p>
<p>In der JSP muss nur noch die Taglib angegeben werden.</p>
<pre>&lt;%@ taglib uri="http://jawr.net/tags" prefix="jwr" %&gt;</pre>
<p>Und dieTags für die Bundles eingefügt werden.</p>
<pre>&lt;jwr:style src="/style.css" media="all" /&gt;
&lt;jwr:script src="/bundles/lib.js"/&gt;
...</pre>
<p>Den Unterschied merkt man bei umfangreichen Javascript Anwenungen deutlich.</p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2009/01/13/javascript-und-css-komprimieren-mit-jawr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Statische Dateien unter Jetty nicht änderbar</title>
		<link>http://www.ajung.de/2008/11/04/statische-dateien-unter-jetty-nicht-anderbar/</link>
		<comments>http://www.ajung.de/2008/11/04/statische-dateien-unter-jetty-nicht-anderbar/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 15:22:51 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[maven2]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=393</guid>
		<description><![CDATA[Jetty ist ein schlanker Java Webserver der oft für die Entwicklungs Phase eingesetzt wird. Unter Windows hat Jetty leider die Angewohnheit statische Dateien, also Javascript, Stylesheets und HTML in den Speicher zu legen und somit sind sie dann nicht mehr editierbar. Erst nach einen Neustart gibt dieser die Dateien wieder frei. Zur Zeit arbeite ich [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mortbay.org/jetty/"><img class="alignright size-full wp-image-394" title="jetty_banner" src="http://www.ajung.de/wp-content/uploads/2008/11/jetty_banner.gif" alt="" width="467" height="60" />Jetty</a> ist ein schlanker Java Webserver der oft für die Entwicklungs Phase eingesetzt wird. Unter Windows hat Jetty leider die Angewohnheit statische Dateien, also Javascript, Stylesheets und HTML in den Speicher zu legen und somit sind sie dann nicht mehr editierbar. Erst nach einen Neustart gibt dieser die Dateien wieder frei.</p>
<p>Zur Zeit arbeite ich gerade mit den <a href="http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin">Jetty Plugin</a> für <a href="http://maven.apache.org/">Maven</a>. Dort muss man erst mal in der .pom Datei für Maven die Plugin Konfiguration anpassen und eine eigene <strong>webDefaultXml </strong>angeben.</p>
<pre>&lt;configuration&gt;
   &lt;webDefaultXml&gt;src/main/recources/webdefault.xml&lt;/webDefaultXml&gt;
   ....</pre>
<p>Mit dieser Datei kann man Jetty feiner einstellen als mit der Plugin Konfiguration. Diese Date kann man sich auch den Jar Archiv von Jetty kopieren.</p>
<p>Hier muss man dann den Parameter <strong>useFileMappedBuffer </strong>auf <strong>false </strong>stellen.</p>
<pre>&lt;init-param&gt;
  &lt;param-name&gt;useFileMappedBuffer&lt;/param-name&gt;
  &lt;param-value&gt;false&lt;/param-value&gt;
&lt;/init-param&gt;</pre>
<p>Mit dieser Einstellung kann man dann die Dateien auch unter Windows zur Laufzeit ändern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/11/04/statische-dateien-unter-jetty-nicht-anderbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Charts mit Jquery Flot</title>
		<link>http://www.ajung.de/2008/10/28/javascript-charts-mit-jquery-flot/</link>
		<comments>http://www.ajung.de/2008/10/28/javascript-charts-mit-jquery-flot/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 17:19:51 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=368</guid>
		<description><![CDATA[Flot ist eine JavaScript Bibliothek auf Basis von Jquery. Ich verwende diese gerade im Zusammenspiel mit ExtJS. So lassen sich schicke Grids mit den passenden Charts dazu erzeugen. Ein Flot Chart wird immer in ein Jquery Element generiert. Dieses muss ein HTML Element mit einer festen Höhe und Breite haben. Wie bei Jquery üblich, ist [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/flot/">Flot </a>ist eine JavaScript Bibliothek auf Basis von <a href="http://jquery.com/">Jquery</a>. Ich verwende diese gerade im Zusammenspiel mit <a href="http://extjs.com/">ExtJS</a>. So lassen sich schicke Grids mit den passenden Charts dazu erzeugen.</p>
<p>Ein Flot Chart wird immer in ein Jquery Element generiert. Dieses muss ein HTML Element mit einer festen Höhe und Breite haben. Wie bei Jquery üblich, ist der Aufruf mit ein paar Zeilen möglich.</p>
<pre lang="javascript">$().ready(function() {
	var data = {
			label:"Dummy Daten",
			data:[[1,1.5],[2,5],[3,2.3],[4,3.3]]
	};
	var options = {
		lines:{show:true},
		points:{show:true}
	}
	var plot = $.plot($('#placeholder'), [data], options)
});</pre>
<p>Dieser Simple Code erzeugt folgenden Chart:</p>
<p><img class="alignnone size-full wp-image-376" title="_1225212985388" src="http://www.ajung.de/wp-content/uploads/2008/10/_1225212985388.png" alt="" width="319" height="117" /></p>
<p>Das schöne an einem Javscript generierten Chart ist die Möglichkeit diesen zur Laufzeit anzupassen. Man kann auf Kopfdruck weitere Daten im vorhandenen Chart anzeigen. Flot Charts sind auch an klickbar. So kann man Punkte auf dem Chart anklicken und dem User dann weiterer Daten zu den bestimmten Punkt anzeigen.</p>
<h3>Zoom Funktion</h3>
<p>Spannend ist auch die Zoom Funktion um bestimmte Bereiche auf den Chart genauer anzusehen. Dazu muss man nur in den Optionen die Selection aktivieren:</p>
<pre>selection: { mode: "x"  oder "y" oder "xy"}</pre>
<p>Dann kann man sich an den Event <strong>plotselected </strong>anhängen und den Chart anzoomen:</p>
<pre>$("#placeholder").bind("plotselected", function (event, ranges) {
        plot = $.plot($("#placeholder"), [data],
                      $.extend(true, {}, options, {
                          xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
          }));
});

<img class="alignnone size-full wp-image-382" title="zoom" src="http://www.ajung.de/wp-content/uploads/2008/10/zoom.jpg" alt="" width="436" height="210" />
<img class="alignnone size-full wp-image-383" title="zoomed" src="http://www.ajung.de/wp-content/uploads/2008/10/zoomed.jpg" alt="" width="436" height="210" /></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2008/10/28/javascript-charts-mit-jquery-flot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

