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
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