<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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" version="2.0">

<channel>
	<title>Communardo Techblog</title>
	
	<link>http://www.communardo.de/techblog</link>
	<description>Entwicklerblog der Communardo Software GmbH</description>
	<pubDate>Tue, 18 Nov 2008 13:39:33 +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" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/communardo" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">1010352</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><item>
		<title>Postbuild.bat Einträge für SharePoint Timer Jobs</title>
		<link>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/</link>
		<comments>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 13:34:45 +0000</pubDate>
		<dc:creator>Lars Kreller</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Timer Job]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=575</guid>
		<description><![CDATA[<p>Da ein Timer Job nicht durch den W3WP.EXE Prozess ausgef&#252;hrt wird ist ein „iisreset“ nicht zweckdienlich. Timer Jobs werden durch den „OWSTIMER.EXE“ Prozess ausgef&#252;hrt. Da es kein „timerreset“ gibt, ist es empfehlenswert folgende Eintr&#228;ge in die Postbuild.bat zu implementieren.</p>
<p>SharePoint Server 2007:<br />
net stop SPTimerV3<br />
net start SPTimerV3</p>
<p>Windows SharePoint Services:<br />
net stop WSSTimerV3<br />
net start WSSTimerV3</p>
<p>Eine weitere Alternative die mittels stsadm.exe Extension arbeitet ist unter folgenden Link zu finden.<br />
<a href="http://www.mindsharpblogs.com/ben/archive/2007/09/25/2965.aspx" target="_new">http://www.mindsharpblogs.com/ben/archive/2007/09/25/2965.aspx</a></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/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>Ausblick auf die nächsten Versionen von Confluence</title>
		<link>http://www.communardo.de/techblog/2008/10/25/ausblick-auf-die-naechsten-versionen-von-confluence/</link>
		<comments>http://www.communardo.de/techblog/2008/10/25/ausblick-auf-die-naechsten-versionen-von-confluence/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 19:27:37 +0000</pubDate>
		<dc:creator>Judith Schmalz</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Dashboard]]></category>

		<category><![CDATA[Release]]></category>

		<category><![CDATA[Writer]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=517</guid>
		<description><![CDATA[<p>Am 23.10.2008 haben wir auf der Atlassian User Group in Berlin <a title="Website von Per Fragemann" href="http://www.fragemann.com/">Per Fragemann</a>, den Chef des Confluence-Entwicklerteams von Atlassian getroffen. Bei seinem Vortrag und im pers&#246;nlichen Gespr&#228;ch konnten wir einen Blick auf die n&#228;chsten Versionen von Confluence (Confluence 2.10, Confluence 3.0 und folgende) werfen.  In typischer Manier ver&#246;ffentlicht Atlassian zwar keine konkreten Releasetermine und Featurelisten - Per Fragemann begr&#252;ndet das mit der effizienteren Arbeitsweise, die den Entwicklungsteams so erm&#246;glicht wird: es werden nur vollst&#228;ndige, &#8220;runde&#8221; Versionen ver&#246;ffentlicht und keine Releases, die durch den Druck eines Ver&#246;ffentlichungungsdatums halbfertige Funktionen enthalten, die hinterher ein aufwendiges Bugfixing erfordern.  Seine Begr&#252;ndung kann ich gut nachvollziehen, dennoch ist es immer wieder ein ungutes Gef&#252;hl, wenn man auch als Atlassian Partner die Fragen der Kunden nach den n&#228;chsten Versionen nur ausweichend beantworten kann. </p>
<p><strong>Confluence 2.10</strong></p>
<p>Schon relativ konkret ist die Confluence Version 2.10, die Ende November ver&#246;ffentlicht werden wird. <!--more-->Der <a title="Demovideo des Confluence Office Connectors" href="http://www.atlassian.com/office/">Office Connector</a>, erstmals in Confluence 2.9 enthalten, wird mit einigen Verbesserungen und Erweiterungen standardm&#228;&#223;ig mit Confluence ausgeliefert. Au&#223;erdem wird die Suche um die Schnellsuche (vergleichbar mit dem &#8220;Livesearch&#8221;-Plugin) erweitert. <a href="http://www.communardo.de/techblog/wp-content/uploads/2008/10/quicksearch1.png"><img class="alignright size-medium wp-image-519" src="http://www.communardo.de/techblog/wp-content/uploads/2008/10/quicksearch1-277x300.png" alt="" width="277" height="300" /></a>Nicht so sch&#246;n in einem Screenshot abbildbar, aber sehr wichtig f&#252;r alle Plugentwickler ist die Einf&#252;hrung von Plugin 2.0 - einem neuen Pluginframework,  das f&#252;r alle Atlassian Produkte eingef&#252;hrt wird und auf OSGi basiert. Dann kann ein Plugin beispielsweise f&#252;r Confluence <em>und</em> Jira verwendet werden oder Abh&#228;ngigkeiten zwischen Plugins definiert werden. In diesem Zusammenhang werden auch die meisten <a href="http://confluence.atlassian.com/display/DOC/Plugin+loading+strategies+in+Confluence">Core-Plugins</a>, die mitden Confluence-Quellen  verwoben sind, in &#8220;echte&#8221; Plugins umgewandelt.<br />
Vorbote f&#252;r Confluence 3.0 ist die erste Version des &#252;berarbeiteten Editors,   des sogenannten &#8220;Writers&#8221;. Er beinhaltet ein Upgrade auf TinyMCE3 und Bugfixes beim Umschalten zwischen WYSIWYG-Editor und Wikimarkup und Arbeiten mitTabellen.   Ich bin wirklich gespannt auf die Verbesserungen im Editor, da die momentanen Unzul&#228;nglichkeiten des Editors Akzeptanzprobleme bei der Einf&#252;hrung von Confluence verursachen k&#246;nnen.</p>
<p><strong>Confluence 3.0</strong></p>
<p>Der Writer wird auch in Confluence 3.0 Hauptthema sein, beispielsweise steht dann die Integration eines Macrobrowsers auf dem Releaseplan. Der Macrobrowser erlaubt das leichtere Ausw&#228;hlen, Einf&#252;gen und Konfigurieren von Macros in die Wikseiten &#252;ber einen Nutzerdialog. Au&#223;erdem wird an neuen  Plugins gearbeitet - zum Beispiel zur Anzeige von Inhalten mit hoher Aktivit&#228;t auf dem Dashboard.<br />
Die Verbesserung der Performance wird auch im Vordergrund stehen - inbesondere da immer mehr Confluence-Installationen mit sehr gro&#223;en Nutzerzahlen (z.B. bei Accenture mit 80.000 Nutzern) entstehen. So wird Confluence zu einer richtige Enterprise Anwendung, die wenig mit herk&#246;mmlichen Web 2.0 Tools gemein hat.<br />
Confluence 3.0 wird im Fr&#252;hjahr 2009 im normalen Releaseabstand von 3-4 Monaten pro Hauptversion ver&#246;ffentlicht - auch wenn das erste Mal die &#8216;3&#8242; in  der Releasenummer enthalten sein wird.</p>
<p><strong>Confluence 3.x</strong></p>
<p>Am meisten freue ich mich schon auf das Dashboard, dass sich jeder Nutzer individuell anpassen kann und dass alle Atlassian Produkte erhalten sollen.  Es basiert der Technologie, die auch f&#252;r die Google Gadgets verwendet wird.  Damit erlaubt das Dashboard die Anzeige von externen Gadgets und von Inhalten aus den verschiedenen Atlassian Produkten und eine noch engere Integration zwischen den Produkten (f&#252;r einen ersten Blick auf die m&#246;gliche Umsetzung siehe den Bericht vom <a href="http://confluence.atlassian.com/display/DEV/What+is+FedEx">FedexDay 8</a>: <a href="http://confluence.atlassian.com/display/DEV/Fedex+8+-+Configurable+Dashboard+for+Confluence">Configurable Dashboard)</a>. Auch die Entwicklung des Sharepoint Connectors wird weiter vorangetrieben.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/10/25/ausblick-auf-die-naechsten-versionen-von-confluence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Erweitern von Actions in Confluence</title>
		<link>http://www.communardo.de/techblog/2008/10/15/erweitern-von-actions-in-confluence/</link>
		<comments>http://www.communardo.de/techblog/2008/10/15/erweitern-von-actions-in-confluence/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 14:17:56 +0000</pubDate>
		<dc:creator>Sebastian Höhne</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Action]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[XWork]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=464</guid>
		<description><![CDATA[<p>F&#252;r die Entwicklung von Plugins bietet Confluence die M&#246;glichkeit, die standardm&#228;&#223;ig im System vorhandenen Actions (z.B. die <a href="http://docs.atlassian.com/com/atlassian/confluence/atlassian-confluence/latest/com/atlassian/confluence/pages/actions/ViewPageAction.html">ViewPageAction</a> und die <a href="http://docs.atlassian.com/com/atlassian/confluence/atlassian-confluence/latest/com/atlassian/confluence/pages/actions/EditPageAction.html">EditPageAction</a>) mit eigenen Action-Klassen zu erweitern bzw. bestehende Klassen zu ersetzen. Auf diese Weise kann eine Vielzahl der Standardfunktionen auf individuelle Bed&#252;rfnisse angepasst sowie neue Funktionalit&#228;t implementiert werden. </p>
<p>Die in Confluence verwendeten Actions sind in Packages organisiert und werden in der Datei xwork.xml verwaltet. Jedes der dort enthaltenen Packages kann in der Datei &#8220;atlassian-plugin.xml&#8221; des eigenen Plugins erweitert werden. Soll z.B. die Klasse ViewPageAction &#252;berschrieben werden, mu&#223; das Package &#8220;pages&#8221; erweitert werden. Ein solcher Abschnitt kann wie folgt aussehen:</p>
<pre>&lt;xwork name="View Page Action" key="myviewpageaction"&gt;
	&lt;package name="pages" extends="pages" namespace="/pages"&gt;
	&lt;default-interceptor-ref name="validatingStack"/&gt;
	&lt;action name="viewpage" class="de.communardo.confluence.plugins.actions.MyViewPageAction"&gt;
		&lt;result name="error" type="velocity"&gt;/pages/myerrorsite.vm&lt;/result&gt;
		&lt;result name="page" type="velocity"&gt;/pages/myviewpage.vm&lt;/result&gt;
	&lt;/action&gt;
	&lt;/package&gt;
&lt;/xwork&gt;</pre>
<p>Dabei ist grunds&#228;tzlich darauf zu achten, dass im Parameter &#8220;extends&#8221; der Name des zu erweiternden xwork-Packages angegeben wird. Mit dem Tag &lt;action&gt; k&#246;nnen dann eigene Action-Definitionen f&#252;r dieses Package angegeben werden. Wird dabei im Parameter &#8220;name&#8221; der Name einer bereits existierenden Action eingetragen, wird diese durch die in &#8220;class&#8221; angegebene Klasse ersetzt. Dabei k&#246;nnen auch die nach einer Action aufzurufenden Velocity-Templates und Actions im Tag &lt;result&gt; mit eigenen Results, Templates und Klassen ersetzt werden.</p>
<p>Beim &#220;berschreiben der ViewPageAction ist allerdings eine Besonderheit zu beachten: beim Aufruf einer Seite durch die ViewPageAction wird standardm&#228;&#223;ig in der Methode getWebInterfaceContext &#252;berpr&#252;ft, ob die Seite von der Klasse &#8220;com.atlassian.confluence.pages.actions.ViewPageAction.class&#8221; aufgerufen wurde. Anhand dieses Klassennamens wird ermittelt, ob die aufgerufene Seite gerade angezeigt oder editiert wird.<br />
 Ersetzt man nun die originale ViewPageAction durch eine eigene Klasse, mu&#223; also auch in dieser Klasse die Methode getWebInterfaceContext implementiert und entsprechend des neuen Klassennamens angepasst werden. F&#252;r obiges Beispiel muss also folgende Methode implementiert werden:</p>
<pre>
<code>
public WebInterfaceContext getWebInterfaceContext() {
	DefaultWebInterfaceContext result = new
		DefaultWebInterfaceContext(super.getWebInterfaceContext());
	if (getClass().equals(MyViewPageAction.class)) {
		result.setParameter(ViewingContentCondition.CONTEXT_KEY, Boolean.TRUE);
	}
	return result;
}
</code>
</pre>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/10/15/erweitern-von-actions-in-confluence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JUG Saxony – Eclipse RCP/Swing AF/NetBeans RCP</title>
		<link>http://www.communardo.de/techblog/2008/10/12/jug-saxony-eclipse-rcpswing-afnetbeans-rcp/</link>
		<comments>http://www.communardo.de/techblog/2008/10/12/jug-saxony-eclipse-rcpswing-afnetbeans-rcp/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 17:41:57 +0000</pubDate>
		<dc:creator>Torsten Rentsch</dc:creator>
		
		<category><![CDATA[J2EE]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[jug]]></category>

		<category><![CDATA[rcp]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=481</guid>
		<description><![CDATA[<p>Am 08.10.2008 traf sich die <a href="http://www.jugsaxony.de" target="_blank">JUG Saxony</a> zum dritten Mal in Dresden. Das Thema des Abends lautete Rich Client Platforms. Das ambitionierte Ziel war es im Rahmen dieser Veranstaltung die bekanntesten Frameworks vor- und gegen&#252;berzustellen. Rund 45 Interessenten hatten den Weg zur Informatik Fakult&#228;t der TU Dresden gefunden, darunter viele zum ersten Mal. Der Informationsbedarf auch abseits der Java Webentwicklung ist also vorhanden.</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/10/jug-rcp.jpg"><img class="size-full wp-image-500 alignnone" src="http://www.communardo.de/techblog/wp-content/uploads/2008/10/jug-rcp.jpg" alt="" width="500" height="375" /></a></p>
<p>Den Anfang machte <a href="http://www.ralfebert.de" target="_blank">Ralf Ebert</a> (Freelancer) mit seinem Vortrag zur <a href="http://wiki.eclipse.org/index.php/Rich_Client_Platform" target="_blank">EclipseRCP</a>. Ihm folgte Stefan Saring (<a href="http://www.saxsys.de/" target="_blank">Saxonia Systems AG</a>) mit der Vorstellung des <a href="https://appframework.dev.java.net/" target="_blank">Swing Application Frameworks</a> (JSR 296). Beschlossen wurde der Abend durch <a href="http://blogs.sun.com/geertjan" target="_blank">Geertjan Wielenga</a> (<a href="http://www.netbeans.org" target="_blank">NetBeans/SUN</a>) mit <a href="http://platform.netbeans.org/" target="_blank">NetbeansRCP</a>. Nach drei Stunden voller Informationen und praktischer Vorf&#252;hrungen lautete das Fazit: Alle drei Frameworks haben ihre Daseinsberechtigung. Entwickler mit SWT Background greifen zu EclipseRCP, Swing Fans je nach ben&#246;tigtem Funktionsumfang und Projektgr&#246;&#223;e zum Swing Application Framework (kleinere bis mittlere Projekte) oder zu NetBeans RCP (mittlere und gr&#246;&#223;ere Projekte).</p>
<p>Wir hoffen am 27.11.2008 mit der vierten Veranstaltung  der <a href="http://www.jugsaxony.de" target="_blank">JUG Saxony</a> – diesmal zum Thema Rational Jazz/Team Concert - erneut allen Besuchern ein ansprechendes Programm zu bieten.</p>
<p>Auch f&#252;r das Jahr 2009 sind bereits f&#252;nf <a href="http://groups.google.de/group/jug-saxony/web/veranstaltungsplanung" target="_blank">Vortr&#228;ge in Vorbereitung</a>.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/10/12/jug-saxony-eclipse-rcpswing-afnetbeans-rcp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Single Sign-On für Confluence</title>
		<link>http://www.communardo.de/techblog/2008/10/02/single-sign-on-fuer-confluence/</link>
		<comments>http://www.communardo.de/techblog/2008/10/02/single-sign-on-fuer-confluence/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 00:15:14 +0000</pubDate>
		<dc:creator>Tino Winkler</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Kerberos]]></category>

		<category><![CDATA[Single Sign-On]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=436</guid>
		<description><![CDATA[<p>Confluence unterst&#252;tzt standardm&#228;&#223;ig keine Authentikation &#252;ber Single Sign-On Dienste. Im Folgenden soll kurz beschrieben werden wie dies dennoch erreicht werden kann.</p>
<p>F&#252;r jeden Seitenaufruf im Confluence-Wiki wird der aufrufende Nutzer ben&#246;tigt. Um diesen zu ermitteln werden verschiedene Quellen abgefragt (Cookies, Session, &#8230;). Erst wenn auf diese Weise kein angemeldeter Nutzer festgestellt werden kann, wird die Login-Seite angezeigt. Der vollst&#228;ndige Ablauf der Authentikation kann im <a href="http://confluence.atlassian.com/display/DOC/HTTP+authentication+with+Seraph" target="_self">Confluence Development Hub</a> nachgelesen werden. Diese Ermittlung des Nutzers erfolgt durch einen sog. Authentikator. Der muss nun so angepasst werden, dass er mit dem zu unterst&#252;tzenden Single Sign-On Dienst zusammenarbeitet (also den &#252;ber diesen Dienst angemeldeten Nutzer ermittelt). Dazu schreibt man am besten einen eigenen Authentikator der den Confluence Standardauthentikator beerbt und passt die entscheidenden Methoden an.</p>
<p>Die hier vorgestellte L&#246;sung basiert darauf, dass der Name des bereits am Single Sign-On Dienst authentifizierten Nutzers dem Servlet Container von Confluence bereitgestellt wird. Damit kann er &#252;ber das Request-Objekt ermittelt werden (<code>HttpServletRequest.getRemoteUser()</code>). Dies ist f&#252;r jedes Single Sign-On System auf andere Weise einzurichten und verursacht auch den meisten Aufwand. Um beispielsweise eine Anbindung an einen Kerberos-Dienst zu realisieren ist folgendes Vorgehen denkbar:</p>
<ul>
<li>Die Confluence-Anwendung ist &#252;ber einen vorgeschaltenen Apache Webserver zu erreichen, der Servlet Container ist ein Apache Tomcat.</li>
<li>Der Webserver wird mit dem Modul <a href="http://modauthkerb.sourceforge.net/" target="_self">mod_auth_kerb</a> betrieben, welches die Authentikation gegen einen Kerberos-Dienst erm&#246;glicht.</li>
<li>Der bei der Authentikation ermittelte Nutzername wird vom Apache &#252;ber den <a href="http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html">AJP-Connector</a> an den Tomcat weitergereicht. Dazu kann das Apache Modul <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html" target="_self">mod_proxy_ajp</a> verwendet werden.</li>
</ul>
<p>Um nun die Authentikation gegen den weitergereichten Nutzernamen durchzuf&#252;hren ist nur die Methode <code>getUser()</code> des Standardauthentikators (<code>ConfluenceAuthenticator</code>) zu &#252;berschreiben:<br />
<code>
<pre>package my.auth.package;
public class MySSOAuthenticator extends ConfluenceAuthenticator{

    public Principal getUser(HttpServletRequest request, HttpServletResponse response) {
        Principal principal = null;
        // check if the user is already logged in (cookies &amp; co.)
        principal = super.getUser(request, response);

        if (principal == null) {
            String remoteUserName = <strong>request.getRemoteUser()</strong>;

            if (remoteUserName != null &amp;&amp; remoteUserName.trim() != "") {
                // try to get the user's account using his name
                principal = this.getUser(remoteUserName);
                if (principal != null) {
                    // success, some additional code here (add user to session, ...)
                } else {
                    // some error handling as user can't be acquired from request
                }
            }
        }
        return principal;
    }

}</pre>
<p></code><br />
Nun muss nur noch der Standardauthentikator durch den neuen Authentikator ersetzt werden. Dies ist zum Gl&#252;ck mit wenig Aufwand machbar:</p>
<ul>
<li>deploy der kompilierten Klasse in das WEB-INF Verzeichnis von Confluence (entweder als jar nach WEB-INF/lib oder unter WEB-INF/classes mit der dem Paket entsprechenden Unterordnerstruktur)</li>
<li>Austauschen des Authentikators durch Anpassung der Konfigurationsdatei WEB-INF/classes/seraph-config.xml:<br />
<code>
<pre>...
&lt;authenticator class="my.auth.package.MySSOAuthenticator"/&gt;
...
</pre>
<p></code>
</li>
</ul>
<p>Nach einem Neustart von Confluence sollte nun der neue Authentikator verwendet und somit Single Sign-On unterst&#252;tzt werden.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/10/02/single-sign-on-fuer-confluence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Berlin.jar – Rü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>Maven und das Trigger-Plugin in Confluence</title>
		<link>http://www.communardo.de/techblog/2008/09/26/maven-und-das-trigger-plugin/</link>
		<comments>http://www.communardo.de/techblog/2008/09/26/maven-und-das-trigger-plugin/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 09:41:19 +0000</pubDate>
		<dc:creator>Sebastian Höhne</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Atlassian]]></category>

		<category><![CDATA[maven2]]></category>

		<category><![CDATA[Plugin]]></category>

		<category><![CDATA[Trigger]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=420</guid>
		<description><![CDATA[<p>Bei der Entwicklung von Confluence Plugins kommt h&#228;ufig die auf Java basierende Buildmanagement-Software <a title="Maven" href="http://maven.apache.org/" target="_blank">Maven</a> zum Einsatz. Ziel dabei ist es, die Entwickler vom Anlegen des Projektes bis hin zum Kompilieren und Testen zu unterst&#252;tzen und m&#246;glichst viele Schritte des Softwaremanagements automatisiert ablaufen zu lassen. Ein Tutorial f&#252;r die Entwicklung von Confluence Plugins mit Hilfe von Maven findet sich auf den Seiten der <a title="Confluence Community" href="http://confluence.atlassian.com/display/DISC/Developing+Confluence+Plugins+with+Maven+2" target="_blank">Confluence Community</a>.</p>
<p>Wenn eine solche Entwicklungsumgebung eingerichtet wurde, kann der Buildprozess eines Plugins noch weiter vereinfacht werden. Daf&#252;r stellt Atlassian das <a title="Plugin Developer Kit for Maven 2" href="http://confluence.atlassian.com/display/DEVNET/Atlassian+Maven+PDK" target="_blank">Plugin Developer Kit for Maven2</a> (kurz PDK) zur Verf&#252;gung. Dabei handelt es sich um ein Maven-Plugin, welches einfach in der POM des eigenen Projektes eingebunden werden muss und dann automatisch beim Buildprozess heruntergeladen und installiert wird. Ein solcher Aufruf kann z.B. so aussehen:</p>
<pre>
&lt;plugin&gt;
   &lt;groupId&gt;com.atlassian.maven.plugins&lt;/groupId&gt;
   &lt;artifactId&gt;atlassian-pdk&lt;/artifactId&gt;
   &lt;executions&gt;
      &lt;execution&gt;
         &lt;phase&gt;package&lt;/phase&gt;
         &lt;goals&gt;
            &lt;goal&gt;uninstall&lt;/goal&gt;
            &lt;goal&gt;install&lt;/goal&gt;
            &lt;goal&gt;rescan&lt;/goal&gt;
         &lt;/goals&gt;
      &lt;/execution&gt;
   &lt;/executions&gt;
&lt;/plugin&gt;
</pre>
<p>Dabei k&#246;nnen verschiedene Goals angegeben werden, welche hintereinander ausgef&#252;hrt werden und z.B. das Plugin direkt nach dem kompilieren in einem laufenden Confluence deinstallieren und die neue Version installieren. Eine sinnvolle Reihenfolge w&#228;re z.B. <em>Uninstall</em> - <em>Install</em> - <em>Rescan</em>.</p>
<p>Vorsicht ist allerdings bei der Benutzung des <a title="Confluence Trigger Plugin Modul" href="http://confluence.atlassian.com/display/DOC/Trigger+Plugins" target="_blank">Confluence Trigger Plugin Moduls</a> geboten. Hat man einen Trigger in seiner atlassian-config.xml eingebunden und installiert das Plugin &#252;ber das PDK direkt in ein laufendes Confluence, sollte nach einem <em>Install</em> kein explizites <em>Enable</em> des Plugins ausgef&#252;hrt werden. Der Grund daf&#252;r ist: der Job wird bereits beim <em>Install</em> angelegt. Bei einem folgenden <em>Enable</em> wird dann erneut versucht, dieser Job anzulegen - was nat&#252;rlich fehlschl&#228;gt und mit einer <code>ObjectAlreadyExistsException</code> quittiert wird. Ein <em>Install</em> und ggf. <em>Rescan</em> ist in diesem Fall also ausreichend.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/09/26/maven-und-das-trigger-plugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webzugriff für Confluence</title>
		<link>http://www.communardo.de/techblog/2008/09/24/webzugriff-fuer-confluence/</link>
		<comments>http://www.communardo.de/techblog/2008/09/24/webzugriff-fuer-confluence/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 08:22:33 +0000</pubDate>
		<dc:creator>Sebastian Höhne</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Atlassian]]></category>

		<category><![CDATA[plugins]]></category>

		<category><![CDATA[webproxy]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=414</guid>
		<description><![CDATA[<p>Damit Confluence seinen vollen Funktionsumfang erreichen kann, sollte dem System ein Onlinezugang erm&#246;glicht werden. Dadurch kann unter anderem das Plugin-Repository genutzt werden, mittels welchem die von Atlassian bereitgestellten Plugins bequem auf dem eigenen System installiert und verwaltet werden k&#246;nnen. Aber auch zahlreiche Plugins basieren auf einer bestehenden Onlineverbindung. So k&#246;nnen zum Beispiel durch das <a href="http://confluence.atlassian.com/display/DOC/RSS+Feed+Macro">RSS-Feed-Macro</a> sowohl externe als auch innerhalb von Confluence generierte RSS-Feeds auf eigenen Seiten eingebunden werden. Mit dem <a href="http://confluence.atlassian.com/display/CONFEXT/Confluence+IM+Presence+Plugin">IM-Presence-Plugin</a> k&#246;nnen Confluence-Nutzer ihren Onlinestatus in verschiedenen Instant Messenger - Systemen auf einer Seite anzeigen lassen. Dieses Plugin ist besonders f&#252;r pers&#246;nliche Seiten und Blogs interessant.</p>
<p>Wenn Confluence kein direkter Internetzugang erm&#246;glich werden kann (z.B. wenn das System innerhalb eines internen Netzes betrieben wird), besteht die M&#246;glichkeit einen WebProxy anzugeben. Daf&#252;r mu&#223; im Startscript des Applikationsservers (beispielsweise eine Datei &#8220;catalina.bat&#8221; im &#8220;bin&#8221; Verzeichnis eines Tomcat-Applikationsservers) die Variable</p>
<p><code>JAVA_OPTS</code></p>
<p>mit dem Parameter</p>
<p><code>set JAVA_OPTS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128"</code></p>
<p>versehen werden.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/09/24/webzugriff-fuer-confluence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Migration von MediaWiki nach Confluence</title>
		<link>http://www.communardo.de/techblog/2008/09/19/migration-mediawiki-nach-confluence/</link>
		<comments>http://www.communardo.de/techblog/2008/09/19/migration-mediawiki-nach-confluence/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 18:05:36 +0000</pubDate>
		<dc:creator>Judith Schmalz</dc:creator>
		
		<category><![CDATA[Confluence]]></category>

		<category><![CDATA[Atlassian]]></category>

		<category><![CDATA[MediaWiki]]></category>

		<category><![CDATA[Migration]]></category>

		<category><![CDATA[UWC]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=407</guid>
		<description><![CDATA[<p>Um Inhalte aus anderen Wikisystemen in ein Confluence-Wiki zu migrieren, stellt Atlassian den <a title="Universal Wiki Converter" href="http://confluence.atlassian.com/display/CONFEXT/Universal+Wiki+Converter" target="_blank">Universal Wiki Converter</a> zur Verf&#252;gung.<br />
Zuerst werden die Inhalte aus der Datenbank des &#8220;Altsystems&#8221; exportiert, als Textdatei im lokalen Dateisystem abgespeichert und dann ins Confluence migriert.<br />
F&#252;r den Export gibt es f&#252;r die verschiedenen Wikisysteme Exporter, die in Properties-Dateien konfiguriert werden. Normalerweise werden dort Name, Nutzer und Pfad der Wikidatenbank angegeben.</p>
<p>Der Export aus einem MediaWiki neuerer Version schl&#228;gt jedoch aufgrund ge&#228;nderter Datenbankfelder fehl. Dies kann behoben werden, indem in der Properties-Datei folgende angepasste SQL-Abfragen angegeben werden:</p>
<pre>db.sql.pagedata=select page_id, page_namespace, page_title, page_latest from page where
     page_namespace!='8' and page_namespace!='12';
db.sql.textdata=select old_text from pagecontent where old_id = (
     select rev_text_id from revision where rev_id = 'db.column.textid' );
db.column.title=page_title
db.column.namespace=page_namespace
db.column.pageid=page_id
db.column.textid=page_latest
db.column.text=old_text</pre>
<p>(Angepasst in den exporter.mediawiki.properties, Getestet mit MediaWiki Version 1.11)</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/09/19/migration-mediawiki-nach-confluence/feed/</wfw:commentRss>
		</item>
	<feedburner:awareness xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://api.feedburner.com/awareness/1.0/GetFeedData?uri=communardo</feedburner:awareness></channel>
</rss>
