Embeddable GlassFish in Action - Servlet in a Maven project
Ads by DZone
Kohsuke
announced the embedability
of GlassFish v3 - this is really cool! Now you can run
GlassFish inside an existing JVM, without the need to start it
externally. The API javadocs are available here.
This blog explains how to host a Servlet using these APIs and write a
simple Maven test to invoke the Servlet - all within the same VM.The blog creates a Maven project using NetBeans but Maven CLI can be used as well.
In the NetBeans IDE, if Maven plugin is not already installed, then install it using "Tools", "Plugins","Available Plugins".
- Create a new Maven project
- Create a new project in NetBeans IDE and select "Maven"
types as shown below

Click on "Next >". - Take the default "Archetype" as shown:

Click on "Next >". - Enter the "Project Name" and "Artifact Id" as shown below:

and click on "Finish". The following output is shown in NetBeans Output window:

This confirms the successful creation of the project.
The command-line equivalent for all the above steps is:
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=org.glassfish.embedded.samples -DartifactId=webtier
- Create a new project in NetBeans IDE and select "Maven"
types as shown below
- Update pom.xml with repositories
& dependencies
- Expand "Project Files" and open "pom.xml". Add the
following repositories
(right after <url>...</url> tags)
<repositories>
<repository>
<id>glassfish-repository</id>
<name>Java.net Repository for Glassfish</name>
<url>http://download.java.net/maven/glassfish</url>
</repository>
<repository>
<id>download.java.net</id>
<name>Java.net Maven Repository</name>
<url>http://download.java.net/maven/2</url>
</repository>
</repositories> - Add the following fragment after
"<repositories>" to set the target JDK as 1.5:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build> - Add the following dependencies
(inside "<dependencies>" and after
"</dependency>")
<dependency>
<groupId>org.glassfish.distributions</groupId>
<artifactId>web-all</artifactId>
<version>10.0-build-20080430</version>
</dependency>
<dependency>
<groupId>org.glassfish.embedded</groupId>
<artifactId>gf-embedded-api</artifactId>
<version>1.0-alpha-4</version>
</dependency>
- Expand "Project Files" and open "pom.xml". Add the
following repositories
(right after <url>...</url> tags)
- Add Servlet class
- Right-click on "Source packages", select "New", "Java
Class..." and
enter the value as shown below

and click on "Finish". - Replace the template class with the following
Servlet
package org.glassfish.embedded.samples.webtier;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Arun Gupta
*/
public class SimpleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Wow, I'm embedded!");
}
}
This is a simple Servlet class.
- Right-click on "Source packages", select "New", "Java
Class..." and
enter the value as shown below
- Add deployment descriptor (this step could be made optional
with possibly a default mapping)
- In the "Files" window, expand "src", "main", right-click
and select
"New", "Folder..." as shown below ...

and give the folder name as "resources" as shown ...

... click on "Finish". - Using the same mechanism, create a new folder
"WEB-INF" in "resources". Right-click on "WEB-INF" and select "New",
"XML Document..." as shown:

- Enter the name as "web" as shown

- Click on "Next >", take defaults and click on
"Finish".
Replace the content of generated "web.xml" with the following ...
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>org.glassfish.embedded.samples.webtier.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
</web-app>
- In the "Files" window, expand "src", "main", right-click
and select
"New", "Folder..." as shown below ...
- Add a new test to invoke the Servlet
- In "Projects", expand "Test Packages" and open
"org.glassfish.embedded.samples.webtier.AppTest" as shown:

- Add the following fragment at end of the class:
private final String NAME = "AppTest";
public void testServlet() throws Exception {
int port = 9999;
GlassFish glassfish = newGlassFish(port);
URL url = new URL("http://localhost:" + port + "/" + NAME + "/SimpleServlet");
BufferedReader br = new BufferedReader(
new InputStreamReader(
url.openConnection().getInputStream()));
assertEquals("Wow, I'm embedded!", br.readLine());
glassfish.stop();
}
private GlassFish newGlassFish(int port) throws Exception {
GlassFish glassfish = new GlassFish(port);
ScatteredWar war = new ScatteredWar(NAME,
new File("src/main/resources"),
new File("src/main/resources/WEB-INF/web.xml"),
Collections.singleton(new File("target/classes").toURI().toURL()));
glassfish.deploy(war);
System.out.println("Ready ...");
return glassfish;
} - Right-click in the editor window and select "Fix Imports"
as shown

- Take all the defaults as shown

and click on "OK". - The complete project structure looks like:

- In "Projects", expand "Test Packages" and open
"org.glassfish.embedded.samples.webtier.AppTest" as shown:
- Run the Test (mvn test)
- In Projects window, right-click the project and select
"Test" as shown:

- The Output window shows the result as:

Notice how GlassFish v3 started in 598 milliseconds (around 0.5 sec) and all the tests passed.
- In Projects window, right-click the project and select
"Test" as shown:
How are you using GlassFish embeddability ?
- arungupta's blog
- Login or register to post comments
- 2833 reads
- Printer-friendly version
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)









