July 7-11, 2003 Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens...
-
Upload
ashlie-johnson -
Category
Documents
-
view
215 -
download
1
Transcript of July 7-11, 2003 Portland, Oregon JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens...
July 7-11, 2003 Portland, Oregon
JDO(Java Data Objects)
What It Is And Why It Matters
http://www.ronsoft.com
JavaPolis 2003 - Antwerp, BelgiumDec 3, 2003
JavaPolis 2003
© 2003, Ronsoft Technologies
© 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.
© 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)
© 2003, Ronsoft Technologieshttp://www.ronsoft.com
Bye bye SQL
JDO (or something like it) could revolutionize the way applications are created in the future.
© 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
© 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
© 2003, Ronsoft Technologieshttp://www.ronsoft.com
How JDO Works
Transparent Persistence Persistence by Reachability Object Lifecycle Inheritance Identity Queries Metadata Restrictions
© 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
© 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
© 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
© 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)
© 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
© 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
© 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()
© 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()
© 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
© 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
© 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
© 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
© 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);
}
© 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();
}
© 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
© 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));
}
© 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
© 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
© 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
© 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
© 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”)
© 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
© 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
© 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
© 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)
© 2003, Ronsoft Technologieshttp://www.ronsoft.com
Questions?
Ron Hitchens
[email protected]://www.ronsoft.com
© 2003, Ronsoft Technologieshttp://www.ronsoft.com
JavaPolis 2003