<?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"
	>

<channel>
	<title>Communardo Techblog &#187; Softwareentwicklung</title>
	<atom:link href="http://www.communardo.de/techblog/category/softwareentwicklung/feed" rel="self" type="application/rss+xml" />
	<link>http://www.communardo.de/techblog</link>
	<description>Entwicklerblog der Communardo Software GmbH</description>
	<pubDate>Fri, 21 Nov 2008 19:28:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Neuerungen in SQL Server 2008: Table Valued Parameters (TVP)</title>
		<link>http://www.communardo.de/techblog/2008/11/21/neuerungen-in-sql-server-2008-table-valued-parameters-tvp/</link>
		<comments>http://www.communardo.de/techblog/2008/11/21/neuerungen-in-sql-server-2008-table-valued-parameters-tvp/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 19:28:18 +0000</pubDate>
		<dc:creator>Dorrit Riemenschneider</dc:creator>
		
		<category><![CDATA[Datenbanken]]></category>

		<category><![CDATA[ADO.Net]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[SQL2008]]></category>

		<category><![CDATA[TVP]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=549</guid>
		<description><![CDATA[<p><strong>&#8230; oder wie bei Microsoft das Basteln abgeschafft wurde</strong><br />
Wer schon einmal vor dem Problem stand, an eine SQL Server Prozedur oder Funktion eine Liste von Werten oder gar eine Tabelle zu &#252;bergeben, der wird f&#252;r dieses Problem  bestimmt eine L&#246;sung gefunden haben: Ob man nun die Werte mit einem geeigneten Trennzeichen versehen (ich bevorzuge Pipes <span><img class="wp-smiley" src="../wp-includes/images/smilies/icon_wink.gif" alt=";-)" /></span>) alle in eine varchar(max)-Variable packt und mittels einer benutzerdefinierten Funktion wieder &#8220;auseinanderschnipselt&#8221; oder gleich den XML-Datentyp verwendet -<span> es gibt die verschiedensten Bastell&#246;sungsans&#228;tze, dieser Problematik Herr zu werden. </span></p>
<p>SQL Server 2008 offeriert mit Table Valued Parameters diese Funktionalit&#228;t nun g&#228;nzlich ohne Bastelei. Die Technik daf&#252;r ist denkbar simpel:</p>
<p>Es wird angenommen, dass eine Tabelle Employees mit folgender Struktur existiert:<br />
<a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/table.jpg"><img class="alignnone size-full wp-image-563" src="http://www.communardo.de/techblog/wp-content/uploads/2008/11/table.jpg" alt="" width="274" height="69" /></a></p>
<p>Nun muss man</p>
<ol>
<li>einen benutzerdefinierter Datentyp vom Typ Table erzeugen:<br />
<a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/type.jpg"><img class="alignnone size-full wp-image-556" src="http://www.communardo.de/techblog/wp-content/uploads/2008/11/type.jpg" alt="" width="646" height="18" /></a><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/type.jpg"></a></li>
<li>eine SQL Server Prozedur oder Funktion erstellen, die den neuen Typ als Input-Parameter verwendet:<br />
<a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/proc1.jpg"><img class="alignnone size-full wp-image-560" src="http://www.communardo.de/techblog/wp-content/uploads/2008/11/proc1.jpg" alt="" width="422" height="99" /></a><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/proc.jpg"></a></li>
<li>eine Variable von diesem Typ erzeugen und mit Daten bef&#252;llen:<br />
<a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/decclare.jpg"><img class="alignnone size-full wp-image-561" src="http://www.communardo.de/techblog/wp-content/uploads/2008/11/decclare.jpg" alt="" width="603" height="50" /></a></li>
<li>die Variable an die Prozedur oder Funktion &#252;bergeben:<br />
<a href="http://www.communardo.de/techblog/wp-content/uploads/2008/11/exec.jpg"><img class="alignnone size-full wp-image-562" src="http://www.communardo.de/techblog/wp-content/uploads/2008/11/exec.jpg" alt="" width="241" height="21" /></a></li>
</ol>
<p>Fertig <span><img class="wp-smiley" src="../wp-includes/images/smilies/icon_wink.gif" alt=";-)" /></span></p>
<p>F&#252;r alle, die es gerne schnell mal ausprobieren m&#246;chten, hier nochmal zum Kopieren:</p>
<p><em>CREATE TABLE Employees(<br />
EmployeeID int NOT NULL,<br />
LastName nvarchar(50) NOT NULL,<br />
FirstName nvarchar(50) NOT NULL)<br />
go</em></p>
<p><em>CREATE TYPE T_Employees AS TABLE (EmployeeID int, LastName nvarchar(50), FirstName nvarchar(50))<br />
go</em></p>
<p><em>CREATE PROCEDURE P_InsertEmployees<br />
@employees T_Employees READONLY<br />
AS<br />
INSERT INTO Employees (EmployeeID, LastName, FirstName)<br />
SELECT EmployeeID, LastName, FirstName<br />
FROM @employees<br />
go</em></p>
<p><em>DECLARE @emps T_Employees<br />
INSERT INTO @emps (EmployeeID, LastName, FirstName) VALUES (1, &#8216;Davolio&#8217;, &#8216;Nancy&#8217;)<br />
INSERT INTO @emps (EmployeeID, LastName, FirstName) VALUES (2, &#8216;Fuller&#8217;, &#8216;Andrew&#8217;)</em></p>
<p><em>EXEC P_InsertEmployees @emps</em></p>
<p>Hier noch ein paar Dinge, die zu beachten bzw. wissenswert sind:</p>
<ul>
<li>Der INPUT-Parameter f&#252;r die Prozedur muss READONLY sein.</li>
<li>TVP k&#246;nnen nicht als Return-Variable f&#252;r eine Funktion verwendet werden.</li>
<li>Microsoft empfielt die Verwendung von TVP bis zur Anzahl von 1000 Datens&#228;tzen, f&#252;r alles, was dr&#252;ber ist, sollte BULK INSERT verwendet werden.</li>
<li>TVP werden als tempor&#228;re Tabellen in der tempdb gespeichert.</li>
</ul>
<p>Und zum Abschluss noch ein kleiner Leckerbissen f&#252;r ADO.Net Programmierer: TVP werden auch hier vollst&#228;ndig unterst&#252;tzt, ein Beispiel f&#252;r den Aufruf der oben erstellte Prozedur in C# k&#246;nnte so aussehen:</p>
<p><em>SqlConnection sqlConn&#8230;<br />
DataTable dt = new DataTable();<br />
dt.Columns.Add&#8230;.<br />
dt.Rows.Add&#8230;..<br />
SqlCommand cmd = new SqlCommand(&#8221;P_InsertEmployees&#8221;, sqlConn);<br />
cmd.Parameters.AddWithValue(&#8221;@employees&#8221;, dt);<br />
cmd.ExecuteNonQuery();</em></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/11/21/neuerungen-in-sql-server-2008-table-valued-parameters-tvp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Neuerungen in SQL Server 2008: MERGE-Anweisung</title>
		<link>http://www.communardo.de/techblog/2008/11/16/neuerungen-in-sql-server-2008-merge-anweisung/</link>
		<comments>http://www.communardo.de/techblog/2008/11/16/neuerungen-in-sql-server-2008-merge-anweisung/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 10:33:46 +0000</pubDate>
		<dc:creator>Dorrit Riemenschneider</dc:creator>
		
		<category><![CDATA[Datenbanken]]></category>

		<category><![CDATA[MERGE]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[SQL2008]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=528</guid>
		<description><![CDATA[<p class="MsoNormal"><span style="#444444;">Wer sich schon immer mal dar&#252;ber ge&#228;rgert hat, dass mehrere SQL-Anweisungen n&#246;tig waren, um in einer Tabelle, abh&#228;ngig von den Bedingungen in einer anderen Tabelle, Daten einzuf&#252;gen, zu &#228;ndern und/oder zu l&#246;schen, der wird &#252;ber die neue MERGE-Anweisung in SQL Server 2008 hocherfreut sein - &#8230; vorausgesetzt, er kann sich f&#252;r komplexe SQL-Anweisungen begeistern <img src='http://www.communardo.de/techblog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . </span></p>
<p class="MsoNormal"><span style="#444444;">Das absolute Standard-Szenario f&#252;r die Anwendung von MERGE ist die Aktualisierung von Daten in einem Data Warehouse auf Basis der Daten aus dem Produktivsystem: Im Data Warehouse sollen </span></p>
<ul>
<li><!--[if !supportLists]--><span style="#444444;">Adressdaten, die im Produktivsystem vorhanden sind, aber nicht im Data Warehouse, eingef&#252;gt werden (INSERT)</span></li>
<li><!--[if !supportLists]--><span style="#444444;"><span><span style="&quot;Times New Roman&quot;;"> </span></span></span><!--[endif]--><span style="#444444;">Adressdaten, die im Produktivsystem und im Data Warehouse vorhanden sind, ge&#228;ndert werden (UPDATE)</span></li>
<li><!--[if !supportLists]--><span style="#444444;"><span><span style="&quot;Times New Roman&quot;;"> </span></span></span><!--[endif]--><span style="#444444;">Adressdaten, die im Data Warehouse, nicht aber im Produktivsystem vorhanden sind, gel&#246;scht werden (DELETE)</span></li>
</ul>
<p class="MsoNormal"><span style="#444444;">Daf&#252;r waren bisher 3 Anweisungen der folgenden Art n&#246;tig (je eine f&#252;r INSERT, UPDATE und DELETE):</span></p>
<p class="MsoNormal"><img src="/Users/dri/AppData/Local/Temp/moz-screenshot-4.jpg" alt="" /><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild12.jpg"><img class="alignnone" src="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild12.jpg" alt="" width="615" height="149" /></a></p>
<p class="MsoNormal"><span style="#444444;">Mit dem MERGE-Befehl nun ist das alles in einer Anweisung unterzubringen:</span></p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild2.jpg"><img class="alignleft" src="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild2.jpg" alt="" width="784" height="120" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><span style="#444444;">Das kommt nicht nur deutlich eleganter daher, sondern ist auch ressourcensparend, da nur eine anstelle mehrerer Lookup-Operationen durchgef&#252;hrt wird.</span></p>
<p class="MsoNormal"><span style="#444444;">Wichtig: Die MERGE-Anweisung muss immer mit einem Semikolon abgeschlossen werden.</span></p>
<p class="MsoNormal"><span style="#444444;">Nat&#252;rlich ist die MERGE-Anweisung noch deutlich flexibler als hier abgebildete Variante, z.B. kann die USING-Klausel auch eine Unterabfrage (dann mit einem Alias) enthalten oder die MATCHED-Klausel beliebig mit weiteren logischen Ausr&#252;cken kombiniert werden,  des Weiteren sind beliebig viele MATCHED-Klauseln von jeder Art m&#246;glich. Ein etwas komplexeres Beispiel k&#246;nnte z.B. so aussehen:</span></p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild3.jpg"><img class="alignleft" src="http://www.communardo.de/techblog/wp-content/uploads/2008/10/bild3.jpg" alt="" width="778" height="143" /></a></p>
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal">
<p class="MsoNormal"><span style="#444444;">Ausf&#252;hrliche Syntaxinformationen finden sich unter <a title="http://msdn.microsoft.com/de-de/library/bb510625.aspx" href="http://msdn.microsoft.com/de-de/library/bb510625.aspx"><span style="none;">http://msdn.microsoft.com/de-de/library/bb510625.aspx</span></a>.</span></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/11/16/neuerungen-in-sql-server-2008-merge-anweisung/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Berlin.jar – R&#252;ckblick</title>
		<link>http://www.communardo.de/techblog/2008/09/27/berlinjar-rueckblick/</link>
		<comments>http://www.communardo.de/techblog/2008/09/27/berlinjar-rueckblick/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 18:14:58 +0000</pubDate>
		<dc:creator>Torsten Rentsch</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[AOP]]></category>

		<category><![CDATA[grails]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[jug]]></category>

		<category><![CDATA[konferenz]]></category>

		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=451</guid>
		<description><![CDATA[<p>Am 13./14.9.2008 fand erstmals die <a href="http://berlin.jar.jug-bb.de/" target="_blank">Berlin.jar </a>an der <a href="http://www.fhtw-berlin.de/" target="_blank">FHTW Berlin</a> statt. Die Java Konferenz wurde durch die <a href="http://www.jug-bb.de/" target="_blank">Java User Group Berlin Brandenburg</a> sehr gut organisiert. Verteilt &#252;ber beide Konferenztage gab es in f&#252;nf parallelen Tracks zahlreiche interessante Vortr&#228;ge, sowie HandsOn Sessions und Workshops f&#252;r die mehr als 250 Besucher. <span> </span>Einige Redner sind bereits von anderen Konferenzen bekannt. So gab Eberhard Wolff gleich zu Beginn Einblick in das L&#246;sungsangebot <span> </span>von SpringSource, der Firma hinter dem <a href="http://www.springframework.org/" target="_blank">Spring Framework</a>.<span> </span>Im Anschluss gab Torsten Fink einen &#220;berblick &#252;ber die JBoss/SOA-Plattform mit allerlei Verweisen auf den Einsatz in der Praxis. Nachdem am Grillstand f&#252;r das leibliche Wohl gesorgt wurde, brachte Alexander Greif anhand einer im Rahmen seines Vortrages erstellten Anwendung den Zuh&#246;rern die Funktionsweise der <a href="http://grails.org/" target="_blank">Grails Plattform</a> n&#228;her. Abgerundet wurde der Tag durch Oliver B&#246;hms Vortrag zu aspektorientierter <span> </span>Softwareentwicklung. Dabei wurde der Frage „<em>Gibt es ein Leben nach Java und OO?</em>“ nachgegangen. <span> </span>Mein Fazit: Aspektorientierte Programmierung ist eine sinnvolle Erg&#228;nzung (!) zur objektorientierten Entwicklung, aber sicher kein grunds&#228;tzlich neuer Ansatz. Den Weg in die Praxis hat sie schon seit l&#228;ngerer Zeit gefunden, wie z.B. das Spring Framework beweist. <span> </span></p>
<p class="MsoNormal">Leider waren damit der erste Konferenztag und unser Besuch der Berlin.jar schon vorbei.<span> </span>Am Tag zwei haben wir u.a. die Vortr&#228;ge der <a href="http://www.ubigrate.com/" target="_blank">ubigrate GmbH</a> (Drahtwanderung: WIIr machen den N&#228;XTen Schritt) und der <a href="http://www.buschmais.de/" target="_blank">buschmais GbR</a> (Integrationsmuster am Beispiel von Apache Camel, Paradigmenhochzeit: Felix und ServiceMix in trauter Zweisamkeit vereint, Modellierung statischer Dom&#228;nenmodelle mit Xtext) verpasst, aber vielleicht gibt es ja schon bald ein Wiedersehen bei der <a href="http://www.jugsaxony.de" target="_blank">JUG Saxony</a> <img src='http://www.communardo.de/techblog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p class="MsoNormal">Dieses wird es auf alle F&#228;lle im kommenden Jahr bei der zweiten Ausgabe der Berlin.jar geben.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/09/27/berlinjar-rueckblick/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMI-Kommunikation zu Remote-Hosts mit ung&#252;nstiger DNS-Konfiguration</title>
		<link>http://www.communardo.de/techblog/2008/09/17/rmi-kommunikation-zu-remote-hosts-mit-unguenstiger-dns-konfiguration/</link>
		<comments>http://www.communardo.de/techblog/2008/09/17/rmi-kommunikation-zu-remote-hosts-mit-unguenstiger-dns-konfiguration/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 11:46:59 +0000</pubDate>
		<dc:creator>Jan Dittberner</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[ConnectionRefused]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[JMX]]></category>

		<category><![CDATA[RMI]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=401</guid>
		<description><![CDATA[RMI ist bei multi-homed Systemen mit schlecht konfiguriertem DNS etwas problematisch. Dieser Artikel beschreibt einen Workaround.]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/09/17/rmi-kommunikation-zu-remote-hosts-mit-unguenstiger-dns-konfiguration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Logging per Interceptor mit Spring</title>
		<link>http://www.communardo.de/techblog/2008/07/21/logging-per-interceptor-mit-spring/</link>
		<comments>http://www.communardo.de/techblog/2008/07/21/logging-per-interceptor-mit-spring/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 15:17:05 +0000</pubDate>
		<dc:creator>Ralf Borchers</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[andromda]]></category>

		<category><![CDATA[AOP]]></category>

		<category><![CDATA[Interceptor]]></category>

		<category><![CDATA[Logging]]></category>

		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=368</guid>
		<description><![CDATA[<p>Wenn man in Spring-Anwendungen zum Beispiel den Aufruf von Methoden loggen will, aber nicht in jeder gew&#252;nschten Methode eine Log-Anweisung einf&#252;gen m&#246;chte, kann man das Logging zentral als Aspekt definieren. Es k&#246;nnen damit die Methodenaufrufe aller Klassen geloggt werden, die als Bean durch Spring verwaltet werden.</p>
<p>Zu Beginn sollte die Bean f&#252;r den Interceptor (advice) definiert werden.</p>
<pre class="java">&lt;bean id="<span style="color: #ff6600;">methodLoggingInterceptor</span>" class="MethodLoggingInterceptor"/&gt;</pre>
<p>Danach kann eine advisor verwendet werden, der auf den Interceptor (advice) verweist und die joinpoints (die gew&#252;schten Methoden) &#252;ber einen regul&#228;ren Ausdruck engrenzt.</p>
<pre>&lt;bean id="<span style="color: #3366ff;"><strong>wsMethodLogger</strong></span>" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt;
     &lt;property name="advice"&gt;
          &lt;ref local="<span style="color: #ff6600;">methodLoggingInterceptor</span>"/&gt;
     &lt;/property&gt;
     &lt;property name="patterns"&gt;
          &lt;list&gt;
              <strong> &lt;value&gt;de.communardo.*get.*&lt;/value&gt;
               &lt;value&gt;de.communardo.*process.*&lt;/value&gt;</strong>
          &lt;/list&gt;
     &lt;/property&gt;
&lt;/bean&gt;</pre>
<p>Dann muss den betreffenden Beans der neue Interceptor hinzugef&#252;gt werden. Hierbei ist auf die Reihenfolge zu achten.</p>
<pre class="java">&lt;bean id="profileWebservice"&gt;
    ...
    &lt;property name="interceptorNames"&gt;
         &lt;list&gt;
              &lt;value&gt;serviceTransactionInterceptor&lt;/value&gt;
              &lt;value&gt;hibernateInterceptor&lt;/value&gt;
              &lt;value&gt;<span style="color: #3366ff;">wsMethodLogger</span>&lt;/value&gt;
         &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;</pre>
<p>Die Interceptor-Klasse kann zum Beispiel die Interfaces <code>MethodBeforeAdvice</code>, <code>AfterReturningAdvice </code>und <code>ThrowsAdvice </code>implementieren. In den entsprechenden Methoden kann dann je nach Aufrufzeitpunkt eine geeignete Meldung ins Log geschrieben werden.</p>
<pre class="java">import java.lang.reflect.Method;
import org.apache.log4j.Logger;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.ThrowsAdvice;

public class <span style="color: #ff6600;">MethodLoggingInterceptor </span>implements MethodBeforeAdvice, AfterReturningAdvice,
ThrowsAdvice {
    private Logger log = null;
    public MethodLoggingInterceptor() {
    }
    public void <span style="color: #339966;">before</span>(Method method, Object[] args, Object object) throws Throwable {
        log = Logger.getLogger(object.getClass());
        log.debug("Beginning method: " + method.getName());
    }
    public void <span style="color: #339966;">afterReturning</span>(Object returnValue, Method method, Object[] args, Object target)
    throws Throwable {
        log = Logger.getLogger(target.getClass());
        log.debug("Ending method: " + method.getName());
    }
    public void <span style="color: #339966;">afterThrowing</span>(Method method, Object[] args, Object target, Throwable ex) {
        log = Logger.getLogger(target.getClass());
        log.debug("Exception in method: " + method.getName() + " Exception is: " + ex.getMessage());
    }
}</pre>
<p>Hinweis f&#252;r AndroMDA-Nutzer<strong>: </strong>F&#252;r Klassen, die &#252;ber den Stereotyp <code>&lt;&lt;Service&gt;&gt;</code> verf&#252;gen, existiert der tagged value <code>@andromda.spring.service.interceptors.</code> Dar&#252;ber lassen sich den Services im Modell zus&#228;tzliche Interceptors hinzuf&#252;gen, die in die Liste der <code>interceptorNames </code>aufgenommen werden. Die Spring-Konfiguration der beteiligten Beans kann anhand des <code>applicationContext merge-point</code> in den Application Context integriert werden.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/07/21/logging-per-interceptor-mit-spring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JUG Saxony - EclipseLink</title>
		<link>http://www.communardo.de/techblog/2008/07/14/jug-saxony-eclipselink/</link>
		<comments>http://www.communardo.de/techblog/2008/07/14/jug-saxony-eclipselink/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 06:46:11 +0000</pubDate>
		<dc:creator>Torsten Rentsch</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[jaxb]]></category>

		<category><![CDATA[jug]]></category>

		<category><![CDATA[persistenz]]></category>

		<guid isPermaLink="false">http://com29/techblog/?p=362</guid>
		<description><![CDATA[<p align="left">Auch die zweite Veranstaltung der Java User Group Saxony kann als voller Erfolg bezeichnet werden. Shaun Smith, Project Lead des EclipseLink Projektes und  Produktmanager f&#252;r Oracle TopLink, gab am 09.07.2008 einen &#220;berblick &#252;ber die Features und die Funktionsweise von EclipseLink.</p>
<p>Die Firma <a href="http://www.ubigrate.com/" target="_blank">ubigrate</a> hat diese Veranstaltung an der Informatik Fakult&#228;t der TU-Dresden in Zusammenarbeit mit dem JUG Saxony Team f&#252;r die hiesige User Group organisiert und somit mehr als 50 Teilnehmern einen informativen und unterhaltsamen Abend erm&#246;glicht.</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/07/2655055215_9bc9c99ed6.jpg"></a></p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/07/2655055215_9bc9c99ed6.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/07/2655055215_9bc9c99ed6.jpg" alt="" /></a></p>
<p><a href="http://onpersistence.blogspot.com/" target="_blank">Shaun Smith</a> ging w&#228;hrend seines Vortrages detailliert auf die <a href="http://java.sun.com/javaee/technologies/persistence.jsp" target="_blank">Java Persistence API</a> und die Referenzimplementierung <a href="http://www.eclipse.org/eclipselink/" target="_blank">EclipseLink</a> ein.  Dabei ist insbesondere die Vielseitigkeit des Frameworks hervorzuheben.  Neben Objekt-Relationalem Mapping (ORM) stellt es Funktionen zum Objekt-XML Mapping (in Version 1.0 noch nicht 100% <a href="http://jcp.org/en/jsr/detail?id=222" target="_blank">JAXB</a> 2.0 kompatibel) sowie Unterst&#252;tzung f&#252;r <a href="http://www.jcp.org/en/jsr/detail?id=235" target="_blank">Service Data Objects (SDO)</a> 2.1 zur Verf&#252;gung.  Sollte dies noch nicht gen&#252;gen kann EclipseLink leicht um weitere Mapping Ziele erweitert werden wie Shaun Smith anhand eines JSON Beispiels demonstriert hat.</p>
<p>Neben der Vorstellung von technischen Details und der ein oder anderen Anekdote aus dem Projektgesch&#228;ft (wer sich daf&#252;r interessiert sollte die kommenden JUG Veranstaltungen nicht verpassen <img src='http://www.communardo.de/techblog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) wurden auch die  verschiedenen Mappings und das  Zusammenspiel mit den <a href="http://www.eclipse.org/dali/" target="_blank">Eclipse Dali JPA Tools</a> im Rahmen von Live Demonstrationen vorgef&#252;hrt.</p>
<p>Am Tag unserer Veranstaltung wurde EclipseLink  1.0 ver&#246;ffentlicht und somit f&#252;r den Produktiveinsatz freigegeben. Einen genaueren Blick ist es auf alle F&#228;lle wert.</p>
<p>Das n&#228;chste Treffen der JUG Saxony ist f&#252;r Oktober 2008 geplant.  Das Thema lautet Rich Client Platform (RCP) Entwicklung mit Java.</p>
<p>Informationen zur kommenden Veranstaltung gibt es demn&#228;chst auf der Webseite der JUG Saxony unter <a href="http://www.jugsaxony.de" target="_blank">http://www.jugsaxony.de</a>. Die Folien zum EclipseLink Vortrag sind ebenfalls auf dieser Seite zu finden.</p>
<p>Einen Bericht zum Treffen in englischer Sprache gibt es im <a href="http://blog.ubigrate.com/2008/07/11/jug200802/" target="_blank">ubigrate Blog</a>.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/07/14/jug-saxony-eclipselink/feed/</wfw:commentRss>
		</item>
		<item>
		<title>URL Anfragen mit &#34;IHttpModule&#34; und &#34;SPWebConfigModification&#34; umleiten.</title>
		<link>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/</link>
		<comments>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 07:15:05 +0000</pubDate>
		<dc:creator>Gordon Schroeder</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/</guid>
		<description><![CDATA[<p>Um in Sharepoint anfragen auf eigene ASPX Seiten umzuleiten, besteht die M&#246;glichkeit dies durch die Verwendung eines „IHttpModules“ zu realisieren. Das Modul greift spezifische Anfragen auf definierte Seiten ab und leitet diese auf definierte Seiten um.</p>
<p>Hier der Code, um eine Anfrage auf die CreateWebPage.aspx auf die MyPage.aspx umzuleiten:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic11.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic1-thumb1.jpg" alt="pic1" border="0" width="679" height="274" /></a></p>
<p>Die Verwendung des IHttpModule, welches durch einen Eintrag in die „web.config“ realisiert wird, kann &#252;ber ein Feature mit Hilfe des SPWebConfigModification Objektes erreicht werden. Diese Feature setzt und l&#246;scht automatisch den notwendigen Eintrag in der „web.config“.</p>
<p>Hier der Beispielcode um das oben gezeigte IHttpModule anzubinden:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic21.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic2-thumb1.jpg" alt="pic2" border="0" width="679" height="358" /></a></p>
<p><strong><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic31.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic3-thumb1.jpg" alt="pic3" border="0" width="679" height="384" /></a> </strong></p>
<p><strong>Wichtig:</strong> Um auch die &#8220;Remove&#8221; Methode korrekt ausf&#252;hren zu k&#246;nnen, m&#252;ssen die Eigenschaften des SPWebConfigModification Objektes richtig gew&#228;hlt werden.</p>
<p>1. Die Eigenschaft &#8220;EnsureChildNote&#8221; muss angewandt werden, da mit der EnsureSection eine sp&#228;tere &#8220;Remove&#8221; Methode keine Auswirkung liefert.</p>
<p><strong>mod.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;</strong></p>
<p>2. Der &#8220;mod.Name&#8221; muss entsprechend der &#8220;mod.Values&#8221; angepasst werden. Wird der Name des Objektes willk&#252;rlich gew&#228;hlt, ist die Funktionalit&#228;t der &#8220;Add&#8221; Methode gew&#228;hrleistet, doch wird die Funktionalit&#228;t der &#8220;Remove&#8221; Methode kein Resultat liefern.</p>
<p><strong>entryvalue = @&#8221;&lt;add name=&#8221;"IHttpModule&#8221;" type=&#8221;"namespace.class, assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=&#8230;&#8221;" /&gt;&#8221;;</strong></p>
<p>Der Angepasste &#8220;mod.Name&#8221; muss dann folgend lauten:</p>
<p><strong>entryname = &#8220;add[@name='IHttpModule'][@type='namespace.class, assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...]&#8220;;</strong></p>
<p>Hier nun noch der Inhalt der &#8220;feature.xml&#8221;. Zu beachten ist, dass der Scope auf der WebApplication liegen muss.</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic41.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic4-thumb1.jpg" alt="pic4" border="0" width="678" height="212" /></a></p>
<p>Links zum Thema:</p>
<p><a href="http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml" title="http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml">http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx" title="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx">http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx</a></p>
<p><a href="http://blog.tedpattison.net/Lists/Posts/Post.aspx?ID=4">http://blog.tedpattison.net/Lists/Posts/Post.aspx?ID=4</a></p>
<p>MFG Gordon</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Test mit reduzierter Bandbreite</title>
		<link>http://www.communardo.de/techblog/2008/05/21/test-mit-reduzierter-bandbreite/</link>
		<comments>http://www.communardo.de/techblog/2008/05/21/test-mit-reduzierter-bandbreite/#comments</comments>
		<pubDate>Wed, 21 May 2008 09:09:11 +0000</pubDate>
		<dc:creator>Judith Schmalz</dc:creator>
		
		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[bandbreite]]></category>

		<category><![CDATA[JMeter]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/05/21/test-mit-reduzierter-bandbreite/</guid>
		<description><![CDATA[<p>Um die Ladezeit einer Website bei reduzierter Bandbreite  zu testen, k&#246;nnen &#252;ber das Freewaretool <a href="http://www.shunra.com/">SHUNRA</a>\Nimbus einfach und sehr schnell Bandbreiten zwischen 28.8 und 256 kbit/s emuliert werden.</p>
<p>Leider ist das Tool ein wenig veraltet und auf der offiziellen Website nicht mehr zum Download verf&#252;gbar, aber mit einer Google-Suche nach „shunra nimbus“ werden viele Quellen gefunden.</p>
<blockquote><p>Es gibt ein weiteres, aktuelleres Freewaretool zum Drosseln der Bandbreite, das vor der ersten Nutzung aber einigen Konfigurationsaufwand erfordert (<a href="http://www.raymond.cc/blog/archives/2008/02/22/restrict-or-limit-internet-download-and-upload-transfer-speed/">-&gt; Details</a>)</p></blockquote>
<p>Ausgangspunkt meiner Recherche zu diesem Thema war der Versuch mit einem  JMeter Lasttest Aufrufe von Webservices &#252;ber Mobilfunk zu simulieren.</p>
<p>Mit SHUNRA\Nimbus hat das sehr gut funktioniert, da die Drosselung direkt f&#252;r die Netzwerkkarte des PCs durchgef&#252;hrt wird.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/05/21/test-mit-reduzierter-bandbreite/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gr&#252;ndung der Java User Group Saxony</title>
		<link>http://www.communardo.de/techblog/2008/04/11/grundung-der-java-user-group-saxony/</link>
		<comments>http://www.communardo.de/techblog/2008/04/11/grundung-der-java-user-group-saxony/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 16:25:43 +0000</pubDate>
		<dc:creator>Torsten Rentsch</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[andromda]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[jug]]></category>

		<category><![CDATA[mda]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/04/11/grundung-der-java-user-group-saxony/</guid>
		<description><![CDATA[<p>Am 03. April 2008 fand das erste Treffen und damit die Gr&#252;ndungsveranstaltung der Java User Group Saxony in den R&#228;umen der Communardo Software GmbH statt. Diese Gruppe wurde auf Initiative von Torsten Rentsch (<a href="http://www.communardo.de/">Communardo Software GmbH</a>) und Falk Hartmann (<a href="http://www.ubigrate.com/">ubigrate</a>) Anfang 2008 ins Leben gerufen. Ziel ist es den Wissensaustausch im Java Umfeld zu f&#246;rdern sowie Kontakte zwischen Firmen und wissenschaftlichen Einrichtungen zu kn&#252;pfen.</p>
<p><a title="JUG Saxony Gr&#252;ndungsveranstaltung" href="http://www.communardo.de/techblog/wp-content/uploads/2008/04/img_4425.jpg"></a></p>
<p><a title="JUG Saxony Gr&#252;ndungsveranstaltung" href="http://www.communardo.de/techblog/wp-content/uploads/2008/04/img_4425.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/04/img_4425.jpg" alt="JUG Saxony Gr&#252;ndungsveranstaltung" align="middle" /></a></p>
<p>Vor 43 interessierten Teilnehmern wurde die Model Driven Architecture (MDA) vorgestellt. Herr Professor A&#223;mann (<a href="http://st.inf.tu-dresden.de/">Lehrstuhl Softwaretechnik der TU Dresden</a>) gab eine konzeptionelle Einleitung zum Thema und betrachtete dabei insbesondere den Zusammenhang zwischen MDA und Component-based Software Engineering (CBSE) (<a href="http://www.slideshare.net/jugsaxony/mda-meets-cbse/">Folien</a>).  Herr Torsten Lunze (Communardo Software GmbH) stellte mit seinem Vortrag (<a href="http://www.slideshare.net/jugsaxony/mda-mit-andromda/">Folien</a>) den Bezug zur Praxis anhand eines Beispiels aus dem Projektgesch&#228;ft her und erl&#228;uterte u.a. die Vor- und Nachteile von MDA beim Einsatz der Open Source Software AndroMDA. Beim anschlie&#223;enden Buffet blieb Zeit Kontakte zu kn&#252;pfen und das Thema im Gespr&#228;ch zu vertiefen.<br />
Mindestens einmal pro Quartal wird nun eine Veranstaltung der JUG Saxony stattfinden. Das n&#228;chste Treffen ist am 9. Juli 2008 in den R&#228;umen der TU Dresden geplant. Das Thema wird voraussichtlich EclipseLink (JPA 2.0 RI, JSR 317) sein.<br />
Gern k&#246;nnen Sie sich als Mitglied der JUG Saxony auf unserer Website <a href="http://www.jugsaxony.de/" target="_blank">http://www.jugsaxony.de</a><a href="http://www.jugsaxony.de" target="_blank"></a> registrieren. F&#252;r Anregungen und W&#252;nsche sind wir stets offen.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/04/11/grundung-der-java-user-group-saxony/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webtest und Load Test in VS 2008 erstellen</title>
		<link>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/</link>
		<comments>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 20:01:33 +0000</pubDate>
		<dc:creator>Frank Binöder</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/03/12/webtest-in-vs-2008-erstellen/</guid>
		<description><![CDATA[<p>Einrichten von Webtests und Loadtest f&#252;r SharePoint Anwendungen in Visual Studio Team System 2008.</p>
<h2>Verbindung zur Datenbank als Load Test Repository.<br /></h2>
<p>Hier verl&#228;sst man zun&#228;chst die VS Oberfl&#228;che und begibt sich in die Konsole.&nbsp; Ich nehme mal&nbsp; an, es ist ein SQL Server (in meinem Fall SQL Express auf der gleichem Maschine) vorhanden.</p>
<p>Dann einfach VS Command Prompt (&#252;ber das Startmen&#252;) &#246;ffnen und ein CD in folgendes Verzeichnis machen:<br />c:\program files\microsoft visual studio 9.0\common7\ide</p>
<p>Anschlie&#223;end folgendes Kommando ausf&#252;hren (evtl. SQL Instanz anpassen):</p>
<p>SQLCMD /S localhost\sqlexpress /i loadtestresultsrepository.sql</p>
<p>Siehe dazu im &#220;brigen auch :<br /><a href="http://msdn2.microsoft.com/en-us/library/ms182600.aspx">http://msdn2.microsoft.com/en-us/library/ms182600.aspx</a></p>
<p><!--more--></p>
<p>Nun zur&#252;ck im VS 2008 die Datenbankconnection pr&#252;fen unter:</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl1.png"></p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl2.png"></p>
<p>Und</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl3.png"></p>
<h2>Webtest aufzeichnen<br /></h2>
<p>Dann wollen wir den Webtest mal aufzeichnen. Das geht meines Wissens nach &#252;brigens nur mit IE.</p>
<p>Den Test ordentlich benennen, wir ordnen ihn sp&#228;ter einem Szenario zu.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl4.png"></p>
<p>Der Webtestrecorder ist ein IE Addon. Deshalb wohl die Einschr&#228;nkung auf diesen Browser.</p>
<p>Der Pause Button macht sich gut, wenn man w&#228;hrend des Aufzeichnens vergessen hat, was man machen wollte. Er unterbricht hoffentlich auch die Think Time, die mit aufgezeichnet werden kann.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl5.png"></p>
<p>Ende der Aufzeichnung. Man kann sich die augezeichneten Schritte im nachhinein noch einmal ansehen.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl6.png"></p>
<h2>Run Settings einstellen<br /></h2>
<p>Die Run Settings erhalten, wir in dem wir &#252;ber Test &gt; New Test einen Load Test hinzuf&#252;gen. Wir m&#246;chten ja die Last messen.</p>
<p>In den Run Settings stellen wir grob ein, welche Maschinen getestet werden und was darauf. Hier h&#228;ngen wir unseren Webfrontend Server rein, auf dem die SharePoint Anwendung l&#228;uft. Der Rechner wird an seinem Namen erkannt. Der TFS-Eval hostet das VS2008 mit seiner Datenbank, beide befinden sich in der gleichen Dom&#228;ne.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl7.png"></p>
<p>In den Eigenschaften des Tests sind u.a. die Test Iterations wichtig und Use Test Iterations. Unser Test soll nach der vorgegebenen Zeit beendet werden.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl8.png"></p>
<h2></h2>
<h2>Szenario erstellen<br /></h2>
<p>Nun erstellen wir ein Szenario. Hier legen wir u.a. fest, ob unsere Benutzer zwischen den Klicks denken sollen, die Think Time.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl9.png"></p>
<p>Das Load Pattern legt fest, ob fest immer eine bestimmte Anzahl nutzer gleichzeitg den Test durchf&#252;hren soll, oder ob die Anzahl der Benutzer ansteigt (Step Load).</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl10.png"></p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl11.png"></p>
<p>In diesem Schritt f&#252;gen wir nun unseren Webtest hinzu.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl12.png"></p>
<p>Und ein bunter Mix aus Browsern.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl13.png"></p>
<p>Und eine Bandbreite. Unser Nutzer haben alle einen schmalen DSL Anschluss.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl14.png"></p>
<p>Dann k&#246;nnen wir den Test starten. Der Eindruck eines Ergebnisses:</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl15.png"></p>
<p>Ganz klar, der virtuelle Prozessor des virtuellen Entwicklerservers hatte gut zu tun (die ganzen roten Kreuze oben). Hier wird die Regel best&#228;tigt: Lieber mehr Prozessoren als mehr RAM im Webserver. W&#228;hrend des ganzen Tests hat sich die RAM Auslastung des Webservers kaum ver&#228;ndert.</p>
<p>Ein Lasttest auf virtuellen Maschinen ist selbstverst&#228;ndlich wenig aussagekr&#228;ftig. Aber es lassen sich dennoch die ersten Flaschenh&#228;lse und Tendenzen feststellen, denen man in der Entwicklung noch begegnen kann.</p>
<p>Die Load und Webtests sind in Visual Studio 2008 nur in der Test Suite oder in der Team Suite enthalten. Die Testfunktionalit&#228;ten der anderen Visual Studio Suites (Developer oder die Professional) enthalten nur Funktionen f&#252;r Unit-Tests. Als freie Alternative bietet sich hier JMeter an.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
