<?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="ref_guide_remote">
    <title>
        Remote and Offline Operation
    </title>
    <indexterm zone="ref_guide_remote">
        <primary>
            remote
        </primary>
    </indexterm>
    <indexterm>
        <primary>
            offline
        </primary>
        <see>
            remote
        </see>
    </indexterm>
    <para>
The standard JPA runtime environment is <emphasis>local</emphasis> and
<emphasis>online</emphasis>. It is <emphasis>local</emphasis> in that components
such as <classname>EntityManager</classname>s and queries connect directly to
the datastore and execute their actions in the same JVM as the code using them.
It is <emphasis>online</emphasis> in that all changes to managed objects must be
made in the context of an active <classname> EntityManager</classname>. These
two properties, combined with the fact that <classname>
EntityManager</classname>s cannot be serialized for storage or network transfer,
make the standard JPA runtime difficult to incorporate into some enterprise and
client/server program designs.
    </para>
    <para>
OpenJPA extends the standard runtime to add <emphasis>remote</emphasis> and
<emphasis>offline</emphasis> capabilities in the form of enhanced
<link linkend="ref_guide_detach">Detach and Attach APIs</link> and
<link linkend="ref_guide_event">Remote Commit Events</link>. The following
sections explain these capabilities in detail.
    </para>
    <section id="ref_guide_detach">
        <title>
            Detach and Attach
        </title>
        <indexterm zone="ref_guide_detach">
            <primary>
                detachment
            </primary>
        </indexterm>
        <indexterm>
            <primary>
                attachment
            </primary>
            <see>
                detachment
            </see>
        </indexterm>
        <para>
The JPA Overview describes the specification's standard detach and attach APIs
in <xref linkend="jpa_overview_em_lifecycle"/>. This section enumerates
OpenJPA's enhancements to the standard behavior.
        </para>
        <section id="ref_guide_detach_behavior">
            <title>
                Detach Behavior
            </title>
            <indexterm zone="ref_guide_detach_behavior">
                <primary>
                    detachment
                </primary>
                <secondary>
                    behavior
                </secondary>
            </indexterm>
            <para>
In JPA, objects detach automatically when they are serialized or when a
<link linkend="jpa_overview_emfactory_perscontext">persistence context</link>
ends. The specification does not define any way to explicitly detach objects.
The extended
<ulink url="../javadoc/org/apache/openjpa/persistence/OpenJPAEntityManager.html">
<classname>OpenJPAEntityManager</classname></ulink>, however, allows you to
explicitly detach objects at any time.
            </para>
<programlisting>
public Object detach(Object pc):
public Object[] detachAll(Object... pcs):
public Collection detachAll(Collection pcs):
</programlisting>
            <para>
Each detach method returns detached copies of the given instances. The copy
mechanism is similar to serialization, except that only certain fields are
traversed. We will see how to control which fields are detached in a later
section.
            </para>
            <para>
            <indexterm>
                <primary>
                    detachment
                </primary>
                <secondary>
                    of dirty objects
                </secondary>
            </indexterm>
When detaching an instance that has been modified in the current transaction
(and thus made dirty), the current transaction is flushed. This means that when
subsequently re-attaching the detached instances, OpenJPA assumes that the
transaction from which they were originally detached was committed; if it has
been rolled back, then the re-attachment process will throw an optimistic
concurrency exception.
            </para>
            <para>
You can stop OpenJPA from assuming the transaction will commit in the following
ways :
    <itemizedlist>
        <listitem>
            <para>
                Invoke <methodname>EntityTransaction.setRollbackOnly
                </methodname> prior to detachingyour objects. Setting the 
                <literal>RollbackOnly</literal> flag prevents OpenJPA from 
                flushing when detaching dirty objects; instead OpenJPA just 
                runs its pre-flush actions (see the 
                <methodname>OpenJPAEntityManager.preFlush</methodname>
<ulink url="../javadoc/org/apache/openjpa/persistence/OpenJPAEntityManager.html">
Javadoc</ulink> for details).
            </para>
            <para>
This allows you to use the same instances in multiple
attach/modify/detach/rollback cycles. 
            </para>
        </listitem>
        <listitem>
            <para>
                Make your modifications outside of a transaction (with <literal>
NontransactionalWrite</literal> enabled) before detaching.
            </para>
        </listitem>
        <listitem>
            <para>
            Set <literal>flushBeforeDetach</literal> 
            to false (see <methodname>Compatibility.setFlushBeforeDetach
            </methodname>
            <ulink url="../javadoc/org/apache/openjpa/conf/Compatibility.html">
Javadoc</ulink> ). This option is similar to the first option, but does not
            affect the current transaction.
            </para>
        </listitem>
    </itemizedlist>
    </para>
        </section>
        <section id="ref_guide_attach_behavior">
            <title>
                Attach Behavior
            </title>
            <indexterm zone="ref_guide_attach_behavior">
                <primary>
                    attachment
                </primary>
                <secondary>
                    behavior
                </secondary>
            </indexterm>
            <para>
When attaching, OpenJPA uses several strategies to determine the optimal way to
merge changes made to the detached instance. As you will see, these strategies
can even be used to attach changes made to a transient instance which was never
detached in the first place.
            </para>
            <itemizedlist>
                <listitem>
                    <para>
If the instance was detached and <link linkend="ref_guide_detach_graph">
detached state</link> is enabled, OpenJPA will use the detached state to
determine the object's version and primary key values. In addition, this state
will tell OpenJPA which fields were loaded at the time of detach, and in turn
where to expect changes. Loaded detached fields with null values will set the
attached instance's corresponding fields to null.
                    </para>
                </listitem>
                <listitem>
                    <para>
If the instance has a <literal>Version</literal> field,
OpenJPA will consider the object detached if the version field has a non-default
value, and new otherwise.  Similarly, if the instance has 
<literal>GeneratedValue</literal> primary key fields, OpenJPA will consider the
object detached if any of these fields have non-default values, and new 
otherwise.
                    </para>
                    <para>
When attaching null fields in these cases, OpenJPA cannot distinguish between a
field that was unloaded and one that was intentionally set to null. In this
case, OpenJPA will use the current <link linkend="ref_guide_detach_graph">
detach state</link> setting to determine how to handle null fields: fields that
would have been included in the detached state are treated as loaded, and will
in turn set the corresponding attached field to null.
                    </para>
                </listitem>
                <listitem>
                    <para>
If neither of the above cases apply, OpenJPA will check to see if an instance
with the same primary key values exists in the database. If so, the object is
considered detached. Otherwise, it is considered new.
                    </para>
                </listitem>
            </itemizedlist>
            <para>
These strategies will be assigned on a per-instance basis, such that during the
attachment of an object graph more than one of the above strategies may be used.
            </para>
            <para>
If you attempt to attach a versioned instance whose representation has changed
in the datastore since detachment, OpenJPA will throw an optimistic concurrency
exception upon commit or flush, just as if a normal optimistic conflict was
detected. When attaching an instance whose database record has been deleted
since detaching, or when attaching a detached instance into a manager that has a
stale version of the object, OpenJPA will throw an optimistic concurrency
exception from the attach method. In these cases, OpenJPA sets the <literal>
RollbackOnly</literal> flag on the transaction.
            </para>
        </section>
        <section id="ref_guide_detach_graph">
            <title>
                Defining the Detached Object Graph
            </title>
            <indexterm zone="ref_guide_detach_graph">
                <primary>
                    detachment
                </primary>
                <secondary>
                    defining the object graph
                </secondary>
            </indexterm>
            <para>
When detached objects lose their association with the OpenJPA runtime, they also
lose the ability to load additional state from the datastore. It is important,
therefore, to populate objects with all the persistent state you will need
before detaching them. While you are free to do this manually, OpenJPA includes
facilities for automatically populating objects when they detach. The
<link linkend="openjpa.DetachState"><literal>openjpa.DetachState</literal>
</link> configuration property determines which fields and relations are
detached by default. All settings are recursive. They are:
            </para>
            <orderedlist>
                <listitem>
                    <para>
<literal>loaded</literal>: Detach all fields and relations that are already
loaded, but don't include unloaded fields in the detached graph. This is the
default.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>fetch-groups</literal>: Detach all fields and relations in the current
<link linkend="ref_guide_runtime">fetch configuration</link>. For more
information on custom fetch groups, see <xref linkend="ref_guide_fetch"/>.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>all</literal>: Detach all fields and relations. Be very careful when
using this mode; if you have a highly-connected domain model, you could end up
bringing every object in the database into memory!
                    </para>
                </listitem>
            </orderedlist>
            <para>
Any field that is not included in the set determined by the detach mode is set
to its Java default value in the detached instance.
            </para>
            <para>
The <literal>openjpa.DetachState</literal> option is actually a plugin string
(see <xref linkend="ref_guide_conf_plugins"/>) that allows you to also
configure the following options related to detached state:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>DetachedStateField</literal>: As described in
<xref linkend="ref_guide_attach_behavior"/> above, OpenJPA can take
advantage of a <emphasis>detached state field</emphasis> to make the attach
process more efficient. This field is added by the enhancer and is not visible
to your application. Set this property to one of the following values:
                    </para>
                    <itemizedlist>
                        <listitem>
                            <para>
<literal>transient</literal>: Use a transient detached state field. This gives
the benefits of a detached state field to local objects that are never
serialized, but retains serialization compatibility for client tiers without
access to the enhanced versions of your classes. This is the default.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>true</literal>: Use a non-transient detached state field so that
objects crossing serialization barriers can still be attached efficiently. This
requires, however, that your client tier have the enhanced versions of your
classes and the OpenJPA libraries.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>false</literal>: Do not use a detached state field.
                            </para>
                        </listitem>
                    </itemizedlist>
                    <para>
You can override the setting of this property or declare your own detached state
field on individual classes using OpenJPA's metadata extensions. See
<xref linkend="ref_guide_detach_field"/> below.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>DetachedStateManager</literal>: Whether to use a detached state
manager. A detached state manager makes attachment much more efficient. Like a
detached state field, however, it breaks serialization compatibility with the
unenhanced class if it isn't transient.
                    </para>
                    <para>
This setting piggybacks on the <literal>DetachedStateField</literal> setting
above. If your detached state field is transient, the detached state manager
will also be transient. If the detached state field is disabled, the detached
state manager will also be disabled. This is typically what you'll want. By
setting <literal> DetachedStateField</literal> to true (or transient) and
setting this property to false, however, you can use a detached state field
<emphasis role="bold">without</emphasis> using a detached state manager. This
may be useful for debugging or for legacy OpenJPA users who find differences
between OpenJPA's behavior with a detached state manager and OpenJPA's older
behavior without one.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>AccessUnloaded</literal>: Whether to allow access to unloaded fields
of detached objects. Defaults to true. Set to false to throw an exception
whenever an unloaded field is accessed. This option is only available when you
use detached state managers, as determined by the settings above.
                    </para>
                </listitem>
            </itemizedlist>
            <example id="ref_guide_detach_graph_confex">
                <title>
                    Configuring Detached State
                </title>
<programlisting>
&lt;property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/&gt;
</programlisting>
            </example>
            <para>
You can also alter the set of fields that will be included in the detached graph
at runtime.
<ulink url="../javadoc/org/apache/openjpa/persistence/OpenJPAEntityManager.html">
<classname>OpenJPAEntityManager</classname></ulink>s expose the following APIs
for controlling detached state:
            </para>
<programlisting>
public DetachStateType getDetachState();
public void setDetachState(DetachStateType type);
</programlisting>
            <para>
The <classname>DetachStateType</classname> enum contains the following values:
            </para>
<programlisting>
enum DetachStateType {
    FETCH_GROUPS,
    LOADED,
    ALL
}
</programlisting>
            <section id="ref_guide_detach_field">
                <title>
                    Detached State Field
                </title>
                <indexterm zone="ref_guide_detach_field">
                    <primary>
                        detachment
                    </primary>
                    <secondary>
                        detached state field
                    </secondary>
                </indexterm>
                <para>
When the detached state field is enabled, the OpenJPA enhancer adds an
additional field to the enhanced version of your class. This field of type
<classname>Object</classname>. OpenJPA uses this field for bookkeeping
information, such as the versioning data needed to detect optimistic concurrency
violations when the object is re-attached.
                </para>
                <para>
It is possible to define this detached state field yourself. Declaring this
field in your class metadata prevents the enhancer from adding any extra fields
to the class, and keeps the enhanced class serialization-compatible with the
unenhanced version. The detached state field must not be persistent. See
<xref linkend="detached-state-field"/> for details on how to declare a
detached state field.
                </para>
<programlisting>
import org.apache.openjpa.persistence.*;

@Entity
public class Magazine
    implements Serializable {

    private String name;
    @DetachedState private Object state;
    ...
}
</programlisting>
            </section>
        </section>
    </section>
    <section id="ref_guide_event">
        <title>
            Remote Event Notification Framework
        </title>
        <indexterm zone="ref_guide_event">
            <primary>
                remote
            </primary>
            <secondary>
                events
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                events
            </primary>
            <secondary>
                remote
            </secondary>
            <see>
                remote, events
            </see>
        </indexterm>
        <para>
        <indexterm>
            <primary>
                remote
            </primary>
            <secondary>
                events
            </secondary>
            <tertiary>
                RemoteCommitProvider
            </tertiary>
        </indexterm>
        <indexterm>
            <primary>
                remote
            </primary>
            <secondary>
                events
            </secondary>
            <tertiary>
                RemoteCommitListener
            </tertiary>
        </indexterm>
The remote event notification framework allows a subset of the information
available through OpenJPA's transaction events (see
<xref linkend="ref_guide_runtime_pm_event"/>) to be broadcast to remote
listeners. OpenJPA's <link linkend="ref_guide_cache">data cache</link>, for
example, uses remote events to remain synchronized when deployed in multiple
JVMs.
        </para>
        <para>
To enable remote events, you must configure the <classname> EntityManagerFactory
</classname> to use a <literal>RemoteCommitProvider</literal> (see below).
        </para>
        <para>
When a <literal>RemoteCommitProvider</literal> is properly configured, you can
register
<ulink url="../javadoc/org/apache/openjpa/event/RemoteCommitListener.html">
<classname>RemoteCommitListener</classname></ulink>s that will be alerted with
a list of modified object ids whenever a transaction on a remote machine
successfully commits.
        </para>
        <section id="ref_guide_event_conf">
            <title>
                Remote Commit Provider Configuration
            </title>
            <indexterm zone="ref_guide_event_conf">
                <primary>
                    remote
                </primary>
                <secondary>
                    events
                </secondary>
                <tertiary>
                    configuration
                </tertiary>
            </indexterm>
            <para>
OpenJPA includes built in remote commit providers for JMS and TCP communication.
            </para>
            <section id="ref_guide_event_conf_jms">
                <title>
                    JMS
                </title>
                <indexterm zone="ref_guide_event_conf_jms">
                    <primary>
                        remote
                    </primary>
                    <secondary>
                        events
                    </secondary>
                    <tertiary>
                        JMS
                    </tertiary>
                </indexterm>
                <para>
The JMS remote commit provider can be configured by setting the
<link linkend="openjpa.RemoteCommitProvider"><literal>
openjpa.RemoteCommitProvider</literal></link> property to contain the
appropriate configuration properties. The JMS provider understands the following
properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>Topic</literal>: The topic that the remote commit provider should
publish notifications to and subscribe to for notifications sent from other
JVMs. Defaults to <literal>topic/OpenJPACommitProviderTopic</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>TopicConnectionFactory</literal>: The JNDI name of a <classname>
javax.jms.TopicConnectionFactory</classname> factory to use for finding topics.
Defaults to <literal> java:/ConnectionFactory</literal>. This setting may vary
depending on the application server in use; consult the application server's
documentation for details of the default JNDI name for the <classname>
javax.jms.TopicConnectionFactory</classname> instance. For example, under
Weblogic, the JNDI name for the TopicConnectionFactory is <literal>
javax.jms.TopicConnectionFactory</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>ExceptionReconnectAttempts</literal>: The number of times to attempt
to reconnect if the JMS system notifies OpenJPA of a serious connection error.
Defaults to 0, meaning OpenJPA will log the error but otherwise ignore it,
hoping the connection is still valid.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>*</literal>: All other configuration properties will be interpreted as
settings to pass to the JNDI <classname>InitialContext</classname> on
construction. For example, you might set the <literal>java.naming.provider.url
</literal> property to the URL of the context provider.
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
To configure a factory to use the JMS provider, your properties might look like
the following:
                </para>
                <note>
                    <para>
Because of the nature of JMS, it is important that you invoke <methodname>
EntityManagerFactory.close</methodname> when finished with a factory. If you do
not do so, a daemon thread will stay up in the JVM, preventing the JVM from
exiting.
                    </para>
                </note>
            </section>
            <section id="ref_guide_event_conf_tcp">
                <title>
                    TCP
                </title>
                <indexterm zone="ref_guide_event_conf_tcp">
                    <primary>
                        remote
                    </primary>
                    <secondary>
                        events
                    </secondary>
                    <tertiary>
                        TCP
                    </tertiary>
                </indexterm>
                <para>
The TCP remote commit provider has several options that are defined as host
specifications containing a host name or IP address and an optional port
separated by a colon. For example, the host specification <literal>
saturn.bea.com:1234</literal> represents an <classname>InetAddress</classname>
retrieved by invoking <methodname>InetAddress.getByName("saturn.bea.com")
</methodname> and a port of 1234.
                </para>
                <para>
                <indexterm>
                    <primary>
                        TCP provider
                    </primary>
                </indexterm>
The TCP provider can be configured by setting the <literal>
openjpa.RemoteCommitProvider</literal> plugin property to contain the
appropriate configuration settings. The TCP provider understands the following
properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>Port</literal>: The TCP port that the provider should listen on for
commit notifications. Defaults to 5636.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>Addresses</literal>: A semicolon-separated list of IP addresses to
which notifications should be sent. No default value.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>NumBroadcastThreads</literal>: The number of threads to create for the
purpose of transmitting events to peers. You sould increase this value as the
number of concurrent transactions increases. The maximum number of concurrent
transactions is a function of the size of the connection pool. See the the
<literal>MaxActive</literal> property of <literal>
openjpa.ConnectionFactoryProperties</literal> in
<xref linkend="ref_guide_dbsetup_builtin"/>. Setting a value of 0 will
result in behavior where the thread invoking <methodname>commit</methodname>
will perform the broadcast directly. Defaults to 2.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>RecoveryTimeMillis</literal>: Amount of time to wait in milliseconds
before attempting to reconnect to a peer of the cluster when connectivity to the
peer is lost. Defaults to 15000.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>MaxIdle</literal>: The number of TCP sockets (channels) to keep open
to each peer in the cluster for the transmission of events. Defaults to 2.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>MaxActive</literal>: The maximum allowed number of TCP sockets
(channels) to open simultaneously between each peer in the cluster. Defaults to
2.
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
To configure a factory to use the TCP provider, your properties might look like
the following:
                </para>
                <example id="ref_guide_event_conf_tcpex">
                    <title>
                        TCP Remote Commit Provider Configuration
                    </title>
<programlisting>
&lt;property name="openjpa.RemoteCommitProvider"
    value="tcp(Addresses=10.0.1.10;10.0.1.11;10.0.1.12;10.0.1.13)"/&gt;
</programlisting>
                </example>
            </section>
            <section id="ref_guide_event_conf_common">
                <title>
                    Common Properties
                </title>
                <indexterm zone="ref_guide_event_conf_common">
                    <primary>
                        remote
                    </primary>
                    <secondary>
                        events
                    </secondary>
                    <tertiary>
                        common properties
                    </tertiary>
                </indexterm>
                <para>
In addition to the provider-specific configuration options above, all providers
accept the following plugin properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>TransmitPersistedObjectIds</literal>: Whether remote commit events
will include the object ids of instances persisted in the transaction. By
default only the class names of types persisted in the transaction are sent.
This results in smaller events and more efficient network utilization. If you
have registered your own remote commit listeners, however, you may require the
persisted object ids as well.
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
To transmit persisted object ids in our remote commit events using the JMS
provider, we modify the previous example as follows:
                </para>
            </section>
        </section>
        <section id="ref_guide_event_customization">
            <title>
                Customization
            </title>
            <indexterm zone="ref_guide_event_customization">
                <primary>
                    remote
                </primary>
                <secondary>
                    events
                </secondary>
                <tertiary>
                    customization
                </tertiary>
            </indexterm>
            <para>
You can develop additional mechanisms for remote event notification be by
creating an implementation of the
<ulink url="../javadoc/org/apache/openjpa/event/RemoteCommitProvider.html">
<classname> RemoteCommitProvider</classname></ulink> interface, possibly by
extending the
<ulink url="../javadoc/org/apache/openjpa/event/AbstractRemoteCommitProvider.html">
<classname>AbstractRemoteCommitProvider</classname></ulink> abstract class..
            </para>
        </section>
    </section>
</chapter>
