Chapter 1. An Initial Tour
Java is a language that defines a runtime environment in which
user-defined classes execute. Instances of these user-defined classes
may represent real-world data that is stored in a database,
filesystem, or mainframe transaction processing system. Additionally,
small-footprint environments often require a means of managing
persistent data in local storage.
Because data-access techniques are different for each type of data
source, accessing the data presents a challenge to application
developers, who need to use a different application programming
interface (API) for each type of data source. This means that you
need to know at least two languages to develop business logic for
these data sources: the Java programming language and the specialized
data-access language required by the data source. The data-access
language is likely to be different for each data source, driving up
the costs to learn and use each data source.
Prior to the release of Java Data Objects (JDO), three standards
existed for storing Java data: serialization, Java DataBase
Connectivity (JDBC), and Enterprise JavaBeans (EJB) Container Managed
Persistence (CMP). Serialization is used to write the state of an
object, and the graph of objects it references, to an output stream.
It preserves the relationships of Java objects such that the complete
graph can be reconstructed at a later point in time. But
serialization does not support transactions, queries, or the sharing
of data among multiple users. It allows access only at the
granularity of the original serialization and becomes cumbersome when
the application needs to manage multiple serializations.
Serialization is only used for persistence in the simplest of
applications or in embedded environments that cannot support a
database effectively.
JDBC requires you to manage the values of fields explicitly and map
them into relational database tables. The
developer is forced to deal with two very different data-model,
language, and data-access paradigms: Java and SQL's
relational data model. The development effort to implement your own
mapping between the relational data model and your Java object model
is so great that most developers never define an object model for
their data; they simply write procedural Java code to manipulate the
tables of the underlying relational database. The end result is that
they are not benefiting from the advantages of object-oriented
development.
The EJB component architecture is designed to support distributed
object computing. It also includes support for persistence through
Container Managed Persistence (CMP). Largely due to their distributed
capabilities, EJB applications are more complex and have more
overhead than JDO. However, JDO has been designed so that
implementations can provide persistence support in an EJB environment
by integrating with EJB containers. If your application needs object
persistence, but does not need distributed object capabilities, you
can use JDO instead of EJB components. The most popular use of JDO in
an EJB environment is to have EJB session beans directly manage JDO
objects, avoiding the use of Entity Beans. EJB components must be run
in a managed, application-server environment. But JDO applications
can be run in either managed or nonmanaged environments, providing
you with the flexibility to choose the most appropriate environment
to run your application.
You can develop applications more productively if you can focus on
designing Java object models and using JDO to store instances of your
classes directly. You need to deal with only a single information
model. JDBC requires you to understand the relational model and the
SQL language. When using EJB CMP, you are also forced to learn and
deal with many other aspects of its architecture. It also has
modeling limitations not present in JDO.
JDO specifies the contracts between your persistent classes and the
JDO runtime environment. JDO is engineered to support a wide variety
of data sources, including sources that are not commonly considered
databases. We therefore use the term datastore
to refer to any underlying data source that you access with JDO.
This chapter explores some of JDO's basic
capabilities, by examining a small application developed by a
fictitious company called Media Mania, Inc. They rent and sell
various forms of entertainment media in stores located throughout the
United States. Their stores have kiosks that provide information
about movies and the actors in those movies. This information is made
available to the customers and store staff to help select merchandise
that will be of interest to the customers.
|