<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.   
-->
<chapter id="jpa_overview_arch">
    <title>
        Java Persistence API Architecture
    </title>
    <indexterm zone="jpa_overview_arch">
        <primary>
            JPA
        </primary>
        <secondary>
            architecture
        </secondary>
    </indexterm>
    <para>
The diagram below illustrates the relationships between the primary components
of the JPA architecture.
    </para>
    <mediaobject>
        <imageobject>
            <!-- PNG image data 400 x 256 (see README) -->
            <imagedata fileref="img/jpa-arch.png" width="267px"/>
            
        </imageobject>
        <textobject>
            <phrase>
                JPA architecture
            </phrase>
        </textobject>
    </mediaobject>
    <note>
        <para>
A number of the depicted interfaces are only required outside of an
EJB3-compliant application server. In an application server, <classname>
EntityManager</classname> instances are typically injected, rendering the
<classname>EntityManagerFactory</classname> unnecessary. Also, transactions
within an application server are handled using standard application server
transaction controls. Thus, the <classname>EntityTransaction</classname> also
goes unused.
        </para>
    </note>
    <itemizedlist>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    Persistence
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_persistence"><classname>
Persistence</classname></link></emphasis>: The <classname>
javax.persistence.Persistence</classname> class contains static helper methods
to obtain <classname>EntityManagerFactory</classname> instances in a
vendor-neutral fashion.
            </para>
        </listitem>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    EntityManagerFactory
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_emfactory"><classname>
EntityManagerFactory</classname></link></emphasis>: The <classname>
javax.persistence.EntityManagerFactory</classname> class is a factory for
<classname> EntityManager</classname> s.
            </para>
        </listitem>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    EntityManager
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_em"><classname>EntityManager
</classname></link></emphasis>: The <classname>javax.persistence.EntityManager
</classname> is the primary JPA interface used by applications. Each
<classname>EntityManager</classname> manages a set of persistent objects, and
has APIs to insert new objects and delete existing ones. When used outside the
container, there is a one-to-one relationship between an <classname>
EntityManager</classname> and an <classname> EntityTransaction</classname>.
<classname> EntityManager</classname>s also act as factories for <classname>
Query</classname> instances.
            </para>
        </listitem>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    entity
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_pc"><classname>Entity
</classname></link></emphasis>: Entites are persistent objects that represent
datastore records.
            </para>
        </listitem>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    EntityTransaction
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_trans"><classname>
EntityTransaction</classname></link></emphasis>: Each <classname>EntityManager
</classname> has a one-to-one relation with a single <classname>
javax.persistence.EntityTransaction</classname>. <classname>
EntityTransaction</classname>s allow operations on persistent data to be 
grouped into units of work that either completely succeed or completely fail, 
leaving the datastore in its original state. These all-or-nothing operations 
are important for maintaining data integrity.
            </para>
        </listitem>
        <listitem>
            <para>
            <indexterm>
                <primary>
                    Query
                </primary>
            </indexterm>
            <indexterm>
                <primary>
                    Java Persistence Query Language
                </primary>
                <see>
                    JPQL
                </see>
            </indexterm>
            <indexterm>
                <primary>
                    JPQL
                </primary>
            </indexterm>
            <indexterm>
                <primary>
                    JPA
                </primary>
                <secondary>
                    query language
                </secondary>
                <see>
                    JPQL
                </see>
            </indexterm>
            <indexterm>
                <primary>
                    Structured Query Language
                </primary>
                <see>
                    SQL
                </see>
            </indexterm>
            <indexterm>
                <primary>
                    SQL
                </primary>
            </indexterm>
<emphasis role="bold"><link linkend="jpa_overview_query"><classname>Query
</classname></link></emphasis>: The <classname>javax.persistence.Query
</classname> interface is implemented by each JPA vendor to find persistent
objects that meet certain criteria. JPA standardizes support for queries using
both the Java Persistence Query Language (JPQL) and the Structured Query 
Language (SQL). You obtain <classname>Query</classname> instances from an 
<classname>EntityManager</classname>.
            </para>
        </listitem>
    </itemizedlist>
    <para>
The example below illustrates how the JPA interfaces interact to execute a JPQL
query and update persistent objects. The example assumes execution outside a
container.
    </para>
    <example id="jpa_overview_arch_interact_outside">
        <title>
            Interaction of Interfaces Outside Container
        </title>
<programlisting>
// get an EntityManagerFactory using the Persistence class; typically 
// the factory is cached for easy repeated use
EntityManagerFactory factory = Persistence.createEntityManagerFactory(null);

// get an EntityManager from the factory
EntityManager em = factory.createEntityManager(PersistenceContextType.EXTENDED);

// updates take place within transactions
EntityTransaction tx = em.getTransaction();
tx.begin();

// query for all employees who work in our research division
// and put in over 40 hours a week average
Query query = em.createQuery("select e from Employee e where "
    + "e.division.name = 'Research' AND e.avgHours &gt; 40");
List results = query.getResultList ();

// give all those hard-working employees a raise
for (Object res : results) {
    Employee emp = (Employee) res;
    emp.setSalary(emp.getSalary() * 1.1);
}

// commit the updates and free resources
tx.commit();
em.close();
factory.close();
</programlisting>
    </example>
    <para>
Within a container, the <classname>EntityManager</classname> will be injected
and transactions will be handled declaratively. Thus, the in-container version 
of the example consists entirely of business logic:
    </para>
    <example id="jpa_overview_arch_interact_inside">
        <title>
            Interaction of Interfaces Inside Container
        </title>
<programlisting>
// query for all employees who work in our research division
// and put in over 40 hours a week average - note that the EntityManager em
// is injected using a @Resource annotation
Query query = em.createQuery("select e from Employee e where "
    + "e.division.name = 'Research' and e.avgHours &gt; 40");
List results = query.getResultList();

// give all those hard-working employees a raise
for (Object res : results) {
    emp = (Employee) res;
    emp.setSalary(emp.getSalary() * 1.1);
} 
</programlisting>
    </example>
    <para>
The remainder of this document explores the JPA interfaces in detail. We present
them in roughly the order that you will use them as you develop your
application.
    </para>
    <section id="jpa_overview_arch_exceptions">
        <title>
            JPA Exceptions
        </title>
        <indexterm zone="jpa_overview_arch_exceptions">
            <primary>
                JPA
            </primary>
            <secondary>
                exceptions
            </secondary>
            <seealso>
                exceptions
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                exceptions
            </primary>
            <secondary>
                JPA
            </secondary>
        </indexterm>
        <mediaobject>
            <imageobject>
                <!-- PNG image data, 427 x 355 (see README) -->
                <imagedata fileref="img/jpa-exceptions.png" width="285px"/>
                
            </imageobject>
            <textobject>
                <phrase>
                    JPA exception architecture
                </phrase>
            </textobject>
        </mediaobject>
        <para>
The diagram above depicts the JPA exception architecture. All
exceptions are unchecked. JPA uses standard exceptions where
appropriate, most notably <classname>IllegalArgumentException</classname>s and
<classname>IllegalStateException</classname>s. The specification also provides
a few JPA-specific exceptions in the <literal>javax.persistence</literal>
package. These exceptions should be self-explanatory. See the
<ulink url="http://java.sun.com/javaee/5/docs/api">Javadoc</ulink> for
additional details on JPA exceptions.
        </para>
        <note>
            <para>
All exceptions thrown by OpenJPA implement
<ulink url="../javadoc/org/apache/openjpa/util/ExceptionInfo.html"><classname>
org.apache.openjpa.util.ExceptionInfo</classname></ulink> to provide you with
additional error information.
            </para>
        </note>
    </section>
</chapter>
