The following sections outline the runtime interfaces you can use to access Kodo-specific functionality from JPA. Each interface contains services and convenience methods missing from the JPA specification. Kodo strives to use the same naming conventions and API patterns as standard JPA methods in all extensions, so that Kodo JDO APIs feel as much as possible like standard JPA.
You may have noticed the examples throughout this document using the
OpenJPAPersistence.cast methods to cast from
standard JPA interfaces to Kodo extended interfaces.
This is the recommended practice. Some application server vendors
may proxy Kodo's JPA implementation, preventing a straight
cast. OpenJPAPersistence's cast
methods work around these proxies.
public static OpenJPAEntityManagerFactory cast (EntityManagerFactory emf); public static OpenJPAEntityManager cast (EntityManager em); public static OpenJPAQuery cast (Query q);
We provide additional information on the OpenJPAPersistence
helper
below.
The org.apache.openjpa.persistence.OpenJPAEntityManagerFactory
interface extends the basic
javax.persistence.EntityManagerFactory with
Kodo-specific features. The OpenJPAEntityManagerFactory
offers APIs to obtain
managed and unmanaged EntityManagers from
the same factory, to access the Kodo data and query caches, and to
perform other Kodo-specific operations. See the
interface Javadoc for details.
All Kodo EntityManagers implement the
org.apache.openjpa.persistence.OpenJPAEntityManager
interface. This interface extends the standard
javax.persistence.EntityManager. Just as the
standard EntityManager is the primary
window into JPA services, the
OpenJPAEntityManager is the primary window from JPA
into Kodo-specific functionality. We strongly
encourage you to investigate the API extensions this interface
contains.
Kodo extends JPA's standard query functionality with the
org.apache.openjpa.persistence.OpenJPAQuery interface. See
its Javadoc for details on the convenience methods it provides.
An Extent is a logical view of all persistent
instances of a given entity class, possibly including subclasses.
Kodo adds the
org.apache.openjpa.persistence.Extent class
to the set of Java Persistence APIs. The following code illustrates
iterating over all instances of the Magazine
entity, without subclasses:
In addition to the EntityManager object
cache mandated by the JPA specification, Kodo includes
a flexible datastore-level cache. You can access this cache
from your JPA code using the
org.apache.openjpa.persistence.StoreCache facade.
Section 10.1, “Data Cache” has detailed information on
Kodo's data caching system, including the
StoreCache facade.
Kodo can cache query results as well as persistent object data. The
org.apache.openjpa.persistence.QueryResultCache
is an JPA-flavored facade to Kodo's internal query cache. See
Section 10.1.4, “Query Cache” for details on query caching
in Kodo.
Many of the aforementioned Kodo interfaces give you access to a
org.apache.openjpa.persistence.FetchPlan
instance. The FetchPlan allows you
to exercise some control over how objects are fetched from the
datastore, including large
result set support, custom
fetch groups, and lock
levels.
Kodo goes one step further, extending FetchPlan
with
org.apache.openjpa.persistence.jdbc.JDBCFetchPlan
to add additional JDBC-specific tuning methods.
Unless you have customized Kodo to use a non-relational back-end
(see Section 9.9, “Non-Relational Stores”), all
FetchPlans in Kodo implement
JDBCFetchPlan, so feel free to cast
to this interface.
Fetch plans pass on from parent components to child
components. The EntityManagerFactory
settings (via your configuration properties) for things like the
fetch size, result set type, and custom fetch groups are passed on
to the fetch plan of the
EntityManagers it produces. The settings
of each EntityManager, in turn, are passed
on to each Query and Extent
it returns. Note that the opposite, however, is not
true. Modifying the fetch plan of a
Query or Extent does
not affect the EntityManager's configuration.
Likewise, modifying an EntityManager's
configuration does not affect the
EntityManagerFactory.
Section 5.6, “Fetch Groups” includes examples using
FetchPlans.
org.apache.openjpa.persistence.OpenJPAPersistence is
a static helper class that adds Kodo-specific utility methods to
javax.persistence.Persistence.