73
2006 JavaOne S M Conference | Session XXXX | TS-1969 Blueprints for Using the Simplified Java™ EE 5 Programming Model Smitha Kangath, Inderjeet Singh Java BluePrints Sun Microsystems Inc.

2006_BluePrints for Simplified EE 5 Programming Model

Embed Size (px)

Citation preview

Page 1: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 1/73

2006 JavaOneSM Conference | Session XXXX |

TS-1969

Blueprints for Using the

Simplified Java™ EE 5 Programming Model Smitha Kangath, Inderjeet Singh

Java BluePrintsSun Microsystems Inc.

Page 2: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 2/73

2006 JavaOneSM Conference | Session XXXX | 2

Goal of the Talk

Sample the Key Features of the Java EE5 Platform and see how it Simplifies theDevelopment of Enterprise Applicationsand Web Services

Application Programming Model for Java EE 5 Platform

Page 3: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 3/73

2006 JavaOneSM Conference | Session XXXX | 3

Speaker’s Qualifications Members of the Java BluePrints

Program http://blueprints.dev.java.net/  Java BluePrints Solutions Catalog

Topics: AJAX, JSF, Enterprise, Web Services J2EE 1.4 and Java EE 5

Java Pet Store, a new version showing Web 2.0 with Java EE 5 

Java Adventure Builder  Books

Designing Web Services withthe J2EE 1.4 Platform

Designing Enterprise Applicationswith the J2EE Platform, 2nd Ed

Page 4: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 4/73

2006 JavaOneSM Conference | Session XXXX | 4

Agenda POJO-based Programming

Annotations and Dependency Injection

Key Changes in Component Models EJB 3.0 Web tier  Web Services

Programming Model for Java Persistence With EJB 3.0 In Web-tier without EJBs

Page 5: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 5/73

2006 JavaOneSM Conference | Session XXXX | 5

The J2EE

TM 

 Challenges Powerful and Comprehensive

Supports lots of use-cases: Web applications, WebServices, messaging, database applications, etc.

Deployment Descriptors allow a lot of customization Challenges

Rigid enforcement of “good” design and patterns Can be difficult to get started Boring boilerplate code Much Container configuration to get application to work

Java EE 5 Addresses these challenges

Page 6: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 6/73

2006 JavaOneSM Conference | Session XXXX | 6

EoD through POJO based

Programming Express Programmer's intentions in Java Code

instead of in XML or other external configurationactions Java Class is the main programming artifact Annotations add new capabilities to the class Lots of sensible defaults Can be overridden by XML based deployment

descriptors Still fully compatible with J2EE 1.4

Page 7: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 7/732006 JavaOneSM Conference | Session XXXX | 7

Annotations Based on Java SE 5 Annotations Support Annotations available for 

Defining Web Services Defining Enterprise Beans Calling out EJB Lifecycle callbacks or Interceptors Dependency Injection

Almost anything that you used to previously have aDeployment Descriptor entry for  Transaction Attributes Security

Look at JSR-250: Common Annotations

Page 8: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 8/732006 JavaOneSM Conference | Session XXXX | 8

Annotations : Pros / Cons Annotations : Pros

Easier to write than .xml Easier to understand than .xml Fewer files to maintain

Annotations : Cons Only visible in source-code

Can not express all Java EE 5 metadata Blurs lines between Java EE platform roles (e.g.

Component Provider vs. Application Assembler)

Page 9: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 9/732006 JavaOneSM Conference | Session XXXX | 9

Best uses for annotations Metadata that does not change often Metadata tied to component development time

Examples : Structural metadata

e.g. @Stateless, @WebService, @Entity

Environment dependencies

e.g. @EJB, @Resource, @PersistenceContext Callbacks

e.g. @PostConstruct, @Timeout, @Remove

Page 10: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 10/732006 JavaOneSM Conference | Session XXXX | 10

Best uses for deployment descriptors Overriding Annotations and defaults Application Assembler metadata

EJB Security Method Permissions Typically not known until assembly/deployment time Likely to change Independent of business logic

Dependency linking info e.g. cross-module ejb-link

Metadata that has no corresponding annotation e.g. EJB Default interceptors, EJB 2.x Entity Beans,

Message Destinations

Page 11: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 11/732006 JavaOneSM Conference | Session XXXX | 11

Guidelines for .xml overriding Use sparingly

Overuse can make app difficult to understand/maintain

Good with linking metadata e.g. ejb-link, persistence-unit-name

Keep in mind not all annotations are overridable e.g. Session bean type (Stateful vs. Stateless) can't be

overridden

Page 12: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 12/732006 JavaOneSM Conference | Session XXXX | 12

Don't forget spec-defined defaults ! Default values can be easier than annotations

and .xml EJB transaction demarcation type

default : Container Managed Transaction

EJB transaction attribute default : TX_REQUIRED

Environment annotation name()

default : derived from class and field/method

Page 13: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 13/732006 JavaOneSM Conference | Session XXXX | 13

Component Dependency Annotations Alternative to .xml for declaring environment

dependencies : ejb-ref, resource-ref, service-ref,etc.

Available on container-managed classes Declared at Class, Field, or Method level Field/Method level dependencies injected at

runtime

Page 14: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 14/732006 JavaOneSM Conference | Session XXXX | 14

annotation vs. .xml@Resource(name=”Foo”) private DataSource ds;

<resource-ref>

<res-ref-name>Foo</res-ref-name>

<res-ref-type>javax.sql.DataSource</res-ref-type>

<injection-target>

<injection-target-class>com.acme.FooBean</...><injection-target-name>ds</injection-target-name>

</injection-target>

</resource-ref>

Page 15: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 15/732006 JavaOneSM Conference | Session XXXX | 15

Injected field / method access

modifiers Spec allows public, package, protected, private Which should you use?

private is best Injected data is typically internal to the class

Exception : overriding of environmentdependencies within a class hierarchy

Use sparingly Tightly couples classes Harder to understand / maintain

Page 16: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 16/732006 JavaOneSM Conference | Session XXXX | 16

Which is best : Field , Method, or 

Class-level? Field-level : Easiest

e.g. @EJB Converter converter  Takes fewest characters to declare Supports injection

Method-level Useful for logic tied to a specific dependency injection But ... Field-level + @PostConstruct would work too

Page 17: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 17/732006 JavaOneSM Conference | Session XXXX | 17

Which is best : Field , Method, or 

Class-level? (continued) Class-level

Useful for dependency declaration WITHOUT injection Declare environment dependency for use by non

container-managed classesFooBean.java :

@EJB(name=”ejb/bar”, beanInterface=Bar.class)

public class FooBean implements Foo { ... }

Utility.java :

Bar bar = (Bar)context.lookup(“java:comp/env/ejb/bar”);

Page 18: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 18/732006 JavaOneSM Conference | Session XXXX | 18

Another class-level dependency

example Stateful Session Bean creation

EJB 3.0 SFSBs are created as a side-effect of injection /lookup

Common need : many instances of same SFSB Using field-based dependency + injection :

@EJB Cart cart1;

@EJB Cart cart2;@EJB Cart cart3;

Too static :-(

Page 19: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 19/732006 JavaOneSM Conference | Session XXXX | 19

Another Class-level dependency

example (continued) Alternative : Class-level dependency + lookup

@EJB(name=”ejb/Cart”, beanInterface=Cart.class)

public class CartClient {

...

Cart[] carts = new Cart[numCarts];

for(int i = 0; i < carts.length; i++) {

carts[i] = (Cart) ctx.lookup(“java:comp/env/ejb/Cart”);}

Page 20: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 20/73

2006 JavaOneSM Conference | Session XXXX | 20

Concurrency and injection Injection does not solve concurrency issues If an object obtained through lookup() is non-

sharable, it's non-sharable when injected Be careful with Servlet instance injection

public class MyServlet ... {

private @EJB StatelessEJB stateless; // OK

private @EJB StatefulEJB stateful; // dangerous!

 

Page 21: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 21/73

2006 JavaOneSM Conference | Session XXXX | 21

Concurrency and injection (continued) Most common issues : Stateful Session Beans,

PersistenceContexts Recommended alternative : lookup() and store in

HttpSession@PersistenceContext(name=”pc”,

type=EntityManager.class)

public class MyServlet ... {

EntityManager em = ctx.lookup(“java:comp/env/pc”);

httpSession.setAttribute(“entityManager”, em);

Page 22: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 22/73

2006 JavaOneSM Conference | Session XXXX | 22

Performance and Injection Use of injection is unlikely to cause performance

issues Injection is essentially a ctx.lookup() + one

reflective operation Injection occurs at instance creation-time

Overhead of injection typically small compared toinstance creation itself 

Most lookups() resolved locally within server  Instances are typically long-lived/re-used

Page 23: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 23/73

2006 JavaOneSM Conference | Session XXXX | 23

Dependency Injection Eliminates JNDI Lookups for 

Env-entries, Web service refs, EJB refs, persistenceunits

Resources like data sources, User transaction Available for container managed classes

Enterprise beans and interceptors, Servlets, Filters,ServletListeners, JSF Managed Beans, Web service

endpoints and Handlers Not for JSP, JSP beans, or other plain java classes that

are not available at deployment

Page 24: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 24/73

2006 JavaOneSM Conference | Session XXXX | 24

Dependency Injection Available for Fields as well as methods

private, public, protected

Available anywhere on the inheritence hierarchy Follows normal language overriding rules

@PostConstruct annotation available to provideinitialization after injection

Page 25: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 25/73

2006 JavaOneSM Conference | Session XXXX | 25

Agenda POJO-based Programming

Annotations and Dependency Injection

Key Changes in Component Models EJB 3.0 Web tier  Web Services

Programming Model for Java Persistence With EJB 3.0 In Web-tier without EJBs

Page 26: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 26/73

2006 JavaOneSM Conference | Session XXXX | 26

What Changed in EJB?

Issues with EJB 2.1 Good component model, but required too much coding

and concepts Too many classes, interfaces, concepts  javax.ejb interfaces Complex JNDI lookups Awkward programming model Deployment descriptors Entity bean anti-patterns

Page 27: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 27/73

2006 JavaOneSM Conference | Session XXXX | 27

What is Different in EJB 3.0?

POJO-based Component Definition No required Container interfaces No required deployment descriptor 

Dependency Injection Decoupled Java Persistence from EJB

components

Simple lookups No required Deployment descriptor 

Page 28: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 28/73

2006 JavaOneSM Conference | Session XXXX | 28

Stateless Session Bean with J2EE

 public class PayrollBean implements javax.ejb.SessionBean {SessionContext ctx;DataSource empDB;public void setSessionContext(SessionContext ctx) {

this.ctx = ctx;}

public void ejbCreate() { empDB = (DataSource)ctx.lookup(“jdbc/empDb”); }

public void ejbActivate() {}public void ejbPassivate() {} public void ejbRemove) {}

public void setBenefitsDeduction(int empId, double deduction) {

...Connection conn = empDB.getConnection();...

}...}

Need Remote/Local, Home interfaces, Deployment descriptors

Page 29: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 29/73

2006 JavaOneSM Conference | Session XXXX | 29

Stateless Bean Example with Java EE 5

@Stateless

 public class PayrollBean implements Payroll

{

@Resource DataSource empDB;

public void setBenefitsDeduction(int empId,double deduction) {

...

DataSource conn = empDB.getConnection();

}

...

}

Page 30: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 30/73

2006 JavaOneSM Conference | Session XXXX | 30

Dependency Injection in EJB

Resources a bean depends upon are injectedwhen bean instance is constructed

References to: EJBContext DataSources UserTransaction Environment entries EntityManager  TimerService Other EJB beans ...

Page 31: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 31/73

2006 JavaOneSM Conference | Session XXXX | 31

Dependency Injection

Annotations @EJB

References to EJB business interfaces References to Home interfaces (when accessing

EJB 2.1 components)

@Resource Almost everything else

Number of annotations is simplified from EJB 3specification early draft

Injection can also be specified using deploymentdescriptor elements

Page 32: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 32/73

2006 JavaOneSM Conference | Session XXXX | 32

Simplified Client View

Session beans have plain Java languagebusiness interface No more EJB(Local)Home interface No more EJB(Local)Object interface

Bean class implements interface Looks like normal Java class to bean developer 

Looks like normal Java interfaceto client

Page 33: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 33/73

2006 JavaOneSM Conference | Session XXXX | 33

EJB 3.0 Client Example// EJB 3.0 client view

@EJB ShoppingCart myCart;

...

Collection widgets = myCart.startToShop(“widgets”);

...

Page 34: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 34/73

2006 JavaOneSM Conference | Session XXXX | 34

Why Use EJB 3.0?

Nothing in the platform is REQUIRED to be used Use based on application requirements

Benefits of EJB 3.0 Helps componentize and modularize code Enforce good architecture Good integration with Java Persistence

Greatly simplified concept

Page 35: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 35/73

2006 JavaOneSM Conference | Session XXXX | 35

What changed in the Web tier?

JSF 1.2 became part of the Java EE 5 platform Annotations support

No component defining annotations Common annotations in container managed objects

JSF managed beans, servlets, filters, event listeners Not in JSP. But available in JSP tag handlers or event listeners

Web.xml not needed Not needed if only JSP and Web service annotated

classes Still needed for JSF, servlets, security settings, etc.

Page 36: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 36/73

2006 JavaOneSM Conference | Session XXXX | 36

Programming Model for Web Tier 

Traditional JSP/Servlets based Applications Use an MVC Framework For Web 2.0, use an AJAX library, for example, Dojo

JSF 1.2: Standardized MVC framework Component-based Unified expression language for JSP and JSF

Best used with a tool like Java Studio Creator  Also possible to write applications by hand

For Web 2.0, wrap AJAX functionality in reusablecomponents

Page 37: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 37/73

2006 JavaOneSM Conference | Session XXXX | 37

What Changed for the Web Services?

Significantly revised and simplified JAX-RPC 2.0 renamed to JAX-WS 2.0

Breaks compatibility with JAX-RPC 1.1 JAX-RPC 1.1 is also available

Key Features Simplified programming model with annotations and

dependency injection Uses JAXB 2.0 for type-mappings Portable runtime artifacts

Page 38: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 38/73

2006 JavaOneSM Conference | Session XXXX | 38

Key Features in Web Services

Key Features (contd) Supports Fast-Infoset for high performance JAX-WS supports REST Services

Useful for AJAX Backends

Can Generate Annotated JAX-WS and JAXB code fromWSDL and XSD

Page 39: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 39/73

2006 JavaOneSM Conference | Session XXXX | 39

JAX-WS 2.0 New Architecture

Multiple protocols SOAP 1.1, SOAP 1.2, XML

Multiple encodings XML, MTOM/XOP, FAST Infoset (Binary XML)

Multiple transports HTTP

Others to be added in future releases

Page 40: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 40/73

2006 JavaOneSM Conference | Session XXXX | 40

JAXB 2.0 Is Now Bi-Directional

1.0: Schema Java only JAXB is for compiling schema Don’t touch the generated code

2.0: Java XML + schema compiler  JAXB is about persisting POJOs to XML Annotations for controlling XML representation

Modify the generated code to suit your taste

Page 41: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 41/73

2006 JavaOneSM Conference | Session XXXX | 41

Web Service Annotation Example@WebService(name=”Hello” serviceName=”HelloService”) public class HelloWebService {

@WebMethod  public String sayHello(String s) {...} public void unpublished() {...}

}

 public class HelloClient {@WebServiceRef (wsdlLocation=”http://localhost:8080/HelloService?WSDL”)static hello.HelloService service;

 public static void main(String[] args) {hello.Hello wsPort = service.getHelloPort();System.out.println(wsPort.sayHello());

}}

Page 42: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 42/73

Page 43: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 43/73

2006 JavaOneSM Conference | Session XXXX | 43

Java Persistence API

Part of JSR-220, but a separate document No reliance on EJB technology or EJB container  Usable in Web-only applications and Java SE

POJO-based persistence Lightweight domain objects - no overhead of 

container-managed components Sensible default mappings Complete query capabilities

Key concepts - persistent entities, persistenceunit, persistence context, entity manager 

Page 44: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 44/73

2006 JavaOneSM Conference | Session XXXX | 44

Persistent Entities Plain Old Java Objects No more interfaces required Supports use of new, inheritance Persistent properties with JavaBean style

accessor methods or persistent instancevariables

Usable as “detached” objects in other 

application tiers - no more need for Data Transfer Objects 

Persistence, Querying, and O/R mappingmanaged by the Java Persistence API

Page 45: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 45/73

2006 JavaOneSM Conference | Session XXXX | 45

Persistent Entities (Continued)@Entity 

 public class Item implements java.io.Serializable {

private String itemID;private String name;private String description;...

  @Id public String getItemID() {

return itemID;}public String getName() {

return name;}...public void setName(String name) {

this.name = name; }...

}

Page 46: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 46/73

2006 JavaOneSM Conference | Session XXXX | 46

Persistence Unit

Unit of packaging and deployment Set of related classes that map to a single

database Defined by a persistence.xml file Includes O/R mapping metadata – metadata

annotations or XML files

Page 47: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 47/73

2006 JavaOneSM Conference | Session XXXX | 47

Persistence Context andEntityManager 

Persistence Context Similar to transaction context, it's a scope Entity instances are managed within the persistence

context A unique instance exists for any persistent entity

identity

EntityManager  API to manage the entity instance lifecycle

persist, remove, merge etc.

Operations to find entities by primary keys, to createQuery objects, and to manage the persistence context find, createQuery, close, getTransaction etc.

Page 48: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 48/73

2006 JavaOneSM Conference | Session XXXX | 48

Types of Persistence Context

Persistence Context lifetime maybe transaction-scoped or extended

Transaction-scoped persistence context

bound to a JTA transaction – starts and ends attransaction boundaries entities are detached from the persistence context

when transaction ends

Extended persistence context spans multiple transactions exists from the time the EntityManager instance is

created until it is closed

Defined when the EntityManager instance iscreated

Page 49: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 49/73

2006 JavaOneSM Conference | Session XXXX | 49

Types of EntityManager  Entity manager may be container-managed or 

application-managed Container-managed entity manager 

Lifecycle managed by the Java EE container  May use transaction-scoped or extended persistence

context Extended persistence context is only available to

stateful session beans

Application-managed entity manager  Life cycle managed by the application Also available in Java SE environments

Must use extended persistence context

Page 50: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 50/73

2006 JavaOneSM Conference | Session XXXX | 50

Container-managed Entity Manager Example

Dependency injection of EntityManager with the@PersistenceContext annotation or a JNDIlookup

@Stateless public class CatalogFacadeBean implements CatalogFacade{

  @PersistenceContext(unitName="PetstorePu")private EntityManager em;...

public List<Category> getCategories(){List<Category> categories = em.createQuery("SELECT 

c FROM Category c").getResultList();return categories;

}...

}

Page 51: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 51/73

2006 JavaOneSM Conference | Session XXXX | 51

Application-managed Entity Manager Example

Dependency injection of EntityManagerFactorywith the @PersistenceUnit annotation

 public class CatalogFacade implementsServletContextListener {

@PersistenceUnit(unitName="PetstorePu")private EntityManagerFactory emf;...public List<Category> getCategories() {

  EntityManager em = emf.createEntityManager();List<Category> categories = 

em.createQuery("SELECT c FROM Category c").getResultList();em.close();return categories;

}...

}

Page 52: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 52/73

2006 JavaOneSM Conference | Session XXXX | 52

Transactions with Entity Manager 

JTA entity manager  Transactions are controlled through JTA Container-managed entity manager always does JTA

transactions Resource-local entity manager 

Transactions are controlled through theEntityTransaction API

Application-managed entity manager can be either JTAor resource-local

Transactional type is defined in persistence.xml

Page 53: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 53/73

2006 JavaOneSM Conference | Session XXXX | 53

Entity Operations

Persisting an entity

@PersistenceContext(unitName="PetstorePu") private EntityManager em;

...

Item item = new Item(itemID, name, description, price);em.persist(item);

Finding and removing an entity

Item item = em.find(Item.class, itemID);em.remove(item);

 

Page 54: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 54/73

2006 JavaOneSM Conference | Session XXXX | 54

Query API

To query and retrieve entities Static and dynamic queries

Named parameter binding and pagination control Queries are defined in Java Persistence Query

Language or native SQL Named Queries

Page 55: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 55/73

2006 JavaOneSM Conference | Session XXXX | 55

An Example Using Queries

@PersistenceContext(unitName="PetstorePu")

 private EntityManager em;

...

 public List<Product> getProducts(String catID){

Query query = em.createQuery ("SELECT p FROM Product p WHERE p.categoryID LIKE :categoryID");

List<Product> products = query.setParameter ("categoryID", catID).getResultList();

}

Page 56: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 56/73

2006 JavaOneSM Conference | Session XXXX | 56

Refactoring Using Named Queries

Defining named queries  @NamedQuery ( 

name="Item.getItemsPerProduct",query="SELECT i FROM Item i WHERE i.productID LIKE :

 pID")

@Entity public class Item implements java.io.Serializable {...}

Using named queriesQuery query = em.createNamedQuery 

("Item.getItemsPerProduct");query.setParameter("pID",prodID);List<Item> items = query.getResultList();

Page 57: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 57/73

2006 JavaOneSM Conference | Session XXXX | 57

Native SQL vs. Java PersistenceQuery Language

Native SQL

Returns raw data – field values for the entity Complex SQL for navigating relationships

Java Persistence Query Language

Returns entities Relationships can be navigated using a “.” Similar to SQL - small learning curve

Page 58: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 58/73

2006 JavaOneSM Conference | Session XXXX | 58

Value List Handler 

Common design pattern Helper method in Java Persistence Query

Language to get chunks of data

 public List<Item> getItemsVLH(String prodID, int start,int chunkSize){

...Query query = em.createQuery("SELECT i FROM Item i

WHERE i.productID = :pID");List<Item> items = query.setParameter("pID",prodID).

  setFirstResult(start).setMaxResults(chunkSize).getResultList();

em.close();return items;

}

Page 59: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 59/73

Page 60: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 60/73

2006 JavaOneSM Conference | Session XXXX | 60

O/R Mapping Metadata: Example

@Entity 

@Table(name=”Customer”)

public class Customer implements Serializable {private String name;

 private Collection<Order> orders;...@Column (name=”CUST_NAME”)

 public String getName() {return name;

}

@OneToMany  public Collection<Order> getOrders() {return orders;

}...

}

Page 61: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 61/73

2006 JavaOneSM Conference | Session XXXX | 61

Automatic Generation of Primary Keys

Different strategies – TABLE, SEQUENCE,IDENTITY, AUTO

@Entity  public class Item implements java.io.Serializable {...

  @TableGenerator (name="ITEM_ID_GEN", table="ID_GEN", pkColumnName="GEN_KEY",valueColumnName="GEN_VALUE”,pkColumnValue="ITEM_ID", allocationSize=1)

  @GeneratedValue(strategy=GenerationType.TABLE,generator="ITEM_ID_GEN")@Id public String getItemID() {

return itemID;}...

}

Page 62: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 62/73

2006 JavaOneSM Conference | Session XXXX | 62

Java Persistence in the Web Tier 

Java Persistence was designed to be usedwithout requiring EJBs Can be used in the Web tier  Can be used in Java SE environments

Web-only application may have Application-managed or container-managed entity

manager  Transaction-scoped or extended persistence context Application-managed transactions

Page 63: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 63/73

2006 JavaOneSM Conference | Session XXXX | 63

What is wrong with this code?

 public class CatalogServlet extends HttpServlet {

  @PersistenceContext(unitName="PetstorePu")EntityManager em;...

public void doGet( HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {...Item item = new Item(itemID, name, description,

 price);em.persist(item)...

}}

Page 64: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 64/73

2006 JavaOneSM Conference | Session XXXX | 64

This code is not thread-safe

PersistenceContext is injected just once duringthe entire life-cycle of the application

Concurrent requests coming to the servlet willaccess the same PersistenceContext object

PersistenceContext is NOT a thread-safe object!

Page 65: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 65/73

2006 JavaOneSM Conference | Session XXXX | 65

A Better Way of Using JavaPersistence in Web Tier 

Dependency injection of EntityManagerFactorywith the @PersistenceUnit annotation

 public class CatalogServlet extends HttpServlet {  @PersistenceUnit(unitName="PetstorePu") EntityManagerFactory emf;...public void doGet( HttpServletRequest req,

HttpServletResponse resp) throws ServletException,IOException {

  EntityManager em = emf.createEntityManager();Item item = new Item(itemID, name, description, price);

em.persist(item);em.close();...

}

}

Page 66: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 66/73

2006 JavaOneSM Conference | Session XXXX | 66

A Better Way of Using JavaPersistence in Web Tier (Continued)

JNDI lookup to obtain the entity manager 

@PersistenceContext(name="PetstorePu") public class CatalogServlet extends HttpServlet {

...public void doGet( HttpServletRequest req,

HttpServletResponse resp) throws ServletException,IOException {...

  EntityManager em = (EntityManager) new InitialContext().lookup("java:comp/env/PetstorePu");

Item item = new Item(itemID, name, description, price);

em.persist(item)...

}}

Page 67: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 67/73

2006 JavaOneSM Conference | Session XXXX | 67

Managing Transactions in the WebTier  JTA transactions

@Resource UserTransaction utx;...

 public void addItem(Item item){

try{  utx.begin();em.joinTransaction();em.persist(item);

  utx.commit();} catch(Exception exe){

...

} finally {em.close();}

}

Page 68: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 68/73

2006 JavaOneSM Conference | Session XXXX | 68

Managing Transactions in the WebTier (Continued) Resource-local transactions

 public void addItem(Item item){try{

  em.getTransaction().begin();

em.joinTransaction();em.persist(item);  em.getTransaction().commit();

} catch(Exception exe){...

} finally {em.close();

}}

Page 69: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 69/73

2006 JavaOneSM Conference | Session XXXX | 69

Facade Pattern Centralizes requests to the domain Handles and encapsulates transactions, entity

managers, etc.

May need to do dependency injections - usecontainer-managed classes

May return detached entities May aggregate calls to multiple entities May agrregate multiple calls to the entity

manager, such as a find and then merge

Page 70: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 70/73

2006 JavaOneSM Conference | Session XXXX | 70

Summary

Use annotations and defaults to definecomponents and external dependencies

Use DD entries to override Use EJB 3.0 for simplified components Use JSF components for drag-and-drop Web

application development

Use JAX-WS (with integrated JAXB 2.0) for creating Web servicesUse Java Persistence for OR mappings

Page 71: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 71/73

2006 JavaOneSM Conference | Session XXXX | 71

If You Only Remember OneThing…

Java EE 5 Dramatically Simplifies The ProgrammingModel for Enterprise Web Applications and Web

Services

Page 72: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 72/73

Page 73: 2006_BluePrints for Simplified EE 5 Programming Model

8/7/2019 2006_BluePrints for Simplified EE 5 Programming Model

http://slidepdf.com/reader/full/2006blueprints-for-simplified-ee-5-programming-model 73/73

TS-1969

Blueprints for Using theSimplified Java™ EE 5 Programming Model Smitha Kangath, Inderjeet Singh

Sun Microsystems Inc.