"Java Data Objects" aims to revolutionize the way Java developers interact with databases and other datastores. It allows you to store and retrieve objects in a way that's natural toJava programmers. Instead of working with JDBC or EJB's container-managed persistence, you work directly with your Java objects. You don't have to copy data to and from database tables or issue SELECTs to perform queries: your JDO implementation takes care of persistence behind-the-scenes, and you make queries based on the fields of your Java objects, using normal Java syntax. The result is software that is truly object-oriented: not code that is partially object-oriented, with a large database-shaped lump on the back end. JDO lets you save plain, ordinary Java objects, and does not force you to use different data models and types for dealing with storage. As a result, your code becomes easier to maintain, easier to re-use, and easier to test. And you're not tied to a specific database vendor: your JDO code is entirely database-independent. You don't even need to know whether the datastore is a relational database, an object database, or just a set of files.
The book offers a thorough introduction to JDO, starting with a simple application that demonstrates many of JDO's capabilities. It shows you how to make classes persistent, how JDO maps persistent classes to the database, how to configure JDO at runtime, how to perform transactions, and how to make queries. More advanced chapters cover optional features such as nontransactional access and optimistic transactions. The book concludes by discussing the use of JDO in web applications and J2EE environments.
David Jordan has been involved in transparent persistence technologies since 1985. He instigated the development of the first C++ object database while at Bell Labs and has been a member of the JDO expert group since its inception. He is recognized in the JDO specification for his contributions to the technology. Craig Russell is the specification lead for JDO at Sun Microsystems. He is also responsible for overall development of JDO Reference Implementation. Prior to Sun he was an architect at Versant, an object database company supporting transparent persistence.
Foreword Preface 1. An Initial Tour Defining a Persistent Object Model The Classes to Persist Declaring Classes to Be Persistent Project Build Environment Jars Needed to Use the JDO Reference Implementation Project Directory Structure Enhancing Classes for Persistence Establish a Datastore Connection and Transaction Acquiring a PersistenceManager Creating a FOStore Datastore Operations on Instances Making Instances Persistent Accessing Instances Modifying an Instance Deleting Instances Summary 2. An Overview of JDO Interfaces The javax.jdo Package JDO Exception Classes The javax.jdo.spi Package Optional Features Identity Options Optional Collections Transaction-Related Optional Features 3. JDO Architectures Architecture Within Application JVM Single PersistenceManager Multiple PersistenceManagers Accessing the Same Datastore Multiple PersistenceManagers Accessing Different Datastores Shared Implementation Cache Datastore Access Direct Access of Filesystem or Local Datastore Remote Access of a JDO Server Remote Access of a SQL Datastore System Architectures with a JDO Application JDO Rich Client with Local Datastore JDO Applications in a Web Server JDO Applications as Web Services Rich Client Connecting to Application Server with EJB Components Web Server with EJB Server EJB Session Beans Using Session Bean Facades JDO Providing Container-Managed Persistence 4. Defining Persistent Classes Kinds of Classes and Instances Kinds of Classes Kinds of Instances Java Classes and Metadata JDO Metadata Inheritance The Media Mania Object Model Fields Supported Types Persistence of Fields Complete Metadata for the Media Mania Model 5. Datastore Mappings Mapping Approaches Relational Modeling Constructs SQL 99 Modeling Constructs in Java and Relational Models Mapping Classes to Tables Mapping a Single-Valued Field to a Column Name-Mapping Type-Mapping Indexes Identity Inheritance References Collections and Relationships Using a Foreign Key Using a Join Table One-to-One Relationships Representing Lists and Maps 6. Class Enhancement Enhancement Approaches Reference Enhancer Vendor-Specific Enhancement Binary Compatibility Enhancement Effects on Your Code Changes Made by the Enhancer Metadata Instance-Level Data Field Mediation 7. Establishing a JDO Runtime Environment Configuring a PersistenceManagerFactory Connection Properties Optional Feature Properties Flags Flags Settings in Multiple Interfaces Determining the Optional Features and Default Flag Settings Vendor-Specific Properties Nonconfigurable Properties Acquiring a PersistenceManager User Object Closing a PersistenceManager Closing a PersistenceManagerFactory Transactions Properties of Transactions Transactions and Locking in the Datastore Types of Transactions in JDO Acquiring a Transaction Setting the Transaction Type Transaction Demarcation Restoring Values on Rollback Determining Whether a Transaction Is Active Multiple PersistenceManagers Multithreading 8. Instance Management Persistence of Instances Explicit Persistence Persistence-by-Reachability Extent Access Accessing an Extent Extent Iteration Ignoring the Cache Accessing and Updating Instances Explicit Marking of Modified Instances Deleting Instances Delete Propagation 9. The JDO Query Language Query Components Creating and Initializing a Query Changes in the Cache Query Namespaces Type Names Field, Parameter, and Variable Names Keywords Literals Query Execution Parameter Declarations Executing a Query Compiling a Query The Query Filter General Characteristics of Expressions Query Operators References Collections Ordering Query Results Closing a Query 10. Identity Overview JDO Identity Types Metadata Identity Class Datastore Identity Application Identity Primary-Key Fields Persistent Class equals() and hashCode( ) Methods The Application-Identity Class A Single-Field Primary Key A Compound Primary Key A Compound Primary Key That Contains a Foreign Key Application Identity in an Inheritance Hierarchy Nondurable Identity Identity Methods Get the Identity Class Get the Identity of an Instance Getting an Instance via Its Identity Changing the Application Identity of an Instanc Get the Current Application Identity of an Instance The String Representation of Identity Advanced Topics Choosing an Identity Type Using Identity Versus a Query Identity Across PersistenceManagers 11. Lifecycle States and Transitions Lifecycle States Transient Persistent-New Hollow Persistent-Clean Persistent-Dirty Persistent-Deleted Persistent-New-Deleted State Interrogation State Transitions State Transitions During a Datastore Transaction State Transitions When a Transaction Completes States Between Transactions 12. Field Management Transactional Fields null Values Retrieval of Fields Default Fetch Group Retrieving All Fields The Management of Fields Serialization Managing Fields During Lifecycle Events First- and Second-Class Objects Specifying a Second-Class Object Embedding Collection Elements Persistent Classes as Second-Class Objects Sharing of Instances 13. Cache Management Explicit Management of Instances in the Cache Refreshing Instances Evicting Instances Cloning Transient-Transactional Instances Transient-Transactional Lifecycle States State Interrogation State Transitions Making a Persistent Instance Transient 14. Nontransactional Access Nontransactional Features Reading Outside a Transaction Persistent-Nontransactional State Retaining Values at Transaction Commit Restoring Values at Transaction Rollback Before Image Restoring Persistent Instances Restoring Persistent-New Instances Modifying Persistent Instances Outside a Transaction Hot Cache Example 15. Optimistic Transactions Verification at Commit Recovery from a Failed Transaction Setting Optimistic Transaction Behavior Optimistic Example Optimistic Transaction State Transitions Deleting Instances Making Instances Transactional Modifying Instances Commit Rollback 16. The Web-Server Environment Web Servers Accessing the PersistenceManagerFactory Servicing Requests PersistenceManager per Request PersistenceManager per Application PersistenceManager per Transactional Request PersistenceManager per Session Transactions JavaServer Pages Struts with JDO 17. J2EE Application Servers Enterprise JavaBeans Architecture Stateless Session Beans Configuring the PersistenceManagerFactory Stateless Session Beans with Container-Managed Transactions Stateful Session Beans with Container-Managed Transactions Bean-Managed Transactions javax.transaction.UserTransaction javax.jdo.Transaction Stateless Session Beans with Bean-Managed Transactions Stateful Session Beans with Bean-Managed Transactions Message-Driven Beans Persistent Entities and JDO Local Persistent Storage Remote Persistent Storage A. Lifecycle States and Transitions B. JDO Metadata DTD C. JDO Interfaces and Exception Classes D. JDO Query Language BNF E. Source Code for Examples Index