Embeddable GlassFish in Action - Servlet in a Maven project
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
- 873 reads
- Flag as offensive
- Email this Blog entry
- 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.)






