Escolar Documentos
Profissional Documentos
Cultura Documentos
1
1
Agenda
2
2
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, ...
Specification Changes in Java EE 5
● JAX-WS 2.0 & JSR 181
● Java Persistence
● EJB 3.0
● JAXB 2.0
} <servlet-link>WSServlet_HelloService</servlet-link>
</service-impl-bean>
} </port-component>
</webservice-description>
import javax.jws.WebService;
@WebService
public class MySimpleWS {
public String sayHello(String s) {
return "Hello " + s;
}
}
NEW! Java EE 5
Stateless Session Bean in Java EE 5
import javax.jws.WebService;
import javax.ejb.Stateless;
@WebService
@Stateless
public class MySimpleWS {
public String sayHello(String s) {
return "Hello " + s;
}
}
NEW! Java EE 5
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
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.Ob ject owner() {
public class PointTypeImpl implements generated.PointType, com.sun.xml.bind.JAXBObject, generated.impl.runtime.UnmarshallableObject, generated.impl.runtime.XMLSerializable, generated.impl.runtime.ValidatableObject return generated.impl.PointTypeImpl.this;
{ }
protected boolean has_Y; public void enterElement(java.lang.Str ing ___uri, java.lang .String _ __local, java.lang .String _ __qname, org.xml.sax.Attributes __atts)
throws org.xml. sax.SAXException
protected float _Y; {
protected boolean has_X; int attIdx;
protected float _X; outer:
public final static java.lang.Class version = (generated.impl.JAXBVersion.class); while (true) {
private static com.sun.msv.grammar.Grammar schemaFragment; switch (state) {
case 3 :
private final static java.lang.Class PRIMARY_INTERFACE_CLASS() { if (("y" == ___local)&&("" == ___uri)) {
return (generated.PointType.class); contex t.pushAttributes(__atts, true);
} state = 4;
return ;
}
public float getY() { break;
return _Y; case 0 :
} if (("x" == ___local)&&("" == ___uri)) {
contex t.pushAttributes(__atts, true);
public void setY(float value) { state = 1;
_Y = value; return ;
has_Y = true; }
} break;
case 6 :
revertToParentFromEn terElement(__ _uri, ___local, ___qname, __atts);
public float getX() { return ;
return _X; }
} super.enterElement(___uri, ___local, ___qname, __atts);
break;
public void setX(float value) { }
_X = value; }
has_X = true;
} public void leaveElement(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname )
throws org.xml. sax.SAXException
{
public generated.impl.runtime.UnmarshallingEventHandler createUnmarshaller(generated.impl.runtime.UnmarshallingContext context) { int attIdx;
return new generated.impl.PointTypeImpl.Unmarshaller(context); outer:
} while (true) {
switch (state) {
public void serializeBody(generated.impl.runtime.XMLSerializer context) case 2 :
throws org.xml.sax.SAXException if (("x" == ___local)&&("" == ___uri)) {
{ contex t.popAttributes();
if (!has_Y) { state = 3;
return ;
context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "Y")); }
} break;
if (!has_X) { case 6 :
context.reportError(com.sun.xml.bind.serializer.Util.createMissingObjectError(this, "X")); revertToParentFromLeaveElement(___uri, ___local, ___qnam e);
} return ;
context.startElement("", "x"); case 5 :
context.endNamespaceDecls(); if (("y" == ___local)&&("" == ___uri)) {
context.endAttributes(); contex t.popAttributes();
try { state = 6;
return ;
context.text(javax.xml.bind.DatatypeConverter.printFloat(((float) _X)), "X"); }
} catch (java.lang.Exception e) { break;
generated.impl.runtime.Util.handlePrintConversionException(this, e, context); }
} super.leaveElemen t(___ur i, ___local, ___qname);
context.endElement(); break;
context.startElement("", "y"); }
context.endNamespaceDecls(); }
context.endAttributes();
try { public void enterAttribute(java.lang.String ___uri, java.lang.String ___local, java.lang.String ___qname )
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(); }
}
<point><x>1</x><y>2</y></point>
+"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"
+"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/"
• 38 files
+"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"
+"\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!"
RosterApp1
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
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)
Agenda
13
“Various Interface21ers, including Costin and Juergen, have
taken a look at GlassFish and given it the thumbs up.”
Tomcat
Jasper
Catalina
JSTL GlassFish v1 v2 v3 TP2
Struts v1 UR1 v2 UR1 v2 UR2
Crimson Launch
XSLTC
Xalan
Xerces
Woodstock
Metro Woodstox
jMaki OpenMQ @Codehaus
JAXB
OpenESB EclipseLink
Grizzly
Shoal @Eclipse
Phobos HK2
WebTier Derby
Slynkr JSF/Mojarra @Java.Net
AS Core
Other
JSP EJB Felix
SocialSoftware
Others @ASF
(Some) Distributions & Contributors
NetBeans 5.5, 6.0
Tools
OSWorkFlow
OSCache
Integration ORB
Apache Httpd CJUG-Classifieds
Open ESB BIRTSeams
DOJO OpenSSO
Facelets MyFaces
Shale ADF SiteMeshWebDAV
JSPwiki AJAX
Tapestry
Dalma StringBeans Portal
BlogTrader WebSphere MQ
Tools Support
• GlassFish (v1, v2, v3)
• NetBeans 5.5.1, 6.0.1, 6.1 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
Helping You Grow
GlassFish Adoption Stories
http://blogs.sun.com/stories
• iTAC Software Manufacturing Execution
Systems (MES)
> using GlassFish to provide direct connection
between shop floor devices in manufacturing plants
> 3 million calls a day: uses EJBs, rich IIOP clients,
and the Java Connector Architecture
• 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
Some Adoption Indicators
• +2.5M hits in 13 mo
• +310K different IPs
JSF/Mojarra 2.0
9/08
Production Ready
● Ease of Use
● Clustering
● HA DB Support
● Centralized Admin
●
Documentation
● Advanced Monitoring
● Web 2.0 Support – AJAX, Woodstock, Comet, JRuby
●
Best Web Services, w/ .NET Interop
● Fastest Open Source AppServer
– See SPECjAppServer 2004 results
Disclaimers: SPEC and the benchmark name SPECjAppServer 2004 are registered trademarks of the Standard Performance Evaluation Corporation. Competitive benchmark
results stated
above reflect 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 Open Source Business Model
• Free Right-to-Use – Start Now
• Optional Free Registration – Stay in Touch
• Subscription Support – From the Source
> Sustaining Patches
> Indemnification
> World-Wide Support
> Affordable - from $4,500 for 4 sockets
> Look for Additional Price Points
• Consulting & Training
GlassFish Support Pricing
• Yes! GlassFish is totally free to use
• The business model for Sun is that of services
> Support subscription starting from $4 500 for 4 sockets
> Premium support and volume pricing available
> Support from the source to secure your projects
• Also Consulting & Training
• All from Sun & Partners
• We want our partners, our
customers to be successful
(and Sun too in the process)
Agenda
31
GlassFish v2
SJS Application Server 9.1
• Metro Web Services Stack
> Performance, Microsoft interoperability
• Clustering, Load-Balancing, HA
> Advanced Management
l e !
• JBI support (OpenESB 2.0) Ava ilab
• 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
Metro
JAX-WS, WSIT, and JAXB implementations
• Dynamic JAX-WS Runtimes
• JAXB 2.0 fully support XML Schema
> A lot of reuse of GlassFish's JAXB implementation
• GlassFish JAX-WS 2.x
> Simple annotated POJO model
> WS Separation of Transport and Encoding
> HTTP, JMS, SMTP, TCP/IP
> MTOM, Fast Infoset (binary), Textual, Others
• WSIT (Project Tango)
> Microsoft Interoperability and Quality of Service
> Same (old) JAX-WS programing model
See “Metro and REST” presentation today @ 3:10
JAX-WS RI vs Axis2
Clustering Architecture Custom
Resources
Instances
Clustered
AS
AS AS AS AS
AS AS
Node A Node B Node N
Applications
HA Application State Repository and Config
Databases
Clustering in GlassFish v2
Node Agent
JMX API
Domain
Administration
Server
(DAS)
Node 1
JMX
API Applications
Node Agent
asadmin> Resources
Configuration
Node 2
JMX API
Administration Node
Java EE Server
Instance
JMX = Java Management Extensions
Dynamic Clustering and In-Memory
Replication
• GMS with Project Shoal
> http://shoal.dev.java.net
> Dynamic clusters implemented with JXTA by default
> Extreme ease of use in cluster setup
• Replication
> What?
> HTTP session state
> Stateful EJB session state
> Single Sign-On state
> Container state (timers, ...)
> How?
> Default is In-Memory replication with JXTA
> Can still use HADB for 99.999% uptime (higher perf degradation)
Memory Replication
Typical cluster topology Example: Maximize
Availability on 4 node
cluster on 2 machines
Instance 1 Instance 2
Instance 3 Instance 4
Machine 1 Machine 2
Management Features
• Centralized, secure, remote access
> Accessible as GUI, CLI, IDEs, Java-based programs
> Also available via provided ANT tasks
> JMX & Application Server Management eXtensions, AMX
> Can be monitored through jConsole and others
• Per-service monitoring levels
• Call Flow
• Self Management
• Resource consumption management
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
AJAX and Scripting Activities
• 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
• Blueprints - http://bpcatalog.dev.java.net
> Guidelines on many areas, including AJAX
• JRuby -
> http://wiki.glassfish.java.net/Wiki.jsp?page=JRuby
jMaki
• 'j' stands for JavaScript. Maki means to wrap in Japanese
• Framework for encapsulating AJAX libraries and widgets
from Dojo, Yahoo!, scriptaculous, Google, and more
• Usable with JSP, JSF, PHP and Ruby on Rails
• Easy to build your own widget
• Common event model and proxy architecture
• Automatic handling of JavaScript resource files
• V 1.0 released
• http://ajax.dev.java.net and http://widget.dev.java.net
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
Introduction to Grizzly
What Is the Grizzly HTTP Framework?
• Grizzly is a HTTP framework
> Uses lower level Java NIO primitives
> Easy-to-use, high-performance APIs for socket
communications
• Grizzly brings non-blocking sockets to the
HTTP processing layer
• Grizzly integrates with the current Apache Tomcat HTTP
Connector architecture (Coyote)
> Coyote is currently used in Tomcat 3.x/4.x/5.x
• Grizzly replaces Apache Tomcat Coyote HTTP front-end
and thread pool
> Utilizes its high performant buffers and
parsing classes
Web Tier: JSP/Servlet/Grizzly
• Grizzly
> Java-based
Grizzly
> NewIO
HTTP Servlet/JSP > @GlassFish
APR
Requests Container • APR
Coyote > C-based
• Coyote
> Java-based
Connectors Container > Traditional
connector
Benchmark Results
2000
1750
1500
1250
1000
750
500
250
0
2 CPU 6 CPU 16 CPU
Demo
• Grizzly Comet and jMaki: interactive Flickr based Chat
• Comet (request polling):
> Builds on top of Grizzly ARP (Asynchronous Request Process)
> Enables web servers to send data to client without client
request
> Allows creation of event-driven web application which are
hosted in browser
• GlassFish supports Comet
> Enable Coment without restart the server
Top Link Essentials / JPA
• JPA now a separate JSR
> 1.0 very well accepted
> Does not require a container
• Oracle Contribution to GlassFish
> Fully JPA-compliant and open source
• Very Active Community
> Oracle, Sun, TmaxSoft, independents
> Mail: persistence@glassfish.dev.java.net
• Pluggable (per spec)
> In GlassFish, JEUS, JOnAS, Tomcat, Geronimo, JBoss, Oracle
> Converse is true also: Hibernate & OpenJPA run on GlassFish
See “Java Persistence API” presentation today @ 4:10
World Record Performance SPECjAppServer 2004 Results
SPECjAppServer 2004 900
800
600
400
?
> 883.66 JOPS@Standard for GlassFish v2 300
100
Overall Performance
200
150
100
50
0
SJS GFv1/9.0 GFv2/9.1
AS8.2
Agenda
51
Java EE 6 – JSR 316
• Extensibility
> Embrace and support popular frameworks and technologies
developed in external communities
> Layer these technologies cleanly on top of Java EE platform
• Profiles
> Rules for referencing Java EE platform technologies in Java EE
Profiles
> A profile may include a subset of Java EE platform technologies,
additional JCP technologies, or both
• Pruning
> Define process of removing technologies from platform
GlassFish V3 modules
Random OSGi Bundle
(OSGi + extra metadata)
Service OSGi
HK2 Service layer
Mapper Service Layer
dispatch
GlassFish Kernel
browser
Grizzly requests
HK2 Services
C
Container
o GUI Parts
Runtime
n
f
Grizzly Adapter i
g Admin commands
Kernel
67
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!
> Review GF V2 Details now!
> Use GF V2
> Try GF V3 preview
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
• Stay in Touch!
> Join SDN - developer.sun.com
Resources
• http://glassfish.java.net
• http://wiki.glassfish.java.net
• http://blogs.sun.com/theaquarium
Java EE, GlassFish
and their future
71