<?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>IT blogging</title>
	<atom:link href="http://www.itblogging.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itblogging.de</link>
	<description>Informatik Grundlagen, Java, Datenbank, Web, Netzwerk, Linux</description>
	<lastBuildDate>Mon, 06 Feb 2012 19:30:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Firefox und Thunderbird 9 auf Ubuntu 11.10</title>
		<link>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/</link>
		<comments>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 21:05:04 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Thunderbird]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1771</guid>
		<description><![CDATA[Ubuntu 11.10 Nutzer wundern sich wahrscheinlich, warum seit längerer Zeit der neue Firefox sowie Thunderbird in der Version 9 auf dem Markt ist, jedoch keiner der beiden Softwareanwendungen sich automatisch aktualisiert. Das Hinzufügen eines Personal Package Archive (ppa) bringt die Lösung. Einfach die folgenden drei Linux Befehle in die Konsole kopieren, Firefox und Thunderbird neustarten, [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 11.10 Nutzer wundern sich wahrscheinlich, warum seit längerer Zeit der neue Firefox sowie Thunderbird in der Version 9 auf dem Markt ist, jedoch keiner der beiden Softwareanwendungen sich automatisch aktualisiert.<br />
Das Hinzufügen eines Personal Package Archive (ppa) bringt die Lösung.<br />
<span id="more-1771"></span></p>
<p>Einfach die folgenden drei Linux Befehle in die Konsole kopieren, Firefox und Thunderbird neustarten, fertig.</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-add-repository ppa:ubuntu-mozilla-security/ppa
sudo apt-get update
sudo apt-get dist-upgrade
</pre>
<p><a class="lightbox" title="Firefox 9 unter Ubuntu 11.10" href="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Firefox9.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Firefox9-475x196.png" alt="" title="Ubuntu1110_Firefox9" width="475" height="196" class="alignnone size-medium wp-image-1774" /></a></p>
<p><a class="lightbox" title="Thunderbird 9 unter Ubuntu 11.10" href="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Thunderbird9.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/Ubuntu1110_Thunderbird9-475x194.png" alt="" title="Ubuntu1110_Thunderbird9" width="475" height="194" class="alignnone size-medium wp-image-1776" /></a></p>
<p><strong>Update: </strong> Das Hinzufügen des Repositories aktualisiert Firefox und Thunderbird stets auf die aktuellsten Versionen (Aktuell: Firefox 10, Thunderbird 10). Durch den Updatechannel werden stets die neusten Versionen über die Aktualisierungsverwaltung zeitnah nach der Veröffentlichung durch Mozilla aktualisiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/firefox-und-thunderbird-9-auf-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personalisierte Starter auf dem Unity Desktop und im Startmenü anlegen</title>
		<link>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/</link>
		<comments>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 22:36:56 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1759</guid>
		<description><![CDATA[Durch die endgültige Umstellung auf den Unity Desktop in der Ubuntu Version 11.10, muss sich wohl jeder der sich dazu entschieden hat Ubuntu treu zu bleiben, nun doch gezwungenermaßen mit dem neuen Desktop auseinandersetzen. Mich persönlich konnte bis heute der Unity Desktop noch nicht überzeugen, wo doch einige ganz simple Funktionen ohne jedes Verständnis weggefallen [...]]]></description>
			<content:encoded><![CDATA[<p>Durch die endgültige Umstellung auf den Unity Desktop in der Ubuntu Version 11.10, muss sich wohl jeder der sich dazu entschieden hat Ubuntu treu zu bleiben, nun doch gezwungenermaßen mit dem neuen Desktop auseinandersetzen. Mich persönlich konnte bis heute der Unity Desktop noch nicht überzeugen, wo doch einige ganz simple Funktionen ohne jedes Verständnis weggefallen sind. Allein die Tatsache wie schwer es dem Anwender gemacht wird, das Startmenü nach belieben zu modifizieren oder aber einen Starter auf den Desktop zu erstellen, ist für mich nicht nachvollziehbar. Inzwischen habe ich für dieses &#8220;Problem&#8221; eine Lösung gefunden, die ich nicht für mich behalten möchte.<br />
<span id="more-1759"></span></p>
<p>Zunächst einmal habe ich mir ein eigenen Ordner für die personalisierten Starter in meinem Home Verzeichnis angelegt. </p>
<pre class="brush: bash; title: ; notranslate">/home/simon/starter</pre>
<p>Anschließend wird die Firefox Desktop Konfigurationsdatei (dies klappt natürlich auch mit jeder anderen Desktop Konfigurationsdatei) aus dem Applications Ordner in meinen &#8220;starter&#8221; Ordner kopiert.</p>
<pre class="brush: bash; title: ; notranslate">/usr/share/applications</pre>
<p>Einmal in den Terminal gewechselt werden neue Rechte vergeben und der Eigentümer gewechselt:</p>
<pre class="brush: bash; title: ; notranslate">sudo chown simon:simon firefox.desktop</pre>
<pre class="brush: bash; title: ; notranslate">sudo chmod 744 firefox.desktop</pre>
<p>Zum Schluss noch die Starterkonfiguration mit einem Link zu der Anwendung füllen, einen neuen Namen und eine Beschreibung geben, fertig.<br />
Der folgende Screenshot zeigt beispielsweise mein Starter zu der Eclipse IDE.</p>
<p><a class="lightbox" title="Eclipse Starter"  href="http://www.itblogging.de/wp-content/uploads/2011/12/eclipse_starter.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/12/eclipse_starter-475x387.png" alt="" title="eclipse_starter" width="475" height="387" class="alignnone size-medium wp-image-1766" /></a></p>
<p>Eine Kopie dieses Starters kann nun beliebig auf den Desktop oder aber auch in das Startmenü gezogen werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/personalisierte-starter-auf-dem-unity-desktop-und-im-startmenu-anlegen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bad Smell: Magic Numbers</title>
		<link>http://www.itblogging.de/java/bad-smell-magic-numbers/</link>
		<comments>http://www.itblogging.de/java/bad-smell-magic-numbers/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 23:04:26 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Bad Smell]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1748</guid>
		<description><![CDATA[Eine sehr schlecht Angewohnheit eines Softwareentwicklers ist die Verwendung von Magic Numbers. Von Magic Numbers ist genau dann die Rede, wenn für den Betrachter des Codes auf Anhieb nicht erkennbar ist, welchen genauen Sinn die Verwendung des vorliegenden Zahlenwertes hat. Wenn man Glück hat, besteht ein Kommentar welcher den Zahlwert beschreibt, aber selbst dieser wird [...]]]></description>
			<content:encoded><![CDATA[<p>Eine sehr schlecht Angewohnheit eines Softwareentwicklers ist die Verwendung von Magic Numbers. Von Magic Numbers ist genau dann die Rede, wenn für den Betrachter des Codes auf Anhieb nicht erkennbar ist, welchen genauen Sinn die Verwendung des vorliegenden Zahlenwertes hat. Wenn man Glück hat, besteht ein Kommentar welcher den Zahlwert beschreibt, aber selbst dieser wird oft vergebens gesucht.<br />
<span id="more-1748"></span></p>
<p>Hierzu ein konkretes Beispiel:<br />
In diesem einfachen Beispiel wird ein Calendar Objekt mit dem Datum in genau sieben Tagen erstellt (calendar.add(..)). In der ersten Darstellung ist nicht ansatzweise zu erahnen, was genau in der add Methode passiert. Hier wäre das mindeste wohl gewesen, wenn der Entwickler einen aussagekräftigen Kommentar hinterlegt hätte. <strong>Bad Smell</strong>!</p>
<pre class="brush: java; title: ; notranslate">
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(6, 7);
</pre>
<p>Schlimmer noch wäre es, wenn der Zahlenwert 7 zu einem späteren Zeitpunkt im Code nochmals verwendet wird und diese beiden Werte abhängig voneinander sind. In diesem Fall müssten sogar beide Werte nachträglich gepflegt werden, wenn plötzlich das Datum statt in 7, in 14 Tagen erstellt werden soll. Schaut man sich den Code Monate oder gar Jahre später erst wieder an, fällt dieser Zusammenhang höchstwahrscheinlich gar nicht erst auf und es kommt bei einer Veränderung zu unerwünschten Nebeneffekten der Anwendung. Das unnötige Verstreichen einiger Zeit durch debuggen ist hier vorprogrammiert. </p>
<p>Betrachten wir uns die nachfolgende Umsetzung. In diesem Beispiel fällt direkt auf, welcher tiefere Sinn hinter der add Methode steckt. Verdeutlicht wird dies über zwei Konstanten. Die selbst angelegte <em>DAYS_IN_FUTURE</em> sowie die in der Calendar Klasse befindliche <em>Calendar.DAY_OF_YEAR</em> Konstante. </p>
<pre class="brush: java; title: ; notranslate">
final int DAYS_IN_FUTURE = 7;
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, DAYS_IN_FUTURE);
</pre>
<p>Durch die Verwendung der Konstante wird der Lesefluss prompt erleichtert. Ohne den Code zu analysieren wird direkt klar, was an dieser Stelle passiert.</p>
<p>Ein Blick hinter die Kulissen: In der Konstante <em>DAY_OF_YEAR</em> steckt der nicht veränderbare Wert 6. Im Ergebnis werden demnach die selben Werte wie in dem ersten Beispiel gesetzt, bloß in Konstanten gekapselt.</p>
<pre class="brush: java; title: ; notranslate">public final static int DAY_OF_YEAR = 6;</pre>
<p>An diesem recht einfachen Beispiel ist bereits zu erkennen, wie wichtig die Vermeidung von Magic Numbers innerhalb der Softwareentwicklung ist. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/bad-smell-magic-numbers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bad Smell: Duplizierter Code</title>
		<link>http://www.itblogging.de/java/bad-smell-duplizierter-code/</link>
		<comments>http://www.itblogging.de/java/bad-smell-duplizierter-code/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 01:56:48 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Bad Smell]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1729</guid>
		<description><![CDATA[Wenn es nach Kent Beck und Martin Fowler geht, ist wohl ein duplizierter Code eines der &#8220;stinkensten&#8221; Vorkommnisse die es bei der Softwareentwicklung gibt. Dies ist genau dann der Fall, wenn sich identische Codefragmente an unterschiedlichen Stellen unnötig wiederholen. Selbst wenn nur die Struktur identisch ist, kann muss der Code in eigene (Utility) Methoden ausgelagert [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn es nach Kent Beck und Martin Fowler geht, ist wohl ein duplizierter Code eines der &#8220;stinkensten&#8221; Vorkommnisse die es bei der Softwareentwicklung gibt. Dies ist genau dann der Fall, wenn sich identische Codefragmente an unterschiedlichen Stellen unnötig wiederholen. Selbst wenn nur die Struktur identisch ist, <del>kann</del> muss der Code in eigene (Utility) Methoden ausgelagert werden. Hierdurch entfällt nicht nur die Pflege des doppelten Codes, sondern auch die Analyse möglicher Entwicklungsfehler beschränkt sich auf ein Minimum.<br />
<span id="more-1729"></span><br />
Ich musste die Erfahrung machen, das simple Helfermethoden wie zum Beispiel die Darstellung oder Berechnung eines Datums, die Verarbeitung von Strings, das Prüfen auf Nullpointer oder anderen kleine Helferzeilen oft in bereits eingesetzten Frameworks oder Utility Jars vorhanden sind, bloß das die Entwickler durch reine Unwissenheit der Existenz dieser Hilfsmethoden diese nochmals selbst in den eigenen Code eingebaut haben. Beispielsweise stellt Google in der bekannten <a href="http://code.google.com/p/guava-libraries/" title="Guava Libraries" target="_blank">Guava</a> Bibliothek viele Methoden bereit, die die Entwicklung bei korrekter Verwendung vehement voran treiben kann. Wozu soll man auch das Rad (eckig) neu erfinden, wenn man doch auf bereits vorhandenen Code zurück greifen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/bad-smell-duplizierter-code/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bad Smells</title>
		<link>http://www.itblogging.de/java/bad-smells/</link>
		<comments>http://www.itblogging.de/java/bad-smells/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 01:56:23 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Bad Smell]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1720</guid>
		<description><![CDATA[Es war das Jahr 1999, als Kent Beck und Martin Fowler das Buch Refactoring veröffentlichten. In diesem Buch prägten Sie den Begriff &#8220;Bad Smells&#8221;. Heutzutage ist dieser Begriff unter Softwareentwicklern geläufig und bedeutet soviel, wie frei übersetzte &#8220;stinkige Codezeilen&#8221;. Hiermit werden Codeabschnitte gemeint, die ein Softwareentwickler tunlichst vermeiden sollte, jedoch oft unterbewusst trotzdem immer wieder [...]]]></description>
			<content:encoded><![CDATA[<p>Es war das Jahr 1999, als Kent Beck und Martin Fowler das Buch <em><a href="http://www.amazon.de/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/" title="Kent Beck und Martin Fowler - Refactoring" target="_blank">Refactoring</a></em> veröffentlichten. In diesem Buch prägten Sie den Begriff &#8220;Bad Smells&#8221;. Heutzutage ist dieser Begriff unter Softwareentwicklern geläufig und bedeutet soviel, wie frei übersetzte &#8220;stinkige Codezeilen&#8221;. Hiermit werden Codeabschnitte gemeint, die ein Softwareentwickler tunlichst vermeiden sollte, jedoch oft unterbewusst trotzdem immer wieder zum Vorschein kommen.<br />
<span id="more-1720"></span></p>
<p>Inzwischen kann ich behaupten, das ich bereits einige Codezeilen in meinem Leben gesehen habe. Viele waren schön anzusehen, einige aber auch nicht. Leider sind auch heute immer wieder Codezeilen aufzufinden, die weniger schön umgesetzt sind. Codezeilen, die oft mit minimalen Aufwand zu einer besseren Übersicht sowie verständlicherem Code führen könnten. Nicht selten werden auch durch das Refactoring der Bad Smells Fehler eingegrenzt oder gar ausgemerzt. Da es sich hierbei um immer wiederkehrende und auch oft die selben Zeilen handelt, möchte ich auf itblogging.de eine Zusammenfassung der in dem Buch Refactoring beschriebenen sowie weiteren bekannten Bad Smells anhand einiger Beispiele veröffentlichen.<br />
Die nachfolgende Liste werde ich sukzessive erweitern, sollte ich neue Bad Smells in diesem Blog veröffentlichen. Fragen, Anregungen oder Kritik sind natürlich ausdrücklich erwünscht und idealerweise in dem jeweiligen Artikel zu hinterlassen. </p>
<ul>
<li><a href="http://www.itblogging.de/java/bad-smell-duplizierter-code/" title="Duplizierter Code">Duplizierter Code</a></li>
<li><a href="http://www.itblogging.de/java/bad-smell-magic-numbers/" title="Bad Smell: Magic Numbers">Magic Numbers</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/bad-smells/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MySQL (JDBC) Tutorial</title>
		<link>http://www.itblogging.de/java/spring-mysql-jdbc-tutorial/</link>
		<comments>http://www.itblogging.de/java/spring-mysql-jdbc-tutorial/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 22:11:26 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1705</guid>
		<description><![CDATA[Auch wenn der primäre Anwendungsbereich des Spring Frameworks in der JEE Anwendung liegt, kann die JDBC Unterstützung unabhängig vom gesamten Framework und somit in jeder JDBC basierten Anwendung genutzt werden. Durch Verwendung der Spring JDBC-API wird die Datenbanknutzung nicht nur einfacher, sondern auch sicherer. Spring übernimmt hierfür beispielsweise die Verwaltung (z.B. Öffnen, Schließen) der Datenbankverbindungen, [...]]]></description>
			<content:encoded><![CDATA[<p>Auch wenn der primäre Anwendungsbereich des Spring Frameworks in der JEE Anwendung liegt, kann die JDBC Unterstützung unabhängig vom gesamten Framework und somit in jeder JDBC basierten Anwendung genutzt werden. Durch Verwendung der Spring JDBC-API wird die Datenbanknutzung nicht nur einfacher, sondern auch sicherer.<br />
Spring übernimmt hierfür beispielsweise die Verwaltung (z.B. Öffnen, Schließen) der Datenbankverbindungen, die Vorbereitung und Ausführung von Statements sowie die Verarbeitung der Transaktionen.<br />
<span id="more-1705"></span></p>
<p>In dem Tutorial <a href="http://www.itblogging.de/java/java-mysql-jdbc-tutorial/" title="Java MySQL (JDBC) Tutorial">Java MySQL (JDBC) Tutorial</a> wurde bereits gezeigt, wie eine Datenbankverbindung zu einem MySQL Server über den &#8220;normalen&#8221; Weg hergestellt werden kann. In diesem Tutorial wird ebenfalls eine Datenbankverbindung zu einem MySQL Server hergestellt und mit der selben Ausgabe wie in dem zuvor genannten Tutorial ausgegeben, um den Aufwand der Verwendung des Spring JDBC-API einschätzen und gegenüber stellen zu können.</p>
<p>Vorweg möchte ich auf die in der Spring Dokumentation enthaltene <a href="http://static.springsource.org/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-introduction" title="Spring 3 Dokumentation - Einführung in Spring JDBC" target="_blank"><em>who does what?</em> Tabelle</a> hinweisen, die einen guten Einblick über die Zuständigkeiten der JDBC-API des Spring Frameworks zeigt.</p>
<table>
<thead>
<tr>
<td><span>Action</span>
			</td>
<td><span>Spring</span>
			</td>
<td><span>You</span>
			</td>
</tr>
</thead>
<tbody>
<tr>
<td>Define connection parameters.</td>
<td>&nbsp;</td>
<td style="text-align:center">X</td>
</tr>
<tr>
<td>Open the connection.</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Specify the SQL statement.</td>
<td>&nbsp;</td>
<td style="text-align:center">X</td>
</tr>
<tr>
<td>Declare parameters and provide parameter values</td>
<td>&nbsp;</td>
<td style="text-align:center">X</td>
</tr>
<tr>
<td>Prepare and execute the statement.</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Set up the loop to iterate through the results (if any).</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Do the work for each iteration.</td>
<td>&nbsp;</td>
<td style="text-align:center">X</td>
</tr>
<tr>
<td>Process any exception.</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Handle transactions.</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Close the connection, statement and resultset.</td>
<td style="text-align:center">X</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<h2>Spring JDBC-API &#8211; was benötigt wird</h2>
<p>Um mit der JDBC-API arbeiten zu können, müssen folgende JAR Dateien dem Classpath hinzugefügt werden.</p>
<ul>
<li>org.springframework.beans-3.1.0.M2.jar</li>
<li>org.springframework.core-3.1.0.M2.jar</li>
<li>org.springframework.jdbc-3.1.0.M2.jar</li>
<li>org.springframework.jdbc-sources-3.1.0.M2.jar</li>
<li>org.springframework.transaction-3.1.0.M2.jar</li>
<li>mysql-connector-java-5.1.14/mysql-connector-java-5.1.14-bin.jar</li>
<li>commons-dbcp-1.4/commons-dbcp-1.4.jar</li>
<li>org.springframework.context.support-3.1.0.M2.jar</li>
<li>org.springframework.context-3.1.0.M2.jar</li>
<li>commons-logging-1.1.1.jar</li>
<li>org.springframework.asm-3.1.0.M2.jar</li>
<li>org.springframework.expression-3.1.0.M2.jar</li>
<li>commons-pool-1.5.6.jar</li>
</ul>
<h2>Neues Java Projekt erstellen</h2>
<p>Ein neues Java Projekt wird unter folgendem Namen angelegt:</p>
<ul>
<li>SpringMySql</li>
</ul>
<h3>Packages hinzufügen</h3>
<p>Folgende Packages müssen erstellt werden:</p>
<ul>
<li>de.itblogging.spring.mysql</li>
<li>de.itblogging.spring.config</li>
</ul>
<h3>config Datei anlegen</h3>
<p>Folgende Datei wird in dem Package <em>de.itblogging.spring.config</em> angelegt:</p>
<ul>
<li>config.xml</li>
</ul>
<p>Ein neues Bean mit der ID <em>mysqlDataSource</em> wird in dieser Konfigurationsdatei registriert. Die Treiberklasse, die URL des MySQL Servers sowie die Benutzerdaten werden gepflegt.<br />
Hinweis: Die hier in dem Bean hardcodierten Werte können natürlich auch in einer Properties Datei ausgelagert werden. Eine weitere Option wäre die Erstellung der DataSource direkt im JavaCode. Ein Beispiel ist in der JdbcTest.java Klasse auskommentiert wiederzufinden.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd&quot;&gt;

	&lt;bean id=&quot;mysqlDataSource&quot; class=&quot;org.apache.commons.dbcp.BasicDataSource&quot;
		destroy-method=&quot;close&quot;&gt;
		&lt;property name=&quot;driverClassName&quot; value=&quot;com.mysql.jdbc.Driver&quot; /&gt;
		&lt;property name=&quot;url&quot; value=&quot;jdbc:mysql://192.168.0.110:3306/sakila&quot; /&gt;
		&lt;property name=&quot;username&quot; value=&quot;simon&quot; /&gt;
		&lt;property name=&quot;password&quot; value=&quot;toor&quot; /&gt;
	&lt;/bean&gt;

&lt;/beans&gt;
</pre>
<h3>Java Datei anlegen</h3>
<p>In dem Package <em>de.itblogging.spring.mysql</em> wird eine Testklasse angelegt:</p>
<ul>
<li>JdbcTest.java</li>
</ul>
<p>Die Klasse setzt über das JdbcTemplate ein SQL ab und schreibt das Ergebnis in die Konsole.</p>
<pre class="brush: java; title: ; notranslate">
package de.itblogging.spring.mysql;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

public class JdbcTest
{

	/**
	 * Liefert die in der config.xml Konfigurierte DataSource
	 *
	 * @return MySQL DataSource
	 */
	private DataSource getDataSource()
	{
		// Pfad zu der Konfigurationsdate
		final String CONFIGPATH = &quot;/de/itblogging/spring/config/config.xml&quot;;
		ApplicationContext ac = new ClassPathXmlApplicationContext(CONFIGPATH);
		// Bean mit der ID 'mysqlDataSource' (MySQL Konfiguration) laden
		DataSource dataSource = (DataSource) ac.getBean(&quot;mysqlDataSource&quot;);

		// Beispiel einer hardcodierten DataSource
//		DriverManagerDataSource dataSource2 = new DriverManagerDataSource();
//		dataSource2.setDriverClassName(&quot;com.mysql.jdbc.Driver&quot;);
//		dataSource2.setUrl(&quot;jdbc:mysql://192.168.0.110:3306/sakila&quot;);
//		dataSource2.setUsername(&quot;simon&quot;);
//		dataSource2.setPassword(&quot;toor&quot;);

		return dataSource;
	}

	/**
	 * Liefert ein mit der vorkonfigurierten DataSource gefülltes JdbcTemplate
	 *
	 * @return JdbcTemplate inkl. DataSource
	 */
	private JdbcTemplate getJdbcTemplate()
	{
		DataSource dataSource = getDataSource();
		return new JdbcTemplate(dataSource);
	}

	/**
	 * Setzt eine normale SQL Query ab und schreibt das Ergebnis in die Konsole
	 */
	private void simpleSqlQuery()
	{
		JdbcTemplate jdbcTemplate = getJdbcTemplate();

		String sql = &quot;SELECT first_name, last_name from actor ORDER BY last_name&quot;;
		jdbcTemplate.query(sql,
				new RowMapper&lt;String&gt;()
				{
					@Override
					public String mapRow(final ResultSet result, final int arg1)
							throws SQLException
					{
						String first_name = result.getString(&quot;first_name&quot;);
						String last_name = result.getString(2);
						String name = last_name + &quot;, &quot; + first_name;

						// Der Name wird in die Konsole geschrieben
						System.out.println(name);

						return null;
					}
				});
	}

	public static void main(String[] args)
	{
		new JdbcTest().simpleSqlQuery();
	}

}
</pre>
<h2>JdbcTest.java ausführen</h2>
<p>Das Ergebnis wird wie erwartet in der Konsole ausgegeben.</p>
<pre class="brush: bash; title: ; notranslate">
GUINESS, PENELOPE
WAHLBERG, NICK
CHASE, ED
DAVIS, JENNIFER
LOLLOBRIGIDA, JOHNNY
NICHOLSON, BETTE
...
</pre>
<h2>JDBC Helferklassen</h2>
<p>Ist einmal mit Hilfe der DataSource eine JDBC Helferklasse (in diesem Fall <em>JDBCTemplate</em>) erstellt worden, können SQL Befehle über diese Objekt abgesetzt werden. Neben dem <em>JDBCTemplate</em> gibt es viele weitere Helferklassen wie z.B.</p>
<ul>
<li>NamedParameterJdbcTemplate</li>
<li>SimpleJdbcTemplate</li>
<li>SimpleJdbcInsert</li>
<li>SimpleJdbcCall</li>
<li></li>
</ul>
<p>Einige Anwendungsbeispiele mit Hilfe dieser Helferklassen werde ich in den nächsten Artikeln aufzeigen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/spring-mysql-jdbc-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring MVC: Hello World Tutorial</title>
		<link>http://www.itblogging.de/java/spring-mvc-hello-world-tutorial/</link>
		<comments>http://www.itblogging.de/java/spring-mvc-hello-world-tutorial/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 18:06:24 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Servlets]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1650</guid>
		<description><![CDATA[Der Einstieg in neue Frameworks wie das Spring Framework ist meist am schwierigsten. Am hilfreichsten sind daher immer wieder &#8220;Hello World&#8221; Tutorials. Aufgrund dessen möchte ich genau mit diesem einfach Hello World Tutorial heute den Einstieg in das Spring MVC Konzept erleichtern. Ich werde zeigen, was konkret alles benötigt wird und wie im Detail vorgegangen [...]]]></description>
			<content:encoded><![CDATA[<p>Der Einstieg in neue Frameworks wie das Spring Framework ist meist am schwierigsten. Am hilfreichsten sind daher immer wieder &#8220;Hello World&#8221; Tutorials. Aufgrund dessen möchte ich genau mit diesem einfach Hello World Tutorial heute den Einstieg in das Spring MVC Konzept erleichtern. Ich werde zeigen, was konkret alles benötigt wird und wie im Detail vorgegangen werden muss, um das erste kleine Erfolgserlebnis hervorzurufen. Hierzu werde ich zwei unterschiedliche Wege für die erste Spring MVC Anwendung vorstellen.<br />
<span id="more-1650"></span></p>
<h2>Spring Vorbereitungen</h2>
<p>Für die Umsetzung des Hello World Tutorials wird zunächst eine Entwicklungsumgebung benötigt. Wer bereits einige Artikel auf itblogging.de gelesen hat, weiß, das ich die Eclipse Umgebung bevorzuge. Für die Softwareentwicklung mit Spring bietet SpringSource sogar eine angepasste Spring IDE, die <em>SpringSource Tool Suite</em> (Spring STS). Die Spring STS basiert auf Eclipse, beinhaltet jedoch einige spezielle Anpassungen für die Entwicklung mit Spring die die Entwicklung erleichtern. Die Spring STS wird jedoch nicht zwingend für das Arbeiten mit Spring benötigt. Optional kann auch die Eclipse IDE ohne weiteres mit den im Eclipse Marketplace befindlichen Tools / Bibliotheken erweitert werden.</p>
<h3>Download SpringSource Tool Suite</h3>
<p>Wer sich die SpringSource Tool Suite mal anschauen möchte, für den steht auf SpringSource stets die aktuellste Version bereit.<br />
<a href="http://www.springsource.com/downloads/sts" title="Download SpringSource Tool Suite">Download SpringSource Tool Suite</a></p>
<h3>Download SpringSource Tool Suite über Eclipse Marketplace</h3>
<p>Wie zuvor bereits kurz angesprochen, ist der Download der SpringSource Tool Suite und die damit verbundene Integration in die Eclipse IDE eine weitere Möglichkeit mit den Spring Tools zu arbeiten. Die Suche im Eclipse Marketplace nach &#8220;spring&#8221; listet die Möglichkeiten der Installation auf. Für Eclipse 3.7 muss entsprechend <strong>SpringSource Tool Suite for Eclipse Indigo (3.7)</strong> heruntergeladen und installiert werden.<br />
<a title="Eclipse Marketplace" class="lightbox" href="http://www.itblogging.de/wp-content/uploads/2011/09/Eclipse_Marketplace.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/Eclipse_Marketplace-349x475.png" alt="" title="Eclipse_Marketplace" width="349" height="475" class="alignnone size-medium wp-image-1657" /></a><br />
Bedingt der langen Downloadzeit über den Eclipse Marketplace würde ich den Download der SpringSource Tool Suite über die direkte <a href="http://www.springsource.com/downloads/sts" title="SpringSource Tool Suite">SpringSource Website</a> bevorzugen.</p>
<h3>Download Spring Framework</h3>
<p>Im nächsten Schritt muss das Spring Framework noch über die SpringSource Website heruntergeladen werden. In dem heruntergeladenen ZIP File befinden sich alle notwendigen JAR Dateien für die Entwicklung mit Spring. Die darin enthaltenen Libraries müssen anschließend dem Build Path hinzugefügt werden müssen.<br />
<a href="http://www.springsource.org/download" title="Download Framework">http://www.springsource.org/download</a></p>
<h3>Hello World &#8211; Spring MVC</h3>
<p>Noch ein kleiner Hinweis: Für die Spring Entwicklung aber der Version 3.0 wird mindestens Java in der Version 1.5 benötigt. Die aktuellste Version ist sowohl unter Linux als auch in der Windows Kommandozeile
<pre class="brush: plain; title: ; notranslate">java -version</pre>
<p> abzurufen.<br />
Die aktuellste Java Version gibt es auf der <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" title="Oracle Homepage">Oracle Java Downloadseite</a>.</p>
<h2>Download Tomcat</h2>
<p>In diesem Beispiel wird die Umsetzung des Spring MVC mit dem <a href="https://tomcat.apache.org/" title="Download Tomcat">Apache Tomcat 7</a> durchgeführt. </p>
<h2>Servlets und Java Server Pages</h2>
<p>Wie ein Tomcat Server eingerichtet wird und grundsätzliche eine Webanwendung mit Servlets und JSP&#8217;s aufgebaut ist, erfahrt ihr in dem Tutorial <a href="http://www.itblogging.de/java/servlets-und-java-server-pages-jsp-tutorial/" title="Servlets und Java Server Pages Tutorial">Servlets und Java Server Pages</a>.</p>
<p><span class="infobox">Der Vollständigkeitshalber möchte ich beide Varianten zur Erstellung des Spring MVC Einstiegs veranschaulichen. Über die normale Eclipse Umgebung (ohne Spring Plugin) sowie die vereinfachte Variante mit Hilfe eines <em>Spring Template Projects</em> mit Spring STS.</span></p>
<h2>Spring MVC über Eclipse EE</h2>
<p>Im ersten Schritt wird ein <em>Dynamic Web Project</em> angelegt. Wie dies im einzelnen geschieht, zeigt das <a href="http://www.itblogging.de/java/servlets-und-java-server-pages-jsp-tutorial/" title="Servlets und Java Server Pages (JSP) Tutorial">Servlets und Java Server Pages Tutorial</a>. Das Projekt trägt den Namen <em>HelloWorldSpring</em>.<br />
Angelegt, sollte in Eclipse das Web Projekt nun wie folgt aussehen (Navigator View):</p>
<p><a title="Spring Hello World Project" class="lightbox" href="http://www.itblogging.de/wp-content/uploads/2011/09/springHelloWorldProject.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/springHelloWorldProject.png" alt="" title="springHelloWorldProject" width="247" height="290" class="alignnone size-full wp-image-1678" /></a></p>
<h3>Notwendige Bibliotheken</h3>
<p>Im nächsten Schritt müssen folgende JAR Dateien in das lib Verzeichnis (WebContent => WEB-INF => lib) kopiert werden.<br />
<a class="lightbox" title="Lib Verzeichnis" href="http://www.itblogging.de/wp-content/uploads/2011/09/springLibVerzeichnis.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/springLibVerzeichnis.png" alt="Lib Verzeichnis" title="Lib Verzeichnis" width="326" height="372" class="alignnone size-full wp-image-1672" /></a><br />
All diese Dateien habe ich zu einer ZIP Datei zusammengefasst und stelle sie <a href='http://www.itblogging.de/wp-content/uploads/2011/09/springMvcHelloWorld.zip'>hier</a> zum Download bereit.</p>
<h3>web.xml</h3>
<p>Falls noch nicht vorhanden, muss die web.xml in dem Ordner <em>WebContent => WEB-INF</em> erstellt und wie folgt angepasst werden. Bitte die Hinweise den Kommentaren entnehmen.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; xmlns:web=&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;
	xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&quot;
	id=&quot;WebApp_ID&quot; version=&quot;3.0&quot;&gt;

	&lt;display-name&gt;HelloWorldSpring&lt;/display-name&gt;
	&lt;welcome-file-list&gt;
		&lt;!-- Die Willkommensseite (muss direkt in dem Ordner 'WebContent' liegen) --&gt;
		&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
	&lt;/welcome-file-list&gt;

	&lt;servlet&gt;
		&lt;!-- Registrierung des Spring DispatcherServlet --&gt;
		&lt;servlet-name&gt;helloworld&lt;/servlet-name&gt;
		&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
		&lt;!-- Die Registrierung bereits während des Startvorgangs laden --&gt;
		&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
	&lt;/servlet&gt;

	&lt;servlet-mapping&gt;
		&lt;servlet-name&gt;helloworld&lt;/servlet-name&gt;
		&lt;!-- Alle Anfragen ( / ) über das helloworld Servlet bearbeiten --&gt;
		&lt;url-pattern&gt;/&lt;/url-pattern&gt;
	&lt;/servlet-mapping&gt;

&lt;/web-app&gt;
</pre>
<h3>helloworld-servlet.xml</h3>
<p>In der web.xml haben wir dem Servlet den Namen &#8220;helloworld&#8221; gegeben. Das DispatcherServlet sucht in dem WEB-INF Ordner -falls der Pfad nicht extra angegeben wird- immer nach einer Datei mit dem Namen [servletname]-servlet.xml. In dieser Datei werden weitere Einstellungen für Spring vorgenommen. Zunächst muss also die Datei <em>helloworld-servlet.xml</em> in dem WEB-INF Ordner angelegt und mit folgendem Code gefüllt werden.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:p=&quot;http://www.springframework.org/schema/p&quot;
	xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
	xsi:schemaLocation=&quot;

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd&quot;&gt;

	&lt;!-- Spring sucht in dem angegebenen Package nach Controllern --&gt;
	&lt;context:component-scan base-package=&quot;de.itblogging.spring.helloworld&quot; /&gt;

	&lt;bean id=&quot;viewResolver&quot;
		class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;
		&lt;property name=&quot;viewClass&quot;
			value=&quot;org.springframework.web.servlet.view.JstlView&quot; /&gt;
		&lt;!-- Die Views müssen alle in dem 'views' Ordner liegen ... --&gt;
		&lt;property name=&quot;prefix&quot; value=&quot;/WEB-INF/views/&quot; /&gt;
		&lt;!-- ... und mit .jsp enden --&gt;
		&lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot; /&gt;
	&lt;/bean&gt;

&lt;/beans&gt;
</pre>
<h3>HelloWorldController.java</h3>
<p>In dem component-scan tag in der helloworld-servlet.xml Datei wurde ein Pfad angegeben. Dies ist der Pfad, an dem Spring automatisch nach Controller Klassen sucht, in diesem Fall <em>de.itblogging.spring.helloworld</em>.<br />
<a class="lightbox" title="HelloWorldController.java" href="http://www.itblogging.de/wp-content/uploads/2011/09/HelloWorldController.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/HelloWorldController.png" alt="HelloWorldController" title="HelloWorldController" width="288" height="133" class="alignnone size-full wp-image-1676" /></a></p>
<pre class="brush: java; title: ; notranslate">
package de.itblogging.spring.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController
{

	@RequestMapping(&quot;/helloWorld&quot;)
	public ModelAndView helloWorld()
	{
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName(&quot;helloWorld&quot;);
		String message = &quot;Geschafft! Ich bin dein erstes Spring MVC Erfolgserlebnis! : - ) &quot;;
		modelAndView.addObject(&quot;message&quot;, message);
		return modelAndView;
	}

}
</pre>
<h3>index.jsp</h3>
<p>Ebenfalls wird in der web.xml als Startseite auf eine index.jsp verwiesen. Diese muss in dem Ordner <em>WebContent</em> liegen. Die index.jsp könnte wie folgt aussehen:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;title&gt;itblogging.de - Spring Tutorial&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Spring MVC - Hello World Tutorial&lt;/h2&gt;
Jetzt geht es los. Wir rufen den &lt;a href=&quot;helloWorld&quot;&gt;HelloWorldController&lt;/a&gt; auf.
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>helloWorld.jsp</h3>
<p>Zu guter Letzt wird noch die View benötigt, die die Mitteilung des Spring Controllers ausgibt. Hierzu wird eine Datei <em>helloWorld.jsp</em> in dem Ordner WEB-INF => views angelegt. </p>
<p><a class="lightbox" title="helloWorld.jsp" href="http://www.itblogging.de/wp-content/uploads/2011/09/helloWorldJsp.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/helloWorldJsp.png" alt="helloWorld.jsp" title="helloWorld.jsp" width="203" height="198" class="alignnone size-full wp-image-1683" /></a></p>
<p>Mit <em>${message}</em> wird der zuvor in das Model geschriebene Parameter ausgelesen und in der View eingesetzt.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;title&gt;itblogging.de - Spring Tutorial&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h2&gt;Ich wurde von einem Controller aufgerufen&lt;/h2&gt;

Der Controller hat mir folgende Nachricht mitgeteilt:
${message}

&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>Tomcat starten</h3>
<p>Zu guter Letzt muss lediglich der Tomcat Server gestartet werden.<br />
<a class="lightbox" title="Tomcat 7 starten" href="http://www.itblogging.de/wp-content/uploads/2011/09/Run-On-Server-_039.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/Run-On-Server-_039-368x475.png" alt="Tomcat 7 starten" title="Tomcat 7 starten" width="368" height="475" class="alignnone size-medium wp-image-1684" /></a></p>
<p>Ist der Tomcat Server einmal gestartet, kann unter <em>http://localhost:8080/HelloWorldSpring/</em> die Webanwendung aufgerufen werden. Der Inhalt der index.jsp begrüßt uns und das Tutorial ist somit erfolgreich abgeschlossen worden.<br />
<a class="lightbox" title="http://localhost:8080/HelloWorldSpring/" href="http://www.itblogging.de/wp-content/uploads/2011/09/helloWorldspring.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/helloWorldspring.png" alt="http://localhost:8080/HelloWorldSpring/" title="http://localhost:8080/HelloWorldSpring/" width="463" height="166" class="alignnone size-full wp-image-1685" /></a></p>
<h2>Spring MVC über Spring STS</h2>
<p>Nachdem die Spring MVC Einführung in der Eclipse IDE (dies würde so natürlich auch in der Spring STS klappen) durchgeführt wurde, möchte ich an dieser Stelle noch den einfachen schnellen Weg über die Spring STS vorstellen.<br />
Die Spring STS liefert für den schnellen Einstieg in das Spring Framework einige Template Projekte mit. So auch für Spring MVC. </p>
<h3>Spring Template Project anlegen</h3>
<p>In dem Spring STS Menü wird unter <em>New => Other => SpringSource Tool Suite => Spring Template Project</em> ein neues Template Projekt angelegt.<br />
<a class="lightbox" title="Spring Template Project" href="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_Template_Project.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_Template_Project-475x452.png" alt="Spring Template Project" title="Spring Template Project" width="475" height="452" class="alignnone size-medium wp-image-1687" /></a> </p>
<p>Anschließend muss das <em>Spring MVC Project</em> ausgewählt werden.<br />
<a class="lightbox" title="Spring MVC Project" href="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_MVC_Project.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_MVC_Project-475x466.png" alt="Spring MVC Project" title="Spring MVC Project" width="475" height="466" class="alignnone size-medium wp-image-1688" /></a></p>
<p>Bei der ersten Verwendung des Spring MVC Projects fragt die Spring STS, ob sie die notwendigen Dateien herunterladen darf. Um fortzufahren, muss dies mit <em>YES</em> bestätigt werden.<br />
Im nächsten Schritt wird der Name sowie die Projekthierarchie angegeben. Die Namensgebung wird analog zu der ersten Variante des Spring MVC vergeben.<br />
<a class="lightbox" title="Spring MVC Project naming" href="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_MVC_Project2.png"><img src="http://www.itblogging.de/wp-content/uploads/2011/09/Spring_MVC_Project2-475x466.png" alt="Spring MVC Project naming" title="Spring MVC Project naming" width="475" height="466" class="alignnone size-medium wp-image-1689" /></a></p>
<p>Mit <em>Finish</em> wird von der Spring STS ein neues Projekt angelegt. Das Hinzufügen von JAR Dateien oder das Anlegen des Controllers, der Views oder die Servlet Einstellungen wurde bereits von der Spring STS übernommen. </p>
<h3>Tomcat starten</h3>
<p>Nachdem die Anwendung über den Tomcat Server gestartet wurde, kann ebenfalls unter <em>http://localhost:8080/HelloWorldSpring/</em> die Webanwendung abgerufen werden. Ein kleiner Text mit der aktuellen Uhrzeit wird ausgegeben.</p>
<h2>Weitere Informationen</h2>
<p>Da Spring MVC weitaus komplizierter werden kann als es in diesem Hello World Tutorial gezeigt wurde, möchte ich für viele weitere Informationen die offizielle Spring Dokumentation empfehlen:<br />
<a href="http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html" title="Spring Dokumentation">Web MVC framework</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/spring-mvc-hello-world-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crontab</title>
		<link>http://www.itblogging.de/linux/crontab/</link>
		<comments>http://www.itblogging.de/linux/crontab/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 20:48:19 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1611</guid>
		<description><![CDATA[Der Cron Daemon ist ein Unix Dienst, welcher Skripte oder Programme zu beliebigen Zeiten in gewünschten Zyklen ausführt. Die auszuführenden Befehle werden in einer Tabelle, der sogenannten crontab hinterlegt. Im Systemhintergrund überprüft ein Service permanent nach auszuführenden Tätigkeiten. Hierbei wird zwischen Systemweiten Crontabs, als auch benutzerdefinierten Crontabs unterschieden. Ein möglicher Anwendungsfall wäre zum Beispiel die [...]]]></description>
			<content:encoded><![CDATA[<p>Der Cron Daemon ist ein Unix Dienst, welcher Skripte oder Programme zu beliebigen Zeiten in gewünschten Zyklen ausführt. Die auszuführenden Befehle werden in einer Tabelle, der sogenannten crontab hinterlegt. Im Systemhintergrund überprüft ein Service permanent nach auszuführenden Tätigkeiten. Hierbei wird zwischen Systemweiten Crontabs, als auch benutzerdefinierten Crontabs unterschieden.<br />
Ein möglicher Anwendungsfall wäre zum Beispiel die tägliche Archivierung wichtiger Dokumente. Zur Demonstration wird ein Crontab angelegt, der minütlich das Datum in eine Textdatei schreibt.<br />
<span id="more-1611"></span></p>
<h2>Aufbau der Crontab Tabelle</h2>
<p>Die Crontab Tabelle besteht insgesamt aus sechs Spalten, wobei die ersten fünf Spaltenangaben zur zeitlichen Ausführung des in der sechsten Spalte enthaltenen Befehls verantwortlich sind. Jede Spalte wird durch ein Leerzeichen oder ein Tab getrennt.</p>
<pre class="brush: plain; title: ; notranslate">
*   *   *   *   *  auszuführender Befehl
|   |   |   |   |
|   |   |   |   |
|   |   |   |    ----- Wochentag (0 - 7)
|   |   |   |     (0 und 7 ist der Sonntag)
|   |   |    ------- Monat (1 - 12)
|   |    --------- Tag (1 - 31)
|    ----------- Stunde (0 - 23)
 ------------- Minute (0 - 59)
</pre>
<p>Ein Sternchen steht für jede mögliche Variante einer Zeitangabe. Sollte als Beispiel ein Sternchen für die Tageinheit angegeben werden, wird der Befehl an jedem Tag ausgeführt. Analog verhält sich das Sternchen bei den anderen Spalten (jedes Jahr, jeder Monat &#8230;).<br />
Für die Monate sowie für die Wochentage können statt der Zahlen, auch die in englisch gebräuchlichen Namen verwendet werden. Hierbei dürfen lediglich die ersten drei Buchstaben des Wortes verwendet werden. So kann beispielsweise anstatt des zweiten Wochentags (Zahl 1) auch <em>mon</em> geschrieben werden (der Wochentag beginnt bei crontab immer Sonntags (0)).<br />
Ebenfalls ist es möglich ausgewählte Wochentage anzugeben. Der Wert 1-5 (wichtig: ohne Leerzeichen) würde bedeuten, das der Befehl von Montag bis Freitag ausgeführt wird, nicht jedoch am Wochenende. Der Wert 1,3,5 (wichtig: ohne Leerzeichen) führt den Befehl am Montag, Mittwoch und Freitag aus. Gleiches gilt natürlich auch für die anderen Werte (Monate, Jahre, ..).<br />
Statt der Zahlen oder aber auch die Verwendung der ersten drei Buchstaben des Wochentages, können für die ersten fünf Felder auch bestimmte Schlüsselwörter angegeben werden.</p>
<table>
<thead>
<tr>
<td><span>Wert</span></td>
<td><span>Resultat</span></td>
<td><span>Alternativ</span></td>
</tr>
</thead>
<tbody>
<tr>
<td>@hourly</td>
<td>Stündlich</td>
<td>0 * * * *</td>
</tr>
<tr>
<td>@midnight</td>
<td>Täglich</td>
<td>0 0 * * *</td>
</tr>
<tr>
<td>@daily</td>
<td>Täglich</td>
<td>0 0 * * *</td>
</tr>
<tr>
<td>@weekly</td>
<td>Wöchentlich</td>
<td>0 0 * * 0</td>
</tr>
<tr>
<td>@monthly </td>
<td>Monatlich</td>
<td>0 0 1 * *</td>
</tr>
<tr>
<td>@annually </td>
<td>Jährlich</td>
<td>0 0 1 1 *</td>
</tr>
<tr>
<td>@yearly </td>
<td>Jährlich</td>
<td>0 0 1 1 *</td>
</tr>
<tr>
<td>@reboot</td>
<td>Nach jedem Neustart</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<h3>Weitere Crontab Beispiele</h3>
<p>Hier nun ein paar konkrete Beispiele einiger Zeitangaben eines Crontabs.</p>
<table>
<thead>
<tr>
<td><span>Cron Beispiel</span></td>
<td><span>Resultat</span></td>
</tr>
</thead>
<tbody>
<tr>
<td>15 * * * *</td>
<td>Immer 15 Minuten nach einer vollen Stunde</td>
</tr>
<tr>
<td>*/15 * * * *</td>
<td>Alle 15 Minuten</td>
</tr>
<tr>
<td>15 0 * * *</td>
<td>Jeden Tag 15 Minuten nach Mitternacht</td>
</tr>
<tr>
<td>15 20 10 * *</td>
<td>Jeden 10ten Tag eines Monats um 20:15 Uhr</td>
</tr>
<tr>
<td>0 6 * * 1-5</td>
<td>Jeder Wochentag um sechs Uhr morgens</td>
</tr>
<tr>
<td>6 6 * * tue</td>
<td>Jeden Dienstag um sechs Minuten nach sechs</td>
</tr>
</tbody>
</table>
<p>Wenn Ihr der Meinung seid, das ich wichtige Beispiele vergessen habe, dann bitte ich euch dies in einen Kommentar zu hinterlassen. Ich werde die Tabelle anschließend komplettieren. </p>
<h3>Wichtiger Hinweis</h3>
<p>Am Ende der Crontab Tabelle muss eine Leerzeile eingefügt werden!</p>
<h2>Crontab einrichten</h2>
<p>Um einen benutzerdefinierten crontab einzurichten, muss folgender Unix Befehl in einen Terminal eingegeben werden:</p>
<pre class="brush: plain; title: ; notranslate">
crontab -e
</pre>
<p>Der Parameter <em>-e</em> veranlasst das Erstellen eines neuen Crontabs. Wird dieser Befehl zum ersten Mal aufgerufen, fragt in der Regel der Terminal nach einen gewünschten Editor. Unter Ubuntu stehen hier <em>ed</em>, <em>nano</em> und <em>vim</em> standardmäßig zur Verfügung.<br />
Anschließend öffnet sich eine Datei, in der nochmals ein paar einführende Worte zu <em>cron</em> verloren werden. Die am Zeilenanfang befindlichen Hashes (#) signalisieren, das es sich bei den jeweiligen Zeilen um Kommentarzeilen handelt. Wer diese Informationen nicht weiter benötigt, kann das Datenblatt selbstverständlich leeren.</p>
<h2>Benutzerdefinierter Crontab</h2>
<p>Der Besitzer des neu erstellten Crontabs ist immer der eingeloggten User. Möchte man beispielsweise für einen andere User einen Crontab anlegen, geschieht dies über einen zusätzlichen siebten Parameter. Der Username wird in diesem Fall <strong>nach</strong> der Zeitangabe und <strong>vor</strong> dem auszuführenden Befehl angegeben (im folgenden mit <strong>&lt;username&gt;</strong> gekennzeichnet).</p>
<pre class="brush: plain; title: ; notranslate">
* * * * * &lt;username&gt; Befehl
</pre>
<h3>Testdatei anlegen</h3>
<p>Zur Demonstration des Crontabs wird eine Datei mit dem Namen <em>time.sh</em> angelegt. Es wird der einzeilige Unix Befehl </p>
<pre class="brush: plain; title: ; notranslate">
date
</pre>
<p>als Inhalt gespeichert. <em>date</em> gibt das aktuelle Datum inklusive Zeit aus. Diese Datei soll nun minütlich ausgeführt und das Ergebnis in eine Textdatei <em>ergebnis.txt</em> gespeichert werden. Ein neuer Crontab wird wie folgt angelegt:</p>
<pre class="brush: plain; title: ; notranslate">
*/1 * * * * /pfad/zur/time.sh &gt;&gt; pfad/zur/ergebnis.txt
</pre>
<p>Nach dem Speichern des Crontabs, wird die Zeit in Minutentakt in die Datei <em>ergebnis.txt</em> geschrieben.</p>
<p>Hinweis: Es kann gut möglich sein, dass das Recht der Datei <em>time.sh</em> noch geändert werden muss (chmod 755 time.sh).</p>
<p>Alternativ würde in diesem einfachen Fall auch folgender Befehl für das selbe Resultat sorgen:</p>
<pre class="brush: plain; title: ; notranslate">
*/1 * * * * date &gt;&gt; pfad/zur/ergebnis.txt
</pre>
<h2>Crontab Liste anzeigen</h2>
<p>Der Parameter <em>-l</em> listet die Crontabelle mit allen Crontabs auf.</p>
<pre class="brush: plain; title: ; notranslate">
crontab -l
</pre>
<p>Benutzerdefinierte Crontabs können über den Parameter <em>-u &lt;username&gt;</em> angezeigt werden:</p>
<pre class="brush: plain; title: ; notranslate">
crontab -u &lt;username&gt; -l
</pre>
<h2>E-Mail Benachrichtigung</h2>
<p>Als Standard wird die Ausgabe eines Skriptes an die im System lokal hinterlegte E-Mail Adresse gesendet. Wenn dies nicht erwünscht ist, oder aber das Ergebnis an eine andere beliebige Adresse versendet werden soll, gibt es auch hierfür eine passende Lösung.</p>
<h3>E-Mail Benachrichtigung deaktivieren</h3>
<pre class="brush: plain; title: ; notranslate">
*/1 * * * * pfad/zu/meinem/skript.sh &gt; /dev/null 2&gt; &amp;1
</pre>
<h3>E-Mail Benachrichtigung an eine beliebige Adresse</h3>
<p>Über die Angabe <em>MAILTO</em> kann das Ergebnis des Skriptes an eine beliebige Adresse versendet werden.</p>
<pre class="brush: plain; title: ; notranslate">
MAILTO=&quot;meine-adresse@anbieter.de
*/1 * * * * pfad/zu/meinem/skript.sh
</pre>
<h2>Crontab löschen</h2>
<p>Der <em>-r</em> Paramter löscht alle Crontabs.</p>
<pre class="brush: plain; title: ; notranslate">
crontab -r
</pre>
<p>Sollen lediglich benutzerspezifische Crontabs gelöscht werden, passiert dies <em>-u &lt;username&gt;</em> mit:</p>
<pre class="brush: plain; title: ; notranslate">
crontab -r -u &lt;username&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/crontab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Root Passwort vergessen! Und nun?</title>
		<link>http://www.itblogging.de/linux/root-passwort-vergessen/</link>
		<comments>http://www.itblogging.de/linux/root-passwort-vergessen/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 00:41:32 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1582</guid>
		<description><![CDATA[Wem ist das heutzutage noch nicht passiert? Bei den unzähligen Passwörtern die sich bereits ein Otto-Normal Verbraucher für den Umgang im Internet merken muss, wundert es nicht wenn selbst das eigene root Kennwort mal vergessen wird. Nur leider gibt es bei solch einer Lappalie keinen Webserver auf der anderen Seite, welcher einem vielleicht auf die [...]]]></description>
			<content:encoded><![CDATA[<p>Wem ist das heutzutage noch nicht passiert? Bei den unzähligen Passwörtern die sich bereits ein Otto-Normal Verbraucher für den Umgang im Internet merken muss, wundert es nicht wenn selbst das eigene root Kennwort mal vergessen wird. Nur leider gibt es bei solch einer Lappalie keinen Webserver auf der anderen Seite, welcher einem vielleicht auf die hinterlegte E-Mail Adresse das vergessene Kennwort zukommen lässt oder aber auch direkt ein neues temporäres Passwort erstellt. Bei dem Verlust des root Passworts ist zwar etwas mehr Aufwand notwendig, jedoch ist auch dieser sehr überschaubar und auch ohne große Unix Kenntnisse zu stemmen.<br />
<span id="more-1582"></span></p>
<p>Eines Vorweg: Gibt es einen weiteren Benutzer mit root Rechten in dem System, kann mit diesem das vergessene root Passwort mit Hilfe des Unix Befehls <strong><em>passwd root</em></strong> geändert werden.<br />
Für das Zurücksetzen des vergessenen Benutzerpasswortes gibt es verschiedene Ansätze. Zum einen ist es möglich, das Passwort über den Wiederherstellungsmodus zurück zu setzen oder aber auch über den Boot-Loader an entsprechender Stelle zu ändern. Den nun mir gezeigten  Lösungsansatz halte ich jedoch für den einfachsten und überschaubarsten.<br />
Ausgangspunkt ist ein ausgeschalteter Computer mit einem Linux Betriebssystem, bei dem logischerweise das Root Passwort vergessen wurde. Ein Nicht-Root Authentifizierter User ist zwar hilfreich um an die meisten Daten auf dem Betriebssystem zu gelangen, jedoch ist es mit solch einem Benutzer nicht möglich das vergessene root Passwort zurückzusetzen, da die Bearbeitung / Manipulation bestimmter Dateien wiederum root Rechte benötigt.</p>
<p>Der einfachste Weg das vergessene root Passwort zurückzusetzen, ist die Verwendung einer Live-CD. Eine Live-CD ist eine CD, mit dessen Hilfe <em>on-the-fly</em> ein beliebiges (in diesem Fall Linux) Betriebssystem gestartet werden kann (Heutzutage sind die meisten Linux Betriebssystem CD&#8217;s Live-CD&#8217;s). Hierzu ist es lediglich notwendig, dem PC während des Start Vorganges mitzuteilen, das dieser von der eingelegte CD booten soll. Oft ist das Starten von CD als Standard in dem BIOS eingestellt, andernfalls ist eine Anpassung in den jeweiligen Einstellungen notwendig. </p>
<h2>Live-CD</h2>
<p>Wer beispielsweise bereits eine Ubuntu CD (oder ein anderes Linux Derivat wie z.B. Knoppix, Damn Small Linux, Kubuntu, &#8230;) in der Nähe liegen hat, darf gerne auf diese zurückgreifen. Alternativ kann die aktuellste Ubuntu Version auf der offiziellen Ubuntu Homepage heruntergeladen werden.</p>
<h3>Download Ubuntu</h3>
<p><a href="http://www.ubuntu.com/download/ubuntu/download" title="Ubuntu Downloadseite">http://www.ubuntu.com/download/ubuntu/download</a><br />
Das Image muss lediglich auf ein Rohling gepresst werden um das Betriebssystem anschließend von der CD starten zu können.</p>
<h2>Terminal</h2>
<p>Nach erfolgreichem booten der Live-CD ist es zunächst einmal notwendig -wenn nicht bereits in einem Terminal gestartet-, einen Terminal zu öffnen. Im nächsten Schritt muss die Partition um die es sich handelt, in das Live-System eingebunden werden. Damit auch die richtige Partition aus der Partitionstabelle ausgelesen und später in das Live-System eingebunden wird, ist es zunächst notwendig mit folgendem Befehl die Partitionstabelle auszulesen.</p>
<pre class="brush: bash; title: ; notranslate">
sudo fdisk -l
</pre>
<p>Bei der Ausführung von fdisk unbedingt darauf achten, diesen Befehl mit <em>sudo</em> (oder anderen <em>root</em> Rechten) abzusetzen, da sonst eine leere Ergebnismenge zurückgeliefert wird.</p>
<p>Eine mögliche Partitionstabelle könnte wie folgt aussehen:</p>
<pre class="brush: bash; title: ; notranslate">
Platte /dev/sda: 500.1 GByte, 500107862016 Byte
255 Köpfe, 63 Sektoren/Spur, 60801 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfbc39217

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1   *           1       13055   104864256    7  HPFS/NTFS
/dev/sda2           13056       19321    50330624   83  Linux
/dev/sda3           19322       19582     2096482+  82  Linux Swap / Solaris
/dev/sda4           19583       60801   331091587    5  Erweiterte
/dev/sda5           19583       45690   209712478+   7  HPFS/NTFS
/dev/sda6           45691       60801   121379076    7  HPFS/NTFS
</pre>
<h3>Partition mounten</h3>
<p>Im nächsten Schritt muss die Linux Partition (in diesem Beispiel <strong>/dev/sda2</strong>) in das Live System eingebunden werden. Dies passiert über den den Unix Befehl <em>mount</em>.<br />
Hinweis: SATA Festplatten werden mit <em>sda</em> gekennzeichnet, IDE Festplatten in der Regel mit <em>hda</em>.</p>
<pre class="brush: bash; title: ; notranslate">
mount /dev/sda2 /mnt/
</pre>
<p>Das Benutzerbetriebssystem befindet sich nun in der Ordnerhierarchie des Live Systems. Alle unter /dev/mnt/ angesprochenen Ordner betreffen das Betriebssystem, bei welchem das root Passwort abhanden gekommen ist. </p>
<h3>Möglichkeit 1: chroot</h3>
<p>Mit dem Unix Befehl <em>passwd</em> das vergessene Passwort als neuer root (<em>chroot</em>) neu vergeben:</p>
<pre class="brush: bash; title: ; notranslate">
chroot /mnt
passwd
&lt;Passwort ändern&gt;
</pre>
<h3>Möglichkeit 2: /etc/shadow</h3>
<p>Die /etc/shadow Textdatei beinhaltet hoch sensible Daten über die im System registrierten Benutzer, weshalb diese Datei nur mit root Rechten bearbeitet werden kann.<br />
Die /etc/shadow Datei ist eine zeilenweise mit Doppelpunkten getrennte Textdatei, die wie folgt aufgebaut:</p>
<h4>Aufbau der /etc/shadow</h4>
<pre class="brush: bash; title: ; notranslate">
&lt;login name&gt;:&lt;encrypted password&gt;:&lt;date of last password change&gt;:&lt;minimum password age&gt;:&lt;maximum password age&gt;:&lt;password warning period&gt;:&lt;password inactivity period&gt;:&lt;account expiration date&gt;:&lt;reserved field&gt;
</pre>
<h4>/etc/shadow bearbeiten</h4>
<p>Zum bearbeiten der /etc/shadow benutzen wir den Standard Texteditor <em>vi</em>.</p>
<pre class="brush: bash; title: ; notranslate">
sudo vi /etc/shadow
</pre>
<p>Zum Löschen des root Passworts wird folgende Zeile wie folgt geändert.</p>
<p>Vorher (mit Beispiel Passwort):</p>
<pre class="brush: bash; title: ; notranslate">root:$6$bHsXq2UD$5ox1BKQ9y/Fa2aVDAMuic2tRiZrNNm2ibg1.m7SQtJ7eJVUhPIkS3T6GET/13yE8M7rO9nsHaFj2lFI5rgA0a0:15197:0:99999:7:::</pre>
<p>Nachher:</p>
<pre class="brush: bash; title: ; notranslate">root::15197:0:99999:7:::</pre>
<p>Das Kennwort des root Benutzers wird schlicht und einfach aus der Datei gelöscht.</p>
<h2>Reboot</h2>
<p>Nachdem die shadow-Datei erfolgreich manipuliert wurde, kann das Betriebssystem nun ganz normal gestartet werden. Der root Benutzer beantwortet zum Anmelden die Passwortabfrage mit einem einfachen Enter (leeres Passwort).</p>
<p>Hinweis: Der root Benutzer muss immer mit einem Passwort abgesichert sein, damit potentiellen Angreifer nicht ohne Weiteres den PC mit root Rechten bedienen können. Daher bitte unmittelbar nach dem Login das Passwort des Root Benutzers ändern. In der Konsole geht dies am einfachsten mit dem Unix Befehl <em>passwd</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/root-passwort-vergessen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google+: 150 Einladungen zu vergeben</title>
		<link>http://www.itblogging.de/news/google-150-einladungen-zu-vergeben/</link>
		<comments>http://www.itblogging.de/news/google-150-einladungen-zu-vergeben/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 10:02:43 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1575</guid>
		<description><![CDATA[Googles neues soziales Netzwerk Google+ soll nach einigen Hochrechnungen inzwischen über 25 Millionen Mitglieder in Ihrer Datenbank hinterlegt haben. Und das, obwohl sich Google+ noch in einer geschlossenen Beta Phase befindet. Obwohl Google+ nicht für jedermann zugänglich ist, hat das neue soziale Netzwerk am schnellsten die Marke von 25 Millionen Mitglieder gegenüber allen anderen sozialen [...]]]></description>
			<content:encoded><![CDATA[<p>Googles neues soziales Netzwerk Google+ soll nach einigen Hochrechnungen inzwischen über 25 Millionen Mitglieder in Ihrer Datenbank hinterlegt haben. Und das, obwohl sich Google+ noch in einer geschlossenen Beta Phase befindet. Obwohl Google+ nicht für jedermann zugänglich ist, hat das neue soziale Netzwerk am schnellsten die Marke von 25 Millionen Mitglieder gegenüber allen anderen sozialen Netzwerken durchbrochen.<br />
<span id="more-1575"></span><br />
Eine Millionen deutsche sollen es sogar sein. Die meisten Mitglieder kommen -wie nicht anders zu erwarten- aus den vereinigten Staaten. Trotz der &#8220;Beta Phase&#8221; hat nun jedes Google+ Mitglied die Möglichkeit, 150 Freunde in das soziale Netzwerk einzuladen. Diese Möglichkeit nutze ich, um den Lesern von itblogging den Zugang zu Google+ zu ermöglichen. Hierbei gilt: First-come, first-served.</p>
<p>Wer also noch nicht bei Google+ angemeldet ist und sich bereits seit längerer Zeit nach einer Anmeldung umschaut, hat nun über folgenden Link die Möglichkeit die lange Warteperiode zu beenden.</p>
<p><a href="https://plus.google.com/_/notifications/ngemlink?path=%2F%3Fgpinv%3DXYN-9i-3WDM%3ARKPER97dHAo" title="Google+ Einladung">https://plus.google.com/_/notifications/ngemlink?path=%2F%3Fgpinv%3DXYN-9i-3WDM%3ARKPER97dHAo</a></p>
<p>Viel Spaß in der neuen sozialen Welt wünscht,<br />
itblogging.de</p>
<p><strong id="update">Update</strong>: In den letzten drei Monaten benötigten User, die dem neuen sozialen Netzwerk Google+ beitreten wollten, eine Einladung. Ab heute öffnet Google die Pforten für jedermann. Eine Einladung ist somit nicht mehr nötig.<br />
Seit dem Start von Google+ sind circa <a href="http://www.google.com/support/plus/bin/static.py?hl=en&#038;page=release_notes.cs&#038;rd=1" title="100 Google+ Änderungen">100 Änderungen</a> vorgenommen worden, ein Ende ist jedoch noch lange nicht in Sicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/news/google-150-einladungen-zu-vergeben/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 5/12 queries in 0.383 seconds using disk: basic

Served from: www.itblogging.de @ 2012-02-07 08:37:09 -->
