<?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>Java User Group Münster &#187; maven</title>
	<atom:link href="http://www.jug-muenster.de/tag/maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jug-muenster.de</link>
	<description>Java User Group für Münster und das Münsterland</description>
	<lastBuildDate>Sat, 04 Feb 2012 16:42:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
	<atom:link rel="hub" href="http://superfeedr.com/hubbub" />
			<item>
		<title>Java Testing best practice: Projekt Organisation</title>
		<link>http://www.jug-muenster.de/java-testing-best-practice-projekt-organisation-941/</link>
		<comments>http://www.jug-muenster.de/java-testing-best-practice-projekt-organisation-941/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 15:43:20 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Contributed]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://www.jug-muenster.de/?p=941</guid>
		<description><![CDATA[Im folgenden wird beschrieben, wie man sein Projekt so strukturieren kann, dass auf der einen Seite das Testen erleichtert wird, auf der anderen Seite die Tests vom produktiven Java Quellcode separiert werden. Das erleichtert zum Beispiel die Paketierung zur Auslieferung an Kunden, die lediglich den produktiven Quellcode erhalten sollen. Bei einigen Entwicklungsumgebungen, wie z.B. Netbeans, [...]
Weitere Artikel:<ol>
<li><a href='http://www.jug-muenster.de/swingdemo-projekt-175/' rel='bookmark' title='SwingDemo Projekt'>SwingDemo Projekt</a></li>
<li><a href='http://www.jug-muenster.de/modular-java-238/' rel='bookmark' title='Modular Java (Buch)'>Modular Java (Buch)</a></li>
<li><a href='http://www.jug-muenster.de/java-ee-summit-berlin-1176/' rel='bookmark' title='Java EE Summit Berlin'>Java EE Summit Berlin</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><!--S-ButtonZ 1.1.5 End--><p>Im folgenden wird beschrieben, wie man sein Projekt so strukturieren kann, dass auf der einen Seite das Testen erleichtert wird, auf der anderen Seite die Tests vom produktiven Java Quellcode separiert werden. Das erleichtert zum Beispiel die Paketierung zur Auslieferung an Kunden, die lediglich den produktiven Quellcode erhalten sollen.</p>
<p>Bei einigen Entwicklungsumgebungen, wie z.B. Netbeans, ist bereits bei einem leeren Java Projekt eine Separierung von Test Quellcode und Java Quellcode vorgesehen: Es gibt einen Ordner für &#8220;Test Packages&#8221; und einen für &#8220;Source Packages&#8221;. Im Dateisystem werden diese auf die Ordner &#8220;src&#8221; und &#8220;test&#8221; entsprechend abgebildet. Bei der Tastenausführung werden aus beiden Verzeichnissen die Quellen übersetzt und die Ergebnisse zusammen geführt. Bei dem von Netbeans standardmäßig erstellten Buildfile kann man auch von der Kommandozeile mittels &#8220;ant test&#8221; die Tests ausführen, bei &#8220;ant jar&#8221; wird eine JAR Datei (im &#8220;dist&#8221; Verzeichnis) erstellt, die lediglich den produktiven Code enthält.<span id="more-941"></span><a href="http://www.jug-muenster.de/wp-content/uploads/2011/01/netbeans-struktur.png" rel="lightbox[941]"><img class="alignnone size-medium wp-image-942" title="netbeans-struktur" src="http://www.jug-muenster.de/wp-content/uploads/2011/01/netbeans-struktur-300x185.png" alt="" width="300" height="185" /></a></p>
<p>Durch das ant Buildfile und die Projektstruktur ist damit ein Netbeans Projekt von Haus aus direkt für eine Continuos Integration Umgebung optimal vorbereitet.</p>
<p>Eclipse ist noch nicht ganz soweit, jedoch sollte man seine Projektstruktur auch hier so aufbauen: Der Code ist klar getrennt, verwendet man eine parallele Paket Struktur, können auch Methoden die &#8220;protected&#8221; oder &#8220;default&#8221; Sichtbarkeit haben, einfach getestet werden. So vermeidet man zu grob geschnittene Tests (nur &#8220;public&#8221; Methoden testen) bzw. unnötige Erweiterung der Sichtbarkeit, in dem man Methoden &#8220;public&#8221; macht, nur um sie testen zu können.</p>
<p>Das ganze ist sehr einfach: Startet man ein neues Projekt, so kann man bei der Einrichtung direkt ueber &#8220;create new source folder&#8221; neben &#8220;src&#8221; einen &#8220;test&#8221; Source-Folder anlegen.</p>
<p><a href="http://www.jug-muenster.de/wp-content/uploads/2011/01/eclipse-test-source-folder.png" rel="lightbox[941]"><img class="alignnone size-medium wp-image-943" title="eclipse-test-source-folder" src="http://www.jug-muenster.de/wp-content/uploads/2011/01/eclipse-test-source-folder-217x300.png" alt="" width="217" height="300" /></a></p>
<p>Eclipse fügt dann entsprechend alle übersetzten Class Dateien, in diesem Fall &#8220;Sample&#8221; aus den produktiven Sourcen und &#8220;SampleTest&#8221; aus den Test Quellen im &#8220;bin&#8221; Verzeichnis zusammen:</p>
<p><a href="http://www.jug-muenster.de/wp-content/uploads/2011/01/kompilierte-klassen.png" rel="lightbox[941]"><img class="alignnone size-full wp-image-944" title="kompilierte-klassen" src="http://www.jug-muenster.de/wp-content/uploads/2011/01/kompilierte-klassen.png" alt="" width="289" height="165" /></a></p>
<p>Bei Eclipse muss man sich noch selber um ein Build-System kümmern, wenn man von der IDE unabhängig bauen möchte &#8211; und das möchte man. Immer.</p>
<p>Hier bietet sich z.B. &#8220;Maven&#8221; an, welches für einfache Projekte auch schnell einzurichten ist. Alternativ kann man auch ant oder das neue Gradle benutzen. Übrigens: Möchte man von Anfang an seine Projektstruktur bereits entlang der Maven Konventionen aufbauen, sollte man seine produktiven Sourcen unter &#8220;src/main/java&#8221; und seine Test Klassen unter &#8220;src/test/java&#8221; anlegen. Setzt man kein Maven ein, macht das keinen großen Unterschied, da die IDE-Ansicht sich nicht unterscheidet. Moechte man jedoch auf Maven später umstellen, spart man sich etwas Arbeit und hat sich bereits an die Konventionen gewöhnt.</p>
<div style="clear:both;">&nbsp;</div><p>Weitere Artikel:<ol>
<li><a href='http://www.jug-muenster.de/swingdemo-projekt-175/' rel='bookmark' title='SwingDemo Projekt'>SwingDemo Projekt</a></li>
<li><a href='http://www.jug-muenster.de/modular-java-238/' rel='bookmark' title='Modular Java (Buch)'>Modular Java (Buch)</a></li>
<li><a href='http://www.jug-muenster.de/java-ee-summit-berlin-1176/' rel='bookmark' title='Java EE Summit Berlin'>Java EE Summit Berlin</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.jug-muenster.de/java-testing-best-practice-projekt-organisation-941/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JPA Tutorial: JPA Einrichtung</title>
		<link>http://www.jug-muenster.de/jpa-tutorial-jpa-einrichtung-829/</link>
		<comments>http://www.jug-muenster.de/jpa-tutorial-jpa-einrichtung-829/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 18:40:27 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Contributed]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.jug-muenster.de/?p=829</guid>
		<description><![CDATA[JPA, die Java Persistence API bietet im Vergleich zu JDBC ein erhöhtes Abstraktionsniveau und ermöglicht damit in kurzer Zeit Anwendungen zu entwickeln, in denen Daten dauerhaft gespeichert werden müssen. Zum Hintergrund von JPA: Bei dem Umgang mit Datenbanken gibt es schon sehr lange JDBC (Java Database connectivity) als einheitliche API um die Verbindung zu Datenbanken [...]
Weitere Artikel:<ol>
<li><a href='http://www.jug-muenster.de/jpa-einfuhrung-entity-klassen-833/' rel='bookmark' title='JPA Einführung: Entity Klassen'>JPA Einführung: Entity Klassen</a></li>
<li><a href='http://www.jug-muenster.de/java-testing-best-practice-projekt-organisation-941/' rel='bookmark' title='Java Testing best practice: Projekt Organisation'>Java Testing best practice: Projekt Organisation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><!--S-ButtonZ 1.1.5 End--><p>JPA, die Java Persistence API bietet im Vergleich zu JDBC ein erhöhtes Abstraktionsniveau und ermöglicht damit in kurzer Zeit Anwendungen zu entwickeln, in denen Daten dauerhaft gespeichert werden müssen.<br />
Zum Hintergrund von JPA: Bei dem Umgang mit Datenbanken gibt es schon sehr lange JDBC (Java Database connectivity) als einheitliche API um die Verbindung zu Datenbanken herzustellen. Auch hier handelt es sich bereits um eine einheitliche Schnittstelle, jedoch wird darüber lediglich festgelegt, wie Verbindungen aufgebaut werden, wie eine Abfrage eingeleitet wird und wie Transaktionen manuell gesteuert werden können.<br />
Damit bleiben zwei Probleme: Der SQL Code muss von Hand erstellt werden, was gerade bei CRUD (Create, Update, Delete) Anwendungen viel Produktivität kostet, und zudem ist der SQL Code in der Regel herstellerabhängig. Ein Wechsel von Oracle zu Postgres bedeutet damit das Programm an vielen Stellen ändern zu müssen. Auch sind händisch erstellte Abfragen nicht immer optimal: Lazy loading von Entitäten, Caching Strategien und Transaktionssteuerung können sehr aufwendig werden. Dazu gesellen sich der relativ hohe Wartungsaufwand und die Gefahr von Fehlern die erst zur Laufzeit entdeckt werden.<span id="more-829"></span>Das Beispielprojekt wird ein einfaches Adressbuch, dabei werden Personen und ihre zugehörigen Adressen gespeichert. Im ersten Teil beschäftigen wir uns damit die Projektstruktur einzurichten, und die nötigen Bibliotheken zu installieren.</p>
<h2>Dependencies</h2>
<p>JPA selber ist lediglich eine API &#8211; diese wird durch einen sogenannten JPA Provider implementiert. Hibernate, OpenJPA und EclipseLink (bzw. Oracle Toplink) sind Beispiele fuer JPA Provider, die als OpenSource zur Verfuegung stehen und auch kommerziell verwendet werden koennen.<br />
Am einfachsten lassen sich diese Abhaengigkeiten durch Maven erfuellen, Maven kuemmert sich dabei um Download der direkten und indirekten (transistiven) Dependencies. Fuer diejenigen, die bereits Maven Erfahrung haben und Maven mit JPA nutzen moechten, hier ein Beispiel (weiter unten findet sich ein fertiges Eclipse Projekt ohne Maven zum Download) fuer Hibernate als JPA Provider (und SLF4J zum Loggen):<br />
<code>&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br />
&lt;artifactId&gt;hibernate-core&lt;/artifactId&gt;<br />
&lt;version&gt;3.3.2.GA&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br />
&lt;artifactId&gt;hibernate-annotations&lt;/artifactId&gt;<br />
&lt;version&gt;3.4.0.GA&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br />
&lt;artifactId&gt;hibernate-entitymanager&lt;/artifactId&gt;<br />
&lt;version&gt;3.4.0.GA&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br />
&lt;artifactId&gt;hibernate-c3p0&lt;/artifactId&gt;<br />
&lt;version&gt;3.3.2.GA&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br />
&lt;artifactId&gt;hibernate-ehcache&lt;/artifactId&gt;<br />
&lt;version&gt;3.3.2.GA&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.slf4j&lt;/groupId&gt;<br />
&lt;artifactId&gt;slf4j-simple&lt;/artifactId&gt;<br />
&lt;version&gt;1.5.8&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.hsqldb&lt;/groupId&gt;<br />
&lt;artifactId&gt;hsqldb&lt;/artifactId&gt;<br />
&lt;version&gt;1.8.0.10&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</code></p>
<h2>Manuelle Einrichtung</h2>
<p>Hier eine Liste der nötigen Bibliotheken, für diejenigen, die von Hand (beinhaltet alle transitiven Abhängigkeiten) das Projekt konfigurieren möchten:</p>
<ul>
<li>antlr-2.7.6.jar</li>
<li>c3p0-0.9.1.jar</li>
<li>commons-collections-3.1.jar</li>
<li>commons-logging-1.0.4.jar</li>
<li>dom4j-1.6.1.jar</li>
<li>ehcache-1.2.3.jar</li>
<li>ejb3-persistence-1.0.2.GA.jar</li>
<li>hibernate-annotations-3.4.0.GA.jar</li>
<li>hibernate-c3p0-3.3.2.GA.jar</li>
<li>hibernate-commons-annotations-3.1.0.GA.jar</li>
<li>hibernate-core-3.3.2.GA.jar</li>
<li>hibernate-ehcache-3.3.2.GA.jar</li>
<li>hibernate-entitymanager-3.4.0.GA.jar</li>
<li>hsqldb-1.8.0.10.jar</li>
<li>javassist-3.4.GA.jar</li>
<li>jta-1.1.jar</li>
<li>slf4j-api-1.5.8.jar</li>
<li>slf4j-simple-1.5.8.jar</li>
<li>xml-apis-1.0.b2.jar</li>
</ul>
<p>Diese JAR Dateien werden in den Classpath gelegt, normalerweise in einen &#8220;lib&#8221; Ordner, und anschließend wird der Classpath entsprechend konfiguriert. (In Eclipse über Rechtsklick auf das Projekt &#8220;Properties&#8221; im Menü auswählen, dann &#8220;Java Build Path&#8221; und dort mittels &#8220;Add JARs&#8221; die entsprechenden Dateien hinzufügen.)</p>
<h2>JPA Projekt Download</h2>
<p>Der Download als fertiges Eclipse Projekt (hier: <a href="http://www.jug-muenster.de/wp-content/uploads/2010/10/jpa-tutorial.zip">Eclipse JPA Project</a>) beinhaltet die nötigen JAR Dateien im &#8220;lib&#8221; Ordner, ist bereits entsprechend konfiguriert und benötigt kein Maven oder andere externe Tools.  (Die Ordnerstruktur verwendet jedoch die Maven Verzeichnisstruktur, was jedoch keine große Umstellung bedeuten sollte.)</p>
<p>Für dies Beispiel wird hsql als Datenbank verwendet, und dabei separat gestartet. Je nach Anwendung (Desktop oder Server) würde man in der Regel eine eingebettete Datenbank (Swing/Desktop Anwendung) oder eine externe Datenbank (Java Enterprise Application) verwenden. Hsql bietet den Betrieb als Embedded- und Standalone-Datenkbank an, dabei ist die JAR Datei mit rund 700kb relativ schlank und kann somit sehr gut für dieses Tutorial eingesetzt werden.</p>
<p>Um HSQL zu konfigurieren gibt es die Datei &#8220;server.properties&#8221;, die eine Datenbank konfiguriert, die in dem Ordner &#8220;db&#8221; abgelegt wird, &#8220;addressbook&#8221; heisst und auch als &#8220;addressbook&#8221; angesprochen wird.<br />
Server properties:<code><br />
server.database.0=db/addressbook<br />
server.dbname.0=addressbook</code></p>
<p>Von der Kommandozeile startet man den HSQL Server dann aus dem Projekt Verzeichnis in dem sich der &#8220;db&#8221; Ordner, der &#8220;lib&#8221; Ordner mit der hsqldb JAR Datei  und die &#8220;server.properties&#8221; Datei befindet:<br />
<code>java -cp lib/hsqldb-1.8.0.10.jar org.hsqldb.Server</code></p>
<p>Damit ist die Vorbereitung der serverseitigen JPA Infrastruktur abgeschlossen, die nächsten Schritte beinhalten die Einrichtung von JPA Provider, Verbindung zur Datenbank und welche Java Klassen wie auf die Datenbank abgebildet werden sollen.<br />
(Zum besseren Vergleich zwischen Hibernate und JPA beinhaltet das Beispielprojekt auch die entsprechende native Hibernate Konfiguration und die Hibernate API Aufrufe in separaten Klassen. Mehr dazu in den folgenden Artikeln.)</p>
<div style="clear:both;">&nbsp;</div><p>Weitere Artikel:<ol>
<li><a href='http://www.jug-muenster.de/jpa-einfuhrung-entity-klassen-833/' rel='bookmark' title='JPA Einführung: Entity Klassen'>JPA Einführung: Entity Klassen</a></li>
<li><a href='http://www.jug-muenster.de/java-testing-best-practice-projekt-organisation-941/' rel='bookmark' title='Java Testing best practice: Projekt Organisation'>Java Testing best practice: Projekt Organisation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.jug-muenster.de/jpa-tutorial-jpa-einrichtung-829/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven reloaded: Maven 3.0 mit Jason van Zyl</title>
		<link>http://www.jug-muenster.de/maven-reloaded-maven-3-0-mit-jason-van-zyl-161/</link>
		<comments>http://www.jug-muenster.de/maven-reloaded-maven-3-0-mit-jason-van-zyl-161/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 08:38:13 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[rheinjug]]></category>
		<category><![CDATA[termin]]></category>

		<guid isPermaLink="false">http://www.jug-muenster.de/?p=161</guid>
		<description><![CDATA[Maven reloaded ist das Thema der Präsentation von Jason van Zyl, die am 12.11.09 bei der Rheinjug durchgeführt wird. Der Vortrag (in englisch) wird von Jason van Zyl, dem Gründer und CTO von Sonatype gehalten. Sonatype ist dabei die Firma, die Maven supported und das Apache Maven Projekt gegründet hat.Abstract: Maven 3.0 will be the [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><!--S-ButtonZ 1.1.5 End--><p>Maven reloaded ist das Thema der Präsentation von Jason van Zyl, die am 12.11.09 bei der <a href="http://www.rheinjug.de/" target="_blank">Rheinjug</a> durchgeführt wird.</p>
<p>Der Vortrag (in englisch) wird von Jason van Zyl, dem Gründer und CTO von <a href="http://www.sonatype.com/" target="_blank">Sonatype</a> gehalten. Sonatype ist dabei die Firma, die Maven supported und das Apache Maven Projekt gegründet hat.<span id="more-161"></span>Abstract: <strong>Maven 3.0</strong> will be the version Maven for the people. The Maven team has gone to the ends of the earth to ensure backward compatibility, improve usability, increase performance, allow safe embedding, and pave the way for implement many highly demanded features. This talk will briefly cover the process and tooling changes that have occured in the Maven project in order to accomplish what we have done with Maven 3.0, as well as discuss the architectural and feature changes. Some of the process changes include setting up a multi-platform Hudson grid, building out a framework of over 440 integration tests, creating integration tests for all core Maven plugins, and systematically seeking out Maven 2.x OSS projects to validate Maven 3.x&#8217;s compatibility. We also built out a framework that measures disk I/O, network I/O, memory consumption, and CPU utilization to ensure that performance doesn&#8217;t degrade. The architectural changes that will be discussed will center around how POMs are constructed, how the lifecycle is executed, how the plugin manager executes, and how artifacts are resolved. Some features derived from these architectural changes include any-source POMs, versionless parent elements, a compositional form of Maven POM configuration we call mixins, lifecycle extension points, plugin extension points, and our new Jetty Client-based, single point of entry artifact resolution mechanism we call the repository system.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.jug-muenster.de/maven-reloaded-maven-3-0-mit-jason-van-zyl-161/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

