J2EESupport

Differences between revisions 2 and 10 (spanning 8 versions)
Revision 2 as of 2008-05-28 14:39:09
Size: 5436
Editor: lns-bzn-48f-81-56-218-246
Comment:
Revision 10 as of 2008-06-02 15:37:55
Size: 11022
Editor: lns-bzn-48f-81-56-218-246
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Contents'''[[BR]][[TableOfContents]]||
Line 3: Line 5:
== Tomcat 6 == == Tomcat 5.5 ==
Line 6: Line 8:
|| Builds from source : || Yes, with openjdk (not with gcj -- missing J2SE 1.5 Socket.setPerformancePreferences methods) ||
|| Packaged : || no. Need to workaround Ant download ||
|| Maintainability : || good ||
|| Compatibility : || Servlet/JSP : 2.5/2.1 ||
|| Release cycle logic : || none ||
|| Version : || 6.0.16 ||
|| Link : || http://tomcat.apache.org/ ||

Notes :
 * Tomcat is downstream of Glassfish.
 * Lost contributers from Sun.

== 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 ||
|| Builds from source : || Yes ||
|| Packaged : || Yes (5.5.25 in Universe) ||
|| Maintainability : || Good ||
Line 25: Line 12:
|| Release cycle logic : || none, bugfixes only ||
|| Version : || 5.5.26 ||
|| Current version : || 5.5.26 ||
Line 45: Line 31:
== 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/ ||

 * Tomcat is now downstream of Glassfish, lost contributors from Sun.
 * Used by developers and as a servlet container inside other products, rarely in production by itself.

Random packaging notes :
 * Fix `commons-daemon.home=${base.path}` in build.properties
 * Needs libecj-java as additional build dep + force `jdt.jar=/usr/share/java/ecj.jar`
 * Needs to pull native connectors source as well and edit `tomcat-native.tar.gz=...`
 * No need to copy all jars to lib/ at packaging time, use the depends ones
Line 46: Line 51:
|| Type : || Modular (Servlet container or J2EE application server, uses Tomcat or JeTTY) || || Type : || Modular (Servlet container or J2EE application server, uses Tomcat or Jetty) ||
Line 48: Line 53:
|| Builds from source : || not with OpenJDK6 ||
|| Packaged : || no. Uses Maven. ||
|| Maintainability : || fair ||
|| 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 ||
Line 52: Line 57:
|| Release cycle logic : || "release often" (every 2-4 months) ||
|| Version : || 2.1.1 ||
|| Current version : || 2.1.1 ||
Line 57: Line 61:
 * Robust  * "release often" (every 2-4 months)
Line 59: Line 63:
 * Increasing marketshare
Line 63: Line 66:
Running Geronimo binary :
 * Does not run with OpenJDK-6 (keystore issue). Requires Sun JDK >=1.5
Running Geronimo :
 * Running instructions recommend Sun JDK >=1.5
 * tomcat6-j2EE version does not run with OpenJDK-6
   * Invalid keystore format issue : http://pastebin.ca/1032465
   * Known issue in OpenJDK : http://www.nabble.com/OpenJDK---Glassfish-Client-td17512837.html
 * jetty6-j2EE version runs with OpenJDK-6
Line 69: Line 76:
 * Maven-based build process pulls lots of deps in ~/.m2 -> difficulty to debianize
 * Very (really) slow using gcj - aborted
 * Fails to build using openjdk-6-jdk, even if overriding the version check
   * `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 recommends building with Sun's JDK 1.5.
   * <kevan> jgawor: have you looked at getting geronimo to build with a 1.6 jdk?
   * <jgawor> kevan: no. i was going to worry about it when we start working on jaxws 2.1

== Glassfish v3 ==
|| Type : || Modular (Servlet container or J2EE application server) ||
|| License : || CDDLv1 + GPLv2 with exceptions (see [https://glassfish.dev.java.net/downloads/v3/tp2-third-party-readme.txt here]) ||
|| Builds from source : || No ? ||
|| Packaged : || No (uses Maven) ||
|| Maintainability : || good ||
|| Compatibility : || J2EE v5 ||
|| Release cycle logic : || ||
|| Version : || V3TP2 (incomplete : see http://wiki.glassfish.java.net/Wiki.jsp?page=GlassFishV3TP2Content ) ||
|| Link : || https://glassfish.dev.java.net/ ||
 * Building with gcj
   * Very (really) slow - aborted
 * Building with OpenJDK-6
   * Need to override JDK version check in build.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)
   * Build instructions require Sun's JDK 1.5.
   * 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
   * Tests at the end of the build fail with loader constraint violation error : http://pastebin.ca/1032462
   * 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
   * Solution 1 : use maven to build
     * Might need to patch maven to support this mode
     * Package all required dependencies and maven plugins (462 jarfiles of which only 123 are already packaged)
     * Package all required dependencies of dependencies (if any)
     * Add all .pom files to the source
     * run "mvn -o" to force offline mode
     * might not work as maven wants multiple versions of the same jar
   * Solution 2 : use ant to build, together with maven-ant-helper (current Debian way)
     * need to reinvent the build system and reimplement all required maven tasks (normally handled by plugins)
     * Package all required dependencies (393 jarfiles of which 123 are already packaged)
     * Package all required dependencies of dependencies (if any)
     * Figure out the best order in which to build
     * This should work, but lots of work to package initially and to maintain
Line 92: Line 108:
|| Builds from source : || no (being worked on) ? ||
|| Packaged : || in Multiverse (v2) ||
|| Maintainability : || good ||
|| Builds from source : || No (being worked on) ||
|| Packaged : || in Multiverse (V2 UR1) - builds from binaries ||
|| Maintainability : || Good support from Sun ||
Line 96: Line 112:
|| Release cycle logic : || ||
|| V
ersion : || V2 UR2 ||
|| Current version : || V2 UR2 ||
Line 100: Line 115:
== JBOSS == Two sources in multiverse :
 * 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
 * glassfishv2 (builds from binary blobs : glassfishv2-bin, glassfishv2, glassfishv2-doc) : complete GF by Sun

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)
 * Invalid keystore format running with OpenJDK-6 (same error as Glassfish), runs OK with Sun's JDK
 * 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 [https://glassfish.dev.java.net/downloads/v3/tp2-third-party-readme.txt 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/ ||

 * Alpha code
 * Only the framework and web container in V3TP2

== JOnAS 4 ==
|| Type : || J2EE application server (uses Tomcat or Jetty) ||
|| License : || LGPL 2.1 ||
|| Builds from source : || see below ||
|| Packaged : || No ||
|| Maintainability : || Questionable ||
|| Compatibility : || J2EE v1.4 ||
|| Current version : || 4.9.2 (released May 23, 2008) ||
|| Link : || http://wiki.jonas.objectweb.org/xwiki/bin/view/Main/ ||

 * Twice a year, a new JOnAS release is delivered
 * Can make use of pristine Tomcat 5.5 or Jetty 5.1
 * Looks less ''finished'' than Geronimo, more a research testbed than an enterprise-ready solution

Building JonAS4 :
 * "Source" package includes 134 pre-built jars, difficult to tell if they all build from source
 * Sources build with gcj
 * Does not build using OpenJDK-6 (`org.objectweb.jonas.dbm.JManagedConnection is not abstract and does not override abstract method...`)

== JOnAS 5 ==
Line 102: Line 158:
|| Builds from source : || ? ||
|| Packaged : || no. Only JBoss Common in Universe ||
|| Maintainability : || ?? ||
|| Compatibility : || J2EE v1.4 as of JBOSS 4 ||
|| Release cycle logic : || ~ twice a year ||
|| Version : || 5.0 "really soon" ||

Notes
 * Questionable maintenance relationship.

== JeTTY 6 ==
|| Type : || Servlet container ||
|| License : || Apache 2.0 ||
|| Builds from source : || ? ||
|| Packaged : || yes, in Universe ||
|| Maintainability : || good upstream ||
|| Compatibility : || Servlet/JSP 2.5/2.1 ||
|| Release cycle logic : || ||
|| Version : || ||

== JOnAS ==
|| Type : || J2EE application server ||
|| Builds from source : || ? ||
|| Packaged : || no ||
|| Maintainability : || ? ||
|| Compatibility : || J2EE v1.4 as of JOnAS 4.4 ||
|| Release cycle logic : || ||
|| Version : || ||

Notes :
 * Decreasing marketshare
 * Not sure of upstream maintainability.

== Resin ==
|| Type : || ? ||
|| License : || LGPL 2.1 ||
Line 139: Line 161:
|| Maintainability : || ? ||
|| Compatibility : || ? ||
|| Release cycle logic : || ||
|| Version : || ||
|| Maintainability : || Questionable ||
|| Compatibility : || Release version 5.1 (Nov 08) targets J2EEv5 compliance ||
|| Current version : || 5.0.3RC (no stable release yet) ||
|| Link : || http://wiki.jonas.objectweb.org/xwiki/bin/view/Main/ ||

 * New architecture, OSGi based (like Glassfish v3)
 * Can't make it start
   * `NoClassDefFoundError: org/ow2/jonas/commands/admin/ClientAdmin`

== 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/ ||

 * Market leader for FOSS J2EE appservers
 * Admin UI makes use of Java applets, seems less accessible than Geronimo's one

Building JBOSS AS :
 * "Source" package includes 295 pre-built jars, difficult to tell if they all build from source
 * JBOSS AS sources don't build with our current Ant (1.7)
 * JBOSS AS sources build OK with Ant 1.6.5

== 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/ ||

 * More an integration component than a full-featured application server
 * No admin UI

== 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/ ||

 * More an integration component than a full-featured application server
 * No admin UI

Building 6.1 from source :
 * Does not build with gcj
 * Uses maven + a cvs task at one point to pull even more
 * Compilation fails with OpenJDK-6, complaining about Sun proprietary API and [that] may be removed in a future release

== 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/ ||

 * Enterprise-ready version is "Resin Professional", not open source
 * Difficulty to find anything on their website
 * Need partnership with Caucho if we choose that option

Ubuntu server J2EE support options

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 :

  • dependency on JRE (java2-runtime), should be on JDK (java2-compiler) (LP: #179447, #112626)
  • file permissions incompatible with admin interface (LP: #234127, #220871)
  • incompatibility with openjdk (LP: #229404, #212521)
  • 5.5.26 needed to fix CVE-2007-5333 (LP: #220540, #228665)

Additional packages needed in main to build :

  • libcommons-daemon-java
  • libcommons-digester-java
  • libcommons-el-java
  • libcommons-fileupload-java
  • libcommons-httpclient-java
  • libcommons-launcher-java
  • libcommons-modeler-java
  • libstruts1.2-java

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/

  • Tomcat is now downstream of Glassfish, lost contributors from Sun.
  • Used by developers and as a servlet container inside other products, rarely in production by itself.

Random packaging notes :

  • Fix commons-daemon.home=${base.path} in build.properties

  • Needs libecj-java as additional build dep + force jdt.jar=/usr/share/java/ecj.jar

  • Needs to pull native connectors source as well and edit tomcat-native.tar.gz=...

  • No need to copy all jars to lib/ at packaging time, use the depends ones

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/

Notes :

  • "release often" (every 2-4 months)
  • Right featureset/Ubuntu-style management options
  • Modular design. Technologically on par with JBoss and Glassfish v+1.
  • Good upstream maintenance relationship.

Running Geronimo :

Building Geronimo :

  • Should be built as modular packages with a few metapackages (geronimo-miniG-tomcat, geronimo-J2EE-tomcat...)
  • Building with gcj
    • Very (really) slow - aborted
  • Building with OpenJDK-6
    • Need to override JDK version check in build.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)

    • Build instructions require Sun's JDK 1.5.
    • 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

    • Tests at the end of the build fail with loader constraint violation error : http://pastebin.ca/1032462

    • 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

  • Solution 1 : use maven to build
    • Might need to patch maven to support this mode
    • Package all required dependencies and maven plugins (462 jarfiles of which only 123 are already packaged)
    • Package all required dependencies of dependencies (if any)
    • Add all .pom files to the source
    • run "mvn -o" to force offline mode
    • might not work as maven wants multiple versions of the same jar
  • Solution 2 : use ant to build, together with maven-ant-helper (current Debian way)
    • need to reinvent the build system and reimplement all required maven tasks (normally handled by plugins)
    • Package all required dependencies (393 jarfiles of which 123 are already packaged)
    • Package all required dependencies of dependencies (if any)
    • Figure out the best order in which to build
    • This should work, but lots of work to package initially and to maintain

GlassFish v2

Type :

J2EE application server

License :

CDDLv1 + GPLv2 with exceptions (see [http://wiki.java.net/bin/view/Projects/GlassFishCodeDependencies 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 :

  • 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

  • glassfishv2 (builds from binary blobs : glassfishv2-bin, glassfishv2, glassfishv2-doc) : complete GF by Sun

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)
  • Invalid keystore format running with OpenJDK-6 (same error as Glassfish), runs OK with Sun's JDK
  • 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 [https://glassfish.dev.java.net/downloads/v3/tp2-third-party-readme.txt 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/

  • Alpha code
  • Only the framework and web container in V3TP2

JOnAS 4

Type :

J2EE application server (uses Tomcat or Jetty)

License :

LGPL 2.1

Builds from source :

see below

Packaged :

No

Maintainability :

Questionable

Compatibility :

J2EE v1.4

Current version :

4.9.2 (released May 23, 2008)

Link :

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

  • Twice a year, a new JOnAS release is delivered
  • Can make use of pristine Tomcat 5.5 or Jetty 5.1
  • Looks less finished than Geronimo, more a research testbed than an enterprise-ready solution

Building JonAS4 :

  • "Source" package includes 134 pre-built jars, difficult to tell if they all build from source
  • Sources build with gcj
  • Does not build using OpenJDK-6 (org.objectweb.jonas.dbm.JManagedConnection is not abstract and does not override abstract method...)

JOnAS 5

Type :

J2EE application server

License :

LGPL 2.1

Builds from source :

?

Packaged :

No

Maintainability :

Questionable

Compatibility :

Release version 5.1 (Nov 08) targets J2EEv5 compliance

Current version :

5.0.3RC (no stable release yet)

Link :

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

  • New architecture, OSGi based (like Glassfish v3)
  • Can't make it start
    • NoClassDefFoundError: org/ow2/jonas/commands/admin/ClientAdmin

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/

  • Market leader for FOSS J2EE appservers
  • Admin UI makes use of Java applets, seems less accessible than Geronimo's one

Building JBOSS AS :

  • "Source" package includes 295 pre-built jars, difficult to tell if they all build from source
  • JBOSS AS sources don't build with our current Ant (1.7)
  • JBOSS AS sources build OK with Ant 1.6.5

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/

  • More an integration component than a full-featured application server
  • No admin UI

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/

  • More an integration component than a full-featured application server
  • No admin UI

Building 6.1 from source :

  • Does not build with gcj
  • Uses maven + a cvs task at one point to pull even more
  • Compilation fails with OpenJDK-6, complaining about Sun proprietary API and [that] may be removed in a future release

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/

  • Enterprise-ready version is "Resin Professional", not open source
  • Difficulty to find anything on their website
  • Need partnership with Caucho if we choose that option

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