Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
JDO (Java Data Objects) What It Is And Why It Matters Ron Hitchens [email protected] http://www.ronsoft.com July 7-11, 2003 Portland, Oregon 5/24/20172 Speaker Info • 25+ years industry experience • 6+ years using Java • Built a website with JDO (www.europeasap.com) • O’Reilly author (Java NIO) • Tech reviewer on JDO book (Russell & Jordan) Ron Hitchens – Ronsoft Technologies 5/24/20173 What is JDO? • New 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 Ron Hitchens – Ronsoft Technologies 5/24/20174 JVM POJO POJO POJO POJO PM Query SPI PM: Persistence Manager POJO: Plain Old Java Object API: Application Programming Interface SPI: Service Provider Interface Persist Datastore Ron Hitchens – Ronsoft Technologies 5/24/20175 How JDO Works • • • • • • • • Transparent Persistence Persistence by Reachability Object Lifecycle Inheritance Identity Queries Metadata Restrictions Ron Hitchens – Ronsoft Technologies 5/24/20176 Transparent Persistence • Transparent to Persisted Objects – No source code changes to persistent objects needed – 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 object state – Object instances are per-PM – collisions are possible at commit Ron Hitchens – Ronsoft Technologies 5/24/20177 Transparent Data Access • Objects and object fields are lazyloaded when referenced • Changes to object state result in eventual updates to datastore without explicit saves (subject to transaction boundaries) • PersistenceManagers maintain object caches, datastore access is optimized where possible Ron Hitchens – Ronsoft Technologies 5/24/20178 PersistenceCapable • The interface that all persistent objects must implement at runtime – Byte code enhancement – Source code pre-processing – Direct implementation by programmer • StateManager – – – – Set through PersistenceCapable interface Manages object’s state while persistent Mediates access to object fields SPI hook into runtime JDO Implementation Ron Hitchens – Ronsoft Technologies 5/24/20179 Mediated Object Access client :PersistenceManager myObject: PersistenceCapable implSM: StateManager makePersistent(myObject) jdoReplaceStateMananger(implSM) setFoo(12) setIntField (this, n, foo, 12) makeTransient(myObject) jdoReplaceStateMananger(null) Ron Hitchens – Ronsoft Technologies 5/24/201710 Persistence By Reachability • All objects referenced directly or indirectly from a PersistenceCapable object are automatically persisted at transaction commit. – Persistence applies to entire object graph • Referenced non-PersistenceCapable objects are serialized to the datastore • Deletion is done per object, not by reachability • No datastore garbage collection Ron Hitchens – Ronsoft Technologies 5/24/201711 Simple JDO Example PersistenceManagerFactory factory = JDOHelper.getPersistenceManagerFactory(props); PersistenceManager pm = JDOFactory.getPersistenceManager(); Transaction trans = pm.currentTransaction(); User user = new User ("ron", "Ron Hitchens", "[email protected]"); Address addr = new Address (“123 Main St.”, “Smallville”, “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 Ron Hitchens – Ronsoft Technologies 5/24/201712 JDO Object Lifecycle (1) POJO object instantiation Transient Object retrieved from datastore, instantiated by JDO Read a field Hollow Modify a field makePersistent() Modify a field Persistent New Persistent Clean Persistent Dirty deletePersistent() deletePersistent() Persistent New Deleted deletePersistent() Persistent Deleted deletePersistent() Ron Hitchens – Ronsoft Technologies 5/24/201713 JDO Object Lifecycle (2) Transaction Completion commit(), rollback() Persistent Clean commit(), rollback() Persistent Dirty rollback() Hollow commit() commit() Persistent New Persistent Deleted commit(), rollback() rollback() Transient Persistent Deleted Ron Hitchens – Ronsoft Technologies 5/24/201714 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. • Couples the object to JDO Ron Hitchens – Ronsoft Technologies 5/24/201715 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 Table • Interfaces may not be directly persisted Ron Hitchens – Ronsoft Technologies 5/24/201716 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 Ron Hitchens – Ronsoft Technologies 5/24/201717 Queries • Three ways of retrieving objects 1. Single object, by identity 2. Objects of a particular type – Extents 3. Objects whose fields contain specific values – Filters Ron Hitchens – Ronsoft Technologies 5/24/201718 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); } Ron Hitchens – Ronsoft Technologies 5/24/201719 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(); } Ron Hitchens – Ronsoft Technologies 5/24/201720 Queries – Filters • Filters run against Extents – Objects filtered are always of the type in the extent, possibly subclasses • JDOQL – JDO Query Language – Java-like syntax – Parameters and variables may be supplied – Datastore agnostic, references Java fields • Filters are applied by Query class – Returns a collection of matched objects Ron Hitchens – Ronsoft Technologies 5/24/201721 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)); } Ron Hitchens – Ronsoft Technologies 5/24/201722 JDO Metadata • Provides mapping information to JDO implementation about classes and fields • Standardized JDO descriptor (XML) – Provides information that cannot be determined by reflection – Allows for override of defaults – Provides for vendor extensions • Can be used to generate a schema Ron Hitchens – Ronsoft Technologies 5/24/201723 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 Ron Hitchens – Ronsoft Technologies 5/24/201724 JDO Restrictions • Not all objects are persistable – Streams, Sockets, many system classes, etc • • • • Collections must be homogenous Maps may have restrictions on keys List ordering may not be preserved Objects cannot migrate between PersistenceManager instances • Persisted objects cannot outlive their owning PersistenceManager Ron Hitchens – Ronsoft Technologies 5/24/201725 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 • End-to-end OO design is possible – One system architecture • More agile – Datastore is an implementation detail Ron Hitchens – Ronsoft Technologies 5/24/201726 Why JDO Matters [2] • Separation of Concerns – Java Guy and DBA Guy do separate jobs – No SQL strings buried in the Java code • 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 Ron Hitchens – Ronsoft Technologies 5/24/201727 JDO and EJB • Can JDO and EJB Co-exist? – JDO can be used as a BMP strategy • Sun’s SunOne App Server does this – 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 J2EE container services – Using JDO/BMP may be more cost-effective than paying for full CMP capability Ron Hitchens – Ronsoft Technologies 5/24/201728 What’s Similar to JDO? • CMP • Proprietary O/R tools – Toplink – CocoBase – Many others • Open Source O/R tools – Hibernate – Torque – OJB Ron Hitchens – Ronsoft Technologies 5/24/201729 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 Ron Hitchens – Ronsoft Technologies 5/24/201730 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) Ron Hitchens – Ronsoft Technologies 5/24/201731 Questions? Ron Hitchens [email protected] http://www.ronsoft.com Ron Hitchens – Ronsoft Technologies