Java EE 5, GlassFish Future Direction

Document Sample
Java EE 5, GlassFish Future Direction Powered By Docstoc
					Java EE 5, GlassFish &
Future Direction




Arun Gupta
http://blogs.sun.com/arungupta
Sun Microsystems, Inc.


                                 1
                                 1
Who am I ?
• Member of Project GlassFish team
• Technology Evangelist for Web services and “Web 2.0”
  Applications @ Sun
• With Sun for over 8 years
• Specifications, Engineering, Standards,
  Interoperability, ...
• http://blogs.sun.com/arungupta




                 GlassFish – The Best Open Source Application Server   2
Agenda

> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
 Resources




                                    3
                                    3
Agenda

> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
 Resources




                                    4
Java EE 5.0 = (J2EE 1.4).next
• Java EE 5 Theme: Ease of Development
• POJO-based programming
  > More freedom, fewer requirements
• Extensive use of annotations
  > Reduced need for deployment descriptors
  > Annotations are the default
• Configure by exception
  > Reasonable defaults wherever possible
• Resource Injection
• New APIs and frameworks
  > EJB3, JAXB 2, JAX-WS, JSF, ...
                  GlassFish – The Best Open Source Application Server   5
Specification Changes in Java EE 5
●   JAX-WS 2.0 & JSR 181
●   JAXB 2.0
●   EJB 3.0 & Java Persistence
●   JavaSever Faces 1.2 – new to Platform
●   JSP 2.1 – Unification w/ JSF 1.2
●   StAX – Pull Parser – new to Platform




               GlassFish – The Best Open Source Application Server   6
    Using JAX-RPC 1.1                                     <?xml version='1.0' encoding='UTF-8' ?>
                                                          <webservices xmlns='http://java.sun.com/xml/ns/j2ee' version='1.1'>
                                                           <webservice-description>
                                                            <webservice-description-name>
                                                             HelloService</webservice-description-name>
package endpoint;                                           <wsdl-file>
import java.rmi.*;                                           WEB-INF/wsdl/HelloService.wsdl</wsdl-file>
                                                            <jaxrpc-mapping-file>

public class HelloServiceImpl                                WEB-INF/HelloService-mapping.xml
                                                             </jaxrpc-mapping-file>
              implements HelloServiceSEI {                  <port-component xmlns:wsdl-port_ns='urn:HelloService/wsdl'>
                                                             <port-component-name>HelloService</port-component-name>

     public String sayHello(String param)                    <wsdl-port>wsdl-port_ns:HelloServiceSEIPort</wsdl-port>
                                                             <service-endpoint-interface>
          throws java.rmi.RemoteException {                   endpoint.HelloServiceSEI</service-endpoint-interface>
          return “Hello “ + param;                           <service-impl-bean>

     }                                                         <servlet-link>WSServlet_HelloService</servlet-link>
                                                             </service-impl-bean>
}                                                           </port-component>
                                                           </webservice-description>

package endpoint;                                         </webservices>
                                                          <?xml version='1.0' encoding='UTF-8' ?>
import java.rmi.*;                                        <configuration
                                                            xmlns='http://java.sun.com/xml/ns/jax-rpc/ri/config'>

public interface HelloServiceSEI                           <service name='HelloService'

               extends java.rmi.Remote {                     targetNamespace='urn:HelloService/wsdl'
                                                             typeNamespace='urn:HelloService/types'
     public String sayHello(String param)                    packageName='endpoint'>
          throws java.rmi.RemoteException;                  <interface name='endpoint.HelloServiceSEI'

}                                                              servantName='endpoint.HelloServiceImpl'>
                                                            </interface>
                                                           </service>
                                                          </configuration>


                                                                             OLD! J2EE 1.4
                           GlassFish – The Best Open Source Application Server         7
Using JAX-WS 2.0

@javax.jws.WebService
public class MySimpleWS {
      public String sayHello(String s) {
          return "Hello " + s;
      }
}




                                                   NEW! Java EE 5
                                                               8
                GlassFish – The Best Open Source Application Server
Stateless Session Bean in Java EE 5

@javax.ejb.Stateless
@javax.jws.WebService
public class MySimpleWS {
      public String sayHello(String s) {
          return "Hello " + s;
      }
}



                                                   NEW! Java EE 5
                                                               9
                GlassFish – The Best Open Source Application Server
 EJB References in Java EE 5
Context initial = new InitialContext();
Context myEnv = (Context)initial.lookup("java:comp/env");
Object objref = myEnv.lookup("ejb/SimpleConverter");
ConverterHome home =
  (ConverterHome)
  PortableRemoteObject.narrow(objref,
                              ConverterHome.class);
Converter currencyConverter = home.create();
                                                             OLD! J2EE 1.4

@EJB Converter currencyConverter;
                                                         NEW! Java EE 5
                                                                    10
                   GlassFish – The Best Open Source Application Server
JAXB 1.0 in J2EE 1.4
Generated Code...
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v@@BUILD_VERSION@@
//                            See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
//                            Any modifications to this file will be lost upon recompilation of the source schema.
//                            Generated on: 2005.04.21 時刻
 10:37:56 PDT
//


package generated.impl;
                                                                                                                                                                                                                                   public java.lang.Object owner() {
                                                                                                                                                                                                                                     return generated.impl.PointTypeImpl.this;
public class PointTypeImpl implements generated.PointType, com.sun.xml.bind.JAXBObject, generated.impl.runtime.UnmarshallableObject, generated.impl.runtime.XMLSerializable, generated.impl.runtime.ValidatableObject              }
{
                                                                                                                                                                                                                                   public void enterEleme nt(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname, org.xml.sax.Attributes __atts)
    protected boolean has_Y;                                                                                                                                                                                                         throws org.xml.sax.SAXException
    protected float _Y;                                                                                                                                                                                                            {
    protected boolean has_X;                                                                                                                                                                                                         int attIdx;
                                                                                                                                                                                                                                     outer:
    protected float _X;
                                                                                                                                                                                                                                     while (true) {
    public final static java.lang.Class version = (generated.impl.JAXBVersion.class);                                                                                                                                                   switch (state) {
    private static com.sun.msv.grammar.Grammar schemaFragment;                                                                                                                                                                             case 3 :
                                                                                                                                                                                                                                              if (("y" == ___local)&&("" == ___uri)) {
    private final static java.lang.Class PRIMARY_INTERFACE_CLASS() {                                                                                                                                                                              contex t.pushAttributes(__atts, true);
        return (generated.PointType.class);                                                                                                                                                                                                       state = 4;
    }                                                                                                                                                                                                                                             return ;
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                              break;
    public float getY() {                                                                                                                                                                                                                  case 0 :
        return _Y;                                                                                                                                                                                                                            if (("x" == ___local)&&("" == ___uri)) {
    }                                                                                                                                                                                                                                             contex t.pushAttributes(__atts, true);
                                                                                                                                                                                                                                                  state = 1;
    public void setY(float value) {                                                                                                                                                                                                               return ;
        _Y = value;                                                                                                                                                                                                                           }
        has_Y = true;                                                                                                                                                                                                                         break;
                                                                                                                                                                                                                                           case 6 :
    }
                                                                                                                                                                                                                                              revertToParentFromEnterElement(___uri, ___local, ___qname , __atts);
                                                                                                                                                                                                                                              return ;
    public float getX() {                                                                                                                                                                                                               }
        return _X;                                                                                                                                                                                                                      super.enterElement(___uri, ___local, ___qname, __atts);
    }                                                                                                                                                                                                                                   break;
                                                                                                                                                                                                                                     }
    public void setX(float value) {                                                                                                                                                                                                }
        _X = value;
                                                                                                                                                                                                                                   public void leaveElement(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname)
        has_X = true;                                                                                                                                                                                                                throws org.xml.sax.SAXException
    }                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                     int attIdx;
    public generated.impl.runtime.UnmarshallingEventHandler createUnmarshaller(generated.impl.runtime.UnmarshallingContext context) {                                                                                                outer:
        return new generated.impl.PointTypeImpl.Unmarshaller(context);                                                                                                                                                               while (true) {
    }                                                                                                                                                                                                                                   switch (state) {
                                                                                                                                                                                                                                           case 2 :
                                                                                                                                                                                                                                              if (("x" == ___local)&&("" == ___uri)) {
    public void serializeBody(generated.impl.runtime.XMLSerializer context)                                                                                                                                                                       contex t.popAttributes();
        throws org.xml.sax.SAXException                                                                                                                                                                                                           state = 3;
    {                                                                                                                                                                                                                                             return ;
        if (!has_Y) {                                                                                                                                                                                                                         }
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "Y"));                                                                                                                                        break;
        }                                                                                                                                                                                                                                  case 6 :
        if (!has_X) {                                                                                                                                                                                                                         revertToParentFromLeaveEleme nt(___uri, ___ local, ___qname);
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "X"));                                                                                                                                        return ;
                                                                                                                                                                                                                                           case 5 :
        }                                                                                                                                                                                                                                     if (("y" == ___local)&&("" == ___uri)) {
        context.startElement("", "x");                                                                                                                                                                                                            contex t.popAttributes();
        context.endNamespaceDecls();                                                                                                                                                                                                              state = 6;
        context.endAttributes();                                                                                                                                                                                                                  return ;
        try {                                                                                                                                                                                                                                 }
            context.text(javax.xml.bind.DatatypeConverter.printFloat(((float) _X)), "X");                                                                                                                                                     break;
        } catch (java.lang.Exception e) {                                                                                                                                                                                               }
                                                                                                                                                                                                                                        super.leaveElement(___uri, ___local, __ _qname );
            generated.impl.runtime.Util.handlePrintConversionException(this, e, context);
                                                                                                                                                                                                                                        break;
        }                                                                                                                                                                                                                            }
        context.endElement();                                                                                                                                                                                                      }
        context.startElement("", "y");
        context.endNamespaceDecls();                                                                                                                                                                                               public void enterAttribute(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname)
        context.endAttributes();
        try {                                                                                                                                                                                                                      }
            context.text(javax.xml.bind.DatatypeConverter.printFloat(((float) _Y)), "Y");
                                                                                                                                                                                                                               }
        } catch (java.lang.Exception e) {
            generated.impl.runtime.Util.handlePrintConversionException(this, e, context);                                                                                                                                  }
        }
        context.endElement();
    }

    public void serializeAttributes(generated.impl.runtime.XMLSerializer context)
        throws org.xml.sax.SAXException
    {
        if (!has_Y) {
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "Y"));
        }
        if (!has_X) {
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "X"));
        }
    }

    public void serializeURIs(generated.impl.runtime.XMLSerializer context)




                                                                                                                                                                                                                        • 308 lines for
        throws org.xml.sax.SAXException
    {
        if (!has_Y) {
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "Y"));
        }
        if (!has_X) {
            context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "X"));
        }
    }

    public java.lang.Class getPrimaryInterface() {
        return (generated.PointType.class);
    }




                                                                                                                                                                                                                          <point><x>1</x><y>2</y></point>
    public com.sun.msv.verifier.DocumentDeclaration createRawValidator() {
        if (schemaFragment == null) {
            schemaFragment = com.sun.xml.bind.validator.SchemaDeserializer.deserialize((
 "\u00ac\u00ed\u0000\u0005sr\u0000\u001fcom.sun.msv.grammar.SequenceExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xr\u0000\u001dcom.su"
+"n.msv.grammar.BinaryExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0002L\u0000\u0004exp1t\u0000 Lcom/sun/msv/gra"
+"mmar/Expression;L\u0000\u0004exp2q\u0000~\u0000\u0002xr\u0000\u001ecom.sun.msv.grammar.Expressi"
+"on\u00f8\u0018\u0082\u00e8N5~O\u0002\u0000\u0002L\u0000\u0013epsilonReducibilityt\u0000\u0013Ljava/lang/Boolean;L\u0000\u000b"
+"expandedExpq\u0000~\u0000\u0002xpppsr\u0000\'com.sun.msv.grammar.trex.ElementPatt"
+"ern\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0001L\u0000\tnameClasst\u0000\u001fLcom/sun/msv/grammar/NameClass;"
+"xr\u0000\u001ecom.sun.msv.grammar.ElementExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0002Z\u0000\u001aignoreUndecl"
+"aredAttributesL\u0000\fcontentModelq\u0000~\u0000\u0002xq\u0000~\u0000\u0003pp\u0000sq\u0000~\u0000\u0000ppsr\u0000\u001bcom.s"
+"un.msv.grammar.DataExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0003L\u0000\u0002dtt\u0000\u001fLorg/relaxng/dataty"
+"pe/Datatype;L\u0000\u0006exceptq\u0000~\u0000\u0002L\u0000\u0004namet\u0000\u001dLcom/sun/msv/util/String"




                                                                                                                                                                                                                        • 38 files
+"Pair;xq\u0000~\u0000\u0003ppsr\u0000\"com.sun.msv.datatype.xsd.FloatType\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002"
+"\u0000\u0000xr\u0000+com.sun.msv.datatype.xsd.FloatingNumberType\u00fc\u00e3\u00b6\u0087\u008c\u00a8|\u00e0\u0002\u0000\u0000"
+"xr\u0000*com.sun.msv.datatype.xsd.BuiltinAtomicType\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xr\u0000"
+"%com.sun.msv.datatype.xsd.ConcreteType\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xr\u0000\'com.sun"
+".msv.datatype.xsd.XSDatatypeImpl\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0003L\u0000\fnamespaceUrit\u0000"
+"\u0012Ljava/lang/String;L\u0000\btypeNameq\u0000~\u0000\u0014L\u0000\nwhiteSpacet\u0000.Lcom/sun/"
+"msv/datatype/xsd/WhiteSpaceProcessor;xpt\u0000 http://www.w3.org/"
+"2001/XMLSchemat\u0000\u0005floatsr\u00005com.sun.msv.datatype.xsd.WhiteSpac"
+"eProcessor$Collapse\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xr\u0000,com.sun.msv.datatype.xsd.W"
+"hiteSpaceProcessor\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xpsr\u00000com.sun.msv.grammar.Expre"
+"ssion$NullSetExpression\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xq\u0000~\u0000\u0003ppsr\u0000\u001bcom.sun.msv.ut"
+"il.StringPair\u00d0t\u001ejB\u008f\u008d\u00a0\u0002\u0000\u0002L\u0000\tlocalNameq\u0000~\u0000\u0014L\u0000\fnamespaceURIq\u0000~\u0000"
+"\u0014xpq\u0000~\u0000\u0018q\u0000~\u0000\u0017sr\u0000\u001dcom.sun.msv.grammar.ChoiceExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000xq\u0000"
+"~\u0000\u0001ppsr\u0000 com.sun.msv.grammar.AttributeExp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0002L\u0000\u0003expq\u0000"
+"~\u0000\u0002L\u0000\tnameClassq\u0000~\u0000\u0007xq\u0000~\u0000\u0003sr\u0000\u0011java.lang.Boolean\u00cd r\u0080\u00d5\u009c\u00fa\u00ee\u0002\u0000\u0001Z\u0000"
+"\u0005valuexp\u0000psq\u0000~\u0000\u000bppsr\u0000\"com.sun.msv.datatype.xsd.QnameType\u0000\u0000\u0000\u0000"
+"\u0000\u0000\u0000\u0001\u0002\u0000\u0000xq\u0000~\u0000\u0011q\u0000~\u0000\u0017t\u0000\u0005QNameq\u0000~\u0000\u001bq\u0000~\u0000\u001dsq\u0000~\u0000\u001eq\u0000~\u0000)q\u0000~\u0000\u0017sr\u0000#com."
+"sun.msv.grammar.SimpleNameClass\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0002L\u0000\tlocalNameq\u0000~\u0000\u0014L"
+"\u0000\fnamespaceURIq\u0000~\u0000\u0014xr\u0000\u001dcom.sun.msv.grammar.NameClass\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001"




                                                                                                                                                                                                                        • 219KB of code in total
+"\u0002\u0000\u0000xpt\u0000\u0004typet\u0000)http://www.w3.org/2001/XMLSchema-instancesr\u00000"
+"com.sun.msv.grammar.Expression$EpsilonExpression\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000x"
+"q\u0000~\u0000\u0003sq\u0000~\u0000$\u0001psq\u0000~\u0000+t\u0000\u0001xt\u0000\u0000sq\u0000~\u0000\u0006pp\u0000sq\u0000~\u0000\u0000ppq\u0000~\u0000\u000esq\u0000~\u0000 ppsq\u0000~"
+"\u0000\"q\u0000~\u0000%pq\u0000~\u0000&q\u0000~\u0000-q\u0000~\u00001sq\u0000~\u0000+t\u0000\u0001yq\u0000~\u00005sr\u0000\"com.sun.msv.gramma"
+"r.ExpressionPool\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0001L\u0000\bexpTablet\u0000/Lcom/sun/msv/gramma"
+"r/ExpressionPool$ClosedHash;xpsr\u0000-com.sun.msv.grammar.Expres"
+"sionPool$ClosedHash\u00d7j\u00d0N\u00ef\u00e8\u00ed\u001c\u0003\u0000\u0003I\u0000\u0005countB\u0000\rstreamVersionL\u0000\u0006par"
+"entt\u0000$Lcom/sun/msv/grammar/ExpressionPool;xp\u0000\u0000\u0000\u0005\u0001pq\u0000~\u0000\u0005q\u0000~\u0000!"
+"q\u0000~\u00008q\u0000~\u0000\nq\u0000~\u00007x"));
        }
        return new com.sun.msv.verifier.regexp.REDocumentDeclaration(schemaFragment);
    }
    public class Unmarshaller
        extends generated.impl.runtime.AbstractUnmarshallingEventHandlerImpl
    {


        public Unmarshaller(generated.impl.runtime.UnmarshallingContext context) {
            super(context, "-------");
        }

        protected Unmarshaller(generated.impl.runtime.UnmarshallingContext context, int startState) {
            this(context);
            state = startState;




                                                                                                                                                                                                                                                                                                                                                                             OLD! J2EE 1.4
        }




                                                                                                                                                  GlassFish – The Best Open Source Application Server                                                                                                                                                                                 11
 JAXB 2.0 in Java EE 5
 Generated Code...
@XmlAccessorType(FIELD)                              • 62 lines for
@XmlType(name = "", propOrder = {"x","y"})
@XmlRootElement(name = "point")                         <point>
public class Point {                                      <x>1</x>
  protected float x;                                      <y>2</y>
  protected float y;                                    </point>
     public float getX() {                           • 2 files
       return x;
     }
     public void setX(float value) {
                                                     • 3KB of code in total
       this.x = value;
     }

     public float getY() {
       return y;
     }
     public void setY(float value) {
       this.y = value;
}}
                                                                   NEW! Java EE 5
                                                                              12
                             GlassFish – The Best Open Source Application Server
How much easier is it?


RosterApp 1
                     J2EE 1.4 Java EE 5
Number of Java files       17         7
Lines of code (Java)     987        716
Number of XML Files         9         1
Lines of code (XML)      792          5


 [1] Source: Raghu Kodali, Oracle Corp



                             GlassFish – The Best Open Source Application Server   13
Java EE 5.0 Summary
How is it easier?
J2EE 1.4                             Java EE
• Deployment                         • Java language
  descriptors                          annotations @
• Required container                 • Plain Old Java Objects
  interfaces                           (POJOs)
• JNDI Lookups                       • Dependency Injection
• Deployment descriptor,             • More and better
  interfaces                           defaults
• No Supported UI                    • Java Server Faces
  Framework                            (JSF)

                GlassFish – The Best Open Source Application Server   14
Java EE 5 Adoption




          GlassFish – The Best Open Source Application Server   15
Agenda

> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
 Resources




                                    16
 What is GlassFish ?
• Open Source
  > CDDL & GPL v2 (w/ CPE)
• Java EE 5 Reference Implementation
  > Included in Java EE 5 SDK
• Enterprise Quality
  > High Availability, Clustering
  > .NET 3.0 Web services interoperability
  > World Record Performance
• Community
  > Sources, bug DBs, discussions at glassfish.java.net
  > Roadmaps, Architecture Documents

                    GlassFish – The Best Open Source Application Server   17
 Timeline of ProjectGlassFish




Tomcat
Jasper
Catalina
 JSTL
              GlassFish             v1                      v2                     v3
 Struts                                   v1 UR1                    v2 UR1
    Crimson    Launch
    XSLTC
     Xalan
    Xerces


  JAXB          J1'05            J1'06                      Sept.               2008/2009
JAX-RPC
   JSF
              June 2005         May 2006                    2007          (you are here)
                          GlassFish – The Best Open Source Application Server           18
GlassFish Versions

• GlassFish v1
  > Java EE 5 Compliance!
  > Production Quality with Growing # of Deployments
• GlassFish v2
  >   New Web Services stack with Metro
  >   High performance and Production quality
  >   Startup time, Load balancing, Cluster management, Failover
  >   Easy-to-use
• GlassFish v3
  > Fast, Small, Modular, Better scripting support


                      GlassFish – The Best Open Source Application Server   19
GlassFish and Sun product

• Sun adds installer, brands, indemnifies and supports


       GlassFish Version             Sun Supported Version
       GlassFish V1                  Sun Application Server PE 9.0
       GlassFish V2                  Sun Application Server 9.1
       GlassFish V3                  Sun Application Server.NEXT(1)




 (1)
       Product Name TBD


                          GlassFish – The Best Open Source Application Server   20
(Some) Distributions & Contributors
                                                 NetBeans 5.5, 6.0
                                     Tools

          Java EE RI & SDK              NetBeans™                    Communities
                                           IDE

   Distributions                                         Eclipse Plugin

 Sun Java System                                                  Derby
      AS 9.x
                                                               MQ
     JBoss 5                        Project
                                   GlassFish
                                                                Portal Server
 TmaxSoft JEUS 6
   Oracle oc4j                                        Open ESB             SailFin
                                                                          Ericsson
   BEA WebLogic 10
                                  Maven Rep
                                         Users and Other Groups
                   GlassFish – The Best Open Source Application Server               21
  Frameworks and Applications
                                                      Quercus PHP
                           OSWorkFlow
                                                    OSCache
                               Integration ORB                  Project Tango
   Apache Httpd                           CJUG-Classifieds
                                                        BIRT        jBPM
   DOJO
 Facelets                                 MyFaces
     Shale                                ADF SiteMesh          WebDAV
                                    JSPwiki
                                            SEAM
                                                            Tapestry
                                       MC4J
            StringBeans Portal                                  AJAX
         BlogTrader                                        Wicket Equinox
Java WSDP
     Dalma                                WebSphere MQ                 EHCache
                   GlassFish – The Best Open Source Application Server      22
Tools Support
                                           • GlassFish (v1, v2, v3)
• NetBeans 5.5.1, 6.0                        plugin for Eclipse 3.3
• Best integration with :                    (Europa)
  >   full Java EE 5 support
  >   resource creation                    • Genuitec's MyEclipse
  >   remote debug                           offers greater integration
  >   incremental deployment                 between IDE and
  >   profiling                              GlassFish
  >   wizards, etc...
• Additional features (SOA,                • CodeGear JBuilder 2007
  UML, jRubyOnRails, ...)                  • IDEA Intellij 6.0, 7.0

                   GlassFish – The Best Open Source Application Server    23
GlassFish Adoption Stories
http://blogs.sun.com/stories
• OK Air
  > GlassFish v2
  > MySQL
• Wotif.com
  > Large # hits, 10,000 concurrent sessions, 1
    million users/110,000 bookings monthly
  > Hibernate, Struts, Spring, and ehCache /
    Horizontal Scaling
• Harvard University
  > On-line archive for sharing data within and
    across universities
  > NetBeans, the Lucene search engine,
    PostgreSQL database, Shale standalone tiles
• More (small and large)
  > Help us collect these @ stories@sun.comApplication Server
                       GlassFish – The Best Open Source         24
Who else is using GlassFish ...




            GlassFish – The Best Open Source Application Server   25
Community Stats




                                                                     2000000
 500000   Admin Console Page Views                                   1800000

                                                                     1600000
 400000
                                                                     1400000

                                                                     1200000
 300000
                                                                     1000000

                                                                     800000
 200000
                                                                     600000

                                                                     400000                         Active Usage
 100000
                                                                     200000

                                                                          0
     0                                                                        Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan
          Q3 06   Q4 06   Q1 07   Q2 07      Q3 07   Q4 07                    07 07 07 07 07 07 07 07 07 07 07 08



                                          GlassFish – The Best Open Source Application Server                                   26
GlassFish Active Users




           GlassFish – The Best Open Source Application Server   27
Agenda

> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
 Resources




                                    28
GlassFish v2
SJS Application Server 9.1
• Metro Web Services Stack
  > Performance, Microsoft interoperability
• Clustering, Load-Balancing, HA
  > Advanced Management
• JBI support (OpenESB 2.0)
• Better user experience
  >   Single, smaller, download
  >   Multiple Profiles (Developer, Cluster, Enterprise)
  >   Better startup time
  >   Update Center
  >   New admin console: JSF, AJAX, Charts
• World Record Performance Open Source Application Server
                 GlassFish – The Best                       29
Metro Overview

                                                     Commons
                                                         SMTP
   Security      Reliability     Transactions            Spring
                                                                            ...
                                                          JSON



              SOAP                  WSDL                          HTTP
                            Web Services Core

      JAXB                 JAXP                  SAAJ                      ...
                             XML Processing

                Metro – GlassFish Web Services Stack
                          metro.dev.java.net


                     GlassFish – The Best Open Source Application Server          30
Clustering Architecture                                          Custom
                                                                 Resources
              HTTP(S)    JMS             RMI/IIOP


                                                               Resource
                                                               Resource
                                                               Adapters
                                                                Adapters

               Message Routing / Failover / Load Balancing
 Management




                                                                               Instances
                                                                               Clustered
               AS   AS       AS     AS                      AS     AS
                                             . . .               AS
                Node A         Node B                        Node C


                HA Application State Repository


                         GlassFish – The Best Open Source Application Server               31
JBI – Java Business Integration
• OpenESB 2.0 implementation
  > Included in GlassFish v2
  > Integrated as a life-cycle module
  > Integrated admin tools (Web and CLI)
• Many components available from openesb.org
  > Binding Components: HTTP, File, FTP, JMS, TCP, CICS, HL7, ...
  > Service Engines: BPEL, XSLT, ETL, SQL, Scripting, Worklist, ...
  > https://open-esb.dev.java.net/Components.html
• Tools support
  > NetBeans SOA 6.0
• Possible to plug ServiceMix into GlassFish v2
  > Support wider JBI story
                  GlassFish – The Best Open Source Application Server   32
Ajax and Scripting Activities
• JRuby (GlassFish v3 gem)
  > http://wiki.glassfish.java.net/Wiki.jsp?page=JRuby
• jMaki - http://ajax.dev.java.net
  > Encapsulates very easily AJAX widgets
• Phobos - http://phobos.dev.java.net
  > Scripting on the Server
• DynaFaces - http://jsf-extensions.dev.java.net
  > Ajax and JavaServer Faces




                 GlassFish – The Best Open Source Application Server   33
Web Tier
• JSP Container
  > 10x perf. improvement in JSP compilation (JSR-199)
• Grizzly
  >   Improved over GlassFish v1
  >   Very Flexible and Customizable
  >   Non-blocking SSL, Quality of Service constraints
  >   Scalable Async Req Processing (ARP)
  >   Supports Comet (long-term HTTP connections)
• Hosting features
  > Alternate docroots
  > Webcontainer dynamically reconfigurable

                    GlassFish – The Best Open Source Application Server   34
Ease of Use - Administration




           GlassFish – The Best Open Source Application Server   35
   World Record Performance                                                                                                              900
                                                                                                                                                  SPECjAppServer 2004 Results
   SpecjAppServer 2004                                                                                                                   800




      > July 2007: #1 score on T2000
                                                                                                                                         700

                                                                                                                                         600




                                                                                                                                                                                            ?
                                                                                                                                         500



               > 883.66 JOPS@Standard for GlassFish v2                                                                                   400

                                                                                                                                         300



               > Improved in areas not covered by benchmark                                                                              200

                                                                                                                                         100



               > 10% faster than BEA WebLogic
                                                                                                                                           0
                                                                                                                                                   Sun           BEA            IBM          JBoss




               > 30% faster than IBM WebSphere 6.1




Disclaimers: SPEC and the benchmark name SPECjAppServer 2004 are registered trademarks of the Standard Performance Evaluation Corporation. Competitive benchmark results stated above refl ect
results published on www.spec.org as of 11/21/07. The comparison presented is based on GlassFish v2 UR1 run on 6 Sun SPARC Enterprise T5120 (1 chip, 8 cores/chip, 8 threads/core) 1.4GHz 8,439.36
SPECjAppServer2004 JOPS@Standard. For the latest SPECjAppServer 2004 benchmark results, visit http://www.spec.org/.


                                                           GlassFish – The Best Open Source Application Server                                                                           36
GlassFish Value Proposition

         Downloads                                Registrations                         Subscriptions

• Free Major Releases like 9.1 The            • All Download Benefits               • All Registration Benefits
    fastest, easy-to-administer,              • Access to aggregated content        • Enterprise features at Open Source
    enterprise class, open source                                                     prices
    Application Server                               • Bugs fixed
                                                     • Docs                         • Enterprise Level Production
•   Free Minor Releases like 9.1.1                                                    Support SLA
                                                     • News
•   Nightly builds                                                                  • Ability to escalate bug for an out of
                                                     • Promotions                     cycle patch or engineering
•   Free Documentation
                                                     • TechTips                       attention
•   Free Access to developers via
                                                                                    • Live Person Technical Support
    forums and user lists                     • Promotion
                                                     • iPhone Sweepstakes           • Indemnification
•   Update Center to get latest and
    greatest technology binaries                                                    • Low risk, tested fixes and features
                                                                                       for mission critical deployments
                                                                                    • Proactive Sun Alerts and SunSolve
                                                                                      notifications
                                                                                    • Access to Knowledge Base
                                                                                    • Promotions
                                                                                             • $100 ThinkGeek Gift
                                                                                                Certificate
                                                                                             • Free DEA ($249 value)


                                      GlassFish – The Best Open Source Application Server                        37
Agenda
•
> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
    Resources




                                    38
                                    38
Java EE 6 Goals
Ship by Q2 2009 focused on ...
• Rightsizing
  > Profiles
  > Pruning - EJB CMP, JAX-RPC

• Further ease of development
  > Simplified packaging
  > More annotations

• Extensibility
  > Scripting
  > Framework integration


                  GlassFish – The Best Open Source Application Server   39
Java EE6 (JSR 316) Supporters




          GlassFish – The Best Open Source Application Server   40
Proposed Component JSRs
Exact Set of Technologies to be Determined by Expert
Group
•   EJB 3.1 (JSR 318)
•   Java Persistence API 2.0 (JSR 317)
•   Servlet 3.0 (JSR 315)
•   JSF 2.0 (JSR 314)
•   JAX-RS 1.0 (JSR 311)
•   WebBeans 1.0 (JSR 299)



                  GlassFish – The Best Open Source Application Server   41
Other Components
• Already approved/completed:
  > JAXB 2.1 (JSR 222)
  > Java Authentication Service Provider Interface for Containers
      (JSR 196)
• Maintenance Releases (MR):
  >   Implementing Enterprise Web Services 1.3 (JSR 109)
  >   JAX-WS 2.2 (JSR 224)
  >   JSP 2.2 (JSR 245)
  >   Expression Language 1.2 (JSR 245)




                   GlassFish – The Best Open Source Application Server   42
GlassFish v3
•   Small (Kernel < 100k)
•   Fast (Startup in < 1 second)
•   Modular (Java, Ruby, PHP, JavaScript, ...)
•   Don't think of it as Java EE container
    > ... rather a container that can do Java EE
    > ... an ideal container for next gen web apps
• Support for upcoming Java EE 6 profiles
• Code and documentation available today
    > M2 released Feb 22
      > Web container related technologies, jRoR, Multiple HTTP Listeners



                        GlassFish – The Best Open Source Application Server   43
Agenda
•
> Java EE 5 Overview
> Project GlassFish
  > What is GlassFish?
  > GlassFish v2 Main Feature and
    Technology
> Future Direction
> Call to Action, Summary and
    Resources




                                    44
So Why GlassFish?
•   Java EE 5 (vs. tomcat, jboss, Websphere)
•   Performance! (vs. jboss)
•   Administration (vs. jboss, tomcat)
•   Enterprise-ready (vs. jboss, tomcat)
•   Enterprise support (vs. tomcat)
•   Bigger picture: OpenSSO, OpenESB, etc...
•   Community (vs. weblogic, websphere)

          “ BEA's features at JBoss' price! “

                  GlassFish – The Best Open Source Application Server   45
We Need Your Participation!
 • As Users
   > What's Working? What is Missing?
 • As Contributors
   >   Bug Reports
   >   Documents, Localization
   >   Evangelism! Talk to your friends
   >   Contribute Bug Fixes and Code!
 • Top Priority!
   > Use GF V2
   > Try GF V3 preview


                 GlassFish – The Best Open Source Application Server   46
Summary
 • Java EE 5 is a BIG improvement!
  > GlassFish is the best Java EE 5 App Server
  > And we want to make it the best for you
 • Help Us!
    >Spread the word on Java EE 5 and GlassFish
    >Improve GlassFish – Review and Use GF V2
    >Try GlassFish v3 preview
 • Stay in Touch!
  > Join SDN - developer.sun.com




              GlassFish – The Best Open Source Application Server   47
 Resources
• http://glassfish.dev.java.net
• http://blogs.sun.com/theaquarium
• http://wiki.glassfish.java.net




                  GlassFish – The Best Open Source Application Server   48