Summary

To further meet enterprise users needs, Ubuntu server must provide a Java application server stack that could scale up to a full J2EE ("Java EE") stack. There are several solutions, but at the moment 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 need to integrate and support a Java EE server stack in main.

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

Potential choices

The complete list of candidates and feature matrix can be found in the "discussion" section below. The only solution available today that is both JavaEE5-compatible and modular is Geronimo. The other two possibilities are Glassfish v3 and JBoss 5, which are still work in progress.

Both Geronimo and Glassfish v3 are based on a next-generation OSGi architecture and gather momentum in the Open Source world. JBoss is a well-established FOSS solution which was always designed with modularity in mind. Geronimo is JavaEE5-compliant, Glassfish v3 will be JavaEE6-compliant, and JBoss 5 aims to get Java EE 5 compliance.

Geronimo is a lot more dependent on third-party dependencies and its build system is more complicated. Glassfish v3 has less dependencies, but is still at the early stages of development. A Glassfish v3 "Prelude" version should be ready for Intrepid. Both rely on maven to build, which in its current form cannot be used to build packages (it downloads dependencies and dependency tree information (.pom files) during the build). JBoss only uses ant, which makes it easier to build for package targets. However it also requires lots of dependencies to be packaged and included in repositories first.

The end result is that 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. We should therefore target the application server that we think will be the best one in the future, not necessarily restricting the choice to what is ready for production today.

Proposed implementation

Geronimo or Glassfish v3 would be used as the Java EE stack for Ubuntu Server, provided the number of dependencies to package and include in "main" so that it can fully build from source is reasonable. In the mean time, we'll provide Tomcat 6 as a web container solution for Ubuntu (see Tomcat6StackSpec).

Go, no-go

A complete analysis of the dependencies we would have to package and include in "main" must be done before any work is started on the subject. This analysis would target Glassfish v3 "Prelude" first, but should also evaluate extra needs for the full Java EE version. Based on that analysis, a go / no-go decision will be taken, and targets and deadlines ("v3 Prelude for Intrepid" ?) will be set.

Platform needs

Maven needs to be supported as a build system for Ubuntu packages, potentially patching it so that it uses locally-installed packages and dependency info rather than downloading it from repositories. This is a platform task that affects lots of packages, and is the subject of the MavenSupportSpec.

Outstanding Issues

BoF agenda and discussion

Several implementation options were discussed and evaluated:

Tomcat 5.5

Type :

Servlet container

License :

Apache License v 2.0

Builds from source :

Yes

Packaged :

Yes (5.5.25 in Universe)

Maintainability :

Good

Compatibility :

Servlet/JSP 2.4/2.0

Current version :

5.5.26

Link :

http://tomcat.apache.org/

Current package problems :

Additional packages needed in main to build :

Tomcat 6

Type :

Servlet container

License :

Apache License v 2.0

Builds from source :

Yes, with openjdk (not with gcj -- missing J2SE 1.5 Socket.setPerformancePreferences methods)

Packaged :

No (but not too complicated)

Maintainability :

Good

Compatibility :

Servlet/JSP : 2.5/2.1

Current version :

6.0.16

Link :

http://tomcat.apache.org/

Random packaging notes :

Geronimo

Type :

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

License :

Apache License v 2.0

Builds from source :

Yes (with OpenJDK + patch from Geronimo), but pulls lots of deps that might not

Packaged :

No. See below for options

Maintainability :

Good, reactive upstream

Compatibility :

J2EE v5 since Geronimo 2.0.1

Current version :

2.1.1

Link :

http://geronimo.apache.org/

Running Geronimo :

Building Geronimo :

Packaging Geronimo :

GlassFish v2

Type :

J2EE application server

License :

CDDLv1 + GPLv2 with exceptions (see here)

Builds from source :

No (being worked on)

Packaged :

in Multiverse (V2 UR1) - builds from binaries

Maintainability :

Good support from Sun

Compatibility :

J2EE v5

Current version :

V2 UR2

Link :

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

Two sources in multiverse :

Running glassfishv2 :

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 :

Good support from Sun

Compatibility :

J2EE v5

Current version :

V3TP2 (incomplete : see http://wiki.glassfish.java.net/Wiki.jsp?page=GlassFishV3TP2Content )

Link :

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

JOnAS 4

Type :

J2EE application server (uses Tomcat or Jetty)

License :

LGPL 2.1

Builds from source :

see below

Packaged :

No

Maintainability :

Supported by OW2 (consortium including FT & Bull)

Compatibility :

J2EE v1.4

Current version :

4.10.3 RC (released October 01, 2008)

Link :

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

Building JonAS4 :

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.0M5 (released March 17, 2009)

Link :

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

JBOSS AS 5

Type :

J2EE application server

License :

LGPL

Builds from source :

see below

Packaged :

No (only JBoss Common in Universe)

Maintainability :

Questionable

Compatibility :

J2EE v1.5

Current version :

5.0.0Beta4

Link :

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

Building JBOSS AS :

Jetty 5.1

Type :

Servlet container

License :

Apache 2.0

Builds from source :

Yes

Packaged :

Yes, in Universe (5.1.14)

Maintainability :

Good upstream

Compatibility :

Servlet/JSP 2.4/2.0

Current version :

5.1.14

Link :

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

Jetty 6.1

Type :

Servlet container

License :

Apache 2.0

Builds from source :

See below

Packaged :

No. Maven pulls 94 jars, most of them are already packaged.

Maintainability :

Good upstream

Compatibility :

Servlet/JSP 2.5/2.1

Current version :

6.1.10

Link :

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

Building 6.1 from source :

Resin 3.1 Open Source version

Type :

Java/PHP application server

License :

GPL

Builds from source :

Where's the source ?

Packaged :

No

Maintainability :

Questionable

Compatibility :

No certification, but J2EEv5 features (Servlet 2.5 / JSP 2.1 / EJB 3.0)

Current version :

3.1.6

Link :

http://caucho.com/resin/doc/


CategorySpec

J2EESupport (last edited 2009-03-18 07:41:03 by loris-bouzonnet)