<?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>Blogisticon &#187; Technologie</title>
	<atom:link href="http://blog.holisticon.de/category/technologie/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.holisticon.de</link>
	<description>Das Holisticon-Blog</description>
	<lastBuildDate>Tue, 21 May 2013 12:10:33 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>In fünf Schritten zum passenden BPMS</title>
		<link>http://blog.holisticon.de/2013/05/funf-schritten-zum-passenden-bpms/</link>
		<comments>http://blog.holisticon.de/2013/05/funf-schritten-zum-passenden-bpms/#comments</comments>
		<pubDate>Thu, 16 May 2013 08:10:30 +0000</pubDate>
		<dc:creator>Stefan Zilske</dc:creator>
				<category><![CDATA[BPM/SOA]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Balanced Scorecard]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMS]]></category>
		<category><![CDATA[Toolauswahl]]></category>
		<category><![CDATA[Whitepaper]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=7539</guid>
		<description><![CDATA[Der Weg zum passenden BPM-Tool ist lang, der Markt bietet eine schier unüberblickbare Menge an Tools mit gänzlich unterschiedlichen Einsatzzwecken. In einem neuen Whitepaper geben wir Hilfestellung zur Auswahl des richtigen BPM-Tools. Vor gut einem Jahr hat mein Kollege Jo Ehm hier unsere BPMS-Scorecard vorgestellt, eine Balanced Scorecard, in der wir alle unserer Erfahrung nach [...]]]></description>
				<content:encoded><![CDATA[<p>Der Weg zum passenden BPM-Tool ist lang, der Markt bietet eine schier unüberblickbare Menge an Tools mit gänzlich unterschiedlichen Einsatzzwecken. In einem neuen Whitepaper geben wir Hilfestellung zur Auswahl des richtigen BPM-Tools.</p>
<p><span id="more-7539"></span></p>
<p>Vor gut einem Jahr hat mein Kollege Jo Ehm <a href="http://blog.holisticon.de/2012/06/wie-finde-ich-das-passende-bpms/">hier</a> unsere BPMS-Scorecard vorgestellt, eine Balanced Scorecard, in der wir alle unserer Erfahrung nach wichtigen Kriterien für die Auswahl eines BPMS gesammelt haben. Mit ihr lassen sich einzelne Tools gezielt vergleichen und bewerten, um letztlich eine Entscheidung herbeizuführen. Wer schon weiß, was er will, ist mit diesem Werkzeug gut bedient.</p>
<p>Doch um an diesen Punkt zu gelangen, muss man sich zunächst Gedanken darüber machen, welche Art von BPM-Tool man benötigt. Solche Tools lassen sich grob kategorisieren: es gibt reine Modellierungswerkzeuge, Process Engines zur Automatisierung von Prozessen, komplette Suiten, die beides mitbringen und außerdem umfangreiche Reportingmöglichkeiten bieten und dazwischen praktisch sämtliche Spielarten. Dazu kommt, das solche Tools schnell eine veritable Investition erfordern. Umso wichtiger, sich genau zu überlegen, wie das Einsatzszenario aussieht.</p>
<p>Für die Zieldefinition kann man die bereits genannten Kategorieren zugrunde legen: Modellierung, Automatisierung, Reporting. Wenn Prozesse lediglich modelliert, aber nicht automatisiert werden sollen, genügt ein reines Modellierungstool. Soll dagegen der komplette Prozesslebenszyklus abgedeckt werden, ist ein Tool, das auch Möglichkeiten für Automatisierung und Monitoring bietet, sinnvoll.</p>
<p>Ist das Einsatzszenario definiert, gilt es, tiefer in die drei Kategorien zu leuchten und genauer zu bestimmen, welche Eigenschaften das Tool der Wahl haben soll. Sollen Modelle toolübergreifend ausgetauscht werden können? Benötigt man das BPM-Tool zur Integration verschiedener externer Systeme? Soll das Tool Möglichkeiten zur Verwaltung manueller Aufgaben bieten? Müssen KPIs für das Monitoring im BPM-Tool hinterlegt werden können? Daneben müssen noch einige allgemeine Rahmenbedingungen abgesteckt werden, etwa: Welche Technologien kommen zum Einsatz, wie wichtig sind Testmöglichkeiten?</p>
<p>Pauschale Antworten darauf können wir nicht geben – wohl aber die richtigen Fragen stellen. Diese haben wir nun in einem Whitepaper zur BPM-Toolauswahl übersichtlich zusammengefasst und führen interaktiv in fünf Schritten zum passenden Tool. Das Whitepaper steht <a href="http://www.holisticon.de/cms/Architekturberatung/BPM-SOA">auf unserer Website</a> zum Download bereit.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/05/funf-schritten-zum-passenden-bpms/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="In fünf Schritten zum passenden BPMS" data-url="http://blog.holisticon.de/2013/05/funf-schritten-zum-passenden-bpms/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/05/funf-schritten-zum-passenden-bpms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Camunda startet eigenes Open Source-Projekt</title>
		<link>http://blog.holisticon.de/2013/03/camunda-startet-eigenes-open-source-projekt/</link>
		<comments>http://blog.holisticon.de/2013/03/camunda-startet-eigenes-open-source-projekt/#comments</comments>
		<pubDate>Tue, 26 Mar 2013 08:08:21 +0000</pubDate>
		<dc:creator>Jo Ehm</dc:creator>
				<category><![CDATA[BPM/SOA]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Activiti]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[BPMS]]></category>
		<category><![CDATA[Camunda]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Process Engine]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=7368</guid>
		<description><![CDATA[Schon seit einiger Zeit bietet die camunda services GmbH aus Berlin mit ihrem Produkt &#8220;camunda fox&#8221; diverse Erweiterungen zur Open Source Process Engine &#8220;Activiti&#8221; an, die den Einsatz von Activiti als Shared Process Engine im Java EE-Umfeld erst sinnvoll möglich machen. Diesen erweiterten Technologie-Stack setzen auch wir in Kundenprojekten bereits erfolgreich ein, und unsere Praxiserfahrungen [...]]]></description>
				<content:encoded><![CDATA[<p>Schon seit einiger Zeit bietet die camunda services GmbH aus Berlin mit ihrem Produkt &#8220;camunda fox&#8221; diverse Erweiterungen zur Open Source Process Engine &#8220;Activiti&#8221; an, die den Einsatz von Activiti als Shared Process Engine im Java EE-Umfeld erst sinnvoll möglich machen. Diesen erweiterten Technologie-Stack setzen auch wir in Kundenprojekten bereits erfolgreich ein, und unsere Praxiserfahrungen mit der Plattform sind dabei durchweg positiv. Nicht nur aus technischer Sicht, sondern auch, weil mit camunda ein sehr kompetentes und sympathisches Unternehmen dahinter steht, das einen exzellenten Support bietet.</p>
<p>Vergangene Woche hat camunda nun sein eigenes Open Source-Projekt gestartet: <a title="camunda.org" href="http://camunda.org" target="_blank">camunda.org</a>. Als Fork von Activiti wird aus &#8220;camunda fox&#8221; nun die &#8220;camunda BPM Plattform&#8221;, und viele der Enterprise-Features, die bisher nicht von Activiti adressiert wurden, wandern in die neue Open Source Software (wenngleich es für Unternehmen nach wie vor eine kostenpflichtige Enterprise-Edition mit entsprechendem Support, erweiterter Qualitätssicherung und zusätzlichen Features gibt).</p>
<p>In diesem Zug hat auch Holisticon seine Partnerschaft mit camunda vertieft. Als qualifizierter Service-Provider unterstützen wir BPM/SOA-Projekte, die auf camunda BPM als technische Plattform setzen. Jakob Freund, Geschäftsführer von camunda, sagt dazu: &#8220;Holisticon ist ein innovatives, leistungsstarkes und zugleich sehr sympathisches Unternehmen. Wir freuen uns über die bereits bestehende, erfolgreiche Zusammenarbeit in Kundenprojekten und natürlich besonders darüber, dass wir mit Holisticon einen kompetenten Partner an unserer Seite wissen, der das camunda BPM-Projekt mit uns voranbringen und die Verbreitung im Markt unterstützen wird.&#8221;</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/03/camunda-startet-eigenes-open-source-projekt/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Camunda startet eigenes Open Source-Projekt" data-url="http://blog.holisticon.de/2013/03/camunda-startet-eigenes-open-source-projekt/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/03/camunda-startet-eigenes-open-source-projekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript für Java Enterprise-Entwickler &#8211; Teil 1</title>
		<link>http://blog.holisticon.de/2013/03/javascript-fur-java-enterprise-entwickler-teil-1/</link>
		<comments>http://blog.holisticon.de/2013/03/javascript-fur-java-enterprise-entwickler-teil-1/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 08:18:47 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=7190</guid>
		<description><![CDATA[Am 28. Februar waren mein Kollege Norman Erck und ich (Oliver Ochs) für einen Abendvortrag &#8220;Enterpise JS – JS für Java Enterprise-Entwickler&#8221; zur JUG Ostfalen in das Haus der Wissenschaft eingeladen. Der erste Teil des Vortrags richtete sich an Enterprise-Enwickler (meist mit einem Java-EE-Hintergrund), die sich für JS interessieren, sich schnell darin einarbeiten wollen und [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.holisticon.de/wp-content/uploads/2013/03/haus-der-wissenschaft-bei-nacht.jpg"><img class="size-medium wp-image-7198 colorbox-7190" style="float: left; padding: 10px;" alt="Haus der Wissenschaft bei Nacht, CC BY 3.0 Oliver Ochs" src="http://blog.holisticon.de/wp-content/uploads/2013/03/haus-der-wissenschaft-bei-nacht-169x300.jpg" width="169" height="300" /></a>Am 28. Februar waren mein Kollege <a href="https://www.xing.com/profile/Norman_Erck" target="_blank">Norman Erck</a> und ich (<a href="https://www.xing.com/profile/Oliver_Ochs" target="_blank">Oliver Ochs</a>) für einen Abendvortrag &#8220;Enterpise JS – JS für Java Enterprise-Entwickler&#8221; zur <a href="http://www.jug-ostfalen.de/" target="_blank">JUG Ostfalen</a> in das Haus der Wissenschaft eingeladen.</p>
<p>Der erste Teil des Vortrags richtete sich an Enterprise-Enwickler (meist mit einem Java-EE-Hintergrund), die sich für JS interessieren, sich schnell darin einarbeiten wollen und Tipps suchen, dieses Ziel zu erreichen. Dabei wurden einige Grundlagen der Sprache vorgestellt. Dieser Teil des Vortrags sollte eher Lust auf mehr machen als fundamentales Wissen in aller Tiefe zu vermitteln.<span id="more-7190"></span></p>
<p><strong>Geschichte</strong></p>
<p>JS wurde 1995/1996 von Brendan Eich als Mocha bzw. LiveScript für den Netscape Navigator entwickelt. 1996 wurde die Script-Sprache in JavaScript 1.0 im Zuge der Sun-Netscape-Alliance, einer Marketing-Kampagne, umbenannt. Auch Microsoft zog mit JScript, einem JS-Dialekt für Internet Explorer 3.0 nach. JScript wurde nicht JavaScript genannt, um keine Markenrechte von Sun zu verletzen (dies ist auch der Grund, warum heute viele Entwickler lieber von JS als von JavaScript sprechen, denn die Rechte am Namen JavaScript liegen heute bei Oracle). Schließlich wurde der Kern der Sprache als ECMAScript von der ECMA standardisiert.</p>
<p><a href="http://de.slideshare.net/BrendanEich/splash-9915475" target="_blank">Brendan Eich</a> schwebte ein Scheme im Web-Browser vor – eine Sprache, um HTML über Skripte zu manipulieren. Seine Aufgabe war es, JS wie Java aussehen zu lassen, allerdings ähnelte das Ergebnis eher C und AWK. Zudem wurden einige Fehlentscheidungen, die sich auf den Versuch zurückführen lassen, LISP-Konstrukte in JS einzuführen, schon früh eingefroren.</p>
<p>Seine Designziel war u.a., eine Script-Sprache zu schaffen, die es einem Web-Designer ermöglicht, Code-Snippets zu kopieren und in den eigenen HTML-Code einzufügen. Darum toleriert JS Fehler wie fehlende Semikolons. Das ursprüngliche Event-Handling (onclick, onmouseover) war sehr einfach und orientierte sich an HyperCard von Apple. Eich wählte einige mächtige Grundelemente (First Class Functions aus AWK und Scheme und prototyp-basierte Objekte aus Self) und ließ viele andere, in anderen Sprachen übliche, Sprachfeatures weg.</p>
<p>Self – ein Vorbild für JS – war eine Sprache, die in den 1980er Jahren von Xerox PARC &amp; Sun Microsystems entwickelt wurde. Ziel von Self war es, mehr Freiheiten als Smalltalk (eine damals beliebte objektorientierte Sprache) zu bieten. Self verwendet nur wenige Konstrukte wie Slots, Traits und Prototypen, aber keine (statischen) Typen und Klassen. Diese Konstrukte finden sich auch in JS wieder.</p>
<p>Self unterscheidet nicht zwischen dem Verhalten eines Objekts (Methoden einer Klasse) und dem Zustand des Objekts (Eigenschaften einer Klasse). Ein Objekt besteht aus Slots, die einen Namen haben und Methoden oder Attribute aufnehmen können. Objekten können zur Laufzeit Slots hinzugefügt werden. Objekterzeugung erfolgt vollständig ohne Klassen. Neue Objekte erzeugt man durch das Klonen existierender Objekte. Einzelne Slots können an einen Parent delegieren, indem sie den Slot aus dem Parent-Objekt nicht überschreiben. Trait-Objekte sind abgespeckte Implementierungen (Mixins).</p>
<p>Brendan Eich begründet die Existenz der beiden Programmiersprachen – Java und JS – mit dem Argument der Arbeitsteilung: Java war für hochpreisige Komponenten und Widgets vorgesehen, die in Java Applets laufen sollten. JS war für den Massenmarkt und Web-Designer gedacht, die lediglich Glue-Code zwischen Komponenten schreiben, Java Applets ansprechen oder Form-Validierungen bzw. Image-Rollovers implementieren möchten. Allerdings ist in der letzten Dekade Java aus der Client-Seite des Webs fast komplett verschwunden.</p>
<p>Im Jahr 2000 wurde ECMAScript 3rd Edition (ES3) spezifiziert. Dies ist der JS-Dialekt, den heute nahezu alle Browser sprechen. Erst zehn Jahre später wurde der Nachfolge-Standard ES5 fertiggestellt. Dies liegt daran, dass sich das Konsortium um ECMAScript nicht über die Features von ES4 einigen konnte, das u.a. Klassen und eine statische Typsierung bieten sollte. Ideen aus ES4 werden jedoch in ES6 einfließen, das voraussichtlich noch in diesem Jahr fertiggestellt wird.</p>
<p><strong>Dynamische Typisierung</strong></p>
<p>Als Java Enterprise-Entwickler ist man oft der Meinung, dass sich nur in einer statisch typisierten Sprache zuverlässiger Code schreiben lässt. JS kennt aber keine statische Typisierung, sondern Typen werden dynamisch zur Laufzeit ermittelt.</p>
<p>JS kennt fünf Basistypen. Diese sind Zahlen (number), Strings (string), Booleans (boolean), null und undefined. Wenn diese als Literale verwendet werden, sind sie unveränderlich (immutable).</p>
<p><strong>Objekte</strong></p>
<p>Obwohl es Basistypen gibt, so könnte ein Java Enterprise-Entwickler einwerfen, ist JS lediglich eine Script-Sprache. Eine strukturierte, objektorientierte Programmierung ist ohne Objekte nicht möglich.</p>
<p>In JS sind alle Datentypen außer Basistypen Objekte. Dies sind Arrays, Funktionen, Reguläre Ausdrücke (Funktionen) und Objekte selbst.</p>
<p><strong>Prototypen</strong></p>
<p>Der Java Enterprise-Entwickler könnte nun dagegen halten, dass eine objektorientierte Programmierung nur klassenbasiert möglich ist, da man ansonsten kein eigenes Typsystem entwickeln kann. JS bietet keine Klassen und damit kein eigenes Typsystem.</p>
<p>Schon ES3 bietet Konstruktor-Funktionen. Objekte werden über das new-Keyword und eine Konstruktor-Funktion gebildet. Letztere beginnt per Konvention mit einem Großbuchstaben (im Gegensatz. zu „normalen“ Funktionen). Ruft sie der new-Operator auf, wird ein Objekt vom Typ der Konstruktorfunktion erzeugt und kann innerhalb dieser angereichert werden.</p>
<p>Für Verebung gibt es Entwurfsmuster. Wem diese zu unbequem sind, kann eine Meta-Sprache wie TypeScript verwenden, die voraussichtlich ES6 ähneln wird, aber zu lesbarem ES3 kompiliert. Üblicher als die Verwendung von Vererbung ist aber das Benutzen von Mixins, die den Traits von Self ähneln.</p>
<p><strong>Funktionale Programmierung und Closures</strong></p>
<p>Java wird erst mit Java SE 8 Closures bekommen, die einem Konzept der funktionalen Programmierung aus den 1970er Jahren entstammen, das JS von Scheme geerbt hat.</p>
<p>In JS sind Funktionen sind gleichwertig zu Objekten (eine Funktion ist ein Objekt). Funktionen können als Parameter eine andere Funktion übergeben und auch als Rückgabewert ausgegeben werden. Dies illustriert dieses <a href="http://jsfiddle.net/oochs/EAHTU/" target="_blank">Script</a>, das der Standard-Sortierfunktion von Arrays eine Sortiervorschrift als Funktion mitgibt.</p>
<p>Bei der Verwendung von JS ist das Scoping für Java-Entwickler sehr gewöhnungsbedürftig. Auf den aktuellen Kontext (Scope) greift man über <code>this</code> zu. Dies ist der globale Namensraum bei einem Funktionsaufruf, ein Objekt-Namensraum beim Aufruf einer Konstruktor-Funktion mit dem new-Operator, ein Objekt-Namensraum bei einem Methodenaufruf, das <a href="http://jsfiddle.net/oochs/CGVK5" target="_blank">Aufrufer-Objekt bei Events</a> (im Browser) und (hier wird es interessant) definierbarer Namensraum durch call und apply. Durch call und apply lassen sich Methoden eines Objektes im Kontext eines anderen Objekts wiederverwenden. Scoping illustriert <a href="http://jsfiddle.net/oochs/VD5UU/" target="_blank">dieses Code-Snippet</a>.</p>
<p>Eine Funktion wird stets in einem Funktionsgeltungsbereich ausgeführt, der auch dann gilt, wenn in einer Funktion eine weitere, innere Funktion definiert wird. Letztere hat dann Zugriff auf die Variablen der äußeren Funktion. Dieses Verhalten wird als Closure bezeichnet. Ausnahmen sind hier <code>this</code> und der Bonusparameter <code>arguments</code>, da diese Parameter von jeder Funktion selbst überschrieben werden.</p>
<pre class="brush: jscript; title: ; notranslate">
function outherFunction() {
	var x = 'Hello';
	function innerFunction() {
		return x;
	}
	return innerFunction();
}
outherFunction(); // Hello
outherFunction.x; // undefined
</pre>
<p>Im oben aufgeführten Beispiel wäre es möglich, Closures zur Implementierung privater Variablen zu nutzen.</p>
<p><strong>Namespaces und Module</strong></p>
<p>Ein Java Enterprise-Entwickler könnte der Ansicht sein, dass sich in JS Objekte und Konstruktoren definieren lassen – und mit Closures können sogar Konstrukte, die private Variablen ersetzen können, gebaut werden. Allerdings kennt JS keine Packages, ohne die sich Code nur schwer organisieren lässt. Allerdings kann man JS-Objekte als Namespaces benutzen. Dies illustrieren folgende Code-Snippets:</p>
<ul>
<li><a href="http://jsfiddle.net/oochs/AA7TV/" target="_blank">http://jsfiddle.net/oochs/AA7TV/</a></li>
<li><a href="http://jsfiddle.net/oochs/pECUe/" target="_blank">http://jsfiddle.net/oochs/pECUe/</a></li>
</ul>
<p>Über Packages hinaus muss Code in Libraries und Modulen gepflegt werden. In Java existieren dafür JARs, OSGI-Module und demnächst das standardisierte Java Module System. Die Unterstützung von JS dafür ist, was den ECMA-Standard bis Version 5 angeht, mangelhaft. Allerdings spezifiziert <a href="http://www.commonjs.org/" target="_blank">CommonJS</a> ein <a href="http://www.commonjs.org/specs/modules/1.0/" target="_blank">Modulsystem</a>, das u.a. durch <a href="https://github.com/amdjs/amdjs-api/wiki/AMD" target="_blank">AMD</a> (<a href="http://requirejs.org/" target="_blank">require.js</a>) implementiert wird. Dazu möchten wir <a href="http://freshbrewedcode.com/derekgreer/2011/11/28/getting-started-with-requirejs/" target="_blank">diesen Blog-Post</a> empfehlen.</p>
<p><strong>Zusammenfassung und Ausblick</strong></p>
<p>Zusammenfassend für den ersten Teil lässt sich sagen, dass JS als Script-Sprache für den Browser entwickelt wurde. Die Wurzeln von JS sind nicht Java, sondern exotische Sprachen, deren Konzepte niemand kennt. JS ist dynamisch typisiert, funktional und objektorientiert. Packages lassen sich über Objekte nachbilden, und für Module existieren etablierte Ansätze.</p>
<p>Enterprise-Entwicklung ist in der Regel Teamarbeit. Eine umfangreiche Codebasis, wie sie ein großes Team erstellen wird, muss wartbar bleiben. Im zweiten Teil des Vortrags wurden Techniken und Tools vorgestellt, die dabei helfen können, eine geeignete Codequalität zu erreichen und zu wahren. Dieser Teil des Vortrags wird in einem folgenden Blog-Post beschrieben.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/03/javascript-fur-java-enterprise-entwickler-teil-1/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="JavaScript für Java Enterprise-Entwickler &#8211; Teil 1" data-url="http://blog.holisticon.de/2013/03/javascript-fur-java-enterprise-entwickler-teil-1/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/03/javascript-fur-java-enterprise-entwickler-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moderne Web-Frameworks</title>
		<link>http://blog.holisticon.de/2013/02/moderne-web-frameworks/</link>
		<comments>http://blog.holisticon.de/2013/02/moderne-web-frameworks/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 08:08:32 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6905</guid>
		<description><![CDATA[Wirklich skalierbare Softwaresysteme entstehen heutzutage selten im Enterprise-, sondern häufiger im Web-Umfeld. Daher können Enterprise-Anwendungen von den Erfahrungen profitieren, die mit Web-Anwendungen gesammelt wurden. Das Web hat eine eigene Architektur, die durch das HTTP-Protokoll vorgegeben wird und stellt eine Implementierung des REST-Architekturmusters dar. Das HTTP-Protokoll ist zustandslos. Zustände werden zwischen Konsumenten (z.B. einem Browser) und [...]]]></description>
				<content:encoded><![CDATA[<p>Wirklich skalierbare Softwaresysteme entstehen heutzutage selten im Enterprise-, sondern häufiger im Web-Umfeld. Daher können Enterprise-Anwendungen von den Erfahrungen profitieren, die mit Web-Anwendungen gesammelt wurden.<span id="more-6905"></span></p>
<div class="wp-caption alignleft" style="width: 330px"><img class="colorbox-6905"  alt="Pendel einer Uhr" src="http://farm6.staticflickr.com/5061/5644262104_136dc5fa08_n.jpg" width="320" height="243" /><p class="wp-caption-text">Der Trend bei Web-Frameworks pendelt zwischen Request-Response-orientierten und Komponenten-basierten Frameworks. (Bild: <a href="http://www.flickr.com/photos/rvoegtli/5644262104" target="_blank">&#8220;world-movement&#8221;</a> <a href="http://creativecommons.org/licenses/by/2.0/deed.en" target="_blank">cc-by</a> <a href="http://www.flickr.com/photos/rvoegtli/" target="_blank">rosmary</a>)</p></div>
<p>Das Web hat eine eigene Architektur, die durch das HTTP-Protokoll vorgegeben wird und stellt eine Implementierung des REST-Architekturmusters dar.</p>
<p>Das HTTP-Protokoll ist zustandslos. Zustände werden zwischen Konsumenten (z.B. einem Browser) und  Produzenten (z.B. einem Server) transferiert. Sie werden dargestellt durch Ressourcen (Dokumente). Die Kommunikation erfolgt über das Request-Response-Muster. Da keine Zustände gespeichert werden müssen, sondern Zustände übertragen werden, ist eine Web-Architektur theoretisch beliebig skalierbar.</p>
<p>Klassische Web-Frameworks basieren ebenfalls auf dem Request-Response-Muster. Das Programmiermodell eines klassischen Web-Frameworks entspricht also dem Programmiermodell des HTTP-Protokolls. Ein einfaches Beispiel für ein solches klassisches Web-Framework ist die <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/package-summary.html" target="_blank">Java Servlet-API</a>.</p>
<p>Auch das angegraute <a href="http://struts.apache.org/" target="_blank">Apache Struts</a> basiert auf dem Request-Response-Muster, strukturiert aber eine Web-Anwendung, indem das <a href="http://de.wikipedia.org/wiki/Model_View_Controller" target="_blank">MVC-Entwurfsmuster</a> angewendet wird. Ein Controller ist ein Bindeglied zwischen einer Web-View und dem Datenmodell der Anwendung. Wenn ein Request am Java Web-Container (z.B. Tomcat) ankommt, wird dieser vom Struts-Front-Controller engegengenommen. Dieser ruft beispielsweise anhand eines URL-Musters eine Action-Klasse auf. Diese Action-Klasse liest das im Request übertragene Model aus, wendet auf dieses Model Applikations-Logik an, verändert es damit und delegiert schließlich an eine Web-View, die das Model zur Darstellung bringt und im Response zurück an den Browser überträgt. Das Modell wird bei Struts in der Regel in JavaBeans &#8211; sogenannten FormBeans &#8211; gehalten, die bei jedem Request neu aufgebaut und nach dem Response zerstört werden. Zwar steht eine serverseitige Session zur Verfügung, um in dieser nutzerbezogene Zustände der Anwendung zu speichern, allerdings fügt sich diese bewusst nicht in das Konzept des Frameworks ein. Auch neuere Web-Frameworks wie <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a>, <a href="http://www.asp.net/mvc" target="_blank">ASP.NET MVC</a>, <a href="http://grails.org/">Grails von Springsource</a>, <a href="http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html">Spring-MVC</a> oder <a href="http://www.playframework.org/">Play</a> aus dem <a href="http://typesafe.com/stack">Typesafe-Stack</a> folgen diesen Wurzeln.</p>
<p>Dieses zustandslose Programmiermodell war jedoch für Entwickler, die aus der Desktop-Entwicklung kommen, fremd. Eine Desktop-Anwendung wurde schon damals aus UI-Komponenten zusammengesetzt. Daher entstanden Web-Frameworks, die dieses UI-Komponentenmodell auf Web-Anwendungen übertragen.</p>
<p>UI-Komponenten haben den Vorteil, dass sich auch komplexere UI-Widgets zusammensetzen und dann konsistent verwenden lassen. Während HTML seit 1997 (bzw. 1999) mit dem 4.01-Standard stagnierte, konnten reichhaltigere UI-Widgets durch komponentenorientierte Frameworks auch von Enterprise-Entwicklern ohne fortgeschrittene Kenntnisse von HTML, JavaScript und CSS benutzt werden.</p>
<p>Der Zustand einer komponentenorientierten Anwendung wird üblicherweise in einem Baum organisiert. Eine Änderung des Zustands der Anwendung wird über Events und nicht über Requests ausgelöst. Meist wird der Zustand des Baums auf dem Server gehalten. Events lösen implizit HTTP-Requests aus, ohne dass sich der Entwickler darum kümmern muss.</p>
<p>Komponentenorientierte Web-Frameworks abstrahieren also sowohl das HTTP-Protokoll als auch HTML, Stylesheets und JavaScript und bieten statt dessen ein höheres Programmiermodell an. Beispiele für solche komponentenorientere Web-Frameworks sind <a href="http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html">JSF</a>, <a href="http://www.asp.net/">ASP.NET</a>, <a href="http://wicket.apache.org/">Apache Wicket</a>, <a href="http://liftweb.net/">Lift</a> oder das <a href="https://developers.google.com/web-toolkit/">Google Web Toolkit</a> und <a href="https://vaadin.com/">Vaadin</a>.</p>
<p>Grundsätzlich lassen sich Web-Frameworks also stark verallgemeinert in zwei Klassen unterteilen: Web-Frameworks, die auf dem Request-Response-Muster basieren und Web-Frameworks, die dieses Muster abstrahieren und auf Komponenten basieren. Während sich bei Web-Frameworks, die auf dem Request-Response-Muster basieren, der Entwickler selbst um den Zustand der Web-Anwendung und um die Präsentationsschicht kümmern muss, wird bei Web-Frameworks, die auf dem Komponenten-Modell basieren, der Zustand meist in einem Baum auf dem Server gehalten und UI-Komponenten werden zur Verfügung gestellt.</p>
<p>Der Trend ging früher von Request-Response-basierten Web-Frameworks hin zu komponentenorienterten Web-Frameworks. Subjektiv beobachte ich allerdings in letzter Zeit einen Trend hin zurück zu Request-Response-basierten Web-Frameworks. Dies hat mehrere Gründe.</p>
<ul>
<li>Webentwicklung ist schon lange nicht mehr exotisch. Die meisten Entwickler sind inzwischen Web- und nicht mehr klassische Anwendungsentwickler. Der Request-Response-basierte Ansatz einer Webanwendung erscheint vielen Entwicklern heute natürlicher als die eventbasierte Entwicklung in Komponenten-Frameworks.</li>
<li>Durch HTML5 und ECMAScript 5 ist der Stillstand im Bezug auf HTML, CSS und JavaScript im Webbrowser überwunden. Reichhaltige Benutzeroberflächen lassen sich mit HTML5 (und hilfreichen Bibliotheken wie <a href="http://twitter.github.com/bootstrap/" target="_blank">Twitter Bootstrap</a>) viel leichter realisieren als mit HTML 4.01 oder XHTML. Komponentenorientierte Frameworks entwickeln sich inzwischen sogar langsamer als Webbrowser es tun. Modernere UIs lassen sich jetzt also mit den Basistechnologien leichter entwickeln als mit Komponenten-Frameworks. Der komponentenorientierte Ansatz fühlt sich inzwischen schwerfällig an.</li>
<li>Skalierung ist heute wichtiger denn je, da viele Anwendungen inzwischen auf virtuellen Servern in der &#8220;Cloud&#8221; gehostet werden, in denen klassisches Clustering keine Option ist. Daher ist es nicht mehr State-of-the-Art, den Zustand einer Anwendung in einer Session zu speichern.</li>
</ul>
<p>Zwar ist ein Trend zurück zu Request-Response-basierten Web-Frameworks zu beobachten, allerdings sind dies nicht mehr unbedingt die gleichen Frameworks wie aus der Urzeit der Webentwicklung. Hier gibt es zwei Strömungen, die sich allerdings nicht unbedingt widersprechen und beide auf dem REST-Ansatz basieren:</p>
<ul>
<li>Web-Frameworks, die auf Partial Page Rendering und Progressive Enhancement basieren, und</li>
<li>SPA-Frameworks (<a href="http://en.wikipedia.org/wiki/Single-page_application">Single Page Applications</a>), die MVC (bzw. MVP / MVVM) direkt im Browser implementieren.</li>
</ul>
<p>Bei den erstgenannten Frameworks bietet der Server ein Backend, das den REST-Prinzipien folgt. Alle Logik findet auf dem Server statt. Der Browser bringt lediglich vom Server gelieferte HTML-Fragmente (HTML-Snippets) zur Darstellung, gestaltet sie mit CSS und reichert sie durch unobstrusives JavaScript an. Auf dem Server lässt sich hier JAX-RS mit einer dünnen UI-Schicht (<a href="http://jersey.java.net/">Jersey</a> bietet solche Features) oder ein klassisches MVC-Framework wie <a href="http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html">Spring MVC</a> oder eine neueres Framework wie <a href="http://www.playframework.org/">Play</a>, das auf <a href="http://www.playframework.org/documentation/2.0/ScalaSessionFlash">serverseitige Sessions</a> verzichtet, einsetzen. Im Browser genügt eine etablierte JS-Bibliothek wie <a href="http://jquery.com/">jQuery</a> mit entsprechenden Plugins wie das <a href="http://www.malsup.com/jquery/form/">jQuery-Form-Plugin</a> und <a href="http://jqueryui.com/">jQuery-UI</a>. Ein echtes browserseitiges UI-Framework wird nicht benötigt. Anforderungen an eine Beispiel-Architektur, die diesem Muster folgt, definiert der <a href="http://roca-style.org/">ROCA-Style</a> (ROCA = Ressource Oriented Client Architecture).</p>
<p>Bei den zweitgenannten Frameworks wandert das MVC-Muster vom Server in den Browser. Dies kann zu sehr leichtgewichtigen Server-Anwendungen führen. Eine Server-Komponente liefert lediglich eine per URL eindeutig identifizierbare Ressource in einem angeforderten Format (z.B. als JSON-Objekt) aus bzw. persistiert sie. MVC-Frameworks auf dem Browser kümmern sich sowohl um die Logik als auch um die Darstellung. Der Zustand der Anwendung wird im Client gehalten. Die Komplexität der Anwendung wandert also vom Server in den Browser. Daher ist ein echtes UI-Framework im Browser hilfreich. Als Beispiel für leichtgewichtige MVC-Frameworks im Browser können <a href="http://emberjs.com/">Ember.js</a>, <a href="http://knockoutjs.com/">Knockout</a>, <a href="http://angularjs.org/">AngularJS</a> oder <a href="http://javascriptmvc.com/">JavaScript-MVC</a> dienen.</p>
<p>Neben leichtgewichtigen SPA-Frameworks gibt es auch schwergewichtigere, komponentenbasierte Frameworks wie <a href="http://www.sencha.com/products/extjs">Senchas Ext.js</a>, die eher einem JSF oder GWT im Browser als einer angereicherten Website gleichen. Es lässt sich nur schwer beantworten, ob ein solches Framework eher das Beste aus beiden Welten bietet oder sämtliche Nachteile beider Ansätze vereint.</p>
<p>Auch in Enterprise-Anwendungen sollten moderne Architektur-Ansätze, die aus dem Web-Umfeld kommen, zumindest ausprobiert werden. Vorteile wie Skalierbarkeit und leichtgewichtige Anwendungen (zumindest auf dem Server) sprechen für sich. Entsprechende Frameworks sind in diesem Artikel verlinkt. Bei der Auswahl eines Web-Frameworks sollte darauf geachtet werden, dass das Framework von der Architektur her zur Architektur des Webs und seines Protokolls, dem Hypertext Transfer Protocol,  passt.</p>
<p>Viel Spaß beim Ausprobieren!</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/02/moderne-web-frameworks/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Moderne Web-Frameworks" data-url="http://blog.holisticon.de/2013/02/moderne-web-frameworks/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/02/moderne-web-frameworks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Devoxx University Day Two – Java Social &amp; Faster Websites – Frontend Performance</title>
		<link>http://blog.holisticon.de/2013/01/devoxx-university-day-java-social-faster-websites-frontend-performance/</link>
		<comments>http://blog.holisticon.de/2013/01/devoxx-university-day-java-social-faster-websites-frontend-performance/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 08:07:47 +0000</pubDate>
		<dc:creator>Norman Erck</dc:creator>
				<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[agorava]]></category>
		<category><![CDATA[JSR 357]]></category>
		<category><![CDATA[SPDY]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6810</guid>
		<description><![CDATA[Nachdem mir am ersten Tag das Play Framework vorgestellt, Dank des Vortrages von Wesley Hales Lust auf HTML5 und JS gemacht wurde und wir zwischendurch erfahren konnten, dass auch Antwerpen unter der Woche ein Nachtleben hat, habe ich mir am zweiten Tag einen Vortrag zum Java Social JSR und dazu, wie man Webseiten schneller macht, [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/11/devox-logos.png"><img class="size-full wp-image-6764  alignleft colorbox-6810" alt="Logo Devoxx" src="http://blog.holisticon.de/wp-content/uploads/2012/11/devox-logos.png" width="150" height="43" /></a></p>
<p>Nachdem mir am ersten Tag das Play Framework vorgestellt, Dank des Vortrages von Wesley Hales Lust auf HTML5 und JS gemacht wurde und wir zwischendurch erfahren konnten, dass auch Antwerpen unter der Woche ein Nachtleben hat, habe ich mir am zweiten Tag einen Vortrag zum Java Social JSR und dazu, wie man Webseiten schneller macht, angeschaut. Was ich dabei lernte, wird in dem folgenden Blogbeitrag vorgestellt.<span id="more-6810"></span></p>
<h2>Java Social JSR, it’s alive</h2>
<p>Im Vortrag wurde von Antoine Sabot-Durand und Werner Keil eine Implementierung des <a title="JSR 357 Social Media API" href="http://jcp.org/en/jsr/detail?id=357">Java Social JSR</a> vorgestellt &#8211; <a title="Agorava - The Social Framework" href="http://agorava.org">Agorava</a>. Mir selbst stellte sich dabei sofort die Frage, warum ich einen JSR dafür brauche. Social Media-Dienste stellen in der Regel eine schöne REST und JSON API zur Verfügung. Daher kommt natürlich die Frage auf, wozu ein Java Social JSR?</p>
<p>Ziel ist, generische Services für Social Media bereitzustellen, die ermöglichen, sich gegen den Dienst zu identifizieren und Nachrichten zu posten. Die aktuelle Implementierung unterstützt dabei Facebook, Twitter und Linkedin. Zusätzlich dazu wird mit dem SocialMediaXModel eine API zur Verfügung gestellt, mit der man eigene Social-Media-Dienste anbinden kann. Die Entwickler planen auch eine Anbindung von Github, Stackoverflow und Foursquare.</p>
<p>Präsentiert wurde die Implementierung am Besipiel <a title="Agorava Demo App Socializer" href="http://socializer.agorava.cloudbees.net/home.jsf">Socializer</a>, das es z.B. ermöglicht, sich mit mehreren Twitter-Accounts und Facebook gleichzeitig anzumelden. Interessant ist auch, dass sie mit ihrer API nicht das Ziel verfolgen, ein neues TweetDeck oder einen Social Media-Client zu Implementieren – es geht ihnen in erster Linie um die Verbreitung von Daten.</p>
<p>Mit dem SocialMediaApiHub ermöglichen sie generische Funktionalitäten über verschiedene Social-Media-Dienste hinweg. Dies wird durch mehrere Sessions erreicht.</p>
<p>Okay, das war der erste Teil der dreistündigen Session. Im zweiten Teil wurde es sehr technisch, und anhand von Klassendiagrammen und Code Snippets wurde auf die Implementierung der <em>java social api</em> eingegangen. Ja, das ist vielleicht nicht das, was man erwartet, wenn man in eine Session dazu geht, aber für mich als alten CDI-Freund war es ein schönes Praxisbeispiel, wie man die Werkzeuge von CDI in der Praxis einsetzen kann. Nebenbei haben sie auch die Funktionalität genutzt, sich eine eigene CDI-Extension zu schreiben.</p>
<h2>Faster Websites: Crash Course on Frontend Performance</h2>
<p>Was Ilya Grigorik in diesem Slot veranstaltete, war wirklich großes Kino. Und ich sage das als jemand, der nicht zu den Google-Fanboys gehört.</p>
<p>Was machte den Vortrag so außergewöhnlich? Die Herangehensweise. Ilya hatte den Vortrag in drei Teile aufgeteilt:</p>
<ol>
<li>The problem</li>
<li>Browser architecture and the hood</li>
<li>Best practices with context</li>
</ol>
<p>Zunächst ging er auf das (in vielen Vorträgen zu diesem Thema) erwähnte Web Search Delay Experiment ein. Hier wurden Webseiten von Amazon, Google etc. bewusst verlangsamt, um zu ermitteln, ab wann das Ganze den Nutzer nervt. Fakt dazu, man sollte unter 250ms bleiben, damit der Nutzer etwas als schnell empfindet. Alles, was länger als eine Sekunde dauert, führt beim Nutzer zum Kontextwechsel.</p>
<p>Kann ich damit nun zum Fachbereich rennen und sagen, wir brauchen Unmassen an Geld, um unsere Webseite schneller zu machen? Nein. Ähnlich dem Ansatz den Wesley Hales und auch mein Kollege <a title="Xing Oliver Ochs" href="http://www.xing.com/profile/Oliver_Ochs">Olli Ochs</a> fahren, rät Ilya dazu, Web Performance nicht als technische Metrik zu sehen, sondern als Business-Metrik. Performante Webseiten führen zu mehr Umsatz und das muss man dem Fachbereich auch entsprechend verkaufen.</p>
<p>Nachdem man seinen Fachbereich ggf. überzeugt hat, muss man sich dem Problem widmen, warum die eigene Webseite überhaupt langsam ist. In der Regel steigen die üblichen Vorträge jetzt gleich bei Punkt drei von Ilyas Vortrag ein. Im Gegensatz dazu erklärt er den Zuhörern, wie das Web rein technisch funktioniert und wo man zuerst ansetzen sollte, bevor man sich an den auszuliefernden Code wagt.</p>
<p>Nach dem wir gelernt haben, wie das Leben eines HTTP-Requests verläuft, gibt er den ersten Tipp. Der DNS-Provider spielt eine wesentliche Rolle für die Performance einer Webseite – dort allein können schon 300 bis 400 ms verloren gehen.</p>
<p>Einen Ansatz, der auch zur Optimierung beitragen soll, ist das Öffnen von mehreren TCP-Verbindungen. Klingt ja erstmal gut. Interessant ist aber, dass die Verbindungen dank des <em>TCP slow start</em> erst einmal mit geringerer Kapazität aufgemacht werden und sich dann erst langsam hochschrauben. Ergo: offene TCP Verbindungen weiter nutzen und nicht mehrere aufmachen.</p>
<p>Ein konkreter Tipp für diejenigen unter uns die auf ihrem Linux-Server Root-Rechte haben: auf Lunix ab 2.6.33 updaten, dann erhöht sich der <a title="CWND" href="http://en.wikipedia.org/wiki/Congestion_window">CWND</a> (<em>congestion window size</em>) von 3 auf 10.</p>
<p>Ursache des Problems ist also nicht nur die Qualität unserer Webseiten, sondern auch, wie wir sie bereitstellen. Dass auch HTTP dazu beiträgt, dass wir noch ein paar Einschränkungen haben, zeigt er mit der Vorstellung von SPDY und HTTP 2.0.</p>
<p>Aktuell bedienen wir uns u.a. den folgenden Workarounds, um das Web schneller zu machen:</p>
<ul>
<li>wir konkatenieren Dateien</li>
<li>Spriting von Bildern</li>
<li>Domain sharding</li>
<li>Ressource inlining</li>
</ul>
<p>Mit <a title="Wikipedia SPDY" href="http://de.wikipedia.org/wiki/SPDY">SPDY</a> könnten wir uns den Spaß sparen, doch um gleich frühzeitig ein wenig die Euphorie zu bremsen. SPDY wird aktuell nur von wenigen Browsern unterstützt. Aber auch dafür ist eine Lösung in Sicht.</p>
<p>SPDY macht u.a. Folgendes:</p>
<ul>
<li>nutzt nur eine TCP-Verbindung</li>
<li>ein Request gleicht einem Stream</li>
<li>Streams werden multiplext</li>
<li>Streams können priorisiert werden</li>
</ul>
<p>Mit SPDY können auch aktive Server-Pushs angestoßen werden und Informationen, die immer mitgesendet werden, wie z.B. der Header einer Seite, können gecached werden.</p>
<p>Alles toll, nur schade, dass es nicht von allen Browsern unterstützt wird. Doch eine Lösung ist in Aussicht: SPDY wird als Basis für den neuen <a title="Wikipedia HTTP 2.0" href="http://en.wikipedia.org/wiki/HTTP_2.0">HTTP 2.0-</a>Standard genommen. D.h., all das wird kommen; wir müssen uns nur noch ein wenig gedulden.</p>
<p>Was nun die Browser-Architektur angeht, möchte ich hier nicht weiter ausholen. Wer noch mehr dazu wissen möchte, schaut sich am besten die <a title="Faster Websites – Frontend Performance" href="http://www.igvita.com/slides/2012/webperf-crash-course.pdf">Folien von Ilya zum Vortrag</a> an.</p>
<p>Nachdem dann eine Stunde Werbung für Google Analytics gemacht wurde, kam er zu Punkt Drei seines Vortrages, den <em>best practices</em> für performate Webseiten – und das sind u.a. die folgenden:</p>
<ul>
<li>DNS Lookup</li>
<li>Redirects vermeiden</li>
<li>Weniger HTTP-Requests</li>
<li>CDN einsetzen</li>
<li>GZIP einsetzen</li>
<li>Bilder optimieren</li>
<li>Expires Headers nutzen</li>
<li>ETags hinzufügen</li>
<li>CSS am Anfang der Seite einbinden</li>
<li>Skripte asynchron laden, wo möglich</li>
<li>Skripte am Ende laden</li>
<li>Minfizieren und Konkatenieren</li>
<li>Auf 60 Frames per second achten</li>
<li><a title="PageSpeed Insights" href="https://developers.google.com/speed/docs/insights/">PageSpeed Insights</a> nutzen</li>
</ul>
<h2>Fazit</h2>
<p>Die zwei Tage der <em>Devoxx University Days</em> haben sich für mich auf jeden Fall gelohnt. Ich habe gelernt, dass Cookies nicht per se böse sind, dass HTML5 und JS nach wie vor rocken, und dass man wie so oft auch beim Thema Web Perfomance unter die Haube schauen muss, um wirklich etwas zu erreichen.</p>
<p>Was die Devoxx angeht, werde ich definitiv versuchen, nächstes Jahr ein Ticket für die ganze Veranstaltung zu ergattern. Hochkarätige Sprecher, aktuelle Java-Themen und Vorträge in Kinosälen haben mich überzeugt.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/01/devoxx-university-day-java-social-faster-websites-frontend-performance/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Devoxx University Day Two – Java Social &amp; Faster Websites – Frontend Performance" data-url="http://blog.holisticon.de/2013/01/devoxx-university-day-java-social-faster-websites-frontend-performance/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/01/devoxx-university-day-java-social-faster-websites-frontend-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SLM in der mobilen Entwicklung</title>
		<link>http://blog.holisticon.de/2013/01/slm-der-mobilen-entwicklung/</link>
		<comments>http://blog.holisticon.de/2013/01/slm-der-mobilen-entwicklung/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 08:04:51 +0000</pubDate>
		<dc:creator>Holisticon AG</dc:creator>
				<category><![CDATA[Publikation]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[publikation]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Software Lifecycle Management]]></category>
		<category><![CDATA[Sonar]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6966</guid>
		<description><![CDATA[Buildserver, Bugtracking, Versions- und Qualitätsmanagement sind aus der Entwicklung in Enterprise-Projekten nicht mehr wegzudenken. Auch in der mobilen Entwicklung sind sie sinnvoll. Der Artikel in der web &#38; mobile Developer 01/2013 zum Thema &#8220;SLM in der mobilen Entwicklung&#8221; wurde von den Holisticon-Mitarbeitern Jan Weinschenker und Sven Bunge verfasst. Er vermittelt, warum Software-Lifecycle-Management (SLM) auch für [...]]]></description>
				<content:encoded><![CDATA[<p>Buildserver, Bugtracking, Versions- und Qualitätsmanagement sind aus der Entwicklung in Enterprise-Projekten nicht mehr wegzudenken. Auch in der mobilen Entwicklung sind sie sinnvoll.</p>
<p>Der Artikel in der <a href="http://www.webundmobile.de/Aktuelles-Heft/Inhalt-web-mobile-developer-1-2013-9132.html" target="_blank">web &amp; mobile Developer 01/2013</a> zum Thema &#8220;SLM in der mobilen Entwicklung&#8221; wurde von den Holisticon-Mitarbeitern Jan Weinschenker und Sven Bunge verfasst. Er vermittelt, warum Software-Lifecycle-Management (SLM) auch für die mobile Entwicklung verwendet werden sollte. Es hilft, die Komplexität von Software beherrschbar zu machen und über verschiedene Arten von automatischen Tests die Qualität zu gewährleisten. Der Artikel &#8220;<a title="Androiden kontinuierlich integriert" href="http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/" target="_blank">Androiden kontinuierlich integriert</a>&#8221; der <em>web &amp; mobile Developer 12/2012</em> erklärt Continuous Integration für Android-Apps. Dieser Artikel baut darauf auf und erklärt, wie die Software-Qualität der Apps gemessen und erhöht werden kann.</p>
<p>Ein Themen-Überblick:</p>
<ul>
<li>Warum ist SLM auch für die mobile Entwicklung sinnvoll?</li>
<li>Continuous Integration</li>
<li>Automatisiertes Testen
<ul>
<li>Unit-Tests mit JUnit</li>
<li>Integrations-Tests mit Robolectric</li>
<li>BDD mit Cucumber</li>
<li>UI-Stress-Tests mit Monkey</li>
</ul>
</li>
<li>Bewertung von Software-Qualität
<ul>
<li>Statische Code-Analyse mit PMD und Findbugs</li>
<li>Einheitlicher Code-Style mit Checkstyle</li>
<li>Zusammenfassung der Ergebnisse mit Sonar</li>
</ul>
</li>
<li>Release-Management bei Apps
<ul>
<li>Warum sind Versionen wichtig?</li>
<li>Releasen mit Maven</li>
</ul>
</li>
</ul>
<p>Die <a href="http://www.webundmobile.de/Aktuelles-Heft/Inhalt-web-mobile-developer-1-2013-9132.html" target="_blank">Ausgabe 01/2013</a> der Zeitschrift ist ab jetzt im Zeitschriften-Handel verfügbar.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2013/01/slm-der-mobilen-entwicklung/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="SLM in der mobilen Entwicklung" data-url="http://blog.holisticon.de/2013/01/slm-der-mobilen-entwicklung/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2013/01/slm-der-mobilen-entwicklung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Achtes Hamburg Web Performance Meetup</title>
		<link>http://blog.holisticon.de/2012/12/achtes-hamburg-web-performance-meetup/</link>
		<comments>http://blog.holisticon.de/2012/12/achtes-hamburg-web-performance-meetup/#comments</comments>
		<pubDate>Wed, 19 Dec 2012 12:41:51 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[Publikation]]></category>
		<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Webperf]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6944</guid>
		<description><![CDATA[Das erst Web Performance Meetup in Hamburg fand am achten Februar statt. Das heißt, dass unsere Gruppe im Februar bereits ein Jahr alt wird. Wir hoffen, eine ausreichend große Location für dieses Ereignis zu finden. Vorher ist aber erst einmal Advents- und Weihnachtszeit. Daher planen wir zum Jahresende ein kleines Meetup in gemütlicher Runde. Die [...]]]></description>
				<content:encoded><![CDATA[<p>Das erst Web Performance Meetup in Hamburg fand am achten Februar statt. Das heißt, dass unsere Gruppe im Februar bereits ein Jahr alt wird. Wir hoffen, eine ausreichend große Location für dieses Ereignis zu finden.</p>
<p><img class="alignnone colorbox-6944" style="float: left;" alt="Logo des Web Performance Metup Hamburg" src="http://photos1.meetupstatic.com/photos/event/6/3/1/c/highres_71725372.jpeg" width="359" height="212" /></p>
<p>Vorher ist aber erst einmal Advents- und Weihnachtszeit. Daher planen wir zum Jahresende ein kleines Meetup in gemütlicher Runde. Die Teilnehmerzahl ist aus Platzgründen limitiert.</p>
<p>Nachdem auf dem letzten Meetup <a title="XING-Profil von Joris" href="https://www.xing.com/profile/Joris_Kalz" target="_blank">Joris Kalz</a> (Microsoft) die Skaliebarkeit von Microsoft Azure an einem praktischen Beispiel demonstrierte und <a title="Tillmanns XING-Profil" href="https://www.xing.com/profile/TillmannCarlos_Bielefeld" target="_blank">Tillmann Bielefeld</a> (empuxa) &amp; <a title="Andres XING-Profil" href="https://www.xing.com/profile/Andre_vanHoorn2" target="_blank">Andre van Hoorn</a> (Uni Kiel) Online Performance Anomaly Detection mit Kieker vorstellten, werden <a title="Franks XING-Profil" href="https://www.xing.com/profile/Frank_Thelen6" target="_blank">Frank Thelen</a> und <a title="XING-Profil von Oliver Ochs" href="https://www.xing.com/profile/Oliver_Ochs" target="_blank">ich</a> diesmal etwas zum Thema RUM erzählen: &#8220;Rolling out Real User Monitoring at Telefónica Germany&#8221;</p>
<p>Diesen Vortrag haben wir beide bereits auf der <a title="Unser (mittelmäßig) bewerteter Vortrag auf der Velocity" href="http://velocityconf.com/velocityeu2012/public/schedule/detail/26158" target="_blank">Velocity Europe Conference in London</a> gehalten.</p>
<p>Ein weiterer Vortag ist noch nicht eingeplant, falls sich aber noch ein Vortragender findet, dann wird sein Vorschlag sicher Wohlwollen finden. Ansonsten können wir auch einen Fishbowl veranstalten und das Jahr Revue passieren lassen.</p>
<p>Das Meetup findet heute, Mittwoch 19.12., ab 19:00 <a title="Friedensallee 120 in Google Maps" href="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Holisticon+AG,+Friedensallee,+Hamburg,+Germany&amp;aq=0&amp;oq=holisticon&amp;sll=37.0625,-95.677068&amp;sspn=43.528905,72.158203&amp;vpsrc=0&amp;t=h&amp;ie=UTF8&amp;hq=Holisticon+AG,&amp;hnear=Friedensallee,+Hamburg,+Germany&amp;z=16&amp;iwloc=A&amp;cid=7904096413017302147" target="_blank">in unseren Räumlichkeiten</a> statt. Anmelden kann man sich über unsere <a title="das Event auf meetup.com" href="http://www.meetup.com/Hamburg-Web-Performance-Group/events/88490622/" target="_blank">Meetup-Gruppe</a> oder über <a title="bei XING sind evtl. noch Plätze frei" href="https://www.xing.com/events/webperformance-meetup-1162715" target="_blank">XING</a>.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/12/achtes-hamburg-web-performance-meetup/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Achtes Hamburg Web Performance Meetup" data-url="http://blog.holisticon.de/2012/12/achtes-hamburg-web-performance-meetup/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/12/achtes-hamburg-web-performance-meetup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Craftsmanship &#8211; aber wie?</title>
		<link>http://blog.holisticon.de/2012/12/software-craftsmanship-aber-wie/</link>
		<comments>http://blog.holisticon.de/2012/12/software-craftsmanship-aber-wie/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 08:12:20 +0000</pubDate>
		<dc:creator>Stefan Heldt</dc:creator>
				<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Agil]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6754</guid>
		<description><![CDATA[Der Begriff Software Craftsmanship ist gar nicht so leicht zu definieren. &#8220;Craftsmanship&#8221; legt eine Übersetzung mit Handwerkskunst oder Kunstfertigkeit im Kontext von Softwareentwicklung bzw. Software Engineering nahe. Stark vereinfacht geht es hauptsächlich darum, wie man qualitativ hochwertige Software herstellt. Doch was bedeutet das konkret und wie setze ich das um? Das Software Craftsmanship Manifesto ist [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_6817" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/12/pic_SWCraftsmanship.png"><img class="size-medium wp-image-6817 colorbox-6754" title="© contrastwerkstatt / Fotolia.com" src="http://blog.holisticon.de/wp-content/uploads/2012/12/pic_SWCraftsmanship-300x200.png" alt="" width="300" height="200" /></a><p class="wp-caption-text">© contrastwerkstatt / Fotolia.com</p></div>
<p>Der Begriff Software Craftsmanship ist gar nicht so leicht zu definieren. &#8220;Craftsmanship&#8221; legt eine Übersetzung mit Handwerkskunst oder Kunstfertigkeit im Kontext von Softwareentwicklung bzw. Software Engineering nahe. Stark vereinfacht geht es hauptsächlich darum, wie man qualitativ hochwertige Software herstellt. Doch was bedeutet das konkret und wie setze ich das um?</p>
<p>Das <a href="http://manifesto.softwarecraftsmanship.org/" target="_blank">Software Craftsmanship Manifesto</a> ist auf einer sehr abstrakten Ebene unterwegs. Dies gilt es in die Praxis umzusetzen. Im Konkreten gibt es zwar grundlegende Konzepte und Ideen – wie Test Driven Development und Metriken, die einzuhalten sind. Wie die Umsetzung tatsächlich geschehen kann, hängt vom jeweiligen Team und Unternehmen ab. Deswegen unterstützen wir unsere Kunden individuell dabei, Software Craftsmanship in ihrem Unternehmen einzuführen. Die Unterstützung reicht von einer Einführung in die Grundlagen und unterschiedlichsten Praktiken bis hin zum Coaching im laufenden Entwicklungsbetrieb. Lesen Sie mehr in unserem <a href="http://www.holisticon.de/cms/ProjektProzessManagement/SoftwareCraftsmanship" target="_blank">Flyer</a>.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/12/software-craftsmanship-aber-wie/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Software Craftsmanship &#8211; aber wie?" data-url="http://blog.holisticon.de/2012/12/software-craftsmanship-aber-wie/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/12/software-craftsmanship-aber-wie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androiden kontinuierlich integriert</title>
		<link>http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/</link>
		<comments>http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/#comments</comments>
		<pubDate>Wed, 21 Nov 2012 08:08:40 +0000</pubDate>
		<dc:creator>Jan Weinschenker</dc:creator>
				<category><![CDATA[Publikation]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[publikation]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6664</guid>
		<description><![CDATA[Kontinuierlich integriert Jan Weinschenker und Sven Bunge web &#38; mobile developer 12/2012 Auf diesem Blog wurde bereits in mehreren Artikeln erläutert, welche Vorteile Software-Lifecycle-Management für die professionelle Softwareentwicklung bringt. Die beschriebenen Konzepte und Verfahren lassen sich genau so auch auf die Entwicklung von Apps im Android-Umfeld anwenden. Ein Werkzeug, das dabei eine zentrale Rolle einnimmt, [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_6701" class="wp-caption alignleft" style="width: 219px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/11/IMAG0549.jpg"><img class="size-medium wp-image-6701 colorbox-6664" src="http://blog.holisticon.de/wp-content/uploads/2012/11/IMAG0549-209x300.jpg" alt="Web und Mobile Developer - Ausgabe 12/2012" width="209" height="300" /></a><p class="wp-caption-text">Web und Mobile Developer &#8211; Ausgabe 12/2012</p></div>
<p><strong>Kontinuierlich integriert</strong></p>
<p>Jan Weinschenker und Sven Bunge</p>
<p><a title="web &amp; mobile developer 11/2012" href="http://www.webundmobile.de/Aktuelles-Heft/web-mobile-developer-11-2012">web &amp; mobile developer 12/2012</a></p>
<p>Auf diesem Blog wurde bereits in mehreren Artikeln <a href="http://blog.holisticon.de/2011/04/die-stiefmutter-software-projekten/">erläutert</a>, welche Vorteile <a href="http://blog.holisticon.de/2011/05/kostet-software-lifecycle-management-wenn-man-es-nicht-tut/">Software-Lifecycle-Management</a> für die professionelle Softwareentwicklung bringt. Die beschriebenen Konzepte und Verfahren lassen sich genau so auch auf die Entwicklung von Apps im Android-Umfeld anwenden.</p>
<p>Ein Werkzeug, das dabei eine zentrale Rolle einnimmt, ist der Build- oder <abbr title="Continuous Integration">CI</abbr>-Server. Im Artikel von <a href="https://www.xing.com/profile/Jan_Weinschenker">Jan Weinschenker</a> und <a href="https://www.xing.com/profile/Sven_Bunge">Sven Bunge</a> wird beschrieben, wie ein solcher CI-Server mithilfe der freien Werkzeuge <a href="http://jenkins-ci.org/">Jenkins</a> und <a href="http://maven.apache.org/">Maven</a> speziell für die Android-Entwicklung aufgesetzt wird.</p>
<p>Weiterhin geht der Artikel auf die Vorteile des Software-Lifecycle-Managements, insbesondere im Hinblick auf die Testautomatisierung, ein.</p>
<p>Den kompletten Artikel lesen Sie in der <a title="web &amp; mobile developer 11/2012" href="http://www.webundmobile.de/Aktuelles-Heft/web-mobile-developer-11-2012">web &amp; mobile developer 12/2012</a>, die seit dem 8.11.2012 erhältlich ist.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Androiden kontinuierlich integriert" data-url="http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/11/androiden-kontinuierlich-integriert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webservices mit REST und nicht mit SOAP?</title>
		<link>http://blog.holisticon.de/2012/11/webservices-mit-rest-und-nicht-mit-soap/</link>
		<comments>http://blog.holisticon.de/2012/11/webservices-mit-rest-und-nicht-mit-soap/#comments</comments>
		<pubDate>Tue, 20 Nov 2012 13:45:19 +0000</pubDate>
		<dc:creator>Jan Weinschenker</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Schnittstellen]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Webservice]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=6590</guid>
		<description><![CDATA[Im Enterprise-Umfeld ist bis heute das Mittel der Wahl zur Kommunikation zwischen Webservices ganz klar SOAP. Wir haben hier eine elektronisch lesbare Schnittstellen-Definition in Form von WSDL-Dateien, wir haben typisierte Daten und weitreichende Tool-Unterstützung. Java, .NET, PHP und viele weitere Programmiersprachen bieten zahlreiche SOAP-Frameworks an. Warum diese Vorteile ignorieren und stattdessen REST benutzen? Representational State [...]]]></description>
				<content:encoded><![CDATA[<p>Im Enterprise-Umfeld ist bis heute das Mittel der Wahl zur Kommunikation zwischen Webservices ganz klar <abbr title="Simple Object Access Protocol">SOAP</abbr>. Wir haben hier eine elektronisch lesbare Schnittstellen-Definition in Form von WSDL-Dateien, wir haben typisierte Daten und weitreichende Tool-Unterstützung. Java, .NET, PHP und viele weitere Programmiersprachen bieten zahlreiche SOAP-Frameworks an.</p>
<p>Warum diese Vorteile ignorieren und stattdessen REST benutzen?<span id="more-6590"></span></p>
<h3>Representational State Transfer</h3>
<p><abbr title="Representational State Transfer">REST</abbr>-Schnittstellen erschließen sich dem Entwickler einfacher als SOAP-Schnittstellen. Anstelle der WSDL und dem Wissen um den Sinn und Zweck der darin definierten Operationen, benötigt man bei REST nur die URI der Ressource (z.B. <code>http://www.acme.com/basedata/customers/</code>). Um diese Ressource bearbeiten zu können, verwendet man die wohlbekannten <a title="REST-Protokoll in der Wikipedia" href="http://de.wikipedia.org/wiki/RESTful#Umsetzung">Methoden des HTTPs</a>:</p>
<ul style="text-align: left;">
<li>GET &#8211; zum Abfragen einer Ressource
<ul>
<li>z.B. <code>GET http://www.acme.com/basedata/customers/4711</code> zum Abfragen des Kunden mit der Kundennummer 4711</li>
</ul>
</li>
<li>POST &#8211; zum Neu-Anlegen einer Ressource
<ul>
<li>z.B. <code>POST http://www.acme.com/basedata/customers/4712</code> zum Anlegen des Kunden mit der Kundennummer 4712. Die Kundendaten werden im Body des HTTP-Requests übertragen.</li>
</ul>
</li>
<li>PUT &#8211; zum Neu-Anlegen oder Aktualisieren einer Ressource
<ul>
<li>z.B. <code>PUT http://www.acme.com/basedata/customers/4713</code> zum Aktualisieren des Kunden mit der Kundennummer 4713 (z.B. neue Post-Adresse). Die Kundendaten werden auch hier im Body des HTTP-Requests übertragen.</li>
</ul>
</li>
<li>DELETE &#8211; zum Löschen einer Ressource
<ul>
<li>z.B. <code>DELETE http://www.acme.com/basedata/customers/4711</code> zum Löschen des Kunden mit der Kundennummer 4711.</li>
</ul>
</li>
<li>Weiterhin existieren noch die Methoden PATCH, OPTIONS und HEAD. Siehe dazu z.B. <a title="REST-Protokoll in der Wikipedia" href="http://de.wikipedia.org/wiki/RESTful">Wikipedia</a></li>
</ul>
<p>In der Java-Welt existieren eine Reihe brauchbarer Frameworks, mit denen sich RESTful-Services implementieren lassen (u.a. Spring MVC und Jersey [1]).</p>
<h3>Vorteile von REST</h3>
<p>Bezogen auf die Ausnutzung der Bandbreite bei der Datenübertragung ist REST leichtgewichtiger als SOAP. REST verwendet mit den Methoden direkt Bestandteile des HTTPs, mit denen die Semantik eines Requests festgelegt wird. SOAP verwendet normalerweise nur HTTP-POST-Requests. In seinem XML-Payload sind also die reinen Nutzdaten enthalten und zusätzlich alle notwendigen Meta-Daten (z.B. Name der aufgerufenen Operation). Anstelle dieses umfangreichen Payloads kann REST das schlankere JSON-Format allein für die Übertragung der Nutzdaten verwenden.</p>
<p>SOAP kann auch aus Sicht eines Firewall-Administrators problematisch sein, da er einem SOAP-Request erstmal nicht ansehen kann, ob er Unternehmensdaten manipulieren wird, also potentiell gefährlich ist, oder ob er nur lesend auf Daten zugreift.</p>
<p>Bei REST kann dazu einfach der Protokoll-Header ausgelesen werden. GET-Requests greifen lesend auf Daten zu, POST, PUT und DELETE manipulieren den Datenbestand. Auch Entwickler können davon profitieren, da man sicherheitsrelevante Mechanismen auf die Netz-Infrastruktur auslagern kann und nicht selbst implementieren muss.</p>
<p>Auch das Caching von Service-Ressourcen wird durch die direkte Verwendung von HTTP erleichtert. Responses auf GET-Requests können durch Webserver, wie z.B. Apache, relativ einfach gecached werden, ohne dass sich die Software-Entwickler damit auseinandersetzen müssen.</p>
<p>Und zu guter Letzt ist die Client-seitige Entwicklung im REST-Umfeld wesentlich einfacher. Der HTTP-Aufruf einer Ressource ist mit einem einfachen HTTP-Client möglich. Das Arbeiten gegen eine SOAP-API beinhaltet normalerweise die Nutzung spezieller Bibliotheken mit größerem Entwicklungsaufwand.</p>
<h3>Nachteile von REST</h3>
<p>REST bietet im Bereich der Typ-Sicherheit weniger Möglichkeiten als SOAP. Die dort normalerweise verwendete WSDL, der &#8220;Schnittstellen-Vertrag&#8221;, ist bei REST nicht vorgesehen. Das Serialisieren und De-Serialisieren ist bis heute in SOAP sehr viel einfacher als mit den gängigen REST-Frameworks.</p>
<p>Das Server-seitige Anbieten einer SOAP-Schnittstelle ist mit Bibliotheken, wie beispielsweise Apache CXF, wesentlich einfacher zu realisieren als eine entsprechende REST-Schnittstelle.</p>
<h3>Fazit</h3>
<p>Besteht die primäre Anforderung darin, dass Schnittstellen-Definitionen eindeutig und Typ-Sicherheit in jedem Fall gegeben sein muss, ist SOAP das Mittel der Wahl. Frameworks wie beispielsweise Apache CXF nehmen dem Entwickler hier viel Arbeit ab und erledigen die entsprechenden Prüfungen und Transformierungen automatisch im Hintergrund.</p>
<p>Doch was ist heutzutage der ausschlaggebende Faktor, mit dem man eine gut gemachte Webservice-Schnittstelle, sowohl Server- als auch Client-seitig, beurteilt?</p>
<p>Performance und Bandbreitennutzung. Beim Zugriff von mobilen Geräten sind diese Faktoren von essentieller Bedeutung. Bei der Kommunikation über mobile Netze kostet jedes unnötig übertragene Byte bares Geld. Dasselbe gilt für stark frequentierte Webservices, ganz unabhängig davon, über welche Art von Netzwerk die Daten abgerufen werden. Unnötig ausgenutzte Bandbreite ist unnötig ausgegebenes Geld, da kommerzielle Web-Provider und <abbr title="Content Delivery Network">CDN</abbr>-Anbieter ihre Leistungen nach Aufwand abrechnen.</p>
<p>Hier ist REST eindeutig überlegen und deswegen immer dann die bessere Wahl, wenn Performance der bestimmende Faktor ist.</p>
<h3>Verweise</h3>
<ul style="text-align: left;">
<li>[1] Ein Vergleich von Spring MVC und Jersey <a href="http://www.infoq.com/articles/springmvc_jsx-rs">http://www.infoq.com/articles/springmvc_jsx-rs</a></li>
</ul>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/11/webservices-mit-rest-und-nicht-mit-soap/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Webservices mit REST und nicht mit SOAP?" data-url="http://blog.holisticon.de/2012/11/webservices-mit-rest-und-nicht-mit-soap/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/11/webservices-mit-rest-und-nicht-mit-soap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
