JavaApplicationServers

Summary

To further meet enterprise users needs, Ubuntu server should provide a Java application server stack that could scale up to a full J2EE ("Java EE") stack. There are several solutions, but they all require lots of packaging work to be done before starting packaging the Java EE server itself.

Release Note

Ubuntu server now features a complete, high-performance and modular Java EE server stack that you can use to deploy all your Java applications and web services.

Rationale

Java development (web applications, beans, web services...) is very common in the enterprise world.

Ubuntu server currently doesn't provide an integrated Java EE server stack and it is up to the user to install manually a third-party application server, especially if they want to use more than just a servlet container.

To make it easier for those users and increase Ubuntu server adoption in the enterprise world, we could integrate and support a Java EE server stack in main.

However, through tool-sets such as Spring, deployment of complex enterprise applications on lightweight containers such as Tomcat has gained a-lot of momentum so discussion needs to take place as to whether supporting a full JEE stack adds sufficient value to Ubuntu given the packaging complexity.

Use Cases

Josh is a Java developer and wants to deploy his latest web applications on a test server to show his boss how well he did. He quickly sets up an Ubuntu machine and installs the web application server, without needing the bloat of a full Java EE stack.

A few month later, Josh migrated his web applications as web services. He can upgrade his test installation so that it now supports the required Java EE features.

Martin works at Made-up Co., a company developing Java components that are used as middleware in Java application servers. He wants to provide an easy way for customers to demonstrate and evaluate Made-up software. He decides to ship ready-to-run Ubuntu JEOS VMs including the Ubuntu Java EE server stack, integrated with their middleware software and demos.

Julia looks for the ideal deployment environment for her company web applications in production. She needs a scalable, high-performance, supported and Java-EE-certified stack. After careful testing, she picks up Ubuntu Server as the best tool for the job.

Design

Requirements

  • Java EE 5 compatibility
  • Modular system (scale from web container to full J2EE stack)
  • Must build from source with reasonable additional dependencies to package ("main" target)

Potential choices

The complete list of candidates and feature matrix can be found in the "discussion" section below.

JOnAS, Geronimo, JBoss 5 and Glassfish v3 (also JEE6 compliant) all provide Java EE 5 compliant solutions.

JOnAS, Geronimo and Glassfish v3 are based on a next-generation OSGi architecture. JBoss is a well-established FOSS solution which was always designed with modularity in mind.

All four JEE application servers rely on maven build processes. These could be supported by using the maven-debian-helper toolset; however this package and it dependents are current not in main (only in universe).

Including a Java EE application server in Ubuntu is not a small task, and that a lot of prerequisite tools and dependencies must be packaged first.

Proposed implementation

Go, no-go

Platform needs

maven-debian-helper would need to move to main which is not an insignificant task in itself.

Outstanding Issues

BoF agenda and discussion

Tomcat 6

Type :

Servlet container

License :

Apache License v 2.0

Builds from source :

Yes

Packaged :

Yes - in main

Maintainability :

Good

Compatibility :

Servlet/JSP : 2.5/2.1

Current version :

6.0.29 (6.0.28 currently in main)

Link :

http://tomcat.apache.org/

  • Used by developers and as a servlet container inside other products including all apps servers documented here, rarely in production by itself.
  • Forms the basis for SpringSource tc Server ("Enterprise Grade" tomcat with added Spring features).

Geronimo

Type :

Modular (Servlet container or J2EE application server, uses Tomcat or Jetty)

License :

Apache License v 2.0

Builds from source :

Yes (TBC), but pulls lots of deps that might not

Packaged :

No (some spec packaging for generic use)

Maintainability :

Good, reactive upstream

Compatibility :

J2EE v5

Current version :

2.1.6

Link :

http://geronimo.apache.org/

Compile XREF

geronimo-2.1.6-dependencies-compile-xref.txt

Runtime XREF

geronimo-2.1.6-dependencies-runtime-xref.txt

Test XREF

geronimo-2.1.6-dependencies-test-xref.txt

Provides XREF

geronimo-2.1.6-dependencies-provides-xref.txt

Unique XREF

geronimo-2.1.6-dependencies-uniq-xref.txt

  • "release often" (every 2-4 months)
  • Right featureset/Ubuntu-style management options
  • Modular OSGi based design.
  • Good upstream maintenance relationship potential.
  • Best admin UI : modular, professional-looking (confirmed)

Running Geronimo :

  • Running instructions recommend Sun JDK >=1.5

  • tomcat6-j2EE version runs with OpenJDK-6
  • jetty6-j2EE version runs with OpenJDK-6 (Not Tested but from previous investigation)

Building Geronimo :

  • Build instructions specify J2SE 1.5 and Maven 2
  • Should be built as modular packages with a few metapackages (geronimo-j2ee-tomcat...)
  • Building with OpenJDK-6
    • Build instructions require Sun's JDK 1.5 could be a blocker to adoption
    • Needed to override JDK version check in pom.xml
    • Fails with org.apache.geronimo.axis2.pojo.POJOWebServiceContext is not abstract and does not override abstract method <T>getEndpointReference(java.lang.Class<T>,org.w3c.dom.Element...) in javax.xml.ws.WebServiceContext : JDK 1.6 incompatibility (new getEndpointReference abstract method in jax-ws)

    • Geronimo team provided patch to build under 1.6 @ https://issues.apache.org/jira/browse/GERONIMO-4089

    • Very reactive help on FreeNode #geronimo, by Kevan Miller (kevan) and Jarek Gawor (jgawor)

    • Builds with MAVEN_OPTS="-Xmx768m -XX:MaxPermSize=256m" in ~/.mavenrc

    • Some issues around broken links into Maven repos for Corba/Yoko integration (disables for eval).
    • Tests at the end of the build fail
    • Runs OK, tests are OK when run separately

Packaging Geronimo :

  • Geronimo uses all the features of Maven to pull as much external stuff as it can
  • Must ensure we have source code for everything that is pulled, and that everything would be a main target

  • Use maven-debian-helper to build
    • Package all required dependencies and maven plugins (301 unique dependencies - 128 potential hits, 173 misses)
    • Package all required dependencies of dependencies (if any)
    • Add all .pom files to the source
  • Geronimo ships with a few (20) slightly-modified third-party JAR files with a Maven hack to make sure those are picked instead of the regular ones that Maven would fetch. It is mostly Apache-projects packages for which Geronimo needs a patch that hasn't made it into a release. Geronimo doesn't provide the patchfiles used to build those (though in some cases you can find them in the third-party project bugzilla or VCS with minimal research).

GlassFish v2

Type :

J2EE application server

License :

CDDLv1 + GPLv2 with exceptions (see here)

Builds from source :

No

Packaged :

No (some aspects in universe)

Maintainability :

Need review post purchase by Oracle

Compatibility :

J2EE v5

Current version :

V2 UR2

Link :

https://glassfish.dev.java.net/

Current packaging:

  • glassfish (builds from source : glassfish-activation, glassfish-appserv, glassfish-jmac-api, glassfish-mail, glassfish-javaee, glassfish-toplink-essentials) : incomplete GlassFish with the build-from-source bits

Running glassfishv2:

  • Install fails at configure glassfish-v2 : missing English.pm in @INC while running /usr/share/glassfishv2/config/install/install.pl (missing libtimedate-perl package in depends)
  • Good admin UI, but way too much Sun-branded

GlassFish v3

Type :

Modular (Servlet container or J2EE application server)

License :

CDDLv1 + GPLv2 with exceptions (see here)

Builds from source :

No

Packaged :

No (uses Maven)

Maintainability :

Need review post purchase by Oracle

Compatibility :

J2EE v6 (support J2EE v5 apps)

Current version :

v3.0.1

Link :

https://glassfish.dev.java.net/

Compile XREF

glassfish-3.0.1-dependencies-compile-xref.txt

Runtime XREF

glassfish-3.0.1-dependencies-runtime-xref.txt

Unique XREF

glassfish-3.0.1-dependencies-uniq-xref.txt

  • Released June 2010
  • Build system (maven) - 32 potential hits, 103 misses for required dependencies for compile and runtime.

JOnAS 5

Type :

J2EE application server

License :

LGPL 2.1

Builds from source :

yes (Maven2 used to generate the bundles and the distribution)

Packaged :

No

Maintainability :

Supported by OW2 (consortium including FT & Bull)

Compatibility :

JavaEE 5

Current version :

5.1.3

Link :

http://wiki.jonas.objectweb.org/xwiki/bin/view/Main/

Runtime XREF :

JONAS_5_1_4-dependencies-runtime-xref.txt

Compile XREF:

JONAS_5_1_4-dependencies-compile-xref.txt

Unique Dependency XREF

JONAS_5_1_4-dependencies-uniq-xref.txt

  • OSGi based (like Glassfish v3)
  • The version 5.1 introduces some new innovative features:
    • Deployment Plans: XML files that describe a succession of resources (local or remote) that must be deployed in the given order. Support of three repository types: URL, Maven2 and OBR (OSGi Bundle Repository). Resources will downloaded if needed.
    • Services on demand: New mechanism allowing applications (aka Java EE archives) to describe which plan they need in order to run.
    • Versioning: Permits to deploy several versions of one application (V1,V2) in the same JOnAS node. Application upgrade is performed without interruption of service and without user session loss.
  • Interesting sub-projects include:

JBOSS AS 5

Type :

J2EE application server

License :

LGPL

Builds from source :

see below

Packaged :

Partially (older version and incomplete)

Maintainability :

Questionable

Compatibility :

J2EE 5

Current version :

5.1

Link :

http://www.jboss.org/jbossas/

Runtime XREF :

jboss-5.1.0.GA-src-dependencies-runtime-xref.txt

Compile XREF:

jboss-5.1.0.GA-src-dependencies-compile-xref.txt

Unique Dependency XREF

jboss-5.1.0.GA-src-dependencies-uniq-xref.txt

Note that XREF contains a dependency on a large number of other JBoss projects so is 'first level' only from a compile perspective.

  • Market leader for FOSS J2EE appservers
  • JBoss is now a division of RedHat

  • Admin UI makes use of Java applets, seems less accessible than Geronimo's one

Building JBOSS AS :

Jetty 6.1

Type :

Servlet container

License :

Apache 2.0

Builds from source :

Yes

Packaged :

Yes (universe)

Maintainability :

Good upstream

Compatibility :

Servlet/JSP 2.5/2.1

Current version :

6.1.25

Link :

http://www.mortbay.org/jetty-6/


CategorySpec

ServerTeam/Specs/JavaApplicationServers (last edited 2010-10-20 14:51:04 by james-page)