Title: JavaTM Platform Roadmaps The Big Stuff, Today
1JavaTM Platform RoadmapsThe Big Stuff, Today
Tomorrow
- Graham Hamilton VP Fellow, Sun
Microsystems - Bill Shannon Distinguished
Engineer, Sun Microsystems
2Agenda
- JavaTM SE 6 - Mustang
- Qualities features
- JavaTM EE 5
- Now and How
- Futures
- Dolphin
- New languages
3JavaTM ME Platform Advances
- Mobile Service Architecture
- Delivering richer features and functionality
- Next generation UI technologies
- Expanding the capabilities of the platform
- Converged services
- Enabling content to be shared across multiple
device types
Mobility General Session Alan Brenner, VP Client
Systems Group, Sun Microsystems 200-400pm in
Esplanade 303/305
4Agenda
5JavaTM SE Schedule
- JavaTM SE 5.0 Tiger shipped fall 2004
-
- JavaTM SE 6 Mustang ships this October
-
- JavaTM SE 7 Dolphin targets second half 2008
- Plus small bugfix updates every 8-16 weeks
- But no 5.1 or 6.1
6(No Transcript)
7Agenda
- JavaTM SE 6 - Mustang
- Systemic properties
- New features
- JavaTM EE 5
- Futures
8Compatibility, Stability, Quality
- Improve quality, but keep old programs working!
- Single most important focus for team
- Many new compatibility/quality initiatives
- continual internal process improvements
- weekly binary snapshots at mustang.dev.java.net
- regression challenge contest
- crack the verifier contest
- We tend to be paranoid during bug fixing
- one person's fix may be another's regression
- but we still managed to fix many bugs!
9Performance
- Mustang continues to improve Java performance
- on both client and server
- upgrades to core JVM execution
- GC scaling and parallelism
- library tuning
- upgrades to Java2D graphics rendering
- improvements in startup
10Swing "Gray Rect" (Exposure) Performance
- Time to repaint exposed region in big Swing app.
Smaller is better!
11SpecJBB from 1.3.1 to 6
Server benchmark SPECjbb2000
Source Sun Microsystems, Inc.
12Monitoring Management
- Monitoring Management was key value in Tiger
- Mustang adds
- Even more JVM level diagnostics
- e.g. improved OutOfMemoryError handling
- JMX upgrades
- Improved Solaris DTrace integration
- Attach-on-Demand for monitoring
- JConsole upgrades
13JConsole
14Agenda
- JavaTM SE 6 - Mustang
- Systemic properties
- New features
- JavaTM EE 5
- Futures
15(No Transcript)
16Example Application configuration
- import java.io.
- import javax.script.
-
- public class MyApp
-
- public static void main(String args)
- //...
- ScriptEngineManager sem new
ScriptEngineManager() - ScriptEngine e sem.getEngineByName("JavaSc
ript") - FileReader fin new FileReader("MyApp.confi
g.js") - e.eval(fin)
- // ...
-
17Scripting JavaScript to JavaTM APIs
- // JavaScript configuration file for MyApp
- importPackage(java.lang)
- importPackage(Packages.com.kgh.myapp)
- System.out.println("Running Graham's config
script") - MyApp.setFavoriteMammal("lemur")
18Desktop Foci
- Look-and-Feels
- significant upgrades for Windows and Gnome
- including support for Vista
- antialiased LCD fronts, Grey Rect fix, ...
- Performance
- boosts for Java2D pipelines (and Swing generally)
- Assorted API upgrades
- SwingWorker, JTable sorting, GroupLayout
- Desktop Integration
- icons in system tray, splash screen support
- ability to launch native tools
19DEMO
20Windows Vista Status
- Windows Vista is a key target platform
- We're tracking it closely
- Mustang will include core Vista support
- Including IE7 plug-in, Vista look-and-feel, etc
- All available when Vista ships in November
- Key updates will go into Mustang Beta2 in June
- Please help test your applets on Vista Mustang
ß2! - 1.4.2 and 5.0 will also support Vista in Nov.
- But with older UI and more limited plug-in
support - Extra support in updates (if needed)
- Mustang will be primary focus for Vista
integration
21(No Transcript)
22Web Services Java and .NET
23(No Transcript)
24(No Transcript)
25Summary Why to Leap onto Mustang!
- Systemic Enhancements
- Enhanced Robustness, Compatibility, Stability
- Even more RAS, Monitoring Management
- Performance boosts on both client server
- New developer features
- Scripting JavaScriptTM and more
- Desktop integration great Vista support
- Easy-to-use Web Services XML
- ... and much, much more
- Coming in October Get Ready Now!
26JavaTM EE 5 Overview
27Java EE 5 is Done!
28JavaTM EE 5 Platform Vendors
29JavaTM EE 5 IDE Vendors
30JavaTM EE 5 Goal
- Make it easier to develop Java EE applications
- Especially when first getting started with Java EE
31How did we make it easier?
- Declarative programming
- Originally - deployment descriptors
- Now - Java language annotations
- Remove requirements
- Plain Old Java Objects (POJOs)
- More and better defaults
- More powerful frameworks
- Less work for you to do
- Easier to learn and more productive!
32Annotations in JavaTM EE 5
- Made extensive use of annotations
- For defining and using web services
- To map Java classes to XML
- To greatly simplify EJB development
- To map Java classes to databases
- To specify external dependencies
- To reduce need for deployment descriptors
- Just starting to scratch the surface of what's
possible
33JavaTM EE 5 Major Features
- Simplified web services support
- More web service standards support
- Dependency injection
- Greatly simplified EJBTM development
- New JavaTM Persistence API
- Easy web applications with JavaServerTM Faces
- And fully compatible with J2EE 1.4
34J2EETM 1.4 Web Service
package endpoint import java.rmi. public
class HelloServiceImpl implements
HelloServiceSEI public String sayHello(String
param) throws java.rmi.RemoteException
return Hello param package
endpoint import java.rmi. public interface
HelloServiceSEI extends java.rmi.Remote
public String sayHello(String param) throws
java.rmi.RemoteException
lt?xml version'1.0' encoding'UTF-8'
?gt ltwebservices xmlns'http//java.sun.com/xml/ns/
j2ee' version'1.1'gt ltwebservice-descriptiongt
ltwebservice-description-namegt
HelloServicelt/webservice-description-namegt
ltwsdl-filegt WEB-INF/wsdl/HelloService.wsdllt/w
sdl-filegt ltjaxrpc-mapping-filegt
WEB-INF/HelloService-mapping.xml
lt/jaxrpc-mapping-filegt ltport-component
xmlnswsdl-port_ns'urnHelloService/wsdl'gt
ltport-component-namegtHelloServicelt/port-component-
namegt ltwsdl-portgtwsdl-port_nsHelloServiceSE
IPortlt/wsdl-portgt ltservice-endpoint-interfac
egt endpoint.HelloServiceSEIlt/service-endpoi
nt-interfacegt ltservice-impl-beangt
ltservlet-linkgtWSServlet_HelloServicelt/servlet-link
gt lt/service-impl-beangt
lt/port-componentgt lt/webservice-descriptiongt lt/we
bservicesgt lt?xml version'1.0'
encoding'UTF-8' ?gt ltconfiguration
xmlns'http//java.sun.com/xml/ns/jax-rpc/ri/confi
g'gt ltservice name'HelloService'
targetNamespace'urnHelloService/wsdl'
typeNamespace'urnHelloService/types'
packageName'endpoint'gt ltinterface
name'endpoint.HelloServiceSEI'
servantName'endpoint.HelloServiceImpl'gt
lt/interfacegt lt/servicegt lt/configurationgt
35JavaTM EE 5 Web Service
package endpoint import javax.jws.WebService _at_
WebService public class Hello public String
sayHello(String param) return Hello
param
36JavaTM EE 5 Web Service
mkdir -p WEB-INF/classes javac -d
WEB-INF/classes endpoint/Hello.java jar cf
webservicedemo.war WEB-INF asadmin deploy
webservicedemo.war Command deploy executed
successfully.
37DEMO
38JavaTM EE 5 Web Service Client
package client import endpoint. import
javax.xml.ws.WebServiceRef public class
HelloClient _at_WebServiceRef(HelloService.class)
private static Hello svc public static void
main(String argv) System.out.println(svc.say
Hello(argv0)
39JavaTM EE 5 Web Service Client
mkdir classes wsimport -d classes \
http//localhost8080/webservicedemo/HelloSe
rvice?wsdl javac -d classes client/HelloClient.j
ava cd classes jar cfm ../webserviceclient.jar
../manifest.mf cd .. asadmin deploy
-retrieve . webserviceclient.jar Command deploy
executed successfully. appclient -client
webserviceclientClient.jar Joe Hello Joe
40(No Transcript)
41(No Transcript)
42JAXB 1.0
- 308 lines for
- ltpointgtltxgt1lt/xgtltygt2lt/ygtlt/pointgt
- 38 files
- 219KB of code total
// // This file was generated by the JavaTM
Architecture for XML Binding(JAXB) Reference
Implementation, v_at__at_BUILD_VERSION_at__at_ // See lta
href"http//java.sun.com/xml/jaxb"gthttp//java.su
n.com/xml/jaxblt/agt // Any modifications to
this file will be lost upon recompilation of the
source schema. // Generated on 2005.04.21
?? 103756 PDT // package generated.impl publ
ic class PointTypeImpl implements
generated.PointType, com.sun.xml.bind.JAXBObject,
generated.impl.runtime.UnmarshallableObject,
generated.impl.runtime.XMLSerializable,
generated.impl.runtime.ValidatableObject
protected boolean has_Y protected float _Y
protected boolean has_X protected float
_X public final static java.lang.Class
version (generated.impl.JAXBVersion.class)
private static com.sun.msv.grammar.Grammar
schemaFragment private final static
java.lang.Class PRIMARY_INTERFACE_CLASS()
return (generated.PointType.class)
public float getY() return _Y
public void setY(float value) _Y
value has_Y true public
float getX() return _X
public void setX(float value) _X
value has_X true public
generated.impl.runtime.UnmarshallingEventHandler
createUnmarshaller(generated.impl.runtime.Unmarsha
llingContext context) return new
generated.impl.PointTypeImpl.Unmarshaller(context)
public void serializeBody(generated.i
mpl.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.seria
lizer.Util.createMissingObjectError(this, "X"))
context.startElement("", "x")
context.endNamespaceDecls()
context.endAttributes() try
context.text(javax.xml.bind.DatatypeConverter.pri
ntFloat(((float) _X)), "X") catch
(java.lang.Exception e)
generated.impl.runtime.Util.handlePrintConversionE
xception(this, e, context)
context.endElement() context.startElement
("", "y") context.endNamespaceDecls()
context.endAttributes() try
context.text(javax.xml.bind.DatatypeConvert
er.printFloat(((float) _Y)), "Y")
catch (java.lang.Exception e)
generated.impl.runtime.Util.handlePrintConversionE
xception(this, e, context)
context.endElement() public void
serializeAttributes(generated.impl.runtime.XMLSeri
alizer context) throws org.xml.sax.SAXExce
ption if (!has_Y)
context.reportError(com.sun.xml.bind.serializer.Ut
il.createMissingObjectError(this, "Y"))
if (!has_X)
context.reportError(com.sun.xml.bind.serializer.Ut
il.createMissingObjectError(this, "X"))
public void serializeURIs(generated.i
mpl.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.seria
lizer.Util.createMissingObjectError(this, "X"))
public java.lang.Class
getPrimaryInterface() return
(generated.PointType.class) public
com.sun.msv.verifier.DocumentDeclaration
createRawValidator() if (schemaFragment
null) schemaFragment
com.sun.xml.bind.validator.SchemaDeserializer.dese
rialize(( "\u00ac\u00ed\u0000\u0005sr\u0000\u001f
com.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\u
0000\u0002L\u0000\u0004exp1t\u0000
Lcom/sun/msv/gra" "mmar/ExpressionL\u0000\u0004e
xp2q\u0000\u0000\u0002xr\u0000\u001ecom.sun.msv.g
rammar.Expressi" "on\u00f8\u0018\u0082\u00e8N5O\
u0002\u0000\u0002L\u0000\u0013epsilonReducibilityt
\u0000\u0013Ljava/lang/BooleanL\u0000\u000b" "ex
pandedExpq\u0000\u0000\u0002xpppsr\u0000\'com.sun
.msv.grammar.trex.ElementPatt" "ern\u0000\u0000\u
0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u00
01L\u0000\tnameClasst\u0000\u001fLcom/sun/msv/gram
mar/NameClass" "xr\u0000\u001ecom.sun.msv.gramma
r.ElementExp\u0000\u0000\u0000\u0000\u0000\u0000\u
0000\u0001\u0002\u0000\u0002Z\u0000\u001aignoreUnd
ecl" "aredAttributesL\u0000\fcontentModelq\u0000
\u0000\u0002xq\u0000\u0000\u0003pp\u0000sq\u0000
\u0000\u0000ppsr\u0000\u001bcom.s" "un.msv.gramma
r.DataExp\u0000\u0000\u0000\u0000\u0000\u0000\u000
0\u0001\u0002\u0000\u0003L\u0000\u0002dtt\u0000\u0
01fLorg/relaxng/dataty" "pe/DatatypeL\u0000\u000
6exceptq\u0000\u0000\u0002L\u0000\u0004namet\u000
0\u001dLcom/sun/msv/util/String" "Pairxq\u0000\
u0000\u0003ppsr\u0000\"com.sun.msv.datatype.xsd.Fl
oatType\u0000\u0000\u0000\u0000\u0000\u0000\u0000\
u0001\u0002" "\u0000\u0000xr\u0000com.sun.msv.da
tatype.xsd.FloatingNumberType\u00fc\u00e3\u00b6\u0
087\u008c\u00a8\u00e0\u0002\u0000\u0000" "xr\u00
00com.sun.msv.datatype.xsd.BuiltinAtomicType\u000
0\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\
u0000\u0000xr\u0000" "com.sun.msv.datatype.xsd.C
oncreteType\u0000\u0000\u0000\u0000\u0000\u0000\u0
000\u0001\u0002\u0000\u0000xr\u0000\'com.sun" ".m
sv.datatype.xsd.XSDatatypeImpl\u0000\u0000\u0000\u
0000\u0000\u0000\u0000\u0001\u0002\u0000\u0003L\u0
000\fnamespaceUrit\u0000" "\u0012Ljava/lang/Strin
gL\u0000\btypeNameq\u0000\u0000\u0014L\u0000\nwh
iteSpacet\u0000.Lcom/sun/" "msv/datatype/xsd/Whit
eSpaceProcessorxpt\u0000 http//www.w3.org/" "20
01/XMLSchemat\u0000\u0005floatsr\u00005com.sun.msv
.datatype.xsd.WhiteSpac" "eProcessorCollapse\u00
00\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" "ssionNullSetExpression\u
0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u00
02\u0000\u0000xq\u0000\u0000\u0003ppsr\u0000\u001
bcom.sun.msv.ut" "il.StringPair\u00d0t\u001ejB\u0
08f\u008d\u00a0\u0002\u0000\u0002L\u0000\tlocalNam
eq\u0000\u0000\u0014L\u0000\fnamespaceURIq\u0000
\u0000" "\u0014xpq\u0000\u0000\u0018q\u0000\u00
00\u0017sr\u0000\u001dcom.sun.msv.grammar.ChoiceEx
p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\
u0002\u0000\u0000xq\u0000" "\u0000\u0001ppsr\u00
00 com.sun.msv.grammar.AttributeExp\u0000\u0000\u0
000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u000
2L\u0000\u0003expq\u0000" "\u0000\u0002L\u0000\t
nameClassq\u0000\u0000\u0007xq\u0000\u0000\u0003
sr\u0000\u0011java.lang.Boolean\u00cd
r\u0080\u00d5\u009c\u00fa\u00ee\u0002\u0000\u0001Z
\u0000" "\u0005valuexp\u0000psq\u0000\u0000\u000
bppsr\u0000\"com.sun.msv.datatype.xsd.QnameType\u0
000\u0000\u0000\u0000" "\u0000\u0000\u0000\u0001\
u0002\u0000\u0000xq\u0000\u0000\u0011q\u0000\u00
00\u0017t\u0000\u0005QNameq\u0000\u0000\u001bq\u0
000\u0000\u001dsq\u0000\u0000\u001eq\u0000\u000
0)q\u0000\u0000\u0017sr\u0000com." "sun.msv.gra
mmar.SimpleNameClass\u0000\u0000\u0000\u0000\u0000
\u0000\u0000\u0001\u0002\u0000\u0002L\u0000\tlocal
Nameq\u0000\u0000\u0014L" "\u0000\fnamespaceURIq
\u0000\u0000\u0014xr\u0000\u001dcom.sun.msv.gramm
ar.NameClass\u0000\u0000\u0000\u0000\u0000\u0000\u
0000\u0001" "\u0002\u0000\u0000xpt\u0000\u0004typ
et\u0000)http//www.w3.org/2001/XMLSchema-instance
sr\u00000" "com.sun.msv.grammar.ExpressionEpsilo
nExpression\u0000\u0000\u0000\u0000\u0000\u0000\u0
000\u0001\u0002\u0000\u0000x" "q\u0000\u0000\u00
03sq\u0000\u0000\u0001psq\u0000\u0000t\u0000\u
0001xt\u0000\u0000sq\u0000\u0000\u0006pp\u0000sq\
u0000\u0000\u0000ppq\u0000\u0000\u000esq\u0000\
u0000 ppsq\u0000" "\u0000\"q\u0000\u0000pq\u00
00\u0000q\u0000\u0000-q\u0000\u00001sq\u0000\
u0000t\u0000\u0001yq\u0000\u00005sr\u0000\"com.s
un.msv.gramma" "r.ExpressionPool\u0000\u0000\u000
0\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0001L
\u0000\bexpTablet\u0000/Lcom/sun/msv/gramma" "r/E
xpressionPoolClosedHashxpsr\u0000-com.sun.msv.gr
ammar.Expres" "sionPoolClosedHash\u00d7j\u00d0N\
u00ef\u00e8\u00ed\u001c\u0003\u0000\u0003I\u0000\u
0005countB\u0000\rstreamVersionL\u0000\u0006par"
"entt\u0000Lcom/sun/msv/grammar/ExpressionPoolxp
\u0000\u0000\u0000\u0005\u0001pq\u0000\u0000\u000
5q\u0000\u0000!" "q\u0000\u00008q\u0000\u0000\
nq\u0000\u00007x")) return
new com.sun.msv.verifier.regexp.REDocumentDeclarat
ion(schemaFragment) public class
Unmarshaller extends generated.impl.runtim
e.AbstractUnmarshallingEventHandlerImpl
public Unmarshaller(generated.impl.runtime.U
nmarshallingContext context)
super(context, "-------")
protected Unmarshaller(generated.impl.runtime.Unma
rshallingContext context, int startState)
this(context) state
startState public
java.lang.Object owner() return
generated.impl.PointTypeImpl.this
public void enterElement(java.lang.String
___uri, java.lang.String ___local,
java.lang.String ___qname, org.xml.sax.Attributes
__atts) throws org.xml.sax.SAXExceptio
n int attIdx
outer while (true)
switch (state) case 3
if (("y" ___local)(""
___uri))
context.pushAttributes(__atts, true)
state 4
return
break case 0
if (("x"
___local)("" ___uri))
context.pushAttributes(__atts, true)
state 1
return
break
case 6
revertToParentFromEnterElement(___uri, ___local,
___qname, __atts) return
super.enterElement(___uri, ___local, ___qname,
__atts) break
public void leaveElement(java.lang.
String ___uri, java.lang.String ___local,
java.lang.String ___qname) throws
org.xml.sax.SAXException
int attIdx outer while
(true) switch (state)
case 2 if
(("x" ___local)("" ___uri))
context.popAttributes()
state 3
return
break case
6 revertToParentFromLeav
eElement(___uri, ___local, ___qname)
return case 5
if (("y"
___local)("" ___uri))
context.popAttributes()
state 6
return
break
super.leaveElement(___uri, ___local, ___qname)
break
public void enterAttribute(java.lang.String
___uri, java.lang.String ___local,
java.lang.String ___qname)
43JAXB 2.0
- 62 lines for
- ltpointgtltxgt1lt/xgtltygt2lt/ygtlt/pointgt
- 2 files
- 3KB of code total
_at_XmlAccessorType(FIELD) _at_XmlType(name ,
propOrder x, Y) _at_XmlRootElement(name
point) public class Point protected float
x protected flota y public float getX()
return x public void setX(float value)
this.x value public float getY()
return y public void setY(float value)
this.y value
44(No Transcript)
45JavaTM EE 5 Transactional Web Service
package endpoint import javax.jws.WebService im
port javax.ejb.Stateless _at_WebService _at_Stateless
public class Hello public String
sayHello(String param) return Hello
param
46DEMO
- Java EE 5 transactional web service
47JavaTM EE 5 Transactional Web Service
package endpoint import javax.jws.WebService im
port javax.ejb.Stateless import
javax.annotation.Resource import
java.sql. import javax.sql.DataSource _at_WebServ
ice _at_Stateless public class Hello _at_Resource
private DataSource ds public String
sayHello(String param) try Connection
conn ds.getConnection()
PreparedStatement pst conn.prepareStatement(
"update Person set countcount1 where
name ?") pst.setString(1, param)
pst.executeUpdate() conn.close()
catch (SQLException ex) // ignore it return
"Hello " param
48(No Transcript)
49JavaTM EE 5 Transactional Web Service
package endpoint import javax.jws.WebService im
port javax.ejb.Stateless import
javax.persistence.EntityManager import
javax.persistence.PersistenceContext _at_WebService
_at_Stateless public class Hello _at_PersistenceCont
ext private EntityManager em public String
sayHello(String param) Person p
em.find(Person.class, param) if (p null)
p new Person(param) em.persist(p)
return Hello param
p.incrementCount()
50JavaTM EE 5 Transactional Web Service
package endpoint import javax.persistence. _at_E
ntity public class Person _at_Id protected String
pname protected int cnt public Person()
public Person(String name) pname
name public int incrementCount() return
cnt
51JavaTM EE 5 Transactional Web Service
persistence.xml lt?xml version1.0
encodingUTF-8?gt ltpersistence
version1.0 xmlnshttp//java.sun.com/xml/ns/
persistencegt ltpersistence-unit
namepu1/gt lt/persistencegt
52DEMO
- Java EE 5 web service with Java Persistence
53(No Transcript)
54J2EE 1.4 Resource Lookup
- public class MyEJB implements SessionBean
- private DataSource myDS
- public void ejbCreate()
- try
- InitialContext ctx new InitialContext()
- myDS (DataSource)ctx.lookup(
- employeeDatabase)
- catch (NamingException ex)
- // XXX what to do?
-
-
- ...
-
- Plus corresponding deployment descriptor entry
55Dependency Injection
- package com.example
- _at_Session
- public class MyEJB
- _at_Resource
- private DataSource myDS
- ...
-
- Declares a resource named com.example.MyEJB/myDS
- And injects it into the myDS field
- No deployment descriptor entry needed!
56Dependency Injection
- package com.example
- _at_Session
- public class MyEJB
- _at_Resource(name employeeDatabase)
- private DataSource myDS
- ...
-
- Declares a resource named employeeDatabase
- And injects it into the myDS field
- Still no deployment descriptor entry needed!
57Dependency Injection
- package com.example
- _at_Session
- public class MyEJB
- _at_Resource(mappedName OracleDatabase)
- private DataSource myDS
- ...
-
- Declares a resource that's mapped to the app
server's global resource named OracleDatabase - And still no deployment descriptor entry needed!
58(No Transcript)
59(No Transcript)
60Application Packaging
- Packaging is now much simpler
- Many cases don't require deployment descriptors
- EJB jar file
- Web application using only JSP, web services
- Application client
- Enterprise application (ear file)
61Web Application Packaging Example
- app.war
- index.jsp
- images/logo.gif
- WEB-INF/classes/MyWebService.class
- That's it!
- No META-INF/web.xml
- No META-INF/webservices.xml
- No JAX-RPC mapping file
62Enterprise Application Packaging
- Rules and conventions make for simpler packaging
- .war files are web applications
- .rar files are resource adapters
- lib directory contains shared jar files
- .jar with Main-Class is an app client
- .jar file with _at_Stateless is an EJB
63Enterprise Application Packaging Example
- app.ear
- lib/shared.jar
- ui/web.war
- ui/client.jar
- biz/ejb.jar
- That's it!
- No META-INF/application.xml
64How Much Easier Is It?
- Adventure Builder1
- J2EE 1.4 67 classes, 3284 lines of code
- Java EE 5 43 classes, 2777 lines of code
- 36 fewer classes to manage!
- RosterApp2
- J2EE 1.4 17 classes, 987 lines of code
- Java EE 5 7 classes, 716 lines of code
- J2EE 1.4 XML files 9 files, 792 lines
- Java EE 5 XML files 1 file, 5 lines
- 58 fewer classes, 89 fewer XML files to manage!
1 Source Debu Panda, Oracle 2 Source Raghu
Kodali, Oracle
65JavaTM EE 5 New Specs
- JSP Standard Tag Library (JSR-52)
- StAX (JSR-173)
- Web Services Metadata (JSR-181)
- Java Persistence API (JSR-220)
- JAXB (JSR-222)
- JAX-WS (JSR-224)
- Common Annotations (JSR-250)
- JavaServer Faces (JSR-252)
66JavaTM EE 5 Updated Specs
- EJB 3.0 (JSR-220)
- JSP 2.1 (JSR-245)
- Minor updates...
- Implementing Enterprise Web Services (JSR-109)
- Servlets
- JavaMailTM, JAF
- Management, Deployment
- JACC
- SAAJ
- JTA
67(No Transcript)
68Java EE Futures
- Still too early to say anything definitive
- Everything is subject to approval by the JCP
- We need feedback from you!
- What's most important to improve
- What's most important to add
- What is still not easy enough
- What did we get right!
69Java EE Futures
- Grow upwards
- Composite applications
- JBI, SCA
- Portlets
- High availability, clustering, etc.
- Grow downwards
- Scripting
- JavaScript in JSP pages, servlets
- Web/application hosting, WebDAV
- Grow sideways
- Improve existing APIs
- AJAX
- WS-
70JavaTM EE Summary
- Java EE 5 is much easier
- Download the SDK
- http//java.sun.com/javaee
- Get involved in the GlassFish community
- http//glassfish.dev.java.net
- Please give us feedback
- javaee-spec-feedback_at_sun.com
- http//forum.java.sun.com
71Agenda
- Futures
- JavaTM SE 7
- new language
- technologies
72Dolphin JavaTM Language Updates
- We're cautious in changing the JavaTM language
- the current language works really well!
- but some thoughtful change seems good
- Direct support for XML
- under active investigation
- allows XML literals inline simple queries
- Super-Packages (JSR-292)
- formerly known as friends
- complements runtime module work (JSR-277)
- Probably some others
- a number of candidates being considered
73(No Transcript)
74(No Transcript)
75(No Transcript)
76Growing the Java platform
- We want to grow the platform in several
dimensions - Ease-of-Development simplifies Java Platform APIs
- but there are also a range of language styles
Complexity
Platform
New Languages
New Languages
EoD
Simplicity
Language
Richer
Simpler
77Different Places, Different Languages
- JavaTM language is Gold Standard for enterprise
coding - Great for robust, long-lived, maintainable apps
- But diversity is good!
- Lightweight apps may not need static checking
- Fast-changing presentation tier can use different
styles - Advice
- Use Java language for long lived core business
classes - Consider Scripting/Dynamic for fast-changing
preso tier - call into Java classes for business logic
- Supports mixed mode development
- Different styles for different needs, on shared
Java Platform
78(No Transcript)
79(No Transcript)
80DEMO
81Web Tier Futures Even More Ajax
- We expect two long-term styles with Ajax
- High-level JSF/Ajax components
- using JavaScript behind the scenes
- for both whizzy effects and powerful server
interaction - Raw Ajax hand written client JavaScript
- increasingly using toolkits Dojo,Kabuki,Prototype
, ... - JavaTM Web Tier will support both styles
- tools support will be increasingly important
- we'll try to work with others towards consensus
styles - this area looks like seeing continuing change
82(No Transcript)
83DEMO
84Conclusion
- JavaTM EE 5 is here now
- It is a no-brainer for new projects
- Get it now!
- Mustang arrives in October
- Many systemic upgrades and great new features
- Lots of work happening around new languages
- Use scripting with Mustang
- Help get the word out!
- Give this presentation to your colleagues!
85Please Reuse our Slides!
- We'll post these slides to the web later this
week - weblogs.java.net/blog/kgh
- You are very welcome to reuse them
- for trip reports, JUGs, internal briefings, etc.
- reuse any or all, as you find useful
- Help get the platform news out!
86JavaTM Platform RoadmapsThe Big Stuff, Today
Tomorrow
- Graham Hamilton VP Fellow, Sun
Microsystems - Bill Shannon Distinguished
Engineer, Sun Microsystems
87(No Transcript)