34
July 7-11, 2003 Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens [email protected] http://www.ronsoft.com JavaPolis 2003 - Antwerp, Belgium Dec 3, 2003 JavaPolis 2003 © 2003, Ronsoft Technologies

July 7-11, 2003 Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens [email protected] JavaPolis

Embed Size (px)

Citation preview

Page 1: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

July 7-11, 2003 Portland, Oregon

JDO(Java Data Objects)

What It Is And Why It Matters

Ron [email protected]

http://www.ronsoft.com

JavaPolis 2003 - Antwerp, BelgiumDec 3, 2003

JavaPolis 2003

© 2003, Ronsoft Technologies

Page 2: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Purpose of this Presentation

To give you an introduction to JDO and show that it represents a significant change in the way that Java applications will manage their data.

Page 3: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Speaker Info

25+ years industry experience 6+ years using Java Not a database expert Built a website with JDO

(www.europeasap.com) O’Reilly author (Java NIO) Tech reviewer on JDO book

(Russell & Jordan)

Page 4: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Bye bye SQL

JDO (or something like it) could revolutionize the way applications are created in the future.

Page 5: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

What is JDO?

Recently finalized Java standard extension• JSR 12 (http://jcp.org)

Transparent object persistence• No code changes to persisted objects

• Standardized API

• Vendor neutral

• Datastore neutral

Not an object database• May use conventional RDBMS, OODB or other means to

store object data - datastore

Page 6: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JVM

Datastore

POJO

POJO POJO

POJO SPI

PM: Persistence ManagerPOJO: Plain Old Java Object*API: Application Programming InterfaceSPI: Service Provider Interface

PM

Persist

QueryJDO

AP

I

JDO

Impl

* Implements PersistenceCapable at runtime

Page 7: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

How JDO Works

Transparent Persistence Persistence by Reachability Object Lifecycle Inheritance Identity Queries Metadata Restrictions

Page 8: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Transparent Persistence

Transparent to Persisted Objects• No source code changes to needed to make objects persistent

• Clients are unaware an object is persistent

• Persisted objects are auto-loaded when referenced

Not Transparent to Entire Application• JDO APIs are used to manage and query for objects

• Transaction boundaries affect persistent object state

• Object instances are per-PM – collisions in the datastore are possible at commit

Page 9: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Transparent Data Access

Objects and object fields are lazy-loaded when referenced

Changes to object state result in eventual updates to datastore without explicit saves (subject to transaction boundaries)

PersistenceManager instances maintain object caches, datastore access is optimized where possible

Page 10: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

PersistenceCapable

The interface that all persistent objects must implement at runtime• Byte code enhancement

• Source code pre-processing

• Direct implementation by programmer

PersistenceManager• Primary access point to the JDO framework

• Operates on PersistenceCapable objects

• Maintains transaction context

StateManager• Set per-object through the PersistenceCapable interface

• Manages an object’s state while persistent

• Mediates access to an object’s fields

• SPI hook into runtime JDO Implementation

Page 11: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Mediated Object Access

client :PersistenceManagermyObject:

PersistenceCapableimplSM:

StateManager

makePersistent(myObject)jdoReplaceStateMananger(implSM)

setFoo(12)

setIntField (this, n, foo, 12)

makeTransient(myObject)

jdoReplaceStateMananger(null)

Page 12: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Persistence By Reachability

A PersistenceCapable object instance is either persistent or transient at any given point in time

All objects referenced directly or indirectly by a persisted object are automatically made persistent at transaction commit.• Persistence applies to the entire object graph• Referenced non-PersistenceCapable objects are serialized

to the datastore

Deletion from datastore is done per object, not by reachability• No datastore garbage collection

Page 13: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Simple JDO Example

PersistenceManagerFactory factory = JDOHelper.getPersistenceManagerFactory(props);PersistenceManager pm = factory.getPersistenceManager();Transaction trans = pm.currentTransaction();

User user = new User ("ron", "Ron Hitchens", "[email protected]");Address addr = new Address (“123 Main St.”, “Somewhere”, “CA”, “12345”);

user.setAddress (addr);

trans.begin();pm.makePersistent (user);trans.commit();pm.close();

Two objects were persisted:• The instance of User explicitly made persistent• The Address instance reachable from user

Page 14: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO Object Lifecycle (1)

Persistent New

Transient

Persistent NewDeleted

Persistent Deleted

Hollow

Persistent Clean Persistent Dirty

deletePersistent()

Modify a fieldRead a field

deletePersistent() deletePersistent()

Object retrieved from datastore, instantiated by JDOPOJO object instantiation

Modify a field

makePersistent()

deletePersistent()

Page 15: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO Object Lifecycle (2)

Hollow

Transient

Persistent Clean

Persistent Dirty

Persistent New

Persistent Deleted

Persistent Deleted

Transaction Completioncommit(), rollback()

commit(), rollback()

commit(), rollback()

commit()

rollback()

rollback()

commit()

Page 16: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Lifecycle Callbacks

An object may optionally implement the InstanceCallbacks interface• jdoPostLoad(), jdoPreStore(), jdoPreClear(), jdoPreDelete()

May be used to release resources when an object is going hollow

May be used to reconstitute transient values that can be recalculated from persisted fields.

May be used to do cascading deletes Couples the object to JDO

Page 17: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Inheritance

Polymorphism is supported• Base type must be PersistenceCapable

• Persistent super classes must be listed in metadata definition

• Queries may return subclasses, if requested

Implementation defines table mapping strategy• Single Table, Class Table, Concrete Class Table

Interfaces may not be directly persisted

Page 18: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO Identity

Each Persistent Object has a unique JDO Identity• Not the same as Java identity

• JDO Identity is encapsulated as an Object

• One instance per identity per PersistenceManager

• Datastore Identity vs. Application Identity- Datastore Identity assigned automatically- Application Identity defined by programmer

• Persisted objects are retrieved by their identity

Page 19: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Queries

Three ways of retrieving objects1. Single object, by identity

2. Objects of a particular type – Extents

3. Objects whose fields contain specific values – Filters

Page 20: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Queries – Single Object By ID

Customer getCustomerByIdString (String idStr,

PersistenceManager pm)

{

Object id = pm.newObjectIdInstance (

Customer.class, idStr);

Object customer = pm.getObjectById (id, true);

return ((Customer) customer);

}

Page 21: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Queries – Extent

A collection-like object representing a set of persistent objects, of a specified type, in the datastore

May contain subclasses, if requested

Extent e = pm.getExtent (Customer.class, true);

Iterator it = e.iterator()

while (it.hasNext()) {

Customer customer = (Customer) it.next();

customer.computeDailyInterest();

}

Page 22: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Queries – Filters

Filters run against Extents• Objects filtered are always of the type in the extent, possibly

including subclasses

JDOQL – JDO Query Language• Java-like syntax

• Parameters and variables may be supplied

• Datastore agnostic, references Java object fields

Filters are applied by the Query class• Returns a collection of matched objects

Page 23: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Queries – Filter Example

Collection getCustomersByCity (City city,

PersistenceManager pm)

{

Extent extent = pm.getExtent (Customer.class, true);

String filter = “address.city == city”;

Query query = pm.newQuery (extent, filter);

query.declareParameters (“City city”);

query.setOrdering (“name ascending”);

return (query.execute (city));

}

Page 24: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO Metadata

Provides mapping information to the JDO implementation about classes and fields

Standardized JDO descriptor (XML)• Supplies information that cannot be determined by reflection

• Allows for override of defaults

• Provides for vendor extensions

Can be used to automatically generate a schema

Page 25: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Datastore

JDO Metadata

JDO Impl

Object World Database World

JDO APIPOJO

POJO

POJO

POJO

Object Types and Relationships How and where to store object data

Page 26: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO Restrictions

Not all objects are persistable• Streams, Sockets, many system classes, etc

Collections must be homogenous• Element type must be declared in metadata

Maps may have restrictions on key types List ordering may not be preserved Objects cannot migrate between

PersistenceManager instances Persisted objects cannot outlive their

owning PersistenceManager• No disconnect/reconnect semantics

Page 27: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Why JDO Matters [1]

The Object Model IS the Data Model• Datastore is one component in the system, not the center of

the universe

• Promotes datastore independence at design, development and deploy times

• One language - no embedded SQL in the Java code

End-to-end OO design is possible – One system architecture

More agile – Datastore is an implementation detail

Page 28: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Why JDO Matters [2]

Separation of Concerns• Java Guy and DBA Guy do separate jobs

• No SQL strings buried in the Java code

• Leverage object persistence expertise of JDO implementors

Cost• Standard API – Leverage developers

• Lightweight – No special container needed

• Competition among compliant vendors

• Legacy databases can be wrapped by JDO objects

• Less work to do overall (“Maximize the work not done”)

Page 29: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JDO and EJB

Can JDO and EJB Co-exist?• JDO can be used as a BMP strategy

- Sun’s SunOne App Server uses JDO for CMP

• JDO can plugin to any JCA compliant App Server and participate in managed transactions

• Layered architecture- One app may use JDO objects directly- Another may use the same objects within EJBs to leverage

other J2EE container services

• Using JDO/BMP may be more cost-effective than paying for full CMP capability

• Most Entity Beans uses are JDO-like anyway- Aren’t distributed- Don’t need access controls- Aren’t remote

Page 30: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

What’s Similar to JDO?

CMP Proprietary O/R tools

• Toplink

• CocoBase

• Many others

Open Source O/R tools• Hibernate*

• Torque

• OJB

* Hibernate will have a JDO 2.0 binding

Page 31: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Where Can I Get JDO?

JDO Vendors• Solarmetric (www.solarmetric.com)

• Libelis (www.libelis.com)

• JDO Genie (www.hemtech.co.za/jdo/)

• Poet FastObjects (www.fastobjects.com)

Open Source Options• Apache OJB (db.apache.org/ojb/)

• JORM (www.objectweb.com/

See www.jdocentral.com for more

Page 32: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Where Can I Get More Info?

Web Resources• http://access1.sun.com/jdo/

• http://www.jdocentral.org/

• http://jdo-tools.sourceforge.net/

• http://groups.yahoo.com/JavaDataObjects

• http://onjava.com (search for JDO)

• Google “Java Data Objects”

Publications• Java Data Objects (Russell & Jordan)

- http://www.oreilly.com/catalog/jvadtaobj/

• Java Data Objects (Roos)

Page 33: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

Questions?

Ron Hitchens

[email protected]://www.ronsoft.com

Page 34: July 7-11, 2003  Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens ron@ronsoft.com  JavaPolis

© 2003, Ronsoft Technologieshttp://www.ronsoft.com

JavaPolis 2003