Another skeleton project implementing the same functionality as this previous post, a Google Web Toolkit front-end, with an embedded Derby database, accessed using the Java Persistence API; but this time running on an embedded Glassfish 3 instance and making use of EJB3.1 features.
Here is the projects POM:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.adrianwalker.maven.skeleton.war.gwt.glassfish</groupId> <artifactId>maven-war-gwt-glassfish-skeleton</artifactId> <packaging>war</packaging> <version>0.1.0</version> <name>Maven WAR-GWT-Glassfish Skeleton</name> <description> Skeleton project for creating a GWT WAR running on Glassfish, with a Derby database accessed through JPA. Usage: mvn clean install embedded-glassfish:run </description> <url>http://www.adrianwalker.org</url> <organization> <name>adrianwalker.org</name> <url>http://www.adrianwalker.org</url> </organization> <developers> <developer> <name>Adrian Walker</name> <email>ady.walker@gmail.com</email> <organization>adrianwalker.org</organization> <organizationUrl>http://www.adrianwalker.org</organizationUrl> </developer> </developers> <repositories> <repository> <id>java.net</id> <url>http://download.java.net/maven/2</url> </repository> <repository> <id>codehaus.org</id> <url>http://repository.codehaus.org</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>java.net</id> <url>http://download.java.net/maven/glassfish</url> </pluginRepository> </pluginRepositories> <properties> <gwt.version>2.0.2</gwt.version> </properties> <build> <outputDirectory>war/WEB-INF/classes</outputDirectory> <finalName>message</finalName> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <includes> <include>META-INF/persistence.xml</include> </includes> </resource> </resources> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <configuration> <filesets> <fileset> <directory>war</directory> <includes> <include>**/*</include> </includes> </fileset> </filesets> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> </plugin> <plugin> <groupId>org.glassfish</groupId> <artifactId>maven-embedded-glassfish-plugin</artifactId> <configuration> <app>${project.build.directory}/${build.finalName}.war</app> <instanceRoot>${project.build.directory}/glassfish</instanceRoot> <contextRoot>${build.finalName}</contextRoot> <configFile>${basedir}/src/test/resources/config/domain.xml</configFile> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.glassfish.extras</groupId> <artifactId>glassfish-embedded-all</artifactId> <version>3.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.gwt</groupId> <artifactId>gwt-servlet</artifactId> <version>${gwt.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.google.gwt</groupId> <artifactId>gwt-user</artifactId> <version>${gwt.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.2</version> <scope>test</scope> </dependency> </dependencies> <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jxr-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> </plugin> </plugins> </reporting> </project>
The embedded Glassfish server is configured using a domain.xml taken from a fresh install of Glassfish 3, located \src\test\resources\config\domain.xml
and referenced from the embedded Glassfish Maven plugin configuration element in the pom.xml
The default domain.xml
has been amended to include jdbc-resource and jdbc-datasource entries for the web applications database. The domain.xml
below shows the amendments, with the rest of the file removed for brevity:
domain.xml
<domain log-root="${com.sun.aas.instanceRoot}/logs" application-root="${com.sun.aas.instanceRoot}/applications" version="10.0"> ... <resources> ... <jdbc-resource pool-name="MessagePool" jndi-name="jdbc/message" /> ... <jdbc-connection-pool name="MessagePool" datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource" res-type="javax.sql.DataSource"> <property name="databaseName" value="target/database/message" /> <property name="connectionAttributes" value=";create=true" /> </jdbc-connection-pool> </resources> <servers> <server name="server" config-ref="server-config"> ... <resource-ref ref="jdbc/message" /> </server> </servers> ... </domain>
The configured datasource is referenced in the projects persistence.xml
, which uses EclipseLink to implement the JPA.
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.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_2_0.xsd"> <persistence-unit name="messagePersistenceUnit" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/message</jta-data-source> <class>org.adrianwalker.maven.skeleton.jpa.entity.MessageEntity</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence>
Run the project with 'mvn clean install embedded-glassfish:run
' and point your brower at http://localhost:8080/message/.
Source Code
- Java Maven Project - MavenWARGWTGlassfishSkeleton.zip