Download OSCON 2003 JDO Talk

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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