Sie sind auf Seite 1von 63

J2EEvsJavaEE

SanjeebSahoo StaffEngineer,SunMicrosystems

Objective

LearnthenewfeaturesofJavaPlatform, EnterpriseEdition(JavaEE)thatmake enterpriseapplicationdevelopmentamuch easiertask.

Agenda

EvolutionoftheJavaPlatform,Enterprise Edition JavaEE5


EoDfeatures Demo ComparativeAnalysis

Howcanyouparticipate? (JavaEE).next Q&A

Thejourneybegins...

May1995

Javaprogramminglanguage EJB AnnoucementofJPEproject JCPdriven Multivendor,multiplatform WORA,CTS


100%Backwardcompatibility(source&binary)

May1998

Guidingprinciples

Thejourneycontinues...

Dec1999(J2EE1.2)

Servlet,JSP,EJB,JMS,JTA,JNDI,RMI/IIOP Robustness EJB2.0,ConnectorArchitecture Integration(EIS,Tools) WebServices,AsynchronousConnectors, Management,Deployment

Sept2001(J2EE1.3)

Nov2003(J2EE1.4)

J2EE1.4

J2EEisenormouslypowerful

Theindustrystandardforrobustenterpriseapps Toodifficulttogetstarted Evensimpleappsneedboringboilerplate

Butthatpowersometimesgetsintheway

Canwekeepthepower butmaketypicaldevelopmenttaskssimpler? YESandthatisthefocusofJavaEE5!

JavaEE5=(J2EE1.4).next

MakeiteasiertodevelopenterpriseJava applications
EspeciallywhenfirstgettingstartedwithJavaEE

ReleasedJune2006

Howdidwemakeiteasier?

Declarativeprogramming

Originallydeploymentdescriptors NowJavalanguageannotations PlainOldJavaObjects(POJOs) Moreandbetterdefaults

Removerequirements

earlieritwasverydefensiveprogramming

New&morepowerfulframeworks

Lessworkforyoutodo

Easiertolearnandmoreproductive!

MajorFeaturesinJavaEE5

Annotationsarethelaw Dependencyinjection Simplifiedwebservicessupport Morewebservicestandardssupport GreatlysimplifiedEJB development NewJava PersistenceAPI EasywebapplicationswithJavaServer Faces AndfullycompatiblewithJ2EE1.4

TM

TM

TM

Annotations

WhatisJavaannotation?

aJavaannotationisawayofaddingmetadatato Javasourcecode IntroducedinJ2SE1.5(JSR175)

Howisitdefined?
packagejavax.persistence; @Target(TYPE) @Retention(RUNTIME) public@interfaceEntity{ Stringname()default;

Annotations

Howisitusedinsourcecode?
@EntitypublicclassEmployee{...}

Isitavailableatruntime?

depends reflectionAPIs(e.g.)Class.getAnnotations(), Class.getAnnotation(Class),java.lang.annotation.*

Howisthemetadataaccessedatruntime?

Benefitsofusingannotations

ReducedneedforXMLdeploymentdescriptors Colocationofsourcecode&configurationinformation makesiteasiertomaintain Isthereanyperformanceimpact?


Mostlynodependsoncontainer Generationoffulldepoymentdescriptorduring deploymentisacommonstrategy

AnnotationsinJavaEE5

Howaretheydefined?

Mostofthemhave@Retention(RUNTIME) Aspartofdifferentspecs,indifferentpackages.

Wherearetheydefined?

javax.annotation.*,javax.annotation.security.*(JSR250) javax.ejb.*,javax.interceptor.*,javax.persistence.*(JSR220) javax.jws.*,javax.jws.soap.*(JSR181) javax.xml.bind.annotation.*(JSR222) etc.

AnnotationsinJavaEE5

HowaretheyusedinJavaEE?

TomapJavaclassestodatabases TomapJavaclassestoXML TodefineEJBsandtheirattributes TodefineWebServices Todefinesecurityattributes Tospecifyexternaldependencies

O/Xmappingmappings
importjavax.xml.bind.annotation.*; @XmlRootElement(name="employee") @XmlType(name="EmployeeType") publicclassEmployee{ publicStringname; publicintsalary; }

SecurityAnnotations
importjavax.annotation.security.*; importjavax.ejb.*; @Stateless @RolesAllowed("javaee") publicclassHelloEJBimplementsHello{ @PermitAll//overridesclasslevelannotation publicStringhello(Stringmsg){...} publicStringbye(Stringmsg){...} }

Howtooverrideannotations?

XMLDDcanbeusedtooverrideannotations

Remember,noannotationsoftenmeandefault valuesappliedbycontainer XMLDD&annotationscancoexist Noteverythingcanbeoverriden YoumustuseJavaEE5versionoftheXMLDD metadatacomplete=true

Partialoverriding

Completeoverriding

Vendorspecificannotations

.javafileisnotportable

Tocompile,youneedvendorspecificannotationsin classpath annotationsaretreatedspeciallybyVMduring loading Canbeusedincompilationofothersources Canbeusedinruntime,butsemanticsmaydiffer

.classisportable

DependencyInjection

ExampleofInversionofControl Containerinjectsresources...

DataSource,EJBref,webserviceref,persistence units,UserTransaction,enventries,... Fields,methods;public,private,orprotected EJBs,servlets,JSFmanagedbeans,webservice endpoints,handlers,interceptors,appclients

...intoapplication...

...incontainermanagedclasses

AvoidstheneedtouseJNDI

J2EE1.4ResourceLookup
publicclassMyEJBimplementsSessionBean{ privateDataSourcemyDS; publicvoidejbCreate(){ try{ InitialContextctx=newInitialContext(); myDS=(DataSource)ctx.lookup( employeeDatabase); }catch(NamingExceptionex){ //XXXwhattodo? } } ... }

Plus corresponding deployment descriptor entry

DependencyInjection
packagecom.example; @Stateless@Local(MyEJBInterface.class) publicclassMyEJB{ @Resource privateDataSourcemyDS; ... }

Declares a resource named


com.example.MyEJB/myDS

And injects it into the

myDS

field

No deployment descriptor entry needed!

DependencyInjection
packagecom.example; @Stateless@Local(MyEJBInterface.class) publicclassMyEJB{ @Resource(name=employeeDatabase) privateDataSourcemyDS; ... }

Declares a resource named And injects it into the


myDS

employeeDatabase

field

Still no deployment descriptor entry needed!

DependencyInjection
packagecom.example; @Stateless@Local(MyEJBInterface.class) publicclassMyEJB{ @Resource(mappedName=OracleDatabase) privateDataSourcemyDS; ... }

Declares a resource that's mapped to the app server's global resource named
OracleDatabase

And injects it into the

myDS

field

And still no deployment descriptor entry needed!

DependencyInjection

AnnotationsusedforDependencyInjection

@javax.annotation.Resource @javax.ejb.EJB @javax.xml.ws.WebServiceRef @javax.persistence.PersistenceContext @javax.persistence.PersistenceUnit

DependencyInjection
Possiblewithoutusingannotations!
packagefoo; @Stateless@Remote(MyEJBInterface.class) publicclassMyEJB{ privateDataSourcemyDS; ... } <resourceref> <injectiontarget> <injectiontargetclassname>foo.MyEJB</injectiontarget classname> <injectiontargetname>myDS</injectiontargetname> </injectiontarget> </resourceref>

DependencyInjection
Isthisdependencyinjection?
packagefoo; @Resource(name=jdbc/MyDataSource, type=DataSource.class) publicclassMyServletextendsHttpServlet{ ... }

DependencyInjection

Onlyformanagedclasses Injectionisperformedbefore@PostConstruct callback Inapplicationclientcontainer,injectiontarget mustbestatic Dependencyinjectionannotationswhenused atclassleveldonotperformanyinjections!

Theyjustdeclaredependency

AnyuseofmappedNameisnotonlynon portable,butalsoveryinstallationspecific.

Simplerpackagingrules

Packagingisnowmuchsimpler Manycasesdon'trequiredeployment descriptors


libraryfolder
likeWEBINF/lib,earnowhasalibfolder defaultnameislib canbeoverridenbyuseapplication.xml makesbundledoptionalpackageeasytouse

Simplerpackagingrules

Rulesandconventionsmakeforsimpler packaging .warfilesarewebapplications .rarfilesareresourceadapters libdirectorycontainssharedjarfiles .jarwithMainClassisanappclient .jarfilewith@Statelessor@Stateful or@MessageDrivenisanEJBmodule

MoreFlexibility

JavaPersistenceAPIentityclassescanbe packagedin

EJBjar WEBINF/classes WEBINF/lib/*.jar applicationclientjar anynoncomponentjarfileinear

EARPackagingExample
app.ear
lib/shared.jar(entities,ejbinterfaceclasses) biz/ejb.jar ui/web.war ui/client.jar

That'sit!

NoMETAINF/application.xml NoClassPathentryinMANIFEST.MF

NewAPIsandframeworks

EJB3.0 JavaPersistenceAPI1.0 JAXWS2.0 JAXB2.0 StAXpullparser JSF,JSTL

JAXB2.0(JSR222)

Bidirectionalbinding

FromXMLschematoJavaclass FromJavaclassestoXMLSchema(new)

JAXB1.0wasXMLtoJavaonly

100%XMLSchemasupport Portableannotationdrivenarchitecture DatabindingforJAXWS2.0

WebServicesinJavaEE5

JAXWS2.0

FollowontoJAXRPC1.0 JAXRPC2.0(JSR224)renamedasJAXWS2.0 WebServicesMetadataforJavaplatform

IncludesJSR181

JAXB2.0asstandarddatabindingframework SupportslatestW3Cstandards

SOAP1.2,XMLSchema1.0
BasicProfile1.1,AttachmentProfile1.0

SupportslatestWSIstandards

JavaServerFaces1.2

TheJavaEEStandardWebApplication Framework ProvidessupportforfinegrainedUIevent handling Providesacleanseparationbetweenbehavior andpresentation FrameworkforbuildingcustomreusableUI components Inbuiltvalidationanderrorreportingframework Dependencyinjectioninmanagedbeans

NewWeb2.0JavaPetStore:Built withAJAXenabledJSFComponents
Autocomplete Ratings

RSSReader

PopupBalloon

FileUpload

GoogleMapsMashup

JavaPersistenceAPI1.0

SinglepersistenceAPIforJavaEEandJava SE DevelopedbyEJBexpertgroup

Buildsonyearsofexperiencewithexisting technologiesandproducts

Atleastthreeimplementations(allopen source):

OracleGlassFish/TopLinkEssentials JBossHibernate BEAKodo/OpenJPA

JavaPersistenceAPI1.0

POJObased

MuchsimplerthanEJBCMP usingannotationsorXMLmappingstrategy

StandardizedO/Rmapping

Supportforinheritance&polymorphism Supportforoptimisticlocking Container/Providerpluggability Powerfulqurylanguage Supportfornativequeries

Demo

HowMuchEasierIsIt?

AdventureBuilder1

J2EE1.467classes,3284linesofcode JavaEE543classes,2777linesofcode 36%fewerclassestomanage!


2
[1]Source:DebuPanda,Oracle [2]Source:RaghuKodali,Oracle

RosterApp

J2EE1.417classes,987linesofcode JavaEE57classes,716linesofcode J2EE1.4XMLfiles9files,792lines JavaEE5XMLfiles1file,5lines 58%fewerclasses,89%fewerXMLfilestomanage!

Agenda

EvolutionoftheJavaPlatform,Enterprise Edition JavaEE5 Howcanyouparticipate? (JavaEE).next Q&A

ProjectGlassFish

BuildingaJavaEE5 opensourceapplicationserver
Java.sun.com/javaee/GlassFish

Source:Sun2/06Seewebsiteforlateststats

Simplifying Java application development with Java EE 5 technologies Includes JAX-WS 2.0, JAXB 2.0, JSF 1.2, EJB 3.0, and Java Persistence 1.0 Supports > 20 frameworks and apps Open source CDDL license Basis for the Sun Java System Application Server PE 9 Free to download and free to deploy

blogs.sun.com/theaquarium

ProjectGlassFish

JavaEE5compliantApplicationServer

ReferenceImplementation
IncludedinJavaEE5SDK OSIlicenseCDDL GPLv2(comingsoon) Sources,bugDBs,discussionsatJava.Net Roadmaps,ArchitectureDocuments

OpenSource

CommunityatJava.Net

TimelineofProjectGlassFish
Tomcat Jasper Catalina JSTL Struts Crimson XSLTC Xalan Xerces

JAXB JAXRPC JSF

GlassFish Launch

V1final V1UR1

V2(plan)

J1'04 June2004

J1'05 June2005

J1'06 May2006

Apr2007 tentative

ProjectGlassFish

GlassFishv1

Released!Victory!JavaEE5Compliance! UR1bugfixes NewWSstack,performance,startuptime Loadbalancing,clustermanagement,failover Somescriptingsupport(seephobos.dev.java.net) Largerarchitecturalchanges Bettermodularization,betterscriptingsupport

GlassFishv2

GlassFishv3

EnterpriseReady

clusteringbasedonJXTA

seehttp://shoal.dev.java.net

HTTPaswellasRMIIIOPLoadBalancingand Failover InMemoryReplicationforSessionPersistence Sun'sdistribution(i.e.)SJSASincludesHADB whichprovides99.999%availability Selfmanagementfeature GenericJMSRA

MorethanagreatAppServer

Tools,includinganEclipsePlugIn Samples,Documentation,HowTo SOABPELEngine,JBIIntegration ADataBaseDerby PragmaticApproach


ImprovedStartuptime NoSecurityManagerbyDefault

FocusonPopularFrameworksand Applications

Runningoutofthebox

GlassFish&SOA

BPELEngine JBIruntime JavaEEserviceengine

Yes,youcanmarkanEJBasaJBI component

GlassFishWiderImpact

EncouragingJavaEE5Adoption EnablingJavaEE5Adoption

ManyGroupsUsingGFComponents NomoreItisanOpenSourceexcuses! Portal OpenDS OpenESB OpenSSO

RaisingtheBarforFOSSAS

LeadingthewayformoreFOSSMiddleware

GlobalCommunity
JeanFrancois Tom, Gordon

Paul

Filippo

Lexi

Geertjan

Kirill

Kohsuke Cheng

Ias, Wonseok

Jaime

Siva

Weneedyourparticipation

AsUsers

What'sWorking?WhatisMissing? BugReports Documents,Localization Evangelism!Talktoyourfriends ContributeBugFixesandCode! UseGFV2Milestones

AsContributors

TopPriority!

HowcanyoubuildGlassFish?

Getajava.netuserid Toolsrequired:

maven1.0.2,JDK1.5.0,cvsclient cvscoglassfish/bootstrap Editacoupleofvariablesin~/build.properties mavenbootstrapallbuildconfigureruntime Hey,youhavebuiltandinstalledyourownversion ofGlassFish!

Steps:

http://www.glassfishwiki.org/gfwiki/Wiki.jsp?page=Buil dInformation

TheAquariumNewsonGlassFish
blogs.sun.com/theaquarium

ProjectTango

JAXWS2.0deliversWSIbasicinterop

adequateforbasicscenarios withsimplesecuritymodel Withrichersecuritymodels,betterqualityofservice ,etc. WSSecurity,WSTrust,WSReliableMessaging,... WithoutchangingtheJAXWSAPIs.

ProjectTangoaddsricherprotocolsupport

yourexistingappswillbenefitwithoutchanges!
TM

SunJava teamisworkingcloselywithMicrosoft

http://wsit.dev.java.net

NetBeansEnterprisePack5.5

IncludesNB5.5

SupportsJavaEE5Applications JavaPersistenceinWeb,EJBandStandalone Includesmanywizards

WithSJSAS9.0(Sun'sdistroofGlassFish) Plus

XMLSchemaTools WebServicesOrchestration UMLModelling

http://www.netbeans.org

NetBeans&GlassFishDemo

JavaEEFutures

Stilltooearlytosayanythingdefinitive EverythingissubjecttoapprovalbytheJCP Weneedfeedbackfromyou!


What'smostimportanttoimprove What'smostimportanttoadd Whatisstillnoteasyenough Whatdidwegetright!

JavaEEFutures

JBI,SCA

GlassFishalreadyhasJBIruntime

WSInteroperability Portlets Highavailability,clustering,etc. Scripting


JavaScriptinJSPpages,servlets AJAX

ImproveexistingAPIs

WebTierFutures:AJAX

WeexpecttwolongtermstyleswithAjax HighlevelJSF/Ajaxcomponents

usingJavaScriptbehindthescenes forbothwhizzyeffectsandpowerfulserver interaction increasinglyusingtoolkits:Dojo,Kabuki,Prototype,...


TM

RawAjax:handwrittenclientJavaScript

Java WebTierwillsupportbothstyles

Conclusion

Java EE5isherenow
TM

Itisanobrainerfornewprojects Getitnow! http://java.sun.com/javaee http://glassfish.dev.java.net http://forum.java.sun.com

DownloadtheSDK

GetinvolvedintheGlassFishcommunity

Pleasegiveusfeedback

Creditsfortheslides

BillShannon(JavaONE2006TechnicalKey Notepresentation) EduardoPelegriLlopart(GlassFish presentation) Sahoo

Thankyou, Sahoo Sanjeeb.Sahoo@Sun.COM http://weblogs.java.net/blog/ss141213/

Q&A

Das könnte Ihnen auch gefallen