OSCON 2003 JDO Talk

Download Report

Transcript OSCON 2003 JDO Talk

JavaPolis 2003
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
7-11,
2003
© 2003,July
Ronsoft
Technologies
 Portland, Oregon
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.
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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)
http://www.ronsoft.com
© 2003, Ronsoft Technologies
Bye bye SQL
JDO (or something like it) could
revolutionize the way applications
are created in the future.
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
JVM
POJO
POJO
POJO
PM
POJO
Query
SPI
PM: Persistence Manager
POJO: Plain Old Java Object*
API: Application Programming Interface
SPI: Service Provider Interface
Persist
Datastore
* Implements PersistenceCapable at runtime
http://www.ronsoft.com
© 2003, Ronsoft Technologies
How JDO Works








Transparent Persistence
Persistence by Reachability
Object Lifecycle
Inheritance
Identity
Queries
Metadata
Restrictions
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
Mediated Object Access
client
:PersistenceManager
myObject:
PersistenceCapable
implSM:
StateManager
makePersistent(myObject)
jdoReplaceStateMananger(implSM)
setFoo(12)
setIntField (this, n, foo, 12)
makeTransient(myObject)
jdoReplaceStateMananger(null)
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
JDO Object Lifecycle (1)
POJO object instantiation
Transient
Object retrieved from datastore, instantiated by JDO
Read a field
Modify a field
Hollow
makePersistent()
Modify a field
Persistent New
Persistent Clean
Persistent Dirty
deletePersistent()
deletePersistent()
Persistent New
Deleted
deletePersistent()
http://www.ronsoft.com
Persistent Deleted
deletePersistent()
© 2003, Ronsoft Technologies
JDO Object Lifecycle (2)
Transaction Completion
commit(), rollback()
Persistent Clean
commit(), rollback()
Persistent Dirty
Hollow
Persistent Deleted
commit()
commit()
Persistent New
rollback()
commit(), rollback()
rollback()
http://www.ronsoft.com
Transient
Persistent Deleted
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
Queries

Three ways of retrieving objects
1.
2.
3.
Single object, by identity
Objects of a particular type – Extents
Objects whose fields contain specific values – Filters
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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);
}
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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();
}
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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));
}
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
Object World
Object Types and Relationships
POJO
Database World
JDO
Metadata
How and where to store object data
JDO API
JDO Impl
POJO
Datastore
POJO
POJO
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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”)
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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
http://www.ronsoft.com
© 2003, Ronsoft Technologies
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)
http://www.ronsoft.com
© 2003, Ronsoft Technologies
Questions?
Ron Hitchens
[email protected]
http://www.ronsoft.com
http://www.ronsoft.com
© 2003, Ronsoft Technologies
JavaPolis 2003
http://www.ronsoft.com
© 2003, Ronsoft Technologies