<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6153629451095242392</id><updated>2011-11-29T06:31:44.405-08:00</updated><category term='Versteckte Dateien'/><category term='AOP'/><category term='SCWCD'/><category term='Release'/><category term='English'/><category term='Nebenläufigkeit'/><category term='Dependency Injection'/><category term='Prüfung'/><category term='jboss5'/><category term='Hibernate'/><category term='JavaEE6'/><category term='Threads'/><category term='SCJP'/><category term='Oracle'/><category term='Resource Bundles'/><category term='Postgres'/><category term='SCBCD'/><category term='Embedded'/><category term='EJB'/><category term='Zertifizierung'/><category term='Exception'/><category term='ejb3'/><category term='Annotation'/><category term='Arquillian'/><category term='XHTML'/><category term='SyntaxHighlighter'/><category term='Spring'/><category term='JUnit'/><category term='Book'/><category term='Problem'/><category term='jar-list'/><category term='deploy'/><category term='Verkauf'/><category term='XA Datasource'/><category term='datasourcebinding'/><category term='Showcase'/><category term='JBoss'/><category term='Java3D'/><category term='Commit'/><category term='Resource'/><category term='Quellcode'/><category term='TopLink'/><category term='SCWSD'/><category term='Online-Klasse'/><category term='Lock'/><category term='esb'/><category term='formatieren'/><category term='Web page editor'/><category term='JTA'/><category term='Exam'/><category term='Passion'/><category term='Buch'/><category term='Java'/><category term='RichFaces'/><category term='PermGen Space'/><category term='Transactions'/><category term='DI'/><category term='SOAP'/><category term='Integrational Test'/><category term='managed Beans'/><category term='Webservices'/><category term='EJB3.1'/><category term='Filter'/><category term='Syntax'/><category term='Sun'/><category term='JExamples'/><category term='jpa'/><category term='shared'/><category term='EclipseLink'/><category term='Maven'/><category term='persistence'/><category term='Validation'/><category term='Persistence Provider'/><category term='JSF2'/><category term='Eclipse'/><category term='Adam Bien'/><category term='Lookup'/><category term='Study Guide'/><category term='JSF'/><category term='Memory'/><category term='310-065'/><category term='Engine'/><category term='jMonkey'/><category term='Glassfish'/><category term='Facelets'/><category term='Inject'/><category term='jboss6'/><category term='dependencies'/><title type='text'>Java and the dish...</title><subtitle type='html'>Java, JavaEE, JSF, EJB3, JBoss, Hibernate, clean up, cook and sleep ;)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-6822467978961231494</id><published>2011-09-27T12:24:00.000-07:00</published><updated>2011-09-27T13:02:44.612-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arquillian'/><title type='text'>Arquillian How to - Article</title><content type='html'>Some weeks ago I was asked to write an article about how to use Arquillian. The article was published in the german magazine called "Java aktuell". This magazine is produced for the &lt;a href="http://www.ijug.eu"&gt;ijug.eu&lt;/a&gt; (INTERESSENVERBUND DER JAVA USER GROUPS E.V.). You can find the article below including the source code examples. Have fun reading.&lt;br /&gt;&lt;br /&gt;Vor einigen Wochen wurde ich gefragt, ob ich Lust hätte, einen Artikel über Arquillian zu schreiben. Der Artikel wurde im Magazin "Java aktuell" veröffentlicht. Dieses Magazin wird für die ijug.eu veröffentlicht, den Interessenverbund der Java User Groups e.V.). Anbei findet ihr den Artikel und den dazugehörigen Quellcode. Viel Spaß beim Lesen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mortensenit.de/sonderdruck.pdf"&gt;PDF Sonderdruck - Artikel zum Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://src.ijug.eu/ja/1104/arquillian.zip"&gt;Quellcode-Beispiele zum Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Beispiel 1 - HelloArquillian&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;IntCounter.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;package eu.ijug.helloarquillian;&lt;br /&gt;&lt;br /&gt;public class IntCounter {&lt;br /&gt;&lt;br /&gt;    public int count(int a, int b) {&lt;br /&gt;        return (a + b);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;IntCounterTest.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;package eu.ijug.helloarquillian;&lt;br /&gt;&lt;br /&gt;import javax.inject.Inject;&lt;br /&gt;import junit.framework.Assert;&lt;br /&gt;import org.jboss.arquillian.api.Deployment;&lt;br /&gt;import org.jboss.arquillian.junit.Arquillian;&lt;br /&gt;import org.jboss.shrinkwrap.api.ArchivePaths;&lt;br /&gt;import org.jboss.shrinkwrap.api.ShrinkWrap;&lt;br /&gt;import org.jboss.shrinkwrap.api.asset.EmptyAsset;&lt;br /&gt;import org.jboss.shrinkwrap.api.spec.JavaArchive;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;&lt;br /&gt;@RunWith(Arquillian.class)&lt;br /&gt;public class IntCounterTest {&lt;br /&gt;&lt;br /&gt;    @Inject&lt;br /&gt;    private IntCounter counter;&lt;br /&gt;&lt;br /&gt;    @Deployment&lt;br /&gt;    public static JavaArchive createTestArchive() {&lt;br /&gt;        return ShrinkWrap.create(JavaArchive.class, "test.jar")&lt;br /&gt;                .addClasses(IntCounter.class)&lt;br /&gt;                .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testCount() {&lt;br /&gt;        Assert.assertEquals(2, counter.count(1, 1));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;jndi.properties&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces &lt;br /&gt;java.naming.provider.url=jnp://localhost:1099&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;pom.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&amp;gt;&lt;br /&gt;    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;groupId&amp;gt;eu.ijug&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;HelloArquillian&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;packaging&amp;gt;ejb&amp;lt;/packaging&amp;gt;&lt;br /&gt;    &amp;lt;name&amp;gt;HelloArquillian EJB&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;A short example using Arquillian on a remote JBoss AS&amp;lt;/description&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;properties&amp;gt;&lt;br /&gt;        &amp;lt;endorsed.dir&amp;gt;${project.build.directory}/endorsed&amp;lt;/endorsed.dir&amp;gt;&lt;br /&gt;        &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;        &amp;lt;arquillian.version&amp;gt;1.0.0.Alpha5&amp;lt;/arquillian.version&amp;gt;&lt;br /&gt;    &amp;lt;/properties&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;jboss_maven_repository&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;JBoss Maven repository&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://repository.jboss.org/nexus/content/groups/public-jboss/&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;maven2-repository.java.net&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;Java.net Repository for Maven&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://download.java.net/maven/2/&amp;lt;/url&amp;gt;&lt;br /&gt;            &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;jboss-deprecated-repository-group&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;JBoss Deprecated Maven Repository Group&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;https://repository.jboss.org/nexus/content/repositories/deprecated/&amp;lt;/url&amp;gt;&lt;br /&gt;            &amp;lt;releases&amp;gt;&lt;br /&gt;                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                &amp;lt;updatePolicy&amp;gt;never&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;            &amp;lt;/releases&amp;gt;&lt;br /&gt;            &amp;lt;snapshots&amp;gt;&lt;br /&gt;                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;                &amp;lt;updatePolicy&amp;gt;never&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;            &amp;lt;/snapshots&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;/repositories&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt; &lt;br /&gt;            &amp;lt;groupId&amp;gt;javax.enterprise&amp;lt;/groupId&amp;gt; &lt;br /&gt;            &amp;lt;artifactId&amp;gt;cdi-api&amp;lt;/artifactId&amp;gt; &lt;br /&gt;            &amp;lt;version&amp;gt;1.0-SP1&amp;lt;/version&amp;gt;  &lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;dependency&amp;gt; &lt;br /&gt;            &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt; &lt;br /&gt;            &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt; &lt;br /&gt;            &amp;lt;version&amp;gt;4.8.1&amp;lt;/version&amp;gt; &lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt; &lt;br /&gt;        &amp;lt;/dependency&amp;gt; &lt;br /&gt;        &lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${arquillian.version}&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian.container&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-jbossas-remote-6&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${arquillian.version}&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;                &lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.jbossas&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;jboss-as-profileservice-client&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;6.0.0.Final&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Beispiel 2 - HelloEmbedded&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TimeServiceEJB.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;package eu.ijug.helloembedded;&lt;br /&gt;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import javax.ejb.Stateless;&lt;br /&gt;&lt;br /&gt;@Stateless&lt;br /&gt;public class TimeServiceEJB {&lt;br /&gt;&lt;br /&gt;    public String getCurrentYear() {&lt;br /&gt;        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");&lt;br /&gt;        return sdf.format(new Date());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TimeServiceTest.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;package eu.ijug.helloembedded;&lt;br /&gt;&lt;br /&gt;import javax.ejb.EJB;&lt;br /&gt;&lt;br /&gt;import org.jboss.arquillian.api.Deployment;&lt;br /&gt;import org.jboss.arquillian.junit.Arquillian;&lt;br /&gt;import org.jboss.shrinkwrap.api.ShrinkWrap;&lt;br /&gt;import org.jboss.shrinkwrap.api.spec.JavaArchive;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;&lt;br /&gt;import static org.junit.Assert.assertEquals;&lt;br /&gt;&lt;br /&gt;@RunWith(Arquillian.class)&lt;br /&gt;public class TimeServiceTest {&lt;br /&gt;&lt;br /&gt;    @EJB&lt;br /&gt;    private TimeServiceEJB timeService;&lt;br /&gt;&lt;br /&gt;    @Deployment&lt;br /&gt;    public static JavaArchive createTestArchive() {&lt;br /&gt;        return ShrinkWrap.create(JavaArchive.class, "timeServiceEJB.jar").addClasses(TimeServiceEJB.class);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testGetCurrentYear() {&lt;br /&gt;        String year = timeService.getCurrentYear();&lt;br /&gt;        assertEquals("2011", year);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;pom.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;eu.ijug&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;HelloEmbedded&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.0.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;packaging&amp;gt;ejb&amp;lt;/packaging&amp;gt;&lt;br /&gt;    &amp;lt;name&amp;gt;Hello Embedded EJB&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;A short example using Arquillian with embedded Glassfish 3.1 and EJB3.1&amp;lt;/description&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;jboss_maven_repository&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;JBoss Maven repository&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://repository.jboss.org/nexus/content/groups/public-jboss/groups/&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;jboss_public&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;JBoss public maven repository&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;https://repository.jboss.org/nexus/content/groups/public/&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;/repositories&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;properties&amp;gt;&lt;br /&gt;        &amp;lt;endorsed.dir&amp;gt;${project.build.directory}/endorsed&amp;lt;/endorsed.dir&amp;gt;&lt;br /&gt;        &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;        &amp;lt;arquillian.version&amp;gt;1.0.0.Alpha5&amp;lt;/arquillian.version&amp;gt;&lt;br /&gt;        &amp;lt;glassfish.version&amp;gt;3.1&amp;lt;/glassfish.version&amp;gt;&lt;br /&gt;        &amp;lt;junit.version&amp;gt;4.8.2&amp;lt;/junit.version&amp;gt;&lt;br /&gt;    &amp;lt;/properties&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependencies&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${arquillian.version}&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${junit.version}&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian.container&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-glassfish-embedded-3.1&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${arquillian.version}&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.glassfish.extras&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;glassfish-embedded-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;${glassfish.version}&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-6822467978961231494?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/6822467978961231494/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/09/arquillian-how-to-article.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6822467978961231494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6822467978961231494'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/09/arquillian-how-to-article.html' title='Arquillian How to - Article'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-244344851399941930</id><published>2011-06-04T05:45:00.000-07:00</published><updated>2011-06-04T05:53:04.829-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jMonkey'/><category scheme='http://www.blogger.com/atom/ns#' term='Java3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Engine'/><title type='text'>Java 3D engine</title><content type='html'>Today I am adding another facette to this blog. If you need a bit variety of not always hearing about EJB3 and JSF... here you are.&lt;br /&gt;&lt;br /&gt;Ever wondered how a 3D game could be programmed in Java? The link of the day is &lt;a href="http://jmonkeyengine.org/"&gt;http://jmonkeyengine.org/&lt;/a&gt;. The jMonkey engine is really a great project. It´s open source! It´s full of features like physics engine and others. It´s fun AND it´s well documented with a tutorial page. So the first steps are really easy to learn. You will learn, what assets, meshes, models and nodes are. Some example code will come soon. &lt;br /&gt;&lt;br /&gt;Here a first hello world example from their documentation:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package jme3test.helloworld;&lt;br /&gt;import com.jme3.app.SimpleApplication;&lt;br /&gt;import com.jme3.material.Material;&lt;br /&gt;import com.jme3.math.Vector3f;&lt;br /&gt;import com.jme3.scene.Geometry;&lt;br /&gt;import com.jme3.scene.shape.Box;&lt;br /&gt;import com.jme3.math.ColorRGBA;&lt;br /&gt;/** Sample 1 - how to get started with the most simple JME 3 application.&lt;br /&gt; * Display a blue 3D cube and view from all sides by&lt;br /&gt; * moving the mouse and pressing the WASD keys. */&lt;br /&gt;public class HelloJME3 extends SimpleApplication {&lt;br /&gt;    public static void main(String[] args){&lt;br /&gt;        HelloJME3 app = new HelloJME3();&lt;br /&gt;        app.start();&lt;br /&gt;    }&lt;br /&gt;    @Override&lt;br /&gt;    public void simpleInitApp() {&lt;br /&gt;        Box b = new Box(Vector3f.ZERO, 1, 1, 1);&lt;br /&gt;        Geometry geom = new Geometry("Box", b);&lt;br /&gt;        Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");&lt;br /&gt;        mat.setColor("Color", ColorRGBA.Blue);&lt;br /&gt;        geom.setMaterial(mat);&lt;br /&gt;        rootNode.attachChild(geom);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned and write a comment, if you want to hear more (and especially want to SEE CODE) ;)&lt;br /&gt;&lt;br /&gt;Have fun trying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-244344851399941930?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/244344851399941930/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/06/java-3d-engine.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/244344851399941930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/244344851399941930'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/06/java-3d-engine.html' title='Java 3D engine'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-1140683727082636945</id><published>2011-05-01T01:21:00.000-07:00</published><updated>2011-05-01T01:28:24.258-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adam Bien'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaEE6'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>New JavaEE book by Adam Bien available</title><content type='html'>Adam Bien, Java Champion and book author, just announced his new book. It´s called "Real World Java EE Night Hacks" and he writes about topics like CDI, REST, JPA2, JMX, EJB 3.1, JAX-RS, Maven 3 and others. And he even managed to get a foreword by James Gosling ;) Give it a try:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.adam-bien.com/roller/abien/entry/real_world_java_ee_night"&gt;http://www.adam-bien.com/roller/abien/entry/real_world_java_ee_night&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-1140683727082636945?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/1140683727082636945/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/05/new-javaee-book-by-adam-bien-available.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1140683727082636945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1140683727082636945'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/05/new-javaee-book-by-adam-bien-available.html' title='New JavaEE book by Adam Bien available'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5685908325655449341</id><published>2011-04-03T07:25:00.000-07:00</published><updated>2011-04-04T01:14:12.292-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Release'/><title type='text'>RichFaces 4 Final available</title><content type='html'>RichFaces 4 Final is released ;) There are nice features like file upload available now. Check it out at &lt;a href="http://www.jboss.org/richfaces"&gt;http://www.jboss.org/richfaces&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5685908325655449341?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5685908325655449341/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/04/richfaces-4-final-avaliable.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5685908325655449341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5685908325655449341'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/04/richfaces-4-final-avaliable.html' title='RichFaces 4 Final available'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5286883749604387962</id><published>2011-03-22T19:44:00.000-07:00</published><updated>2011-03-25T15:30:48.269-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arquillian'/><category scheme='http://www.blogger.com/atom/ns#' term='Release'/><title type='text'>Arquillian - Alpha 5 released</title><content type='html'>A new alpha version of Arquillian has been released some days ago. It includes support for things like multiple deployments, multiple containers and others. Take a look at the full release announcement here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.jboss.org/en/arquillian/blog/2011/03/18/arquillian-100-alpha5--released"&gt;http://community.jboss.org/en/arquillian/blog/2011/03/18/arquillian-100-alpha5--released&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5286883749604387962?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5286883749604387962/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/03/arquillian-alpha-5-released.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5286883749604387962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5286883749604387962'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/03/arquillian-alpha-5-released.html' title='Arquillian - Alpha 5 released'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-4797040913502626989</id><published>2011-03-18T15:56:00.000-07:00</published><updated>2011-03-18T16:01:53.809-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF2'/><category scheme='http://www.blogger.com/atom/ns#' term='Showcase'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>RichFaces 4 Showcase</title><content type='html'>JBoss RichFaces 4.0.0.Final is nearing gold status. Therefore the team now published a RichFaces Showcase application using Google´s App Engine. It can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://richfaces-showcase.appspot.com/"&gt;http://richfaces-showcase.appspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to try out the latest release candidate, RichFaces 4.0.0.CR1, you can also check out this article on how to use maven to include the neccesary libraries:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.jboss.org/wiki/HowtoaddRichFaces4xtomavenbasedproject"&gt;http://community.jboss.org/wiki/HowtoaddRichFaces4xtomavenbasedproject&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Have fun trying.&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://www.jboss.org/richfaces"&gt;http://www.jboss.org/richfaces&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-4797040913502626989?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/4797040913502626989/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/03/richfaces-4-showcase.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4797040913502626989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4797040913502626989'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/03/richfaces-4-showcase.html' title='RichFaces 4 Showcase'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5754926269204423623</id><published>2011-02-09T12:40:00.000-08:00</published><updated>2011-02-09T14:14:17.995-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Integrational Test'/><category scheme='http://www.blogger.com/atom/ns#' term='Arquillian'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Arquillian - EJB3.1 Unit testing with JTA</title><content type='html'>In the last days i read a lot and testet much to see how integration testing / unit testing with stateless and stateful session beans could work. I found out that JavaEE6 introduced stuff like the EJBContainer, embedded glassfish and jboss appservers and some nice things like that. I managed to start and stop an embedded server and also posted in my last post how to add a datasource to this embedded glassfish (see &lt;a href="http://java-abwaschbar.blogspot.com/2011/02/datasources-in-embedded-glassfish.html"&gt;this article&lt;/a&gt;). Now if you even want it to be another step simpler and easier, I would even recommend you to use a project called &lt;a href="http://www.jboss.org/arquillian"&gt;Arquillian&lt;/a&gt;. This tool uses ShrinkWrap to create a war file at unit test runtime, start your embedded server, deploy your war, start your tests and shutdown your embedded server again. What else would you wish? ;) It supports GlassFish, JBoss and some other appservers I guess... So give it a try.&lt;br /&gt;&lt;br /&gt;There is just a couple of files you need. As earlier mentioned...&lt;br /&gt;- the sun-resources.xml&lt;br /&gt;- a persistence-test.xml using JTA (an example could be found in &lt;a href="http://java-abwaschbar.blogspot.com/2009/07/checkliste-jboss-glassfish.html"&gt;this article&lt;/a&gt;)&lt;br /&gt;- a arquillian.xml file which could look like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;arquillian xmlns="http://jboss.com/arquillian"&lt;br /&gt;   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;   xmlns:gfembed="urn:arq:org.jboss.arquillian.container.glassfish.embedded_3"&amp;gt;&lt;br /&gt;    &amp;lt;gfembed:container&amp;gt;&lt;br /&gt;        &amp;lt;gfembed:sunResourcesXml&amp;gt;src/test/resources/sun-resources.xml&amp;lt;/gfembed:sunResourcesXml&amp;gt;&lt;br /&gt;    &amp;lt;/gfembed:container&amp;gt;&lt;br /&gt;&amp;lt;/arquillian&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;All of these files should reside in src/test/resources. And a unit test class could then look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;package de.mortensenit.myproduct.dao.jpa;&lt;br /&gt;&lt;br /&gt;import de.mortensenit.myproduct.dao.AccountServiceDao;&lt;br /&gt;import de.mortensenit.myproduct.model.Client;&lt;br /&gt;import de.mortensenit.myproduct.model.User;&lt;br /&gt;import java.io.File;&lt;br /&gt;import javax.inject.Inject;&lt;br /&gt;import static junit.framework.Assert.*;&lt;br /&gt;import org.jboss.arquillian.api.Deployment;&lt;br /&gt;import org.jboss.arquillian.junit.Arquillian;&lt;br /&gt;import org.jboss.shrinkwrap.api.ArchivePaths;&lt;br /&gt;import org.jboss.shrinkwrap.api.ShrinkWrap;&lt;br /&gt;import org.jboss.shrinkwrap.api.asset.EmptyAsset;&lt;br /&gt;import org.jboss.shrinkwrap.api.spec.WebArchive;&lt;br /&gt;import org.junit.Ignore;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;&lt;br /&gt;@RunWith(Arquillian.class)&lt;br /&gt;public class AccountServiceDaoJpaTest {&lt;br /&gt;&lt;br /&gt;    @Inject&lt;br /&gt;    private AccountServiceDao dao;&lt;br /&gt;&lt;br /&gt;    @Deployment&lt;br /&gt;    public static WebArchive createTestArchive() {&lt;br /&gt;        return ShrinkWrap.create(WebArchive.class, "test.war")&lt;br /&gt;        .addClasses(AccountServiceDaoJpa.class)&lt;br /&gt;        .addLibrary(new File("target/myproduct-model-1.0-SNAPSHOT.jar"))&lt;br /&gt;        .addManifestResource("persistence-test.xml", "persistence.xml")&lt;br /&gt;        .addManifestResource("sun-resources.xml")&lt;br /&gt;        .addWebResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testFindClient() {&lt;br /&gt;        Client client = new Client();&lt;br /&gt;        client.setId("94aac911-189b-40cd-a03f-860c84fce3f2");&lt;br /&gt;        Client result = dao.find(Client.class, client);&lt;br /&gt;        assertEquals("94aac911-189b-40cd-a03f-860c84fce3f2", result.getId());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Last, but not least the pom.xml for the dependencies:&lt;br /&gt;&lt;pre class="brush:java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;project    xmlns="http://maven.apache.org/POM/4.0.0"&lt;br /&gt;            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&amp;gt;&lt;br /&gt;    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;parent&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;myproduct&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;de.mortensenit.myproduct&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/parent&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;de.mortensenit.myproduct&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;myproduct-jpa&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;packaging&amp;gt;ejb&amp;lt;/packaging&amp;gt;&lt;br /&gt;    &amp;lt;name&amp;gt;myproduct-jpa&amp;lt;/name&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;repositories&amp;gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;jboss&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;JBoss Repository&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://repository.jboss.org/nexus/content/groups/public/&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;glassfish-repository&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;Java.net Repository for Glassfish&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://download.java.net/maven/glassfish&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;java.net2&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;name&amp;gt;Java.Net Maven2 Repository, hosts the javaee-api dependency&amp;lt;/name&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://download.java.net/maven/2&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;        &amp;lt;repository&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;EclipseLink Repo&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;url&amp;gt;http://www.eclipse.org/downloads/download.php?r=1&amp;amp;nf=1&amp;amp;file=/rt/eclipselink/maven.repo&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;/repository&amp;gt;&lt;br /&gt;    &amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependencies&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian.container&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-glassfish-embedded-3&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.0.0.Alpha4&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.glassfish.extras&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;glassfish-embedded-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;3.0.1-b02&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;javax&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;javaee-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;6.0&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;log4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;log4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.2.16&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;slf4j-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.6.1&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.jboss.arquillian&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;arquillian-junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.0.0.Alpha4&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;postgresql&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;postgresql&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;9.0-801.jdbc4&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.eclipse.persistence&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;eclipselink&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;de.mortensenit.myproduct&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;myproduct-model&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;de.mortensenit.myproduct&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;myproduct-dao&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;build&amp;gt;&lt;br /&gt;        &amp;lt;plugins&amp;gt;&lt;br /&gt;            &amp;lt;!--&lt;br /&gt;                following plugin copies model jar into target folder because&lt;br /&gt;                the persistence unit needs it for the unit tests&lt;br /&gt;            --&amp;gt;&lt;br /&gt;            &amp;lt;plugin&amp;gt;&lt;br /&gt;                &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;                &amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                &amp;lt;executions&amp;gt;&lt;br /&gt;                    &amp;lt;execution&amp;gt;&lt;br /&gt;                        &amp;lt;id&amp;gt;copy&amp;lt;/id&amp;gt;&lt;br /&gt;                        &amp;lt;phase&amp;gt;compile&amp;lt;/phase&amp;gt;&lt;br /&gt;                        &amp;lt;goals&amp;gt;&lt;br /&gt;                            &amp;lt;goal&amp;gt;copy&amp;lt;/goal&amp;gt;&lt;br /&gt;                        &amp;lt;/goals&amp;gt;&lt;br /&gt;                        &amp;lt;configuration&amp;gt;&lt;br /&gt;                            &amp;lt;artifactItems&amp;gt;&lt;br /&gt;                                &amp;lt;artifactItem&amp;gt;&lt;br /&gt;                                    &amp;lt;groupId&amp;gt;de.mortensenit.myproduct&amp;lt;/groupId&amp;gt;&lt;br /&gt;                                    &amp;lt;artifactId&amp;gt;myproduct-model&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                                    &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;                                    &amp;lt;type&amp;gt;jar&amp;lt;/type&amp;gt;&lt;br /&gt;                                    &amp;lt;overWrite&amp;gt;true&amp;lt;/overWrite&amp;gt;&lt;br /&gt;                                &amp;lt;/artifactItem&amp;gt;&lt;br /&gt;                            &amp;lt;/artifactItems&amp;gt;&lt;br /&gt;                            &amp;lt;outputDirectory&amp;gt;${project.build.directory}&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;                            &amp;lt;overWriteReleases&amp;gt;false&amp;lt;/overWriteReleases&amp;gt;&lt;br /&gt;                            &amp;lt;overWriteSnapshots&amp;gt;true&amp;lt;/overWriteSnapshots&amp;gt;&lt;br /&gt;                        &amp;lt;/configuration&amp;gt;&lt;br /&gt;                    &amp;lt;/execution&amp;gt;&lt;br /&gt;                &amp;lt;/executions&amp;gt;&lt;br /&gt;            &amp;lt;/plugin&amp;gt;&lt;br /&gt;            &amp;lt;plugin&amp;gt;&lt;br /&gt;                &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;                &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;                &amp;lt;configuration&amp;gt;&lt;br /&gt;                    &amp;lt;source&amp;gt;1.6&amp;lt;/source&amp;gt;&lt;br /&gt;                    &amp;lt;target&amp;gt;1.6&amp;lt;/target&amp;gt;&lt;br /&gt;                &amp;lt;/configuration&amp;gt;&lt;br /&gt;            &amp;lt;/plugin&amp;gt;&lt;br /&gt;            &amp;lt;plugin&amp;gt;&lt;br /&gt;                &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;                &amp;lt;artifactId&amp;gt;maven-ejb-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt;&lt;br /&gt;                &amp;lt;configuration&amp;gt;&lt;br /&gt;                    &amp;lt;ejbVersion&amp;gt;3.1&amp;lt;/ejbVersion&amp;gt;&lt;br /&gt;                &amp;lt;/configuration&amp;gt;&lt;br /&gt;            &amp;lt;/plugin&amp;gt;&lt;br /&gt;        &amp;lt;/plugins&amp;gt;&lt;br /&gt;    &amp;lt;/build&amp;gt;&lt;br /&gt;    &amp;lt;profiles&amp;gt;&lt;br /&gt;        &amp;lt;profile&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;endorsed&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;activation&amp;gt;&lt;br /&gt;                &amp;lt;property&amp;gt;&lt;br /&gt;                    &amp;lt;name&amp;gt;sun.boot.class.path&amp;lt;/name&amp;gt;&lt;br /&gt;                &amp;lt;/property&amp;gt;&lt;br /&gt;            &amp;lt;/activation&amp;gt;&lt;br /&gt;            &amp;lt;build&amp;gt;&lt;br /&gt;                &amp;lt;plugins&amp;gt;&lt;br /&gt;                    &amp;lt;plugin&amp;gt;&lt;br /&gt;                        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;                        &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                        &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;                        &amp;lt;configuration&amp;gt;&lt;br /&gt;                            &amp;lt;compilerArguments&amp;gt;&lt;br /&gt;                                &amp;lt;bootclasspath&amp;gt;${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}&amp;lt;/bootclasspath&amp;gt;&lt;br /&gt;                            &amp;lt;/compilerArguments&amp;gt;&lt;br /&gt;                        &amp;lt;/configuration&amp;gt;&lt;br /&gt;                        &amp;lt;dependencies&amp;gt;&lt;br /&gt;                            &amp;lt;dependency&amp;gt;&lt;br /&gt;                                &amp;lt;groupId&amp;gt;javax&amp;lt;/groupId&amp;gt;&lt;br /&gt;                                &amp;lt;artifactId&amp;gt;javaee-endorsed-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                                &amp;lt;version&amp;gt;6.0&amp;lt;/version&amp;gt;&lt;br /&gt;                            &amp;lt;/dependency&amp;gt;&lt;br /&gt;                        &amp;lt;/dependencies&amp;gt;&lt;br /&gt;                    &amp;lt;/plugin&amp;gt;&lt;br /&gt;                &amp;lt;/plugins&amp;gt;&lt;br /&gt;            &amp;lt;/build&amp;gt;&lt;br /&gt;        &amp;lt;/profile&amp;gt;&lt;br /&gt;    &amp;lt;/profiles&amp;gt;&lt;br /&gt;    &amp;lt;properties&amp;gt;&lt;br /&gt;        &amp;lt;netbeans.hint.deploy.server&amp;gt;gfv3ee6&amp;lt;/netbeans.hint.deploy.server&amp;gt;&lt;br /&gt;    &amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For a deeper insight and good start, read also the following article:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.jboss.org/en/arquillian/blog/2010/10/04/the-perfect-recipe-for-testing-jpa-2-revisited"&gt;http://community.jboss.org/en/arquillian/blog/2010/10/04/the-perfect-recipe-for-testing-jpa-2-revisited&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By the way, a big thanks goes out to Adam Bien, aslak and jdlee for their help on this topic ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5754926269204423623?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5754926269204423623/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/02/arquillian-ejb31-unit-testing-with-jta.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5754926269204423623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5754926269204423623'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/02/arquillian-ejb31-unit-testing-with-jta.html' title='Arquillian - EJB3.1 Unit testing with JTA'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5091122797976204754</id><published>2011-02-09T12:36:00.000-08:00</published><updated>2011-02-09T12:39:45.262-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XA Datasource'/><category scheme='http://www.blogger.com/atom/ns#' term='Glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='Embedded'/><title type='text'>Datasources in embedded glassfish container</title><content type='html'>Ever wondered how you could add a JTA datasource to your embedded glassfish integration tests? You wrote your stateless session bean and now can´t use your persistence.xml and inject your bean, because you don´t have a datasource and connection pool in your app? You should try adding sun-resources.xml with the following content (the following example is for postgres and XA datasources, but you can modify it as you need):&lt;br /&gt;&lt;br /&gt;&lt;pre brush="java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd"&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;jdbc-resource enabled="true" jndi-name="jdbc/myproductdb" object-type="user" pool-name="myproductTestPool"&amp;gt;&lt;br /&gt;    &amp;lt;/jdbc-resource&amp;gt;&lt;br /&gt;    &amp;lt;jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.postgresql.ds.PGSimpleDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="myproductTestPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false"&amp;gt;&lt;br /&gt;        &amp;lt;property name="User" value="username"/&amp;gt;&lt;br /&gt;        &amp;lt;property name="Password" value="password"/&amp;gt;&lt;br /&gt;        &amp;lt;property name="DatabaseName" value="dbname"/&amp;gt;&lt;br /&gt;    &amp;lt;/jdbc-connection-pool&amp;gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5091122797976204754?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5091122797976204754/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/02/datasources-in-embedded-glassfish.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5091122797976204754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5091122797976204754'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/02/datasources-in-embedded-glassfish.html' title='Datasources in embedded glassfish container'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5503002576797553530</id><published>2011-01-30T04:14:00.000-08:00</published><updated>2011-01-30T04:24:33.354-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lookup'/><category scheme='http://www.blogger.com/atom/ns#' term='Annotation'/><category scheme='http://www.blogger.com/atom/ns#' term='Resource'/><title type='text'>@Resource annotation and lookup</title><content type='html'>&lt;span style="font-weight:bold;"&gt;The problem...&lt;/span&gt;&lt;br /&gt;In the last hours I unfortunately had to fight a bit with the @Resource annotation in combination with the parameter "lookup". Many examples out there mention this new added parameter in JavaEE6. And i wanted to try. So an example webapp I downloaded worked fine. But as soon as I tried to use it in my project, i kept getting a "cannot find symbol" error message. I examined further and found out that the resource annotation can be found in the latest JDK 1.6, but also inside my maven dependency "javaee-api-6.0.jar". Unfortunately NetBeans always took the wrong version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The solution...&lt;/span&gt;&lt;br /&gt; is quite simple, if you use maven. I switched from Eclipse to Maven some weeks ago and used it´s wizzard to create my EJB modules. The netbeans modules unfortunately handle the pom.xml a bit different than the default archetypes. If you try to create a standard maven ejb module, the following xml is being created and even documented. This one will help you out:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&amp;lt;profiles&amp;gt;&lt;br /&gt;        &amp;lt;profile&amp;gt;&lt;br /&gt;            &amp;lt;id&amp;gt;endorsed&amp;lt;/id&amp;gt;&lt;br /&gt;            &amp;lt;activation&amp;gt;&lt;br /&gt;                &amp;lt;property&amp;gt;&lt;br /&gt;                    &amp;lt;name&amp;gt;sun.boot.class.path&amp;lt;/name&amp;gt;&lt;br /&gt;                &amp;lt;/property&amp;gt;&lt;br /&gt;            &amp;lt;/activation&amp;gt;&lt;br /&gt;            &amp;lt;build&amp;gt;&lt;br /&gt;                &amp;lt;plugins&amp;gt;&lt;br /&gt;                    &amp;lt;plugin&amp;gt;&lt;br /&gt;                        &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;                        &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                        &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;                        &amp;lt;configuration&amp;gt;&lt;br /&gt;                            &amp;lt;!-- javaee6 contains upgrades of APIs contained within the JDK itself.&lt;br /&gt;                                 As such these need to be placed on the bootclasspath, rather than classpath of the&lt;br /&gt;                                 compiler.&lt;br /&gt;                                 If you don't make use of these new updated API, you can delete the profile.&lt;br /&gt;                                 On non-SUN jdk, you will need to create a similar profile for your jdk, with the similar property as sun.boot.class.path in Sun's JDK.--&amp;gt;&lt;br /&gt;                            &amp;lt;compilerArguments&amp;gt;&lt;br /&gt;                                &amp;lt;bootclasspath&amp;gt;${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}&amp;lt;/bootclasspath&amp;gt;&lt;br /&gt;                            &amp;lt;/compilerArguments&amp;gt;&lt;br /&gt;                        &amp;lt;/configuration&amp;gt;&lt;br /&gt;                        &amp;lt;dependencies&amp;gt;&lt;br /&gt;                            &amp;lt;dependency&amp;gt;&lt;br /&gt;                                &amp;lt;groupId&amp;gt;javax&amp;lt;/groupId&amp;gt;&lt;br /&gt;                                &amp;lt;artifactId&amp;gt;javaee-endorsed-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;                                &amp;lt;version&amp;gt;6.0&amp;lt;/version&amp;gt;&lt;br /&gt;                            &amp;lt;/dependency&amp;gt;&lt;br /&gt;                        &amp;lt;/dependencies&amp;gt;&lt;br /&gt;                    &amp;lt;/plugin&amp;gt;&lt;br /&gt;                &amp;lt;/plugins&amp;gt;&lt;br /&gt;            &amp;lt;/build&amp;gt;&lt;br /&gt;        &amp;lt;/profile&amp;gt;&lt;br /&gt;    &amp;lt;/profiles&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5503002576797553530?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5503002576797553530/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/resource-annotation-and-lookup.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5503002576797553530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5503002576797553530'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/resource-annotation-and-lookup.html' title='@Resource annotation and lookup'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3810146057296671187</id><published>2011-01-30T04:11:00.000-08:00</published><updated>2011-01-30T04:14:02.251-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>Switching to english... ;)</title><content type='html'>Well my english is kind of poor i guess. But to reach more people and help more people out there solving their problems with Java, IDE and that kind of stuff, I decided to write this blog in english from now on. Try not to judge me about my english knowledge ;) Have fun reading...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3810146057296671187?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3810146057296671187/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/switching-to-english.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3810146057296671187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3810146057296671187'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/switching-to-english.html' title='Switching to english... ;)'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-902871475223269304</id><published>2011-01-23T12:03:00.000-08:00</published><updated>2011-01-28T12:46:49.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Integrational Test'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Integrational Unit Tests mit EJB3.1</title><content type='html'>Ich bin gerade damit beschäftigt, ein paar Integrationstest mit JUnit zu schreiben. Im speziellen handelt es sich bei den zu testenden Klassen hier um stateless session beans (SSB). Da meine derzeitige Anwendung unter GlassFish 3 läuft (JavaEE6, JSF2, EJB3.1, JPA2), entschied ich mich, die SSBs mit einem sogenannten embedded EJBContainer zu testen. Ein ganz simples Beispiel, wie das aussehen könnte, findet man in Adam Bien´s Blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.adam-bien.com/roller/abien/entry/embedding_ejb_3_1_container"&gt;http://www.adam-bien.com/roller/abien/entry/embedding_ejb_3_1_container&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dabei verwendete ich die neueste Maven-Dependency, die ich finden konnte. Da sie nicht als SNAPSHOT markiert war, bin ich davon ausgegangen, daß sie funktioniert (was sich leider in dem Fall als Fehler herausgestellt hat).&lt;br /&gt;&lt;br /&gt;&lt;brush style="java"&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;org.glassfish.extras&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;glassfish-embedded-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;3.0.1&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/brush&gt;&lt;br /&gt;&lt;br /&gt;Nach einigem Testen (der Server fuhr nicht hoch, es traten Fehlermeldungen auf und es dauerte ewig, bis der Unittest fehlschlug) änderte ich die Versionsnummer und ging auf 3.0 zurück. Und siehe da, das Problem war gelöst, der Server läuft.&lt;br /&gt;&lt;br /&gt;Vielleicht hilft diese Warnung ja dem einen oder anderen, etwas Zeit einzusparen bei der Fehlersuche.&lt;br /&gt;&lt;br /&gt;Update: Hier gibts noch einen weiteren netten Artikel zum Thema EJB3 - Unittests:&lt;br /&gt;&lt;a href="http://www.bookware.de/kaffeeklatsch/archiv/KaffeeKlatsch-2010-07.pdf"&gt;http://www.bookware.de/kaffeeklatsch/archiv/KaffeeKlatsch-2010-07.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Update 2: &lt;a href="http://nosoftskills.com/2010/11/unit-testing-services-embedded-glassfish/"&gt;http://nosoftskills.com/2010/11/unit-testing-services-embedded-glassfish/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Und hier noch ein Verweis auf die Dokumentation des embedded Glassfish:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/E19798-01/821-1754/gjldt/index.html"&gt;http://download.oracle.com/docs/cd/E19798-01/821-1754/gjldt/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-902871475223269304?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/902871475223269304/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/integrational-unit-tests-mit-ejb31.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/902871475223269304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/902871475223269304'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/integrational-unit-tests-mit-ejb31.html' title='Integrational Unit Tests mit EJB3.1'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-2153242982862586615</id><published>2011-01-17T13:40:00.000-08:00</published><updated>2011-01-17T13:41:30.524-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resource Bundles'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF2'/><title type='text'>JSF2 - Using resource bundles</title><content type='html'>Anbei mal auf die Schnell ein netter Link zum Thema Resource Bundles in JSF2. Hier haben sich im Vergleich zu JSF1.2 ein paar Kleinigkeiten geändert bezüglich des Ablegens der Resource Bundles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mkyong.com/jsf2/jsf-2-0-and-resource-bundles-example/"&gt;http://www.mkyong.com/jsf2/jsf-2-0-and-resource-bundles-example/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Viel Spaß beim Lesen&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-2153242982862586615?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/2153242982862586615/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/jsf2-using-resource-bundles.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2153242982862586615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2153242982862586615'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/jsf2-using-resource-bundles.html' title='JSF2 - Using resource bundles'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3383689467176005628</id><published>2011-01-16T02:41:00.001-08:00</published><updated>2011-01-16T02:46:01.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF2'/><category scheme='http://www.blogger.com/atom/ns#' term='DI'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Inject'/><title type='text'>Inject oder EJB Annotation</title><content type='html'>Ist man beispielsweise in einer JSF2-Webapp unterwegs und möchte dort im Controller (den sogenannten Managed Beans / Backing Beans) auf die EJB3 - Ebene zugreifen (so man nicht Spring, sondern EJB3.1 verwendet), steht man vor der Qual der Wahl. Soll man nun das Local Interface der Stateless Session Bean per @Inject oder @EJB injecten lassen. Eine Empfehlung darauf gibt Gavin King (Entwickler von Hibernate und Seam) in folgendem Link: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://seamframework.org/Community/InjectingWithEJBOrInject"&gt;http://seamframework.org/Community/InjectingWithEJBOrInject&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Die Essenz ist, @EJB soweit möglich zu vermeiden und stattdessen auf die @Inject-Variante zurückzugreifen. Dies ist jedoch bei Remote-Zugriffen via Clients NICHT möglich. Will man also Session Beans nutzen, die per Remote-Interface (Annotation hierfür ist @Remote) genutzt werden sollen, benötigt man weiterhin @EJB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3383689467176005628?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3383689467176005628/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/inject-oder-ejb-annotation.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3383689467176005628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3383689467176005628'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2011/01/inject-oder-ejb-annotation.html' title='Inject oder EJB Annotation'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-6456827509785359890</id><published>2010-12-31T02:09:00.001-08:00</published><updated>2010-12-31T02:11:17.352-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DI'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Links / Spring AOP</title><content type='html'>Anbei zwei nette Links (insbesondere der zweite ist lesenswert) zum Thema Dependency Injection (DI) und aspect oriented programming (AOP) mit Spring. Viel Spaß beim Lesen...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dependency Injection Tutorial:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/arc-pocs/wiki/DIIntroTutorial"&gt;http://code.google.com/p/arc-pocs/wiki/DIIntroTutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Spring AOP:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://java.dzone.com/articles/introduction-spring-aop?page=0,0"&gt;http://java.dzone.com/articles/introduction-spring-aop?page=0,0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-6456827509785359890?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/6456827509785359890/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/links-spring-aop.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6456827509785359890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6456827509785359890'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/links-spring-aop.html' title='Links / Spring AOP'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-9107513745637887280</id><published>2010-12-29T04:01:00.001-08:00</published><updated>2010-12-29T04:02:11.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jboss6'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>JBoss6 Final ist released!</title><content type='html'>Die Version 6.0.0.Final von JBoss ist nun zum Download verfügbar :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://planet.jboss.org/post/jbossas6_0_0_final_released"&gt;http://planet.jboss.org/post/jbossas6_0_0_final_released&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-9107513745637887280?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/9107513745637887280/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jboss6-final-ist-released.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/9107513745637887280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/9107513745637887280'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jboss6-final-ist-released.html' title='JBoss6 Final ist released!'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5290420310052366103</id><published>2010-12-27T14:45:00.000-08:00</published><updated>2010-12-28T00:54:30.377-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='Commit'/><category scheme='http://www.blogger.com/atom/ns#' term='JTA'/><category scheme='http://www.blogger.com/atom/ns#' term='Transactions'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>HowTo: Einrichten von JTA unter JBoss5 / JPA / Spring3</title><content type='html'>Ich habe gerade in einer Bespielanwendung versucht, eine Anwendung mit Spring 3 / JBoss5 und JTA einzurichten. Ziel war es, verteilte Transaktionen mittels JTA durchführen zu können. Dabei habe ich JPA und den EntityManager eingesetzt, um die Entities zu persistieren. Dabei war es zuerst mal wichtig, eine XA-Datasource einzurichten (siehe mein letzter Post). Desweiteren sind folgende Einstellungen vorgenommen worden:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;applicationContext.xml (Spring-Konfiguration):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre brush="java"&gt;&lt;br /&gt; &amp;lt;context:component-scan base-package="de.mortensenit" /&amp;gt;&lt;br /&gt; &amp;lt;context:annotation-config /&amp;gt;&lt;br /&gt; &amp;lt;tx:jta-transaction-manager /&amp;gt;&lt;br /&gt; &amp;lt;tx:annotation-driven /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;persistence.xml:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre brush="java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&lt;br /&gt; version="2.0"&amp;gt;&lt;br /&gt; &amp;lt;persistence-unit name="memphisPU" transaction-type="JTA"&amp;gt;&lt;br /&gt;  &amp;lt;jta-data-source&amp;gt;java:/memphisdb&amp;lt;/jta-data-source&amp;gt;&lt;br /&gt;  &amp;lt;properties&amp;gt;&lt;br /&gt;   &amp;lt;property name="hibernate.show_sql" value="true" /&amp;gt;&lt;br /&gt;   &amp;lt;property name="hibernate.format_sql" value="true" /&amp;gt;&lt;br /&gt;   &amp;lt;property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /&amp;gt;&lt;br /&gt;   &amp;lt;property name="hibernate.hbm2ddl.auto" value="update" /&amp;gt;&lt;br /&gt;   &amp;lt;property name="hibernate.transaction.manager_lookup_class"&lt;br /&gt;    value="org.hibernate.transaction.JBossTransactionManagerLookup" /&amp;gt;&lt;br /&gt;  &amp;lt;/properties&amp;gt;&lt;br /&gt; &amp;lt;/persistence-unit&amp;gt;&lt;br /&gt;&amp;lt;/persistence&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Beispielhafte DAO-Implementierung:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre brush="java"&gt;&lt;br /&gt;package de.mortensenit.memphis.dao.jpa;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.Locale;&lt;br /&gt;&lt;br /&gt;import org.springframework.beans.factory.annotation.Autowired;&lt;br /&gt;import org.springframework.stereotype.Repository;&lt;br /&gt;import org.springframework.transaction.annotation.Transactional;&lt;br /&gt;&lt;br /&gt;import de.mortensenit.memphis.dao.AccountServiceDao;&lt;br /&gt;import de.mortensenit.memphis.model.Client;&lt;br /&gt;import de.mortensenit.memphis.model.User;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * JPA implementation for the needed CRUD operations listed in the DAO API&lt;br /&gt; * module.&lt;br /&gt; * &lt;br /&gt; * @author Frederik Mortensen&lt;br /&gt; * &lt;br /&gt; */&lt;br /&gt;@Repository&lt;br /&gt;public class AccountServiceDaoJpa extends AbstractDaoJpa implements&lt;br /&gt;  AccountServiceDao {&lt;br /&gt;&lt;br /&gt; @Autowired&lt;br /&gt; private ApplicationService applicationService;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; @Transactional&lt;br /&gt; public void save(Client client) {&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;   User user = new User();&lt;br /&gt;   user.setDeleted(false);&lt;br /&gt;   user.setLanguage(Locale.GERMAN);&lt;br /&gt;   user.setLastLogin(new Date());&lt;br /&gt;   user.setName("name...");&lt;br /&gt;   user.setPassword("pass...");&lt;br /&gt;   user.setRegistrationDate(new Date());&lt;br /&gt;&lt;br /&gt;   applicationService.getEntityManager().joinTransaction();&lt;br /&gt;   applicationService.getEntityManager().persist(user);&lt;br /&gt;   applicationService.getEntityManager().flush();&lt;br /&gt;&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   throw new RuntimeException(e.getMessage());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Erzeugung einer EntityManager Instanz beispielhaft:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre brush="java"&gt;&lt;br /&gt;package de.mortensenit.memphis.dao.jpa;&lt;br /&gt;&lt;br /&gt;import javax.annotation.PostConstruct;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.EntityManagerFactory;&lt;br /&gt;import javax.persistence.Persistence;&lt;br /&gt;&lt;br /&gt;import org.springframework.stereotype.Service;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Application wide settings that will be loaded with spring context&lt;br /&gt; * initialization&lt;br /&gt; * http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/configuration.html&lt;br /&gt; * &lt;br /&gt; * @author Frederik Mortensen&lt;br /&gt; * &lt;br /&gt; */&lt;br /&gt;@Service&lt;br /&gt;public class ApplicationService {&lt;br /&gt;&lt;br /&gt; private EntityManagerFactory entityManagerFactory;&lt;br /&gt; private EntityManager entityManager;&lt;br /&gt;&lt;br /&gt; @SuppressWarnings("unused")&lt;br /&gt; @PostConstruct&lt;br /&gt; private void init() {&lt;br /&gt;  entityManagerFactory = Persistence.createEntityManagerFactory("memphisPU");&lt;br /&gt;  entityManager = entityManagerFactory.createEntityManager();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public EntityManager getEntityManager() {&lt;br /&gt;  return entityManager;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setEntityManager(EntityManager entityManager) {&lt;br /&gt;  this.entityManager = entityManager;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dabei erzeugt die Spring Annotation @Transactional die gewünschte Transaktion und kann auch über mehrere Methoden hinweg gesetzt werden. Nur, wenn keine dieser Methoden eine RuntimeException wirft, wird ein Commit gemacht. &lt;span style="font-weight:bold;"&gt;Entscheidend war hier der Aufruf der joinTransaction(&lt;/span&gt;) - Methode, ohne die der EntityManager zwar nicht gemurrt hat beim persist, ein Commit fand jedoch nie statt. Dies funktioniert nun. Nähere Infos dazu gibt es auch unter folgendem Link, den ich mir noch einmal in Ruhe zu Gemüte führen werde und weiterempfehle:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Java_Persistence/Transactions"&gt;http://en.wikibooks.org/wiki/Java_Persistence/Transactions&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5290420310052366103?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5290420310052366103/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jta-commits.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5290420310052366103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5290420310052366103'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jta-commits.html' title='HowTo: Einrichten von JTA unter JBoss5 / JPA / Spring3'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3086966503745173059</id><published>2010-12-27T03:36:00.000-08:00</published><updated>2010-12-27T03:44:03.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XA Datasource'/><category scheme='http://www.blogger.com/atom/ns#' term='JTA'/><category scheme='http://www.blogger.com/atom/ns#' term='Postgres'/><title type='text'>Postgres XA Datasource - JTA - Distributed Transactions</title><content type='html'>Hier mal eine Beispiel-Datasource für JBoss und Postgres, wenn man verteilte Transaktionen über JTA nutzen möchte. Hierfür wird eine XA Datasource benötigt:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- ===================================================================== --&amp;gt;&lt;br /&gt;&amp;lt;!--                                                                       --&amp;gt;&lt;br /&gt;&amp;lt;!--  JBoss Server Configuration                                           --&amp;gt;&lt;br /&gt;&amp;lt;!--                                                                       --&amp;gt;&lt;br /&gt;&amp;lt;!-- ===================================================================== --&amp;gt;&lt;br /&gt;&amp;lt;!--  Datasource config for Postgres 8.x *** with XA transactions ***      --&amp;gt;&lt;br /&gt;&amp;lt;!-- ====================================================================  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;datasources&amp;gt;&lt;br /&gt;   &amp;lt;xa-datasource&amp;gt;&lt;br /&gt;     &amp;lt;jndi-name&amp;gt;memphisdb&amp;lt;/jndi-name&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;xa-datasource-class&amp;gt;org.postgresql.xa.PGXADataSource&amp;lt;/xa-datasource-class&amp;gt;&lt;br /&gt;     &amp;lt;xa-datasource-property name="ServerName"&amp;gt;localhost&amp;lt;/xa-datasource-property&amp;gt;&lt;br /&gt;     &amp;lt;xa-datasource-property name="PortNumber"&amp;gt;5432&amp;lt;/xa-datasource-property&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;xa-datasource-property name="DatabaseName"&amp;gt;memphis&amp;lt;/xa-datasource-property&amp;gt;&lt;br /&gt;     &amp;lt;xa-datasource-property name="User"&amp;gt;memphis&amp;lt;/xa-datasource-property&amp;gt;&lt;br /&gt;     &amp;lt;xa-datasource-property name="Password"&amp;gt;memphis&amp;lt;/xa-datasource-property&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;track-connection-by-tx&amp;gt;&amp;lt;/track-connection-by-tx&amp;gt;&lt;br /&gt;   &amp;lt;/xa-datasource&amp;gt;&lt;br /&gt;&amp;lt;/datasources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3086966503745173059?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3086966503745173059/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/postgres-xa-datasource-jta-distributed.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3086966503745173059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3086966503745173059'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/postgres-xa-datasource-jta-distributed.html' title='Postgres XA Datasource - JTA - Distributed Transactions'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5359060582197352488</id><published>2010-12-26T03:28:00.001-08:00</published><updated>2010-12-26T03:29:16.477-08:00</updated><title type='text'>JSR Übersicht</title><content type='html'>&lt;a href="http://www.oracle.com/technetwork/java/javaee/tech/index.html"&gt;http://www.oracle.com/technetwork/java/javaee/tech/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5359060582197352488?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5359060582197352488/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jsr-ubersicht.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5359060582197352488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5359060582197352488'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2010/12/jsr-ubersicht.html' title='JSR Übersicht'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-7530053122098826870</id><published>2009-12-30T18:30:00.000-08:00</published><updated>2009-12-31T00:26:32.371-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCWSD'/><category scheme='http://www.blogger.com/atom/ns#' term='SCWCD'/><category scheme='http://www.blogger.com/atom/ns#' term='Zertifizierung'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><title type='text'>Vorbereitung für Zertifizierungen zum SCWCD &amp; SCWSD</title><content type='html'>Wer die Prüfung zum Sun Certified Java Programmer (SCJP) hinter sich hat und in letzter Zeit geplant hat, weitere Zertifizierungen zu holen, traf in den letzten Monaten auf ein mehr oder minder großes Problem. Es gab keine passenden Bücher zur aktuellen Version von Java 5 bzw. Java 6. Es blieb nur, sich direkt mit den Tutorials von SUN auseinander zu setzen oder alternativ die teuren Schulungsunterlagen von SUN zu bestellen.&lt;br /&gt;&lt;br /&gt;Hier hat sich nun endlich wieder ein wenig getan. Zumindest mal im Bereich der Prüfungsvorbereitung für den Sun Certified Web Component Developer (SCWCD 5) bzw. den Sun Certified Web Services Developer (der ja erst neu in das Sortiment der SUN-Prüfungen aufgenommen wurde).&lt;br /&gt;&lt;br /&gt;Zum einen sei da das HEAD FIRST - Werk zu erwähnen, welches ich aktuell bestellt habe. Ich werde diesen Post bei Gelegenheit updaten, um meine Erfahrung mit dem Buch einfließen zu lassen. Allerdings habe ich dieses Buch entsprechend der Amazon-Empfehlung auf Englisch bestellt und plane auch weiterhin, meine Zertifizierungen auf Englisch vorzunehmen. Hier also der Link für alle, die SCWCD werden wollen ;)&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=javaundderabw-21&amp;o=3&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1M6ABJKN5YT3337HVA02&amp;asins=0596516681" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Zu diesem Buch gibt es sogar eine Alternative, welche jedoch Einsteigern wohl aufgrund des Schwierigkeitsgrades weniger zu empfehlen ist als die zuerst genannte Variante:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=javaundderabw-21&amp;o=3&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1M6ABJKN5YT3337HVA02&amp;asins=0955160332" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Für den Sun Certified Web Services Developer (SCWSD 5) muß man sich noch ein wenig gedulden. Februar ist jedoch eine Zeit, die man wohl noch abwarten kann. Denn dann erscheint das jetzt schon vorbestellbare Werk mit dem schönen Titel "Sun Certified Developer for Java Web Services: Study Guide (Exam 310-220) (Certification Press)". Letzteres erwähntes Buch erscheint von Mcgraw-Hill Professional, von denen ich persönlich aufgrund meiner bisherigen Erfahrung ehrlich gesagt ziemlich begeistert bin. Das Buch wird also definitiv auf meinem Schreibtisch landen und ist eine Empfehlung wert:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=javaundderabw-21&amp;o=3&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1M6ABJKN5YT3337HVA02&amp;asins=0072259523" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Mich würde an dieser Stelle auch ein Feedback interessieren, wer schon Erfahrung mit den CDs oder Web-Kursen von SUN direkt gemacht hat. Wie waren diese aufgebaut, lohnte sich die Zusatzausgabe und wie umfangreich war dieses Material? Vielleicht meldet sich ja an dieser Stelle der eine oder andere Leser ... Ihr seid gefragt ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-7530053122098826870?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/7530053122098826870/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/12/vorbereitung-fur-zertifizierungen-zum.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7530053122098826870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7530053122098826870'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/12/vorbereitung-fur-zertifizierungen-zum.html' title='Vorbereitung für Zertifizierungen zum SCWCD &amp; SCWSD'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-1284841957287768362</id><published>2009-12-01T16:01:00.000-08:00</published><updated>2009-12-01T16:05:08.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Filter'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Filtern von Problemen auf Projektebene</title><content type='html'>Ein nettes kleines Feature von Eclipse, welches bei mir bisher leider unterging, habe ich heute kennengelernt und möchte es euch nicht vorenthalten. Ausgehend von einer Situation, in der man mehrere Projekte in seinem Eclipse offen hat, kann man ggf. schnell den Überblick verlieren, wenn man das nicht richtig managed. Beispielsweise werden Kompilierfehler und Warnungen von allen Projekten in einer Liste angezeigt. Arbeitet man jedoch aktuell nur an einem Projekt, muß man nicht zwingend alle anderen Projekte schließen. Es reicht, den folgenden Filter einzurichten, und man findet umso schneller wieder zu den Fehlermeldungen, die auch wirklich im aktuell zu bearbeitenden Projekt vorliegen. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qBoznKdu18o/SxWujLthhcI/AAAAAAAAGRI/Buc01_3RMM4/s1600/Hint.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 122px;" src="http://1.bp.blogspot.com/_qBoznKdu18o/SxWujLthhcI/AAAAAAAAGRI/Buc01_3RMM4/s400/Hint.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410422446817904066" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-1284841957287768362?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/1284841957287768362/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/12/filtern-von-problemen-auf-projektebene.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1284841957287768362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1284841957287768362'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/12/filtern-von-problemen-auf-projektebene.html' title='Filtern von Problemen auf Projektebene'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qBoznKdu18o/SxWujLthhcI/AAAAAAAAGRI/Buc01_3RMM4/s72-c/Hint.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-8942844312104247838</id><published>2009-09-17T03:36:00.000-07:00</published><updated>2009-09-17T03:39:15.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online-Klasse'/><category scheme='http://www.blogger.com/atom/ns#' term='Passion'/><title type='text'>Leidenschaftliches Java</title><content type='html'>Ich bin heute auf eine sehr umfangreiche und interessante Seite gestoßen, welche Online-Kurse und viel Material zu Java und vielen damit zusammenhängenden Themen anbietet. Wer seine Kentnisse zu Java etwas vertiefen will, sollte hier unbedingt mal vorbeischauen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javapassion.com"&gt;http://www.javapassion.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-8942844312104247838?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/8942844312104247838/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/09/leidenschaftliches-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/8942844312104247838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/8942844312104247838'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/09/leidenschaftliches-java.html' title='Leidenschaftliches Java'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-6157260127800889860</id><published>2009-08-28T05:28:00.001-07:00</published><updated>2009-08-28T05:33:14.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JExamples'/><title type='text'>Die Suche nach Beispielen...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jexamples.com/JExamplesLogo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 116px;" src="http://www.jexamples.com/JExamplesLogo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ich bin gerade auf eine interessante Homepage gestoßen. Diese kann hilfreich sein, wenn man mal nach beispielhaften Anwendungen diverser Java-Befehle suchen möchte. Dabei wird der eingegebene Begriff, wie z.B. Calendar oder Properties genommen und in Open Source Anwendungen nach Anwendungsbeispielen gesucht. Diese werden dann mit Packagenamen und sauber formatiertem Quellcode präsentiert. Ich denke, das kann durchaus dem einen oder anderen helfen. Der Link ist:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jexamples.com/search.html"&gt;http://www.jexamples.com/search.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-6157260127800889860?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/6157260127800889860/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/08/die-suche-nach-beispielen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6157260127800889860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6157260127800889860'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/08/die-suche-nach-beispielen.html' title='Die Suche nach Beispielen...'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3928912690627767220</id><published>2009-07-16T02:33:00.001-07:00</published><updated>2009-07-16T03:01:59.875-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Persistence Provider'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseLink'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='TopLink'/><title type='text'>Checkliste JBoss-&gt; Glassfish</title><content type='html'>Ich bin derzeit damit beschäftigt, meine JavaEE Anwendung soweit zu konfigurieren und zu testen, daß sie unter mehreren, führenden Applicationservern sowie Persistence Providern deployed werden kann. Mein Vorhaben war erfolgreich, stellte sich jedoch als anfangs etwas aufwändig heraus. Ich kann hier keinen vollständigen Bericht abliefern, was alles getan werden muß, um eine in JBoss laufende Applikation in Glassfish zum Deployen zu bekommen. Jede Anwendung ist an sich auch unterschiedlich. Aber eine kleine Checkliste möchte ich niemandem vorenthalten. Meine Anwendung verwendet dabei EJB3, JPA, Hibernate unter JBoss sowie Toplink unter Glassfish, JSF und Facelets.&lt;br /&gt;&lt;br /&gt;Die einzige Konfigurationsdatei, an die man beim Deployen in einer anderen Umgebung noch anfassen muß in meinem Fall, ist die persistence.xml. Grund hierfür ist der Persistence Provider. Dieser wird von mir verwendet, um Tabellen automatisch generieren zu lassen.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hibernate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create:&lt;br /&gt;&amp;lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;&lt;br /&gt;&lt;br /&gt;Drop &amp; Create:&lt;br /&gt;&amp;lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Toplink&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create:&lt;br /&gt;&amp;lt;property name="toplink.ddl-generation" value="create-tables"/&gt;&lt;br /&gt;&amp;lt;property name="toplink.ddl-generation.output-mode" value="both"/&gt;&lt;br /&gt;&lt;br /&gt;Drop &amp; Create:&lt;br /&gt;&amp;lt;property name="toplink.ddl-generation" value="drop-and-create-tables"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EclipseLink&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create:&lt;br /&gt;&amp;lt;property name="eclipselink.ddl-generation" value="create-tables"/&gt;&lt;br /&gt;&lt;br /&gt;Drop and create&lt;br /&gt;&amp;lt;property name="eclipselink.ddl-generation" value="drop-and-create-tables"/&gt;&lt;br /&gt;&lt;br /&gt;Eine beispielhafte persistence.xml könnte also so aussehen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt; (C) 2009 Frederik Mortensen &lt;br /&gt;  --&gt;&lt;br /&gt;&amp;lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt;&lt;br /&gt; &amp;lt;persistence-unit name="yourPU" transaction-type="JTA"&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- GlassFish Configuration //--&gt;&lt;br /&gt;  &amp;lt;provider&gt;oracle.toplink.essentials.PersistenceProvider&amp;lt;/provider&gt;&lt;br /&gt;  &amp;lt;jta-data-source&gt;jdbc/yourdb&amp;lt;/jta-data-source&gt;&lt;br /&gt;  &amp;lt;exclude-unlisted-classes&gt;false&amp;lt;/exclude-unlisted-classes&gt;&lt;br /&gt;  &amp;lt;properties&gt;&lt;br /&gt;    &amp;lt;property name="toplink.ddl-generation" value="create-tables"/&gt;&lt;br /&gt;    &amp;lt;property name="toplink.ddl-generation.output-mode" value="both"/&gt;&lt;br /&gt;  &amp;lt;/properties&gt;&lt;br /&gt;  &amp;lt;!--  End of GlassFish configuration --&gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;!--  JBoss Configuration --&gt;&lt;br /&gt;  &amp;lt;provider&gt;org.hibernate.ejb.HibernatePersistence&amp;lt;/provider&gt;&lt;br /&gt;  &amp;lt;jta-data-source&gt;java:/yourdb&amp;lt;/jta-data-source&gt;&lt;br /&gt;  &amp;lt;properties&gt;&lt;br /&gt;    &amp;lt;property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/&gt;&lt;br /&gt;    &amp;lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;&lt;br /&gt;  &amp;lt;/properties&gt;&lt;br /&gt;  &amp;lt;!--  End of JBoss Configuration --&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/persistence-unit&gt;&lt;br /&gt;&amp;lt;/persistence&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Desweiteren muß für eine Unabhängigkeit von der Implementation des Application Servers dafür gesorgt werden, daß alle benötigten .JAR-Dateien vorhanden sind. JBoss liefert einige dieser .JARs bereits mit, die beim Deployen in GlassFish leider fehlen.&lt;br /&gt;&lt;br /&gt;Auch über das Logging muß man sich Gedanken machen. Wer in JBoss log4J nutzte, wird feststellen, daß GlassFish hier mit dem in Java mitgelieferten Logging einen anderen Weg beschreitet. Mit einer gültigen log4j.xml sowie log4j.dtd im /src - Verzeichnis kann man jedoch weiterhin auf dieses Protokollierungsverfahren bauen. Anbei ein kleines Beispiel, wie dieses Logging integriert werden kann:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Log4j.dtd&lt;/span&gt;&lt;br /&gt;Enthalten im Log4J-Bundle (evtl. also bereits auf Ihrer Festplatte):&lt;br /&gt;&lt;a href="http://logging.apache.org/log4j/1.2/download.html"&gt;Log4J v1.2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Log4j.xml&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&gt;&lt;br /&gt;&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- &lt;br /&gt; (C) 2009: Frederik Mortensen&lt;br /&gt; --&gt;&lt;br /&gt;&amp;lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;appender name="yourappAppender" class="org.apache.log4j.DailyRollingFileAppender"&gt;&lt;br /&gt; &amp;lt;param name="datePattern" value="'.'yyyy-MM-dd" /&gt;&lt;br /&gt; &amp;lt;param name="file" value="logs/yourappWeb.log" /&gt;&lt;br /&gt; &amp;lt;param name="Append" value="true" /&gt;&lt;br /&gt; &amp;lt;layout class="org.apache.log4j.PatternLayout"&gt;&lt;br /&gt;  &amp;lt;param name="ConversionPattern" value="%-5p %d{dd.MM.yyyy HH:mm:ss} %C: %m %n" /&gt;&lt;br /&gt; &amp;lt;/layout&gt;&lt;br /&gt;&amp;lt;/appender&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;root&gt;&lt;br /&gt; &amp;lt;priority value="INFO" /&gt;&lt;br /&gt; &amp;lt;appender-ref ref="yourappAppender" /&gt;&lt;br /&gt;&amp;lt;/root&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/log4j:configuration&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hat man also dafür gesorgt, daß alle JAR-Dateien (commons-logging, log4j, RichFaces...) nun inkludiert sind und die persistence.xml angepasst wurde, sowie das Logging berücksichtig wurde, gibt es noch zwei größere Baustellen: Queries und Lookups.&lt;br /&gt;&lt;br /&gt;Bei den EJBQueries ist darauf zu achten, daß sie wie in den Spezifikationen verwendet werden. Das heißt voll ausgeschrieben wie beispielsweise:&lt;br /&gt;"SELECT alias FROM ENTITY alias WHERE..."&lt;br /&gt;JBoss war da weniger restriktiv, da konnte man auch einmal nur mit der FROM clause beginnen, unter Umständen auch mal mit einem kleingeschriebenen "from" oder ähnlichem. Dies führt jedoch in Glassfish zu Problemen. Passt man seine Queries entsprechend an, laufen sie weiterhin in JBoss, aber nun auch in Glassfish.&lt;br /&gt;&lt;br /&gt;Hier noch kurz die Unterschiede zwischen JBoss-Lookups und Glassfish-Lookups (ich arbeite daran, eine Lösung zu finden, die in JBoss und Glassfish einheitlich funktioniert). Ich habe den Lookup in eine Klasse EJBService ausgelagert:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;package de.mortensenit.yourproject.web.util;&lt;br /&gt;&lt;br /&gt;import javax.naming.Context;&lt;br /&gt;import javax.naming.InitialContext;&lt;br /&gt;import javax.naming.NameClassPair;&lt;br /&gt;import javax.naming.NamingEnumeration;&lt;br /&gt;import javax.naming.NamingException;&lt;br /&gt;&lt;br /&gt;public class EJBService {&lt;br /&gt;&lt;br /&gt; private static EJBService singleton;&lt;br /&gt; private static Context ctx;&lt;br /&gt;&lt;br /&gt; private EJBService() throws NamingException {&lt;br /&gt;&lt;br /&gt;  if (ctx == null) {&lt;br /&gt;   ctx = new InitialContext();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static &lt;T&gt; T lookup(Class&lt;T&gt; ejbClassType, String name) {&lt;br /&gt;  &lt;br /&gt;  if (singleton == null) {&lt;br /&gt;   try {&lt;br /&gt;    singleton = new EJBService();&lt;br /&gt;   } catch (NamingException ne) {&lt;br /&gt;    throw new RuntimeException(ne.getLocalizedMessage(), ne);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;   InitialContext ctx = new InitialContext();&lt;br /&gt;   // JBoss: final Object object = ctx.lookup("yourapp/" + name);&lt;br /&gt;   // Glassfish: final Object object = ctx.lookup(ejbClassType.getName()); //Name of the interface&lt;br /&gt;   final Object object = ctx.lookup(ejbClassType.getName());&lt;br /&gt;&lt;br /&gt;   if (ejbClassType.isAssignableFrom(object.getClass())) {&lt;br /&gt;    return (T) object;&lt;br /&gt;   } else {&lt;br /&gt;    throw new RuntimeException("EJBService - Class found: " + object.getClass() + " cannot be assigned to type: " + ejbClassType);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  } catch (NamingException e) {&lt;br /&gt;   throw new RuntimeException("EJBService - Unable to find ejb for " + ejbClassType.getName(), e);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wer neu bei Glassfish ist, muß vor dem Deployen seiner Anwendung zuerst mal ein paar Dinge beachten. Es muß eine Domain erstellt werden, in der die Anwendung letztlich laufen wird. Es muß der JDBC-Treiber in diese Domain kopiert werden und ein Connection Pool angelegt werden. Wenn man also all die aufgezählten Punkte dieses Posts in einer Checkliste zusammenfassen möchte, kommt man in etwa hierzu:&lt;br /&gt;&lt;br /&gt;- Anlegen der Domain (asadmin &gt; create-domain --adminport 4848 yourapp)&lt;br /&gt;- Kopieren von postgres/mysql... jdbc.jar in das yourdomain\lib\ext Verzeichnis&lt;br /&gt;(Falls postgres genutzt wird, JDBC4 verwenden!)&lt;br /&gt;- Erzeugen eines ConectionPools im JSF Admin Dialog des Glassfish AppServers (per Ping testen!)&lt;br /&gt;- Erzeugen einer JDBC Connection, die den ConnectionPool benutzt (jdbc/yourapp)&lt;br /&gt;- Wenn log4j verwendet wird, einbinden von log4j.dtd and log4j.xml (JBoss didnt need &lt;br /&gt;- Ggf. Lookups anpassen&lt;br /&gt;- persistence.xml anpassen auf den aktuellen Persistence Provider&lt;br /&gt;- Falls man @mappedsuperclass verwendet hat, muß diese Annotation gelöscht und durch @Entity ersetzt werden, da @mappedsuperclass in Glassfish leider nicht funktioniert (derzeit).&lt;br /&gt;- EJBQueries ggf. anpassen auf den JavaEE5 Standard, siehe oben&lt;br /&gt;- Falls das Schema der Datenbanktabellen in JBoss durch Hibernate angelegt wurde, muß dieses evtl. bei früherer Verwendung von @mappedsuperclass gedroppt und neu angelegt werden. Allerdings sind die datenbankseitigen Unterschiede zwischen Hibernate und Toplink minimal.&lt;br /&gt;&lt;br /&gt;Das wars. Viel Glück und bei Fragen wie immer einfach einen Kommentar hinterlassen ;)&lt;br /&gt;&lt;br /&gt;Mehr Informationen zum Thema:&lt;br /&gt;&lt;a href="http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29#Using_EclipseLink_JPA_Extensions_for_Schema_Generation"&gt;EclipseLink JPA&lt;/a&gt;&lt;br /&gt;&lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html"&gt;Logging Patterns&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3928912690627767220?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3928912690627767220/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/checkliste-jboss-glassfish.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3928912690627767220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3928912690627767220'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/checkliste-jboss-glassfish.html' title='Checkliste JBoss-&gt; Glassfish'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-2501318914964465875</id><published>2009-07-12T01:02:00.000-07:00</published><updated>2009-07-16T02:35:03.112-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='managed Beans'/><title type='text'>Dependency Injection in JSF</title><content type='html'>Neben dem klassischen Lookup gibt es in JavaEE5 die Verwendung von Annotations und der Dependency Injection (kurz DI). Diese DI wird auch in JSF unterstützt. So ist es in JBoss wie auch in Glassfish möglich, eine Session Bean per DI wie folgt injecten zu lassen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;//imports&lt;br /&gt;&lt;br /&gt;class MyManagedBean {&lt;br /&gt;&lt;br /&gt;@EJB private MySessionBeanLocalIF mySessionBean;&lt;br /&gt;&lt;br /&gt;//some class using mySessionBean&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Das erspart das Tippen des Lookups. Die einzigen Bedingungen sind dabei, daß die Variable weder static noch final sein darf. Nähere Informationen dazu gibt es auch in den JavaEE5 Specs:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qBoznKdu18o/Sl7wN_jd0KI/AAAAAAAAFt4/fykAMHibjuY/s1600-h/dependency-injection.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 254px;" src="http://1.bp.blogspot.com/_qBoznKdu18o/Sl7wN_jd0KI/AAAAAAAAFt4/fykAMHibjuY/s400/dependency-injection.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5358984729806622882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=244"&gt;Link zur Spezifikation&lt;/a&gt;, Abschnitt 5.2.3 Annotations and Injection&lt;br /&gt;&lt;br /&gt;Weiterhin ist dabei zu beachten, daß managed Beans NICHT einfach per new-Operator instanziiert werden dürfen in diesem Fall. Hat man beispielsweise in einem Converter eine Methode, die über das managed Bean auf eine Session Bean zugreifen möchte, wird es zu einer NullpointerException kommen. Managed Beans holt man sich in diesem Fall also nicht per Instanziierung, sondern wie folgt:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;ELContext elContext = FacesContext.getCurrentInstance().getELContext();&lt;br /&gt;ELResolver elResolver = context.getApplication().getELResolver();&lt;br /&gt;AccountManagementMB accountManagement = (AccountManagementMB) elResolver.getValue(elContext, null, "accountManagement");&lt;br /&gt;return accountManagement.findCountryByName(value);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dies führt dazu, daß die Dependency Injection berücksichtig wird und im managed Bean (hier beispielsweise AccountManagement) auf dessen Session Bean zugegriffen werden kann.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-2501318914964465875?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/2501318914964465875/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/schemagenerierung-und-appserver.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2501318914964465875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2501318914964465875'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/schemagenerierung-und-appserver.html' title='Dependency Injection in JSF'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qBoznKdu18o/Sl7wN_jd0KI/AAAAAAAAFt4/fykAMHibjuY/s72-c/dependency-injection.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-2894249243438082861</id><published>2009-07-05T15:20:00.000-07:00</published><updated>2009-07-07T05:42:03.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deploy'/><category scheme='http://www.blogger.com/atom/ns#' term='dependencies'/><category scheme='http://www.blogger.com/atom/ns#' term='datasourcebinding'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss5'/><title type='text'>Missing dependencies - JBoss 5 Deployment</title><content type='html'>Ich habe gerade leider viel zu viel Zeit mit einem sehr unscheinbaren Fehler verbracht. Um diesen Ärger und die lange Fehlersuche anderen zu ersparen, poste ich hier einmal die Fehlermeldung und die dazugehörige Lösung, welche simpler nicht hätte sein können (wenn man es weiß):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;2009-07-06 00:01:36,500 ERROR [org.jboss.system.server.profileservice.ProfileServiceBootstrap] (main) Failed to load profile: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):&lt;br /&gt;&lt;br /&gt;DEPLOYMENTS MISSING DEPENDENCIES:&lt;br /&gt;  Deployment "jboss.j2ee:ear=myProject.ear,jar=myProjectCore.jar,name=MySessionBean,service=EJB3" is missing the following dependencies:&lt;br /&gt;    Dependency "&amp;lsaquounknown ear="myProject.ear,jar="myProjectCore.jar,name="MySessionBean,service="EJB3"&gt;" (should be in state "Described", but is actually in state "** UNRESOLVED Demands 'persistence.unit:unitName=myProject.ear/myProjectCore.jar#myPersistenceUnitPU' **")&lt;br /&gt;  ...&lt;br /&gt;  ...&lt;br /&gt;  ...&lt;br /&gt;  Deployment "persistence.unit:unitName=myProject.ear/myProjectCore.jar#myPersistenceUnitPU" is missing the following dependencies:&lt;br /&gt;    Dependency "jboss.jca:name=&lt;br /&gt;            java:/mypostgresdb&lt;br /&gt;        ,service=DataSourceBinding" (should be in state "Create", but is actually in state "** NOT FOUND Depends on 'jboss.jca:name=&lt;br /&gt;            java:/mypostgresdb&lt;br /&gt;        ,service=DataSourceBinding' **")&lt;br /&gt;&lt;br /&gt;DEPLOYMENTS IN ERROR:&lt;br /&gt;  Deployment "&amp;lsaquounknown ear="myProject.ear,jar="myProjectCore.jar,name="MySessionBean,service="EJB3"&gt;" is in error due to the following reason(s): ** UNRESOLVED Demands 'persistence.unit:unitName=myProject.ear/myProjectCore.jar#myPersistenceUnitPU' **&lt;br /&gt;  Deployment "jboss.jca:name=&lt;br /&gt;            java:/mypostgresdb&lt;br /&gt;        ,service=DataSourceBinding" is in error due to the following reason(s): ** NOT FOUND Depends on 'jboss.jca:name=&lt;br /&gt;            java:/mypostgresdb&lt;br /&gt;        ,service=DataSourceBinding' **&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Des Rätsels Lösung hierbei war der Eintrag in der persistence.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;&amp;lt;jta-data-source&gt;java:/mypostgresdb&amp;lt;/jta-data-source&gt;&lt;br /&gt;&lt;br /&gt;versus&lt;br /&gt;&lt;br /&gt;&amp;lt;jta-data-source&gt;&lt;br /&gt;  java:/mypostgresdb&lt;br /&gt;&amp;lt;/jta-data-source&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Diese Datasource MUSS zwingend in einer Zeile erfolgen, ein Zeilenumbruch innerhalb des jta-data-source-Tags ist nicht möglich.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-2894249243438082861?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/2894249243438082861/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/fehlermeldung.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2894249243438082861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/2894249243438082861'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/fehlermeldung.html' title='Missing dependencies - JBoss 5 Deployment'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-453612987770054973</id><published>2009-07-03T04:48:00.000-07:00</published><updated>2009-07-03T04:53:37.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb3'/><title type='text'>Webservices mit EJB3 - Teil II</title><content type='html'>Mittlerweile konnte ich (mit ein Wenig Hilfe, Danke an dieser Stelle ;) ) feststellen, daß das Benutzen von Webservice-Clients in Java6 auch ohne Axis2 möglich ist. Auch den für Eclipse erwähnten Webservice-Client-Wizzard kann man ersetzen, indem man direkt die von diesem Wizzard aufgerufene EXE namens wsimport.exe aufruft, welche in JDK6 enthalten ist. Eine genauere, aber kompakte Beschreibung, wie man vorzugehen hat, findet sich auch hier:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vogella.de/articles/JavaWebservice/article.html#wsexample_client"&gt;http://www.vogella.de/articles/JavaWebservice/article.html#wsexample_client&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Viel Spaß beim Ausprobieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-453612987770054973?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/453612987770054973/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/webservices-mit-ejb3-teil-ii.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/453612987770054973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/453612987770054973'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/07/webservices-mit-ejb3-teil-ii.html' title='Webservices mit EJB3 - Teil II'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-1230080995381360689</id><published>2009-06-20T13:05:00.000-07:00</published><updated>2009-06-20T13:35:27.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web page editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Validation'/><title type='text'>XHTML in Eclipse validieren</title><content type='html'>Ich bin derzeit am Erstellen einer Webapplikation mit JSF. Dabei benutze ich Facelets und somit &lt;span style="font-weight: bold;"&gt;.xhtml&lt;/span&gt;-Seiten anstatt der herkömlichen .jsf-Seiten. Die normale Eclipse Ganymede Installation unterstützt allerdings erstmal im &lt;span style="font-weight: bold;"&gt;Web page editor &lt;/span&gt;keine Validierung von XHTML. Auch die Auto-Vervollständigung mittels Code Assistent will nicht so, wie man es gewohnt ist. Diese Probleme kann man jedoch ändern unter&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows&lt;/li&gt;&lt;li&gt;Preferences&lt;/li&gt;&lt;li&gt;General&lt;/li&gt;&lt;li&gt;Content Types&lt;/li&gt;&lt;li&gt;JSP&lt;/li&gt;&lt;li&gt;File associations -&gt; Add...&lt;/li&gt;&lt;/ul&gt;Da ich das für sehr nützlich halte und selbst immer mal wieder darüber stolpere, poste ich diese Info zusammen mit dem Screenshot kurz an dieser Stelle. Kann aber durchaus sein, daß das Editieren mit den JBoss Tools noch komfortabler von statten geht.  Nur sind diese nicht immer in jedem Eclipse installiert.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qBoznKdu18o/Sj1B4w_RDxI/AAAAAAAAFrw/_LEIhbVar0A/s1600-h/validation.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 385px; height: 400px;" src="http://4.bp.blogspot.com/_qBoznKdu18o/Sj1B4w_RDxI/AAAAAAAAFrw/_LEIhbVar0A/s400/validation.JPG" alt="" id="BLOGGER_PHOTO_ID_5349504375864758034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Desweiteren bin ich mir nicht sicher, einen Tipp in dieser Arbeit bereits einmal bei &lt;a href="http://www.javathreads.de/"&gt;javathreads.de&lt;/a&gt; nachgelesen zu haben. Falls mich mein Gedächtnis trügt, lohnt es sich dennoch trotzdem, ab und an bei diesem Blog vorbeizusehen ;) Ich jedenfalls halte es für einen großen Vorteil, mit RSS-Feeds zu arbeiten und sich bei vielen guten Java-Seiten und Blogs auf dem Laufenden zu halten. Das erweitert das Wissen um Java ungemein. Wer ein Google Konto besitzt, kann dafür gleich auf seiner personalisierten iGoogle-Startseite den NewsReader sowie GoogleMail angezeigt bekommen und im NewsReader sogar anhand von Begriffen nach Artikeln über seine abonnierten Quellen suchen lassen. Aber ich schweife ab... ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-1230080995381360689?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/1230080995381360689/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/xhtml-in-eclipse-validieren.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1230080995381360689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1230080995381360689'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/xhtml-in-eclipse-validieren.html' title='XHTML in Eclipse validieren'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qBoznKdu18o/Sj1B4w_RDxI/AAAAAAAAFrw/_LEIhbVar0A/s72-c/validation.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3900276352246619489</id><published>2009-06-18T07:05:00.000-07:00</published><updated>2009-06-18T14:05:45.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb3'/><title type='text'>Webservices mit EJB3</title><content type='html'>In einem schon etwas älteren &lt;a href="http://java-abwaschbar.blogspot.com/2009/05/shared-persistence_11.html"&gt;Artikel&lt;/a&gt; bin ich bereits auf das Arbeiten mit JPA / EJB3 eingegangen. Ziel war es, mit Entity Beans Datenbanktabellen generieren zu lassen. In EJB3 Projekten kommen aber neben den Entity Beans natürlich auch Stateless und Statefull Session Beans zum Einsatz.  Darin wird die Geschäftslogik gehalten. In diesem Artikel will ich nun etwas kompakt zeigen, wie diese Stateless Session Beans als Webservices genutzt werden können und wie man per SOAP auf diese Webservices zugreifen kann.&lt;br /&gt;&lt;br /&gt;Entscheidend sind dabei folgende Annotations, die mal anhand eines Beispieles aufgezeigt werden:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;package de.mortensenit.webservicedemo.person.actions;&lt;br /&gt;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import javax.ejb.Stateless;&lt;br /&gt;import javax.jws.WebMethod;&lt;br /&gt;import javax.jws.WebParam;&lt;br /&gt;import javax.jws.WebService;&lt;br /&gt;import javax.jws.soap.SOAPBinding;&lt;br /&gt;import javax.jws.soap.SOAPBinding.Style;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.PersistenceContext;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Session Bean implementation class &lt;code&gt;PersonActionDemo&lt;/code&gt;&lt;br /&gt; * &lt;br /&gt; * © 2009&lt;br /&gt; * &lt;br /&gt; * @author Frederik Mortensen&lt;br /&gt; */&lt;br /&gt;@WebService&lt;br /&gt;@SOAPBinding(style = Style.RPC)&lt;br /&gt;@Stateless&lt;br /&gt;public class PersonActionDemo&lt;br /&gt; implements  PersonActionDemoLocal,&lt;br /&gt;    PersonActionDemoRemote {&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Person maintainance webservice, takes care of inserting and upating the&lt;br /&gt;  * person&lt;br /&gt;  * &lt;br /&gt;  * @param surname&lt;br /&gt;  * @param forename&lt;br /&gt;  * @param birthdate&lt;br /&gt;  * @return&lt;br /&gt;  */&lt;br /&gt; @Override&lt;br /&gt; @WebMethod&lt;br /&gt; public Boolean maintainPersonWS(&lt;br /&gt;     @WebParam(name = "surname") String surname,&lt;br /&gt;     @WebParam(name = "forename") String forename,&lt;br /&gt;     @WebParam(name = "birthdate") Date birthdate) {&lt;br /&gt;&lt;br /&gt;  // do soemething...&lt;br /&gt;  return true;&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Die ersten zwei verwendeten Annotations betreffen dabei die Klasse an sich und lauten:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;@WebService&lt;/li&gt;&lt;li&gt;@SOAPBinding(style=Style.RPC)&lt;/li&gt;&lt;/ul&gt;Diese Annotations ermöglichen es der Klasse, als Webservice Endpoint zu fungieren, weitere Parameter der Annotation sind optional.&lt;br /&gt;&lt;br /&gt;Die eigentliche, aufgerufene Methode des Webservices erhält ebenfalls Annotationen:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;@WebMethod&lt;/li&gt;&lt;li&gt;@WebParam(name="surname")&lt;/li&gt;&lt;/ul&gt;Mit der &lt;span style="font-weight: bold;"&gt;WebParam Annotation &lt;/span&gt;hat man hier die Möglichkeit, den nach aussen hin sichtbaren Parameter des Webservices umzubenennen und sprechende Namen zu verwenden.&lt;br /&gt;&lt;br /&gt;Deployt man nun sein Projekt auf dem Application Server, sieht man in der &lt;a href="http://localhost:8080/jmx-console/"&gt;JBoss Management Console&lt;/a&gt; unter "jboss.ws" den eigenen, neu kreierten &lt;span style="font-weight: bold;"&gt;Endpoint&lt;/span&gt;. Desweiteren wird nun von JBoss aus eine &lt;span style="font-weight: bold;"&gt;WSDL-Datei&lt;/span&gt; generiert, welche unter folgendem Pfad erreichbar sein sollte:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://localhost:8080/{context}/{endpoint}?wsdl&lt;/span&gt; (Context und Endpoint sieht man in der Management Console)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;Alles, was man nun zu seinem Glück noch braucht, ist ein Webservice Client. Den kann man in den aktuellen IDEs wie Eclipse und NetBeans bereits selbständig generieren lassen. Auch in .NET ist dies vollautomatisch möglich. Wer es in Eclipse ausprobieren möchte, muß zuerst &lt;a href="http://ws.apache.org/axis2/"&gt;Axis2&lt;/a&gt; installiert haben. In Eclipse sollte man nun unter...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows&lt;/li&gt;&lt;li&gt;Preferences&lt;/li&gt;&lt;li&gt;Web Services&lt;/li&gt;&lt;li&gt;Axis2 Preferences&lt;/li&gt;&lt;/ul&gt;die Axis2 Runtime Location angeben. Ist dies einmal gespeichert, steht ein neuer Wizzard zur Verfügung:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;File&lt;/li&gt;&lt;li&gt;New&lt;/li&gt;&lt;li&gt;Other&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Web Service Client&lt;/li&gt;&lt;/ul&gt;Dort muß unter "Service definition" der Pfad zur WSDL-Datei angegeben werden.  Nun wird ein Stub und ein CallbackHandler generiert. Wer statt mit Eclipse lieber den klassischen Weg über die Konsole gehen möchte, kann auch direkt die nötige Batch-Datei aufrufen. Zu finden ist diese unter:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;{axis2installordner}\bin\wsdl2java.bat&lt;/axis2-installationsordner&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ruft man diese Batch-Datei mit dem Parameter -uri auf und gibt den Pfad zur WSDL-Datei an, wird ein src-Ordner erstellt, der ebenfalls Stub und CallbackHandler als generierte Klassen enthält.&lt;br /&gt;&lt;br /&gt;Sind also Stub und co. durch den Wizzard erst einmal generiert, kann man folgende Testklasse mit Main-Methode erstellen, um den SOAP-Aufruf durchzuführen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;package de.mortensenit.webserviceclientdemo.person;&lt;br /&gt;&lt;br /&gt;import java.rmi.RemoteException;&lt;br /&gt;import java.util.Calendar;&lt;br /&gt;import org.apache.axis2.AxisFault;&lt;br /&gt;import de.mortensenit.webserviceclientdemo.PersonActionDemoServiceStub.MaintainPersonWS;&lt;br /&gt;&lt;br /&gt;public class SoapTest {&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;   //filling webservice parameters&lt;br /&gt;   MaintainPersonWS webService = new MaintainPersonWS();&lt;br /&gt;   webService.setForename("Frederik");&lt;br /&gt;   webService.setSurname("Mortensen");&lt;br /&gt;   webService.setBirthdate(Calendar.getInstance());&lt;br /&gt;&lt;br /&gt;   //calling webservice&lt;br /&gt;   new PersonActionsServiceStub().maintainPersonWS(webService);&lt;br /&gt;  }&lt;br /&gt;  catch (AxisFault axisFault) {&lt;br /&gt;   axisFault.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;  catch (RemoteException remoteException) {&lt;br /&gt;   remoteException.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ruft man nun die Main-Methode auf, wird der Webservice via SOAP aufgerufen und mit den Parametern befüllt, die man ausgewählt hat. Soeben haben Sie Ihren ersten Webservice erstellt. Sollten Probleme oder Fragen auftreten, bin ich gerne bereit, auf Kommentare auch per E-mail zu antworten und zu helfen.&lt;br /&gt;&lt;br /&gt;Mögliche Fehlerquellen:&lt;br /&gt;Leider hat mir die bei mir im Einsatz befindliche JBoss-Version jboss-4.2.3.GA echte Bauchschmerzen bereitet mit folgender Exception:&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;&lt;br /&gt;ERROR [SOAPFaultHelperJAXWS] SOAP request exception&lt;br /&gt;java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage&lt;br /&gt;&lt;/cite&gt;&lt;br /&gt;Herausgekommen ist, daß sich diese JBoss-Variante mit der aktuellen Java6-Version nicht verträgt. Es gibt jedoch ein leichtes Workaround. Man muß die von JBoss verwendete Datei &lt;span style="font-weight: bold;"&gt;{jboss-installordner}\lib\jboss-saaj.jar&lt;/span&gt; in das Unterverzeichnis &lt;span style="font-weight: bold;"&gt;endorsed &lt;/span&gt;kopieren. Dies führt dazu, daß die von JBoss mitgelieferte Implementierung der Klasse SOAPMessage vorgezogen wird vor dem installierten JRE.&lt;br /&gt;&lt;br /&gt;Quellen:&lt;br /&gt;&lt;a href="https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html"&gt;https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3900276352246619489?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3900276352246619489/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/webservices-mit-ejb3.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3900276352246619489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3900276352246619489'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/webservices-mit-ejb3.html' title='Webservices mit EJB3'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-7156651218448323617</id><published>2009-06-11T10:33:00.000-07:00</published><updated>2009-06-12T05:51:17.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study Guide'/><category scheme='http://www.blogger.com/atom/ns#' term='Prüfung'/><category scheme='http://www.blogger.com/atom/ns#' term='Exam'/><category scheme='http://www.blogger.com/atom/ns#' term='SCBCD'/><title type='text'>Auf zu neuen Zielen ... SCBCD</title><content type='html'>Die Entscheidung ist gefallen! Der &lt;span style="font-weight: bold;"&gt;Sun Certified Business Components Developer&lt;/span&gt; (SCBCD) wartet auf mich. Der SCJP hat meinen Appetit nach mehr geweckt. Außerdem befasse ich mich ja sowieso bereits mit den Thematiken, die Inhalt dieser Prüfung sind. Nur diesmal scheint es etwas schwerer zu werden. Nicht nur aufgrund des neuen Stoffes, sondern leider auch aufgrund der Tatsache, daß es keine aktuellen Bücher als Prüfungsvorbereitung gibt.&lt;br /&gt;&lt;br /&gt;Eine Übersicht aller Zertifizierungen findet man hier:&lt;br /&gt;&lt;a href="https://www.suntrainingcatalogue.com/eduserv/client/learningPath.do?p=/training/certification/java/index.html"&gt;https://www.suntrainingcatalogue.com/eduserv/client/learningPath.do?p=/training/certification/java/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Die genaue Bezeichnung der von mir gewählten Prüfung lautet:&lt;br /&gt;&lt;a href="https://www.suntrainingcatalogue.com/eduserv/client/loadCourse.do?coCourseCode=CX-310-091"&gt;Sun Certified Business Component Developer for the Java Platform, Enterprise Edition 5 (CX-310-091)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hierzu empfohlen werden von SUN zwei Schulungen, die man beispielsweise als CD-ROM oder Web-Variante käuflich erwerben kann:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.suntrainingcatalogue.com/eduserv/client/learningPath.do?p=/training/certification/java/prepare_scbcd.html"&gt;Lernpfad&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.suntrainingcatalogue.com/eduserv/client/loadCourse.do?coId=de_DE_CDJ-351-EE5&amp;amp;coCourseCode=CDJ-351-EE5&amp;amp;l=de_DE"&gt;CD-ROM 1 - Business Component Development With Enterprise JavaBeans Technology (CDJ-351-EE5)&lt;/a&gt;, 700 € netto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.suntrainingcatalogue.com/eduserv/client/loadCourse.do?coId=de_DE_CDJ-310-EE5&amp;amp;coCourseCode=CDJ-310-EE5&amp;amp;l=de_DE"&gt;CD-ROM 2 - Developing Applications for the Java EE Platform (CDJ-310-EE5)&lt;/a&gt;, 720 € netto.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Da ich bisher mit den CD-ROMs als Prüfungsvorbereitung keine Erfahrungen gemacht habe, würde ich mich über ein Feedback und einen Erfahrungsbericht natürlich sehr freuen. Bis dahin kann ich zumindest allen interessierten Lesern schon einmal folgende Links nahelegen, um nähere Informationen zur Prüfungsvorbereitung zu erhalten:&lt;br /&gt;&lt;br /&gt;Die Java-Ranch und deren SCBCD-Forum:&lt;br /&gt;&lt;a href="http://www.coderanch.com/forums/f-70/EJB-Certification-SCBCD"&gt;http://www.coderanch.com/forums/f-70/EJB-Certification-SCBCD&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Der SCBCD 5.0 Study Guide von Mikalai Zaikin:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://java.boot.by/scbcd5-guide/"&gt;http://java.boot.by/scbcd5-guide/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wenn ich weitere Informationen über die Prüfung finde, stelle ich sie hier gerne zur Verfügung. Ich würde mich aber wie schon erwähnt freuen, auch von euch Feedback und Tipps zu erhalten. Allen, die diese Prüfung selbst demnächst in Angriff nehmen, wünsche ich natürlich viel Glück und Erfolg! Oder wie man auf klingonisch (&lt;a href="http://picasaweb.google.de/lh/photo/CvQe6MUATRzAlHJlnH0JZw?authkey=Gv1sRgCPuk-62E_tXcGw&amp;amp;feat=directlink"&gt;einer Sprache, die Java bereits mit eigenem language code unterstützt&lt;/a&gt;) so schön sagt,..&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;i style="font-weight: bold;"&gt;Qapla’!&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-7156651218448323617?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/7156651218448323617/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/auf-zu-neuen-zielen-scbcd.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7156651218448323617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7156651218448323617'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/auf-zu-neuen-zielen-scbcd.html' title='Auf zu neuen Zielen ... SCBCD'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-1481404567957738967</id><published>2009-06-03T12:32:00.000-07:00</published><updated>2009-06-03T13:22:00.089-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Syntax'/><category scheme='http://www.blogger.com/atom/ns#' term='Quellcode'/><category scheme='http://www.blogger.com/atom/ns#' term='SyntaxHighlighter'/><category scheme='http://www.blogger.com/atom/ns#' term='formatieren'/><title type='text'>SyntaxHighlighter</title><content type='html'>Ich habe gerade ein wenig am Blog geschraubt und bin nun glücklicherweise in der Lage, den geposteten Quellcode noch sauberer formatiert anzeigen zu lassen. Inklusive der Möglichkeit, den Quellcode kopieren und ausdrucken zu können sowie mit Anzeige von Zeilennummern. Zu verdanken ist diese Anzeige einem netten und leicht einzubindenden Tool namens &lt;span style="font-weight:bold;"&gt;SyntaxHighlighter&lt;/span&gt;. Zu finden ist es hier:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Und installierbar ist es umso einfacher. Der folgende Quellcode dient somit gleichzeitig als Installationsanleitung und erste Demo ;) Einfach unter &lt;span style="font-weight:bold;"&gt;Anpassen&lt;/span&gt; in der Menüleiste von blogger auf die Lasche &lt;span style="font-weight:bold;"&gt;Layout&lt;/span&gt; wechseln, dort auf &lt;span style="font-weight:bold;"&gt;HTML bearbeiten&lt;/span&gt; klicken und zu guter Letzt nach dem &lt;span style="font-weight:bold;"&gt;&amp;lt;head&gt;&lt;/span&gt; Tag folgende Zeilen einfügen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;!-- ANFANG SyntaxHighlighter//--&gt;&lt;br /&gt;&amp;lt;link href="'http://alexgorbatchev.com/pub/sh/2.0.278/styles/shCore.css'" rel="'stylesheet'" type="'text/css'/"&gt;&lt;br /&gt;&amp;lt;link href="'http://alexgorbatchev.com/pub/sh/2.0.278/styles/shThemeDefault.css'" rel="'stylesheet'" type="'text/css'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shCore.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushJScript.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushCSharp.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushSql.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushJava.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script src="'http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushXml.js'" type="'text/javascript'/"&gt;&lt;br /&gt;&amp;lt;script type="'text/javascript'"&gt;&lt;br /&gt;SyntaxHighlighter.config.bloggerMode = true;&lt;br /&gt;SyntaxHighlighter.all();&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;!-- ENDE SyntaxHighlighter //--&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wenn man diese Änderungen speichert und beim nächsten Post im &lt;span style="font-weight:bold;"&gt;HTML-Bearbeitungsmodus&lt;/span&gt; das folgende Tag nutzt, erscheint der Quellcode künftig formatiert:&lt;br /&gt;&lt;br /&gt;&amp;lt;pre class="brush: java"&gt;&lt;br /&gt;public class Test {&lt;br /&gt;  private String name = "myName";&lt;br /&gt;}&lt;br /&gt;&amp;lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;public class Test {&lt;br /&gt;  private String name = "myName";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Vielleicht habe ich damit ja dem einen oder anderen helfen können.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-1481404567957738967?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/1481404567957738967/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/manage-users-disconnect-return-public.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1481404567957738967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1481404567957738967'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/06/manage-users-disconnect-return-public.html' title='SyntaxHighlighter'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-7644184566716473789</id><published>2009-05-18T07:50:00.000-07:00</published><updated>2009-05-18T08:02:25.678-07:00</updated><title type='text'>UTF8 in Eclipse - OpenSource trotz Windows</title><content type='html'>Sollte der eine oder andere Leser planen, demnächst ein neues Projekt zu starten und dies eventuell sogar online zu stellen, habe ich hier einen kleinen Tipp. Wichtig ist es auch für Unternehmen, in denen Windows und Linux als Betriebssysteme für Entwicklungsrechner gemischt eingesetzt werden. Denn sollte man einmal eine eingecheckte Datei eines Kollegen bekommen und sich über Sonderzeichen wundern, wird das wohl an den unterschiedlichen Zeichensätzen liegen.&lt;br /&gt;&lt;br /&gt;Um daher nicht nach der Hälfte des Projektes alle eingecheckten Dateien noch einmal anfassen zu müssen, empfiehlt sich in Eclipse folgende Einstellung:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"Windows - Preferences" -&gt; "General - Text File Encoding" - Other: UTF-8.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Somit sollten zumindest alle Java-Dateien in UTF-8 gespeichert sein. Die .properties-Dateien jedoch sind weiterhin in LATIN-1 (ISO 8859-1) gespeichert. Wer darüber mehr lesen will, kann dies hier nachlesen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thoughtsabout.net/blog/archives/000044.html"&gt;http://www.thoughtsabout.net/blog/archives/000044.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-7644184566716473789?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/7644184566716473789/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/utf8-in-eclipse-opensource-trotz.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7644184566716473789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/7644184566716473789'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/utf8-in-eclipse-opensource-trotz.html' title='UTF8 in Eclipse - OpenSource trotz Windows'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-4909905610747652773</id><published>2009-05-15T05:52:00.000-07:00</published><updated>2009-05-15T05:56:55.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Versteckte Dateien'/><title type='text'>Eclipse - Einblenden versteckter Dateien</title><content type='html'>Es passiert mir immer mal wieder, daß Eclipse interne Konfigurationsdateien anpasst, die für das Projekt benötigt werden. Da diese mit einem . als Dateinamen anfangen, werden sie jedoch im Package Explorer nicht angezeigt. Löscht man nun ein eingechecktes Projekt beispielsweise und checkt es später wieder aus in SVN oder anderen Versionsverwaltungstools, kann es passieren, daß das Projekt invalid ist oder weitere Konfiguration benötigt, die man bereits vorgenommen hatte und von der man davon ausging, sie wäre eingecheckt.&lt;br /&gt;&lt;br /&gt;Um das zu verhindern, kann man im Package Explorer in der oberen rechten Ecke auf ein nach unten zeigendes Dreieck klicken. Dabei öffnet sich ein Kontextmenü, in dem man unter anderem die Filter editieren kann. In diesem Filterdialog muß der Haken bei &lt;span style="font-weight:bold;"&gt;.* resources. &lt;/span&gt; weggenommen werden. Dann sieht man wirklich alles, was man benötigt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-4909905610747652773?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/4909905610747652773/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/eclipse-einblenden-versteckter-dateien.html#comment-form' title='5 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4909905610747652773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4909905610747652773'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/eclipse-einblenden-versteckter-dateien.html' title='Eclipse - Einblenden versteckter Dateien'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-8113894080400264008</id><published>2009-05-11T14:49:00.000-07:00</published><updated>2009-06-03T13:56:41.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='persistence'/><category scheme='http://www.blogger.com/atom/ns#' term='jar-list'/><category scheme='http://www.blogger.com/atom/ns#' term='esb'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb3'/><category scheme='http://www.blogger.com/atom/ns#' term='shared'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Shared persistence</title><content type='html'>Nachdem ich im Internet viel gesucht und nicht viel gefunden habe, habe ich mich dazu entschlossen, selbst einen kleinen Artikel zu folgendem Thema zu verfassen:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"shared persistence / jboss / jpa"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"multiple ejb3 modules sharing one persistence"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Die Anforderung ist relativ einfach erzählt. Man möchte:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;eine mehrschichtige Anwendung entwickeln&lt;/li&gt;&lt;br /&gt;&lt;li&gt;möglichst alle Module einzeln austauschbar gestalten&lt;/li&gt;&lt;br /&gt;&lt;li&gt;auf einem Application Server deployen (in unserem Fall JBoss)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;möglichst für alle Module nur einen Persistence Kontext definieren&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;die Java Persistence API (JPA) in Verbindung mit EJB3 verwenden, um keine harten Inserts und Selects mehr selbst pflegen zu müssen&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Grundinstallation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Und wie sieht das ganze nun aus? Eine vollständige und funktionierende Installation von JDK wird hier vorausgesetzt. Als Datenbank setze ich hier PostgreSQL ein. Um eine andere Datenbank nutzen zu können, muß allerdings nur die persistence.xml angepasst werden. Dazu ändert man den dort eingestellten Dialect entsprechend ab. Eine funktionierende Installation eines AppServers, hier JBoss, wird ebenfalls benötigt, wobei JBoss in dem Fall ja nur entzippt werden muß. Nach der Installation des JBoss muß im &lt;span style="font-style: italic;"&gt;server/default/lib&lt;/span&gt; - Verzeichnis eine JDBC-Treiberdatei, z.B. postgresql-8.3-603.jdbc3.jar, abgelegt werden.&lt;br /&gt;&lt;br /&gt;Als nächstes legen wir eine Testdatenbank an. Dies passiert in postgreSQL über den pgAdmin III.  Der Datenbank wird nun der Produktname gegeben, beispielsweise &lt;span style="font-weight: bold;"&gt;myproduct&lt;/span&gt;. Um nun dem JBoss Application Server zu ermöglichen, auf diese DB zugreifen zu können, muß im &lt;span style="font-style: italic;"&gt;server/default/deploy&lt;/span&gt; - Verzeichnis eine sogenannte DataSource hinzugefügt werden. Diese verweist auf den gewählten Datenbankdialekt und kann wie folgt aussehen:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;myproduct-ds.xml:&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;datasources&gt;&lt;br /&gt;  &amp;lt;local-tx-datasource&gt;&lt;br /&gt;    &amp;lt;jndi-name&gt;myproductds&amp;lt;/jndi-name&gt;&lt;br /&gt;    &amp;lt;connection-url&gt;&lt;br /&gt;      jdbc:postgresql://localhost:5432/myproduct&lt;br /&gt;    &amp;lt;/connection-url&gt;&lt;br /&gt;    &amp;lt;driver-class&gt;org.postgresql.Driver&amp;lt;/driver-class&gt;&lt;br /&gt;    &amp;lt;user-name&gt;postgres&amp;lt;/user-name&gt;&lt;br /&gt;    &amp;lt;password&gt;postgres&amp;lt;/password&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;metadata&gt;&lt;br /&gt;       &amp;lt;type-mapping&gt;PostgreSQL&amp;lt;/type-mapping&gt;&lt;br /&gt;    &amp;lt;/metadata&gt;&lt;br /&gt;  &amp;lt;/local-tx-datasource&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/datasources&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wird nun der Server gestartet und die erzeugte log-Datei geprüft, sollten keine Exceptions auftreten und man sollte in der Management Console unter &lt;a href="http://localhost:8080/jmx-console"&gt;http://localhost:8080/jmx-console&lt;/a&gt; die erzeugte Datenbankverbindung vorfinden. Alternativ kann man auch prüfen, ob in der Log-Datei ein Eintrag ähnlich diesem erfolgt:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=myproductdb' to JNDI name 'java:myproductdb'&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Somit ist eine Datenbankverbindung verfügbar. Was man nun braucht, sind die einzelnen...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Projekte&lt;/b&gt;&lt;br /&gt;In Eclipse ist es relativ einfach, sich folgende Projekte zu erstellen:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Ein Java enterprise archive Projekt (EAR), genannt &lt;i&gt;myproduct&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ein oder mehrere EJB Projekte, als Beispiel sei genannt &lt;i&gt;myproductEJB&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ein leeres Standard Java Project, genannt &lt;i&gt;&lt;b&gt;myproductPersistence&lt;/b&gt;&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Man kann diese Projekte natürlich auch per Hand konfigurieren. Wichtig dabei sind die folgenden Punkte.&lt;br /&gt;&lt;br /&gt;Das EAR Projekt muß eine META-INF/application.xml beinhalten. Diese solle ähnlich der folgenden aussehen...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;application.xml:&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt; &amp;lt;application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xmlns="http://java.sun.com/xml/ns/javaee"&lt;br /&gt; xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee&lt;br /&gt; http://java.sun.com/xml/ns/javaee/application_5.xsd"&lt;br /&gt; id="Application_ID" version="5"&gt;&lt;br /&gt;  &amp;lt;display-name&gt;myproduct&amp;lt;/display-name&gt;&lt;br /&gt;  &amp;lt;module&gt;&lt;br /&gt;    &amp;lt;ejb&gt;myproductEJB.jar&amp;lt;/ejb&gt;&lt;br /&gt;  &amp;lt;/module&gt;&lt;br /&gt;  &amp;lt;module&gt;&lt;br /&gt;    &amp;lt;ejb&gt;myproductPersistence.jar&amp;lt;/ejb&gt;&lt;br /&gt;  &amp;lt;/module&gt;&lt;br /&gt;&amp;lt;/application&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Der Inhalt des EJB Projektes beschränkt sich in unserem Beispiel auf eine Entity, deren Tabelle erzeugt werden soll. In der Praxis werden aber für die einzelnen, austauschbaren Module jeweils eigene EJB Projekte erzeugt und somit eigene &lt;i&gt;ejbmodule.jar&lt;/i&gt; Dateien deployed. Die Testbean sieht wie folgt aus...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Person Entity:&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Person implements Serializable {&lt;br /&gt;&lt;br /&gt;        private static final long serialVersionUID = -3293858472L;&lt;br /&gt;&lt;br /&gt;        @Id&lt;br /&gt;        private long Id;&lt;br /&gt;        private String name;&lt;br /&gt;&lt;br /&gt;        public long getId() {&lt;br /&gt;                return Id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void setId(long id) {&lt;br /&gt;                Id = id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public String getName() {&lt;br /&gt;                return name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void setName(String name) {&lt;br /&gt;                this.name = name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wichtig hierbei sind die verwendeten Annotations &lt;i&gt;@Entity&lt;/i&gt; und &lt;i&gt;@Id&lt;/i&gt;. Diese sind völlig ausreichend, um die Tabelle durch Hibernate erzeugen zu lassen. Für die Vergabe der IDs sollte man natürlich von long-Variablen absehen und stattdessen besser UUID benutzen, aber das ist ein anderes Thema.&lt;br /&gt;&lt;br /&gt;Zu guter Letzt bleibt noch das Standard Java Projekt, welches das wichtigste für dieses Beispiel ist. Dieses Projekt ist nicht zwingend ein JPA Projekt, wie es in Eclipse angeboten wird. Es reicht, darin einen Ordner &lt;i&gt;META-INF&lt;/i&gt; mit einer &lt;i&gt;persistence.xml&lt;/i&gt; zu erzeugen. Der Rest des Projektes, welches später als &lt;i&gt;myproductPersistence.jar&lt;/i&gt; deployed wird und uns den Persistenzkontext liefert, kann leer bleiben. Und hier die...&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;persistence.xml:&lt;/b&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;persistence version="1.0"&lt;br /&gt; xmlns="http://java.sun.com/xml/ns/persistence"&lt;br /&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:schemaLocation="http://java.sun.com/xml/ns/persistence&lt;br /&gt; http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt;&lt;br /&gt;   &amp;lt;persistence-unit name="myproduct"&lt;br /&gt;                        transaction-type="JTA"&gt;&lt;br /&gt;     &amp;lt;jta-data-source&gt;&lt;br /&gt;       java:/myproductdb&lt;br /&gt;     &amp;lt;/jta-data-source&gt;&lt;br /&gt;     &amp;lt;jar-file&gt;&lt;br /&gt;       myproductEJB.jar&lt;br /&gt;     &amp;lt;/jar-file&gt;&lt;br /&gt;     &amp;lt;properties&gt;&lt;br /&gt;       &amp;lt;property name="hibernate.dialect"&lt;br /&gt;               value="org.hibernate.dialect.PostgreSQLDialect"/&gt;&lt;br /&gt;       &amp;lt;property name="hibernate.hbm2ddl.auto"&lt;br /&gt;               value="update"/&gt;&lt;br /&gt;     &amp;lt;/properties&gt;&lt;br /&gt;   &amp;lt;/persistence-unit&gt;&lt;br /&gt;&amp;lt;/persistence&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Damit sind alle nötigen Schritte vollzogen, um die Tabelle erzeugen zu lassen. Für jedes Modul wird ein weiteres EJB Projekt mit eigenen Entity Beans erzeugt. Alle diese Projekte nutzen die gemeinsame Persistenz und werden durch Hibernate automatisch erkannt, solange man die einzelnen EJB Projekte als &lt;i&gt;jar-file&lt;/i&gt; Einträge in der &lt;i&gt;persistence.xml&lt;/i&gt; aufführt.&lt;br /&gt;&lt;br /&gt;Wird nun die EAR Datei erzeugt und in das &lt;i&gt;server/default/deploy&lt;/i&gt; - Verzeichnis des JBoss gelegt, sollte eine neue Tabelle namens Person in eurem Besitz sein. Dabei muss darauf geachtet werden, daß die EAR-Datei die Jar-Dateien &lt;i&gt;myproductEJB.jar&lt;/i&gt; und &lt;i&gt;myproductPersistence.jar&lt;/i&gt; beinhaltet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hinweis:&lt;/b&gt; Nutzt man JBoss 4.x, muß ein vorhandener Bug noch durch einen Workaround ausgebessert werden, indem man im &lt;i&gt;&lt;jar-file&gt;&lt;/i&gt; Tag der &lt;i&gt;persistence.xml&lt;/i&gt; als relativen Pfad angibt: &lt;b&gt;../myproductEJB.jar&lt;/b&gt;!&lt;br /&gt;&lt;br /&gt;Sollten bei euch Fehler beim Testen auftreten, könnt ihr diese gerne hier loswerden in der Kommentarfunktion.&lt;br /&gt;&lt;br /&gt;Viel Spaß beim Probieren!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-8113894080400264008?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/8113894080400264008/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/shared-persistence_11.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/8113894080400264008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/8113894080400264008'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/05/shared-persistence_11.html' title='Shared persistence'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-6363802115481553571</id><published>2009-04-20T06:29:00.000-07:00</published><updated>2009-04-20T06:36:07.161-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Verkauf'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle kauft Sun</title><content type='html'>So wie es aussieht, ist die Entscheidung gefallen. Sun wurde wohl nun von Oracle für geschätzte 7,4 Mrd. USD aufgekauft. Das frühere Angebot von IBM wurde ausgeschlagen, weil es preislich wohl für Sun Microsystems uninteressant war. Was dies für die Zukunft von Java bedeutet und wie es weitergehen wird, darauf wird man wohl gespannt sein dürfen.&lt;br /&gt;&lt;a href="quelle:%20http://www.faz.net/d/invest/meldung.aspx?id=103330309"&gt;&lt;br /&gt;&lt;/a&gt;Quelle: &lt;a href="quelle:%20http://www.faz.net/d/invest/meldung.aspx?id=103330309"&gt;http://www.faz.net/d/invest/meldung.aspx?id=103330309&lt;/a&gt;&lt;br /&gt;Quelle: &lt;a href="http://www.sun.com/third-party/global/oracle/index.jsp"&gt;http://www.sun.com/third-party/global/oracle/index.jsp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-6363802115481553571?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/6363802115481553571/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/oracle-kauft-sun.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6363802115481553571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/6363802115481553571'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/oracle-kauft-sun.html' title='Oracle kauft Sun'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-5378385813501616388</id><published>2009-04-14T09:55:00.000-07:00</published><updated>2009-04-14T10:05:13.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Prüfung'/><category scheme='http://www.blogger.com/atom/ns#' term='310-065'/><title type='text'>It´s done... SCJP!</title><content type='html'>Lange genug hab ich es hinausgezogen, oft genug Freunde vertröstet. Jetzt ist es geschafft. Die Prüfung zum Sun Certified Java Programmer (310-065) in Englisch liegt erfolgreich beim ersten Versuch hinter mir. Und das auf Englisch. Würde mich ja interessieren, wer noch alles in Regensburg diese Prüfung abgelegt hat :)&lt;br /&gt;&lt;br /&gt;Wie sich übrigens herausgestellt hat, ist genau das Buch, was ich &lt;a href="http://java-abwaschbar.blogspot.com/2009/04/scjp.html"&gt;empfohlen&lt;/a&gt; habe, auch die beste Vorbereitung, die man für dieses Examen bekommen kann.&lt;br /&gt;&lt;br /&gt;Da ich die Prüfung auf Englisch gemacht habe, hat mir die Zeit gereicht. Allerdings hätte man es wohl auch in den 180 min. geschafft, die einem in Amerika zur Verfügung gestanden wären. Die zusätzliche halbe Stunde habe ich für ein nochmaliges Review der Fragen genutzt. Wie immer gilt, ich stehe per Email oder Kommentarfunktion gerne für Rückfragen zur Verfügung.&lt;br /&gt;&lt;br /&gt;Lang lebe Sun ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-5378385813501616388?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/5378385813501616388/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/its-done-scjp.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5378385813501616388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/5378385813501616388'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/its-done-scjp.html' title='It´s done... SCJP!'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-4980974692710208955</id><published>2009-04-13T11:29:00.000-07:00</published><updated>2009-06-03T15:08:32.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lock'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Threads'/><category scheme='http://www.blogger.com/atom/ns#' term='Nebenläufigkeit'/><title type='text'>Threads / Nebenläufigkeit</title><content type='html'>Hier mal eben ein kleines Beispiel zum Thema Nebenläufigkeit in Java. Ein kleines Beispiel, wie man in Java mit Threads arbeiten kann. Erklärung erfolgt vielleicht demnächst noch, bis dahin hoffe ich einfach, es ist selbsterklärend ;) Ihr könnt aber natürlich jederzeit per Kommentar nachfragen...&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;&lt;br /&gt;public class Test {&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;    final String lock = "theLock";&lt;br /&gt;    &lt;br /&gt;    MyThread a = new MyThread("A");&lt;br /&gt;    MyThread b = new MyThread("B");&lt;br /&gt;    &lt;br /&gt;    a.setLock(lock);&lt;br /&gt;    b.setLock(lock);&lt;br /&gt;    &lt;br /&gt;    Thread anonymous = new Thread() {&lt;br /&gt;      public void run() {&lt;br /&gt;        synchronized(lock) {&lt;br /&gt;          System.out.println("I was active...");&lt;br /&gt;          lock.notifyAll();&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    };&lt;br /&gt;    &lt;br /&gt;    a.start();&lt;br /&gt;    b.start();&lt;br /&gt;    anonymous.start();&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MyThread extends Thread {&lt;br /&gt;  &lt;br /&gt;  public MyThread(String name) {&lt;br /&gt;    super(name);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private String lock;&lt;br /&gt;  &lt;br /&gt;  public void setLock(String lock) {&lt;br /&gt;    this.lock = lock;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void run() {&lt;br /&gt;    synchronized(lock) {&lt;br /&gt;      try {&lt;br /&gt;        lock.wait();&lt;br /&gt;        System.out.println(getName()&lt;br /&gt;          + " holds lock: " + holdsLock(lock));&lt;br /&gt;      }&lt;br /&gt;      catch(InterruptedException e) {&lt;br /&gt;        e.printStackTrace();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-4980974692710208955?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/4980974692710208955/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/threads-nebenlaufigkeit-in-java-unter.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4980974692710208955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4980974692710208955'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/threads-nebenlaufigkeit-in-java-unter.html' title='Threads / Nebenläufigkeit'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-1176692401903432249</id><published>2009-04-07T01:18:00.001-07:00</published><updated>2009-04-09T12:51:06.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='Prüfung'/><category scheme='http://www.blogger.com/atom/ns#' term='Buch'/><title type='text'>SCJP</title><content type='html'>In letzter Zeit ist es sehr ruhig hier im Blog gewesen. Das liegt daran, daß ich mich auf die Prüfung zum Sun Certified Java Programmer (SCJP) vorbereite. Wer sich ebenfalls für dieses Thema interessiert, kann mich gerne einmal anschreiben. Grundsätzlich kann ich aber für alle Interessierten, die nicht vor englischer Literatur zurückschrecken, das folgende Buch wärmstens empfehlen:&lt;br /&gt;&lt;br /&gt;Sun Certified Programmer for Java 6 Study Guide - Exam 310-065&lt;br /&gt;Verlag: Osborne-McGraw-Hill&lt;br /&gt;Autoren: Kathy Sierra, Bert Bates&lt;br /&gt;ISBN: 978-0071591065&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?t=javaundderabw-21&amp;o=3&amp;p=8&amp;l=as1&amp;asins=0071591060&amp;fc1=000000&amp;IS1=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="1"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Ich habe bereits 2 Bücher davor gelesen (darunter auch in Deutsch), welche zum einen nicht mehr up-to-date waren und zum anderen Beispiele und Erklärungen hatten, daß einem grauste (gespickt von Fehlern!). Das von mir erwähnte Buch ist alleine schon deshalb ein Muss für alle Prüflinge, weil es direkt von den Machern der SCJP-Prüfung stammt. Sie arbeiten bei SUN und haben die Prüfungen entworfen. Das heißt, diese Leute wissen, wovon sie reden ;) In dem Buch sind jede Menge Tipps und Warnungen, was in der Prüfung alles abgefragt werden kann. Außerdem ist eine CD-ROM mit dabei, mit deren Hilfe man insgesamt 3 Prüfungen erfolgreich durchpauken kann und sich somit umfangreich auf den echten Test vorbereiten kann. Und zu guter Letzt ist es so gründlich, leicht verständlich und gleichzeitig witzig geschrieben, daß es sogar für Programmierneulinge als Einsteigerbuch geeignet ist.&lt;br /&gt;&lt;br /&gt;Bleibt bei der aktuellen Entwicklung nur noch zu hoffen, daß ich SCJP werde, bevor es SUN nicht mehr gibt ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-1176692401903432249?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/1176692401903432249/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/scjp.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1176692401903432249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/1176692401903432249'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/04/scjp.html' title='SCJP'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-3055199225145376671</id><published>2009-01-30T14:46:00.000-08:00</published><updated>2009-06-22T12:01:26.898-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Memory'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='Exception'/><category scheme='http://www.blogger.com/atom/ns#' term='PermGen Space'/><title type='text'>OutOfMemoryError: PermGen Space</title><content type='html'>Seit meinen Erfahrungen mit dem JBoss Application Server hab ich des öfteren eine Fehlermeldung erhalten, die vielen anderen wohl auch bekannt vorkommt. Arbeitet man länger mit dem JBoss und deployt mehrmals während der Entwicklung seine Webapplikation, kann es schon durchaus vorkommen, daß der AppServer keinen Speicher mehr hat.&lt;br /&gt;&lt;br /&gt;Wer nun Eclipse nutzt, kann dieses Problem in der Server-Ansicht mittels Doppelklick und Ändern der Werte ändern, indem man dem unter "Open Launch Configuration" - Lasche Arguments - folgende VM Argumente ändert bzw. einträgt:&lt;br /&gt;&lt;br /&gt;-Dprogram.name=run.bat -Djava.endorsed.dirs="C:/Programme/jboss-4.2.3.GA/bin/../lib/endorsed" -Xms128m -Xmx512m &lt;span style="font-weight: bold;"&gt;-XX:PermSize=128 -XX:MaxPermSize=256m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Welcher Speicher da jedoch genau erweitert wird und warum, das erfahrt ihr ausführlich in diesem sehr guten Artikel zum Thema:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freshblurbs.com/explaining-java-lang-outofmemoryerror-permgen-space"&gt;freshblurbs.com Artikel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Zuletzt sei dabei auch noch auf die JBoss JMX Management Console verwiesen. Dort besteht die Möglichkeit, unter jboss.system - type=serverInfo mehr über den gerade laufenden JBoss AppServer auszulesen. Unter anderem das Betriebssystem sowie der verbrauchte und verfügbare Speicher.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://localhost:8080/jmx-console"&gt;http://localhost:8080/jmx-console&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-3055199225145376671?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/3055199225145376671/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/01/outofmemoryerror-permgen-space.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3055199225145376671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/3055199225145376671'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/01/outofmemoryerror-permgen-space.html' title='OutOfMemoryError: PermGen Space'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153629451095242392.post-4872406912749876957</id><published>2009-01-30T09:46:00.000-08:00</published><updated>2009-01-30T09:57:35.221-08:00</updated><title type='text'>Am Anfang war die NullPointerException</title><content type='html'>Und hier ist er nun, der 1.000.000te Blog, den man im Internet finden kann. Und ihr habt euch trotzdem hierher verirrt. Dann kläre ich mal kurz auf, worum es hier gehen soll.&lt;br /&gt;&lt;br /&gt;Wenn ich mal Revue passieren lasse, was ich in Sachen Java in den letzten Jahren für eine Entwicklung durchgemacht habe, ist es im Nachhinein echt interessant, die Veränderungen zu sehen. Ich bin also jemand, der sich mit Java beschäftigt. Und damit meine ich nicht die Insel und nicht den Kaffee, sondern die Programmiersprache, wie soll es auch anders sein. Beschäftigt hab ich mich damit wohl sauber zu viel, wenn man den Schlafmangel betrachtet, den ich schon kräftig spüre. Trotzdem bin ich noch lange kein Profi, gelernter Anwendungsentwickler hin oder her. Man lernt nie aus. Und genau darum geht es. Ich möchte für mich und für alle anderen, die es interessiert, meine Erfahrungen in Sachen Java / JavaEE festhalten. Und da ich allgemein die Dienste von Google sehr gerne nutze und im Google Profil auch dieser Blog integrierbar war, landetet ich also hier.&lt;br /&gt;&lt;br /&gt;Und warum der Abwasch? Naja wer weiß, vielleicht rutscht mir ja doch das eine oder andere mal auch was privates Raus. Was hält einen Entwickler schon am ehesten von seinem geliebten Eclipse ab? Genau....der Haushalt. Also sollte es vorkommen, daß sich Freunde / Bekannte hierher verirren, tuts mir leid. Ich wollte euch nicht eure sinnvolle Zeit klauen und hiermit verschwenden ^^.&lt;br /&gt;&lt;br /&gt;Genug getextet, ich werd besser die Label Funktion fleißig nutzen, um interessierte Leser von Nicht-Java-Posts zu verschonen.&lt;br /&gt;&lt;br /&gt;Achja, Java ist groß. Worum gehts überhaupt? Also derzeit eher um Java Server Faces (kurz JSF), Facelets, JBoss Application Server, Enterprise Java Beans in Version 3 (EJB3) und vieles mehr. Ich hoffe mal stark, ich werde nicht irgendwann wieder bei Swing oder noch schlimmerem landen ^^&lt;br /&gt;&lt;br /&gt;Viel Spaß beim Lesen und ich freue mich immer über Feedback.&lt;br /&gt;&lt;br /&gt;Fred&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153629451095242392-4872406912749876957?l=java-abwaschbar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java-abwaschbar.blogspot.com/feeds/4872406912749876957/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/01/am-anfang-war-die-nullpointerexception.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4872406912749876957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153629451095242392/posts/default/4872406912749876957'/><link rel='alternate' type='text/html' href='http://java-abwaschbar.blogspot.com/2009/01/am-anfang-war-die-nullpointerexception.html' title='Am Anfang war die NullPointerException'/><author><name>Frederik Mortensen</name><uri>http://www.blogger.com/profile/10745005052313730429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_qBoznKdu18o/SYN6KxI4HsI/AAAAAAAAFKY/45cR2hqGg8c/S220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
