You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@db.apache.org by an...@apache.org on 2013/02/23 15:12:19 UTC
svn commit: r851672 [4/12] - in /websites/production/db/content/jdo: ./
guides/ releases/
Modified: websites/production/db/content/jdo/glossary.html
==============================================================================
--- websites/production/db/content/jdo/glossary.html (original)
+++ websites/production/db/content/jdo/glossary.html Sat Feb 23 14:12:18 2013
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Jan 20, 2013 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Feb 23, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -11,7 +11,7 @@
@import url("./css/site.css");
</style>
<link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
- <meta name="Date-Revision-yyyymmdd" content="20130120" />
+ <meta name="Date-Revision-yyyymmdd" content="20130223" />
<meta http-equiv="Content-Language" content="en" />
</head>
@@ -209,145 +209,145 @@
</div>
<div id="bodyColumn">
<div id="contentBox">
-
-
- <div class="section"><h2>JDO Glossary<a name="JDO_Glossary"></a></h2>
- <p>
- JDO utilizes some terminology used elsewhere (e.g J2EE) but also introduces some terminology that may be new to people.
- Below is a glossary of some common terms that may be encountered.
- </p>
- <table border="0" class="bodyTable">
- <tr class="a">
- <th>Term</th>
- <th>Definition</th>
- </tr>
- <tr class="b">
- <td><a name="application-identity"></a>application identity</td>
- <td>When the persistence of a class is defined in a MetaData file, the developer can decide that they want
- to control the identity of objects of that class. This is called <b>application identity</b> because
- the application has the control.</td>
- </tr>
- <tr class="a">
- <td><a name="attach-detach"></a>attach/detach</td>
- <td>When you have an object of a class that is associated with a PersistenceManager it is referred to as being
- <i>attached</i>. If you want to stop persistence of that object you can <i>detach</i> the object. This has
- the effect that any changes to the object will not be persisted, and also that the object can be used
- outside transactions.</td>
- </tr>
- <tr class="b">
- <td><a name="datastore-identity"></a>datastore identity</td>
- <td>When the persistence of a class is defined in a MetaData file, the developer can decide that they want the
- identity of objects of that class to be defined by the JDO implementation. This is called <b>datastore
- identity</b></td>
- </tr>
- <tr class="a">
- <td><a name="default-fetch-group"></a>default-fetch-group (DFG)</td>
- <td>When a persisted object is retrieved from the datastore its fields can be retrieved with it, or optionally
- can be retrieved only when needed. If a field is in the <b>default-fetch-group</b> it will be retrieved when
- the object is retrieved. Some field types default to being in the <b>default-fetch-group</b> (e.g primitives,
- wrappers to primtives, java.util.Date) and others (e.g java.util.Set, java.util.List) don't.</td>
- </tr>
- <tr class="b">
- <td><a name="embedded"></a>embedded</td>
- <td>A field can be defined as embedded if it will be stored as a column in the table of its containing object.</td>
- </tr>
- <tr class="a">
- <td><a name="enhancer"></a>enhancer</td>
- <td>JDO 1.0.1 requires the use of a byte-code enhancer that takes the Java compiled classes and "enhances" them,
- adding in information to permit their use in a JDO environment.</td>
- </tr>
- <tr class="b">
- <td><a name="fco"></a>FCO</td>
- <td>JDO defines 2 main groups of Java objects. The first is those objects that have an identity. These are
- termed "First Class Objects" or FCO for short.</td>
- </tr>
- <tr class="a">
- <td><a name="fetchgroup"></a>Fetch Group</td>
- <td>JDO allows a user to define groups of fields that should be retrieved (fetched) at the same time. These are called a "fetch group".
- The principal "fetch group" is the "default fetch group", where JDO has rules for what fields are in this group.
- A user can define their own group, and make this active so that when objects of their type are retrieved, they have control over the fetching process.</td>
- </tr>
- <tr class="b">
- <td><a name="JDOQL"></a>JDOQL</td>
- <td>JDO introduces its own Java-like query language as a datastore independent way of retrieving objects from
- the datastore. This is known as JDOQL (JDO Query Language).</td>
- </tr>
- <tr class="a">
- <td><a name="nondurable-identity"></a>nondurable identity</td>
- <td>Where the objects of a class should be unique in the JVM but not in the datastore (where an RDBMS table doesnt have a PK for example).</td>
- </tr>
- <tr class="b">
- <td><a name="objectid-class"></a>objectid class</td>
- <td>When an object of a class is persisted, it is assigned an object identity. When the developer has chosen to
- use <a href="#application-identity">application identity</a> they can assign a class to represent this
- identity (as a primary key) - this is the object id class.</td>
- </tr>
- <tr class="a">
- <td><a name="optimistic-transaction"></a>optimistic transaction</td>
- <td>When working with long duration transactions it is undesirable to have locking and so the assumption is made
- that the data being updated by the transaction will not be modified by any other transaction during the course
- of the (optimistic) transaction. The data is checked just before commit to confirm integrity that no data has
- been changed. See also <a href="#pessimistic-transaction">pessimistic transaction</a> for the contrary type
- which provides locking.</td>
- </tr>
- <tr class="b">
- <td><a name="persistence-by-reachability"></a>persistence-by-reachability</td>
- <td>When you call makePersistent() on an object, the object will be persisted and, in addition, any
- other objects reachable from that object (via relationships) will also be persisted. This is
- known as <b>persistence-by-reachability</b>. This process is repeated at commit() time when
- it checks whether these reachable objects are still reachable and, if not, removes them from persistence.</td>
- </tr>
- <tr class="a">
- <td><a name="persistence-aware"></a>persistence-aware</td>
- <td>When an class needs to access fields of a persistence capable class directly, it should be enhanced, and is referred to as "Persistence Aware". If a class uses field accessor methods then it doesnt need to become "Persistence Aware".</td>
- </tr>
- <tr class="b">
- <td><a name="persistence-capable"></a>persistence-capable (PC)</td>
- <td>When an class is byte-code enhanced, and has valid MetaData, it is referred to as "Persistence Capable". This
- means that it can be persisted by a JDO implementation.</td>
- </tr>
- <tr class="a">
- <td><a name="persistence-modifier"></a>persistence-modifier</td>
- <td>When defining the persistence of a class, the developer can select particular fields to be persisted, and
- others not depending on their importance in the scope of their application. The <b>persistence-modifier</b>
- defines whether a field is persistent. If this tag is not specified JDO will assign defaults based on the
- field type (primitives, primitive wrappers, java.util.Data, persistence capable fields, etc are by default
- persistent).</td>
- </tr>
- <tr class="b">
- <td><a name="persistent"></a>persistent</td>
- <td>This is an object state where the object is persistent in a datastore.</td>
- </tr>
- <tr class="a">
- <td><a name="pessimistic-transaction"></a>pessimistic transaction</td>
- <td>This is the default transaction type in JDO, and is suitable for shortlived operations where there is no
- other blocking activity during the transaction. When data is accessed other transactions are locked out
- from accessing it until the transaction is complete. See also <a href="#optimistic-transaction">optimistic
- transaction</a> for the contrary type which reduces locking.</td>
- </tr>
- <tr class="b">
- <td><a name="requires-extent"></a>Requires Extent</td>
- <td>When the persistent of a class is defined, the developer decides if the object will be stored with its own
- identity (in its own table for example) or whether it will be stored as part of another object. If it will
- have its own identity, it will require and Extent.</td>
- </tr>
- <tr class="a">
- <td><a name="sco"></a>SCO</td>
- <td>JDO defines 2 main groups of Java objects. The second group is those objects that don't have an identity.
- These are termed "Second Class Objects" or SCO for short.</td>
- </tr>
- <tr class="b">
- <td><a name="SQL"></a>SQL</td>
- <td>JDO allows use of multiple query languages. One of these, for use with RDBMS datastores, is SQL.</td>
- </tr>
- <tr class="a">
- <td><a name="transient"></a>transient</td>
- <td>This is an object state where the object is not persistent.</td>
- </tr>
- </table>
- </div>
-
-
+
+
+ <div class="section"><h2>JDO Glossary<a name="JDO_Glossary"></a></h2>
+ <p>
+ JDO utilizes some terminology used elsewhere (e.g J2EE) but also introduces some terminology that may be new to people.
+ Below is a glossary of some common terms that may be encountered.
+ </p>
+ <table border="0" class="bodyTable">
+ <tr class="a">
+ <th>Term</th>
+ <th>Definition</th>
+ </tr>
+ <tr class="b">
+ <td><a name="application-identity"></a>application identity</td>
+ <td>When the persistence of a class is defined in a MetaData file, the developer can decide that they want
+ to control the identity of objects of that class. This is called <b>application identity</b> because
+ the application has the control.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="attach-detach"></a>attach/detach</td>
+ <td>When you have an object of a class that is associated with a PersistenceManager it is referred to as being
+ <i>attached</i>. If you want to stop persistence of that object you can <i>detach</i> the object. This has
+ the effect that any changes to the object will not be persisted, and also that the object can be used
+ outside transactions.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="datastore-identity"></a>datastore identity</td>
+ <td>When the persistence of a class is defined in a MetaData file, the developer can decide that they want the
+ identity of objects of that class to be defined by the JDO implementation. This is called <b>datastore
+ identity</b></td>
+ </tr>
+ <tr class="a">
+ <td><a name="default-fetch-group"></a>default-fetch-group (DFG)</td>
+ <td>When a persisted object is retrieved from the datastore its fields can be retrieved with it, or optionally
+ can be retrieved only when needed. If a field is in the <b>default-fetch-group</b> it will be retrieved when
+ the object is retrieved. Some field types default to being in the <b>default-fetch-group</b> (e.g primitives,
+ wrappers to primtives, java.util.Date) and others (e.g java.util.Set, java.util.List) don't.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="embedded"></a>embedded</td>
+ <td>A field can be defined as embedded if it will be stored as a column in the table of its containing object.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="enhancer"></a>enhancer</td>
+ <td>JDO 1.0.1 requires the use of a byte-code enhancer that takes the Java compiled classes and "enhances" them,
+ adding in information to permit their use in a JDO environment.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="fco"></a>FCO</td>
+ <td>JDO defines 2 main groups of Java objects. The first is those objects that have an identity. These are
+ termed "First Class Objects" or FCO for short.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="fetchgroup"></a>Fetch Group</td>
+ <td>JDO allows a user to define groups of fields that should be retrieved (fetched) at the same time. These are called a "fetch group".
+ The principal "fetch group" is the "default fetch group", where JDO has rules for what fields are in this group.
+ A user can define their own group, and make this active so that when objects of their type are retrieved, they have control over the fetching process.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="JDOQL"></a>JDOQL</td>
+ <td>JDO introduces its own Java-like query language as a datastore independent way of retrieving objects from
+ the datastore. This is known as JDOQL (JDO Query Language).</td>
+ </tr>
+ <tr class="a">
+ <td><a name="nondurable-identity"></a>nondurable identity</td>
+ <td>Where the objects of a class should be unique in the JVM but not in the datastore (where an RDBMS table doesnt have a PK for example).</td>
+ </tr>
+ <tr class="b">
+ <td><a name="objectid-class"></a>objectid class</td>
+ <td>When an object of a class is persisted, it is assigned an object identity. When the developer has chosen to
+ use <a href="#application-identity">application identity</a> they can assign a class to represent this
+ identity (as a primary key) - this is the object id class.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="optimistic-transaction"></a>optimistic transaction</td>
+ <td>When working with long duration transactions it is undesirable to have locking and so the assumption is made
+ that the data being updated by the transaction will not be modified by any other transaction during the course
+ of the (optimistic) transaction. The data is checked just before commit to confirm integrity that no data has
+ been changed. See also <a href="#pessimistic-transaction">pessimistic transaction</a> for the contrary type
+ which provides locking.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="persistence-by-reachability"></a>persistence-by-reachability</td>
+ <td>When you call makePersistent() on an object, the object will be persisted and, in addition, any
+ other objects reachable from that object (via relationships) will also be persisted. This is
+ known as <b>persistence-by-reachability</b>. This process is repeated at commit() time when
+ it checks whether these reachable objects are still reachable and, if not, removes them from persistence.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="persistence-aware"></a>persistence-aware</td>
+ <td>When an class needs to access fields of a persistence capable class directly, it should be enhanced, and is referred to as "Persistence Aware". If a class uses field accessor methods then it doesnt need to become "Persistence Aware".</td>
+ </tr>
+ <tr class="b">
+ <td><a name="persistence-capable"></a>persistence-capable (PC)</td>
+ <td>When an class is byte-code enhanced, and has valid MetaData, it is referred to as "Persistence Capable". This
+ means that it can be persisted by a JDO implementation.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="persistence-modifier"></a>persistence-modifier</td>
+ <td>When defining the persistence of a class, the developer can select particular fields to be persisted, and
+ others not depending on their importance in the scope of their application. The <b>persistence-modifier</b>
+ defines whether a field is persistent. If this tag is not specified JDO will assign defaults based on the
+ field type (primitives, primitive wrappers, java.util.Data, persistence capable fields, etc are by default
+ persistent).</td>
+ </tr>
+ <tr class="b">
+ <td><a name="persistent"></a>persistent</td>
+ <td>This is an object state where the object is persistent in a datastore.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="pessimistic-transaction"></a>pessimistic transaction</td>
+ <td>This is the default transaction type in JDO, and is suitable for shortlived operations where there is no
+ other blocking activity during the transaction. When data is accessed other transactions are locked out
+ from accessing it until the transaction is complete. See also <a href="#optimistic-transaction">optimistic
+ transaction</a> for the contrary type which reduces locking.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="requires-extent"></a>Requires Extent</td>
+ <td>When the persistent of a class is defined, the developer decides if the object will be stored with its own
+ identity (in its own table for example) or whether it will be stored as part of another object. If it will
+ have its own identity, it will require and Extent.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="sco"></a>SCO</td>
+ <td>JDO defines 2 main groups of Java objects. The second group is those objects that don't have an identity.
+ These are termed "Second Class Objects" or SCO for short.</td>
+ </tr>
+ <tr class="b">
+ <td><a name="SQL"></a>SQL</td>
+ <td>JDO allows use of multiple query languages. One of these, for use with RDBMS datastores, is SQL.</td>
+ </tr>
+ <tr class="a">
+ <td><a name="transient"></a>transient</td>
+ <td>This is an object state where the object is not persistent.</td>
+ </tr>
+ </table>
+ </div>
+
+
</div>
</div>
Modified: websites/production/db/content/jdo/guides.html
==============================================================================
--- websites/production/db/content/jdo/guides.html (original)
+++ websites/production/db/content/jdo/guides.html Sat Feb 23 14:12:18 2013
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Jan 20, 2013 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Feb 23, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -11,7 +11,7 @@
@import url("./css/site.css");
</style>
<link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
- <meta name="Date-Revision-yyyymmdd" content="20130120" />
+ <meta name="Date-Revision-yyyymmdd" content="20130223" />
<meta http-equiv="Content-Language" content="en" />
</head>
@@ -217,14 +217,14 @@
</div>
<div id="bodyColumn">
<div id="contentBox">
-
-
- <div class="section"><h2>Guides<a name="Guides"></a></h2>
- <p>
- This section provides guides to the process of introducing JDO into your application.
- </p>
- </div>
-
+
+
+ <div class="section"><h2>Guides<a name="Guides"></a></h2>
+ <p>
+ This section provides guides to the process of introducing JDO into your application.
+ </p>
+ </div>
+
</div>
</div>
Modified: websites/production/db/content/jdo/guides/maven-jdo.html
==============================================================================
--- websites/production/db/content/jdo/guides/maven-jdo.html (original)
+++ websites/production/db/content/jdo/guides/maven-jdo.html Sat Feb 23 14:12:18 2013
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Jan 20, 2013 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Feb 23, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -12,7 +12,7 @@
</style>
<link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
<meta name="author" content="Andy Jefferson" />
- <meta name="Date-Revision-yyyymmdd" content="20130120" />
+ <meta name="Date-Revision-yyyymmdd" content="20130223" />
<meta http-equiv="Content-Language" content="en" />
</head>
@@ -218,230 +218,230 @@
</div>
<div id="bodyColumn">
<div id="contentBox">
- <!-- 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. -->
-
- <div class="section"><h2>JDO Meets Maven<a name="JDO_Meets_Maven"></a></h2>
- <p>
- By <a class="externalLink" href="mailto:andy@jpox.org">Andy Jefferson</a>
- </p>
-
- <div class="section"><h3>Background - Maven<a name="Background_-_Maven"></a></h3>
- <p><a class="externalLink" href="http://maven.apache.org" target="_top">Maven</a> is a tool for managing
- and building projects providing an alternative to the accepted
- <a class="externalLink" href="http://ant.apache.org" target="_top">Ant</a> build process. Maven is
- almost totally plugin-driven, and provides plugins for many common tasks (for
- example: building EJB components such as WARs and EARs, generating documentation,
- running unit tests) and related software (for example:
- <a class="externalLink" href="http://checkstyle.sf.net" target="_top">Checkstyle</a>,
- <a class="externalLink" href="http://pmd.sf.net" target="_top">PMD</a>,
- <a class="externalLink" href="http://www.thecortex.net/clover" target="_top">Clover</a>,
- <a class="externalLink" href="http://www.jcoverage.com" target="_top">JCoverage</a>).</p>
-
- <p>Maven builds on top of the definition of a project. It formalises project
- definitions such as dependencies (and hence classpaths), versions, source
- repositories, mailing lists, etc. This project definition provides placeholders
- for all of the typical metrics important to a project. It formalises the location
- of the source tree for a project and of the unit tests. This rigorous structure
- allows Maven's plugins to provide generalised functionality such as building the
- source tree, running the unit tests, generating javadoc, code analysis, etc.</p>
-
- <p>Maven operates using the concept of <b>goals</b>. Each <b>goal</b> can have "pre"
- and "post" goals. This structure allows for chaining of operations, with one
- operation firing off another, and another to achieve some overall end result.</p>
- </div>
-
- <div class="section"><h3>Integrating JDO with Maven<a name="Integrating_JDO_with_Maven"></a></h3>
- <p>In developing a JDO system, the developer has many concerns - not least the likes
- of object-relationship mapping - and should, as far as possible, be spared the
- "administrative" burdens associated with building the system. Maven's
- formalization of the source tree structure and chaining of actions helps achieve
- this objective by saving the developer from having to explicitly define tasks
- like JDO class bytecode-enhancement. Thus, rather than explicitly invoking a
- bytecode-enhancement task in the system build, Maven is able to provide this
- activity by way of a plugin, which could even be automatically chained off the
- existing Java compilation task.</p>
- </div>
-
- <div class="section"><h3>Anatomy of a Maven JDO plugin<a name="Anatomy_of_a_Maven_JDO_plugin"></a></h3>
- <p>A Maven plugin can use a variety of languages, however most commonly utilises
- <a class="externalLink" href="http://jakarta.apache.org/commons/jelly/" target="_top">Jelly scripting language</a>, at least for definition of the plugin's goals.
- A Maven plugin typically requires a minimum of 3 files ...
- </p>
- <ul>
- <li><i>project.xml</i> (defining the dependencies of the plugin on other software)</li>
- <li><i>plugin.jelly</i> (providing the <b>goals</b> definition)</li>
- <li><i>plugin.properties</i> (properties available for configuration)</li>
- </ul>
- <p>
- Maven plugins can use a variety of other scripting and templating utilities, however
- these are not currently required for the JDO plugins implemented.</p>
-
- <p>Plugins have now been developed for
- <a class="externalLink" href="http://www.jpox.org" target="_blank">JPOX</a>, and
- <a class="externalLink" href="http://tjdo.sf.net" target="_blank">TJDO</a>, though can readily be
- developed for any JDO implementation. The best way of understanding the process
- involved is by analysing a Maven JDO plugin - in this case, the JPOX plugin. Here
- the <i>plugin.jelly</i> file is as follows:</p>
- <div class="source"><pre>
-<goal name="jpox"
- description="Enhance classes for use with Java Persistent Objects (JPOX)"
- prereqs="jpox:enhance"/>
-
-<goal name="jpox:init">
- ... snip ... code to generate jpoxClasspath and jpoxMetaDataFiles
-</goal>
-
-<goal name="jpox:enhance"
- description="Perform the enhancement of classes for use with JPOX"
- prereqs="jpox:init">
- <echo>JDO-enhancing classes for Java Persistent Objects</echo>
-
- <ant:java dir="${maven.build.dest}"
- classname="org.jpox.enhance.SunReferenceEnhancer"
- failonerror="true"
- fork="true">
- <classpath refid="jpoxClasspath"/>
- <arg line="${jpoxMetaDataFiles}"/>
- </ant:java>
-
- <echo>Classes are now JDO-enhanced for Java Persistent Objects</echo>
-</goal></pre></div>
-
- <p>It can be seen that the plugin has several goals, the default one being to run the
- enhance goal. Since this goal requires (as a prerequisite) the running of the init
- goal, they are chained.</p>
-
- <p>Some JDO implementations (for example JPOX, or Kodo) allow the generation of the
- JDO database schema prior to running the JDO-enabled application. This is catered
- for with additional <b>goal(s)</b>. For JPOX again, this is handled as follows </p>
-
- <div class="source"><pre>
-<goal name="jpox:schema-create"
- prereqs="jpox:init">
- <echo>Creating tables for Persistence Capability</echo>
-
- <ant:java dir="${maven.build.dest}"
- classname="org.jpox.SchemaTool"
- failonerror="true"
- fork="true">
- <classpath refid="jpoxClasspath"/>
- <sysproperty key="database.driver" value="${maven.jpox.database.driver}"/>
- <sysproperty key="database.url" value="${maven.jpox.database.url}"/>
- <sysproperty key="database.user" value="${maven.jpox.database.user}"/>
- <sysproperty key="database.password" value="${maven.jpox.database.password}"/>
- <arg line="-create"/>
- <arg line="${jpoxMetaDataFiles}"/>
- </ant:java>
-</goal>
-
-<goal name="jpox:schema-delete"
- prereqs="jpox:init">
- <echo>Deleting tables for Persistence Capability</echo>
-
- <ant:java dir="${maven.build.dest}"
- classname="org.jpox.SchemaTool"
- failonerror="true"
- fork="true">
- <classpath refid="jpoxClasspath"/>
- <sysproperty key="database.driver" value="${maven.jpox.database.driver}"/>
- <sysproperty key="database.url" value="${maven.jpox.database.url}"/>
- <sysproperty key="database.user" value="${maven.jpox.database.user}"/>
- <sysproperty key="database.password" value="${maven.jpox.database.password}"/>
- <arg line="-delete"/>
- <arg line="${jpoxMetaDataFiles}"/>
- </ant:java>
- </goal></pre></div>
-
- <p>Hence there are 2 additional <b>goals</b>, one for creating all tables required by
- JPOX, and a second for deleting these tables. Clearly this has more relevance to
- <b>schema generation</b> than for <b>existing schemas</b></p>
- <p>Where a JDO implementation allows a particular configuration operation, a Maven
- plugin <b>goal</b> can be added to deliver this functionality to the Maven user.
- As a result, individual implementations can add as many goals as they wish to
- fulfil their users requirements.</p>
- </div>
-
- <div class="section"><h3>Using a Maven JDO plugin<a name="Using_a_Maven_JDO_plugin"></a></h3>
- <p>Using the JPOX Maven plugin as an example, the basic enhancement process could be
- invoked as follows:</p>
- <div class="source"><pre>maven jpox:enhance</pre></div>
- <p>The problem with this is that it burdens the developer with having to explicitly
- invoke the enhancement process. As an alternative it is possible to integrate
- bytecode enhancement as an automatic step chained off the basic Java compilation
- process. This is achieved by including the following in the project
- <i>maven.xml</i> file:</p>
- <div class="source"><pre>
-<postGoal name="java:compile">
- <attainGoal name="jpox:enhance"/>
-</postGoal></pre></div>
-
- <p>So wherever the <b>java:compile</b> goal is called, as a postGoal it runs the
- <b>jpox:enhance</b> goal, leaving the developer with JDO enabled classes ready to
- run.</p>
-
- <p>Maven's plugins can be made configurable using properties specified in the
- <i>plugin.properties</i> file. For the JPOX plugin, the following properties can
- be set
- </p>
- <ul>
- <li><b>maven.jpox.jdo.fileset.dir</b> : Directory containing the JDO MetaData files</li>
- <li><b>maven.jpox.jdo.fileset.include</b> : Fileset include path for JDO MetaData files (default: **/*.jdo)</li>
- <li><b>maven.jpox.jdo.fileset.exclude</b> : Fileset exclude path for JDO MetaData files</li>
- <li><b>maven.jpox.database.driver</b> : Driver for use in connecting to datastore</li>
- <li><b>maven.jpox.database.url</b> : URL defining the datastore</li>
- <li><b>maven.jpox.database.user</b> : Login name for the datastore</li>
- <li><b>maven.jpox.database.password</b> : Password for the datastore</li>
- </ul>
- <p>
- For example, the following properties could be included in the Maven <i>project.properties</i> file
- </p>
-
- <div class="source"><pre>
-maven.jpox.jdo.fileset.dir=${basedir}/jdo
-maven.jpox.jdo.fileset.include=**/*.jdo
-maven.jpox.database.driver=com.mysql.jdbc.Driver
-maven.jpox.database.url=jdbc:mysql://localhost/jpox
-maven.jpox.database.user={my_username}
-maven.jpox.database.password={my_password}</pre></div>
-
- <p>This would define the JDO MetaData files residing under the "jdo" project directory, with names matching *.jdo and would be used when all JDO plugin <b>goals</b> (such as <b>enhance</b>) are called. The 4 <b>database</b> properties are used in the <b>schema-create/schema-delete</b> goals (as seen in the <i>plugin.jelly</i> file earlier).</p>
-
- <p>Invocation of the JPOX schema-create optional goal could be achieved as follows:</p>
- <div class="source"><pre>maven jpox:schema-create</pre></div>
- </div>
-
- <div class="section"><h3>Conclusion<a name="Conclusion"></a></h3>
- <p>This article has attempted to give a feel for both the operation of Maven, and how
- to integrate JDO into a Maven project. The various Maven JDO plugins can be
- downloaded as follows
- </p>
- <ul>
- <li>JPOX (1.1.8) - <a class="externalLink" href="http://www.jpox.org/" target="_blank">Java Persistent Objects (JPOX) project</a></li>
- <li>TJDO (2.0-beta3) - <a class="externalLink" href="http://www.ibiblio.org/maven/maven/plugins/" target="_top">Ibiblio site</a></li>
- </ul>
- </div>
-
- <div class="section"><h3>About the author<a name="About_the_author"></a></h3>
- <p>Andy Jefferson is an independent software consultant who has been working in the
- IT industry for more than 15 years, primarily in the United Kingdom. He is an
- active participator in several OpenSource projects, primarily JPOX, and
- Apache JDO, and a member of the JSR243 (JDO2) Expert Group.</p>
- </div>
- </div>
-
+ <!-- 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. -->
+
+ <div class="section"><h2>JDO Meets Maven<a name="JDO_Meets_Maven"></a></h2>
+ <p>
+ By <a class="externalLink" href="mailto:andy@jpox.org">Andy Jefferson</a>
+ </p>
+
+ <div class="section"><h3>Background - Maven<a name="Background_-_Maven"></a></h3>
+ <p><a class="externalLink" href="http://maven.apache.org" target="_top">Maven</a> is a tool for managing
+ and building projects providing an alternative to the accepted
+ <a class="externalLink" href="http://ant.apache.org" target="_top">Ant</a> build process. Maven is
+ almost totally plugin-driven, and provides plugins for many common tasks (for
+ example: building EJB components such as WARs and EARs, generating documentation,
+ running unit tests) and related software (for example:
+ <a class="externalLink" href="http://checkstyle.sf.net" target="_top">Checkstyle</a>,
+ <a class="externalLink" href="http://pmd.sf.net" target="_top">PMD</a>,
+ <a class="externalLink" href="http://www.thecortex.net/clover" target="_top">Clover</a>,
+ <a class="externalLink" href="http://www.jcoverage.com" target="_top">JCoverage</a>).</p>
+
+ <p>Maven builds on top of the definition of a project. It formalises project
+ definitions such as dependencies (and hence classpaths), versions, source
+ repositories, mailing lists, etc. This project definition provides placeholders
+ for all of the typical metrics important to a project. It formalises the location
+ of the source tree for a project and of the unit tests. This rigorous structure
+ allows Maven's plugins to provide generalised functionality such as building the
+ source tree, running the unit tests, generating javadoc, code analysis, etc.</p>
+
+ <p>Maven operates using the concept of <b>goals</b>. Each <b>goal</b> can have "pre"
+ and "post" goals. This structure allows for chaining of operations, with one
+ operation firing off another, and another to achieve some overall end result.</p>
+ </div>
+
+ <div class="section"><h3>Integrating JDO with Maven<a name="Integrating_JDO_with_Maven"></a></h3>
+ <p>In developing a JDO system, the developer has many concerns - not least the likes
+ of object-relationship mapping - and should, as far as possible, be spared the
+ "administrative" burdens associated with building the system. Maven's
+ formalization of the source tree structure and chaining of actions helps achieve
+ this objective by saving the developer from having to explicitly define tasks
+ like JDO class bytecode-enhancement. Thus, rather than explicitly invoking a
+ bytecode-enhancement task in the system build, Maven is able to provide this
+ activity by way of a plugin, which could even be automatically chained off the
+ existing Java compilation task.</p>
+ </div>
+
+ <div class="section"><h3>Anatomy of a Maven JDO plugin<a name="Anatomy_of_a_Maven_JDO_plugin"></a></h3>
+ <p>A Maven plugin can use a variety of languages, however most commonly utilises
+ <a class="externalLink" href="http://jakarta.apache.org/commons/jelly/" target="_top">Jelly scripting language</a>, at least for definition of the plugin's goals.
+ A Maven plugin typically requires a minimum of 3 files ...
+ </p>
+ <ul>
+ <li><i>project.xml</i> (defining the dependencies of the plugin on other software)</li>
+ <li><i>plugin.jelly</i> (providing the <b>goals</b> definition)</li>
+ <li><i>plugin.properties</i> (properties available for configuration)</li>
+ </ul>
+ <p>
+ Maven plugins can use a variety of other scripting and templating utilities, however
+ these are not currently required for the JDO plugins implemented.</p>
+
+ <p>Plugins have now been developed for
+ <a class="externalLink" href="http://www.jpox.org" target="_blank">JPOX</a>, and
+ <a class="externalLink" href="http://tjdo.sf.net" target="_blank">TJDO</a>, though can readily be
+ developed for any JDO implementation. The best way of understanding the process
+ involved is by analysing a Maven JDO plugin - in this case, the JPOX plugin. Here
+ the <i>plugin.jelly</i> file is as follows:</p>
+ <div class="source"><pre>
+<goal name="jpox"
+ description="Enhance classes for use with Java Persistent Objects (JPOX)"
+ prereqs="jpox:enhance"/>
+
+<goal name="jpox:init">
+ ... snip ... code to generate jpoxClasspath and jpoxMetaDataFiles
+</goal>
+
+<goal name="jpox:enhance"
+ description="Perform the enhancement of classes for use with JPOX"
+ prereqs="jpox:init">
+ <echo>JDO-enhancing classes for Java Persistent Objects</echo>
+
+ <ant:java dir="${maven.build.dest}"
+ classname="org.jpox.enhance.SunReferenceEnhancer"
+ failonerror="true"
+ fork="true">
+ <classpath refid="jpoxClasspath"/>
+ <arg line="${jpoxMetaDataFiles}"/>
+ </ant:java>
+
+ <echo>Classes are now JDO-enhanced for Java Persistent Objects</echo>
+</goal></pre></div>
+
+ <p>It can be seen that the plugin has several goals, the default one being to run the
+ enhance goal. Since this goal requires (as a prerequisite) the running of the init
+ goal, they are chained.</p>
+
+ <p>Some JDO implementations (for example JPOX, or Kodo) allow the generation of the
+ JDO database schema prior to running the JDO-enabled application. This is catered
+ for with additional <b>goal(s)</b>. For JPOX again, this is handled as follows </p>
+
+ <div class="source"><pre>
+<goal name="jpox:schema-create"
+ prereqs="jpox:init">
+ <echo>Creating tables for Persistence Capability</echo>
+
+ <ant:java dir="${maven.build.dest}"
+ classname="org.jpox.SchemaTool"
+ failonerror="true"
+ fork="true">
+ <classpath refid="jpoxClasspath"/>
+ <sysproperty key="database.driver" value="${maven.jpox.database.driver}"/>
+ <sysproperty key="database.url" value="${maven.jpox.database.url}"/>
+ <sysproperty key="database.user" value="${maven.jpox.database.user}"/>
+ <sysproperty key="database.password" value="${maven.jpox.database.password}"/>
+ <arg line="-create"/>
+ <arg line="${jpoxMetaDataFiles}"/>
+ </ant:java>
+</goal>
+
+<goal name="jpox:schema-delete"
+ prereqs="jpox:init">
+ <echo>Deleting tables for Persistence Capability</echo>
+
+ <ant:java dir="${maven.build.dest}"
+ classname="org.jpox.SchemaTool"
+ failonerror="true"
+ fork="true">
+ <classpath refid="jpoxClasspath"/>
+ <sysproperty key="database.driver" value="${maven.jpox.database.driver}"/>
+ <sysproperty key="database.url" value="${maven.jpox.database.url}"/>
+ <sysproperty key="database.user" value="${maven.jpox.database.user}"/>
+ <sysproperty key="database.password" value="${maven.jpox.database.password}"/>
+ <arg line="-delete"/>
+ <arg line="${jpoxMetaDataFiles}"/>
+ </ant:java>
+ </goal></pre></div>
+
+ <p>Hence there are 2 additional <b>goals</b>, one for creating all tables required by
+ JPOX, and a second for deleting these tables. Clearly this has more relevance to
+ <b>schema generation</b> than for <b>existing schemas</b></p>
+ <p>Where a JDO implementation allows a particular configuration operation, a Maven
+ plugin <b>goal</b> can be added to deliver this functionality to the Maven user.
+ As a result, individual implementations can add as many goals as they wish to
+ fulfil their users requirements.</p>
+ </div>
+
+ <div class="section"><h3>Using a Maven JDO plugin<a name="Using_a_Maven_JDO_plugin"></a></h3>
+ <p>Using the JPOX Maven plugin as an example, the basic enhancement process could be
+ invoked as follows:</p>
+ <div class="source"><pre>maven jpox:enhance</pre></div>
+ <p>The problem with this is that it burdens the developer with having to explicitly
+ invoke the enhancement process. As an alternative it is possible to integrate
+ bytecode enhancement as an automatic step chained off the basic Java compilation
+ process. This is achieved by including the following in the project
+ <i>maven.xml</i> file:</p>
+ <div class="source"><pre>
+<postGoal name="java:compile">
+ <attainGoal name="jpox:enhance"/>
+</postGoal></pre></div>
+
+ <p>So wherever the <b>java:compile</b> goal is called, as a postGoal it runs the
+ <b>jpox:enhance</b> goal, leaving the developer with JDO enabled classes ready to
+ run.</p>
+
+ <p>Maven's plugins can be made configurable using properties specified in the
+ <i>plugin.properties</i> file. For the JPOX plugin, the following properties can
+ be set
+ </p>
+ <ul>
+ <li><b>maven.jpox.jdo.fileset.dir</b> : Directory containing the JDO MetaData files</li>
+ <li><b>maven.jpox.jdo.fileset.include</b> : Fileset include path for JDO MetaData files (default: **/*.jdo)</li>
+ <li><b>maven.jpox.jdo.fileset.exclude</b> : Fileset exclude path for JDO MetaData files</li>
+ <li><b>maven.jpox.database.driver</b> : Driver for use in connecting to datastore</li>
+ <li><b>maven.jpox.database.url</b> : URL defining the datastore</li>
+ <li><b>maven.jpox.database.user</b> : Login name for the datastore</li>
+ <li><b>maven.jpox.database.password</b> : Password for the datastore</li>
+ </ul>
+ <p>
+ For example, the following properties could be included in the Maven <i>project.properties</i> file
+ </p>
+
+ <div class="source"><pre>
+maven.jpox.jdo.fileset.dir=${basedir}/jdo
+maven.jpox.jdo.fileset.include=**/*.jdo
+maven.jpox.database.driver=com.mysql.jdbc.Driver
+maven.jpox.database.url=jdbc:mysql://localhost/jpox
+maven.jpox.database.user={my_username}
+maven.jpox.database.password={my_password}</pre></div>
+
+ <p>This would define the JDO MetaData files residing under the "jdo" project directory, with names matching *.jdo and would be used when all JDO plugin <b>goals</b> (such as <b>enhance</b>) are called. The 4 <b>database</b> properties are used in the <b>schema-create/schema-delete</b> goals (as seen in the <i>plugin.jelly</i> file earlier).</p>
+
+ <p>Invocation of the JPOX schema-create optional goal could be achieved as follows:</p>
+ <div class="source"><pre>maven jpox:schema-create</pre></div>
+ </div>
+
+ <div class="section"><h3>Conclusion<a name="Conclusion"></a></h3>
+ <p>This article has attempted to give a feel for both the operation of Maven, and how
+ to integrate JDO into a Maven project. The various Maven JDO plugins can be
+ downloaded as follows
+ </p>
+ <ul>
+ <li>JPOX (1.1.8) - <a class="externalLink" href="http://www.jpox.org/" target="_blank">Java Persistent Objects (JPOX) project</a></li>
+ <li>TJDO (2.0-beta3) - <a class="externalLink" href="http://www.ibiblio.org/maven/maven/plugins/" target="_top">Ibiblio site</a></li>
+ </ul>
+ </div>
+
+ <div class="section"><h3>About the author<a name="About_the_author"></a></h3>
+ <p>Andy Jefferson is an independent software consultant who has been working in the
+ IT industry for more than 15 years, primarily in the United Kingdom. He is an
+ active participator in several OpenSource projects, primarily JPOX, and
+ Apache JDO, and a member of the JSR243 (JDO2) Expert Group.</p>
+ </div>
+ </div>
+
</div>
</div>
Modified: websites/production/db/content/jdo/guides/replication.html
==============================================================================
--- websites/production/db/content/jdo/guides/replication.html (original)
+++ websites/production/db/content/jdo/guides/replication.html Sat Feb 23 14:12:18 2013
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Jan 20, 2013 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Feb 23, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -11,7 +11,7 @@
@import url("../css/site.css");
</style>
<link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
- <meta name="Date-Revision-yyyymmdd" content="20130120" />
+ <meta name="Date-Revision-yyyymmdd" content="20130223" />
<meta http-equiv="Content-Language" content="en" />
</head>
@@ -217,148 +217,148 @@
</div>
<div id="bodyColumn">
<div id="contentBox">
-
-
- <div class="section"><h2>Data Replication<a name="Data_Replication"></a></h2>
- <p>
- There are times when you need to replicate data between datastores. In many cases datastores themselves provide a means of doing this, however if you want to avoid using datastore-specific functionality you can utilise JDO to perform this task.
- JDO2 allows replication by use of detach/attach functionality.
- We demonstrate this with an example
- </p>
- <div class="source"><pre>
-public class ElementHolder
-{
- long id;
- private Set elements = new HashSet();
-
- ...
-}
-
-public class Element
-{
- String name;
-
- ...
-}
-
-public class SubElement extends Element
-{
- double value;
-
- ...
-}</pre></div>
- <p>
- so we have a 1-N unidirectional (Set) relation, and we define the metadata like this
- </p>
- <div class="source"><pre>
-<jdo>
- <package name="org.apache.jdo.test">
- <class name="ElementHolder" identity-type="application" detachable="true">
- <inheritance strategy="new-table"/>
- <field name="id" primary-key="true"/>
- <field name="elements" persistence-modifier="persistent">
- <collection element-type="Element"/>
- <join/>
- </field>
- </class>
-
- <class name="Element" identity-type="application" detachable="true">
- <inheritance strategy="new-table"/>
- <field name="name" primary-key="true"/>
- </class>
-
- <class name="SubElement">
- <inheritance strategy="new-table"/>
- <field name="value"/>
- </class>
- </package>
-</jdo></pre></div>
- <p>
- and so in our application we create some objects in <i>datastore1</i>, like this
- </p>
- <div class="source"><pre>
-PersistenceManagerFactory pmf1 = JDOHelper.getPersistenceManagerFactory("jdo.1.properties");
-PersistenceManager pm1 = pmf1.getPersistenceManager();
-Transaction tx1 = pm1.currentTransaction();
-Object holderId = null;
-try
-{
- tx1.begin();
-
- ElementHolder holder = new ElementHolder(101);
- holder.addElement(new Element("First Element"));
- holder.addElement(new Element("Second Element"));
- holder.addElement(new SubElement("First Inherited Element"));
- holder.addElement(new SubElement("Second Inherited Element"));
- pm1.makePersistent(holder);
-
- tx1.commit();
- holderId = JDOHelper.getObjectId(holder);
-}
-finally
-{
- if (tx1.isActive())
- {
- tx1.rollback();
- }
- pm1.close();
-}</pre></div>
- <p>
- and now we want to replicate these objects into <i>datastore2</i>, so we detach them from <i>datastore1</i>
- and attach them to <i>datastore2</i>, like this
- </p>
- <div class="source"><pre>
-// Detach the objects from "datastore1"
-ElementHolder detachedHolder = null;
-pm1 = pmf1.getPersistenceManager();
-tx1 = pm1.currentTransaction();
-try
-{
- pm1.getFetchPlan().setGroups(new String[] {FetchPlan.DEFAULT, FetchPlan.ALL});
- pm1.getFetchPlan().setMaxFetchDepth(-1);
-
- tx1.begin();
-
- ElementHolder holder = (ElementHolder) pm1.getObjectById(holderID);
- detachedHolder = (ElementHolder) pm1.detachCopy(holder);
-
- tx1.commit();
-}
-finally
-{
- if (tx1.isActive())
- {
- tx1.rollback();
- }
- pm1.close();
-}
-
-// Attach the objects to datastore2
-PersistenceManagerFactory pmf2 = JDOHelper.getPersistenceManagerFactory("jdo.2.properties");
-PersistenceManager pm2 = pmf2.getPersistenceManager();
-Transaction tx2 = pm2.currentTransaction();
-try
-{
- tx2.begin();
-
- pm2.makePersistent(detachedHolder);
-
- tx2.commit();
-}
-finally
-{
- if (tx2.isActive())
- {
- tx2.rollback();
- }
- pm2.close();
-}</pre></div>
- <p>
- These objects are now replicated into <i>datastore2</i>.
- Clearly you can extend this basic idea and replicate large amounts of data.
- </p>
- </div>
-
+
+
+ <div class="section"><h2>Data Replication<a name="Data_Replication"></a></h2>
+ <p>
+ There are times when you need to replicate data between datastores. In many cases datastores themselves provide a means of doing this, however if you want to avoid using datastore-specific functionality you can utilise JDO to perform this task.
+ JDO2 allows replication by use of detach/attach functionality.
+ We demonstrate this with an example
+ </p>
+ <div class="source"><pre>
+public class ElementHolder
+{
+ long id;
+ private Set elements = new HashSet();
+
+ ...
+}
+
+public class Element
+{
+ String name;
+
+ ...
+}
+
+public class SubElement extends Element
+{
+ double value;
+
+ ...
+}</pre></div>
+ <p>
+ so we have a 1-N unidirectional (Set) relation, and we define the metadata like this
+ </p>
+ <div class="source"><pre>
+<jdo>
+ <package name="org.apache.jdo.test">
+ <class name="ElementHolder" identity-type="application" detachable="true">
+ <inheritance strategy="new-table"/>
+ <field name="id" primary-key="true"/>
+ <field name="elements" persistence-modifier="persistent">
+ <collection element-type="Element"/>
+ <join/>
+ </field>
+ </class>
+
+ <class name="Element" identity-type="application" detachable="true">
+ <inheritance strategy="new-table"/>
+ <field name="name" primary-key="true"/>
+ </class>
+
+ <class name="SubElement">
+ <inheritance strategy="new-table"/>
+ <field name="value"/>
+ </class>
+ </package>
+</jdo></pre></div>
+ <p>
+ and so in our application we create some objects in <i>datastore1</i>, like this
+ </p>
+ <div class="source"><pre>
+PersistenceManagerFactory pmf1 = JDOHelper.getPersistenceManagerFactory("jdo.1.properties");
+PersistenceManager pm1 = pmf1.getPersistenceManager();
+Transaction tx1 = pm1.currentTransaction();
+Object holderId = null;
+try
+{
+ tx1.begin();
+
+ ElementHolder holder = new ElementHolder(101);
+ holder.addElement(new Element("First Element"));
+ holder.addElement(new Element("Second Element"));
+ holder.addElement(new SubElement("First Inherited Element"));
+ holder.addElement(new SubElement("Second Inherited Element"));
+ pm1.makePersistent(holder);
+
+ tx1.commit();
+ holderId = JDOHelper.getObjectId(holder);
+}
+finally
+{
+ if (tx1.isActive())
+ {
+ tx1.rollback();
+ }
+ pm1.close();
+}</pre></div>
+ <p>
+ and now we want to replicate these objects into <i>datastore2</i>, so we detach them from <i>datastore1</i>
+ and attach them to <i>datastore2</i>, like this
+ </p>
+ <div class="source"><pre>
+// Detach the objects from "datastore1"
+ElementHolder detachedHolder = null;
+pm1 = pmf1.getPersistenceManager();
+tx1 = pm1.currentTransaction();
+try
+{
+ pm1.getFetchPlan().setGroups(new String[] {FetchPlan.DEFAULT, FetchPlan.ALL});
+ pm1.getFetchPlan().setMaxFetchDepth(-1);
+
+ tx1.begin();
+
+ ElementHolder holder = (ElementHolder) pm1.getObjectById(holderID);
+ detachedHolder = (ElementHolder) pm1.detachCopy(holder);
+
+ tx1.commit();
+}
+finally
+{
+ if (tx1.isActive())
+ {
+ tx1.rollback();
+ }
+ pm1.close();
+}
+
+// Attach the objects to datastore2
+PersistenceManagerFactory pmf2 = JDOHelper.getPersistenceManagerFactory("jdo.2.properties");
+PersistenceManager pm2 = pmf2.getPersistenceManager();
+Transaction tx2 = pm2.currentTransaction();
+try
+{
+ tx2.begin();
+
+ pm2.makePersistent(detachedHolder);
+
+ tx2.commit();
+}
+finally
+{
+ if (tx2.isActive())
+ {
+ tx2.rollback();
+ }
+ pm2.close();
+}</pre></div>
+ <p>
+ These objects are now replicated into <i>datastore2</i>.
+ Clearly you can extend this basic idea and replicate large amounts of data.
+ </p>
+ </div>
+
</div>
</div>
Modified: websites/production/db/content/jdo/impls.html
==============================================================================
--- websites/production/db/content/jdo/impls.html (original)
+++ websites/production/db/content/jdo/impls.html Sat Feb 23 14:12:18 2013
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Jan 20, 2013 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.3 at Feb 23, 2013 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -12,7 +12,7 @@
</style>
<link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
<meta name="author" content="JDO Documentation Team" />
- <meta name="Date-Revision-yyyymmdd" content="20130120" />
+ <meta name="Date-Revision-yyyymmdd" content="20130223" />
<meta http-equiv="Content-Language" content="en" />
</head>
@@ -210,140 +210,140 @@
</div>
<div id="bodyColumn">
<div id="contentBox">
- <!-- 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. -->
-
- <div class="section"><h2>JDO Implementations<a name="JDO_Implementations"></a></h2>
- <p>
- To build and run your JDO application, you need a JDO implementation.
- This page lists commercial and non-commercial JDO implementations.
- For information on how vendors certify compliance with the JDO specifications,
- see <a href="tck.html">TCK</a>.
- </p>
-
- <div class="section"><h3>JDO Reference Implementations<a name="JDO_Reference_Implementations"></a></h3>
- <ul>
- <li><b>JDO 1.0</b> : <a class="externalLink" href="http://jcp.org/aboutJava/communityprocess/final/jsr012/index2.html">FOStore</a></li>
- <li><b>JDO 2.0</b> : <a class="externalLink" href="http://www.jpox.org/docs/1_1/">JPOX 1.1</a></li>
- <li><b>JDO 2.1</b> : <a class="externalLink" href="http://www.jpox.org/docs/1_2/">JPOX 1.2</a></li>
- <li><b>JDO 2.2</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_1_0/index.html">DataNucleus AccessPlatform 1.0.1</a></li>
- <li><b>JDO 3.0</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_2_1/index.html">DataNucleus AccessPlatform 2.1.0</a></li>
- <li><b>JDO 3.1</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_3_1/index.html">DataNucleus AccessPlatform 3.1.0</a></li>
- </ul>
- <br />
- </div>
-
- <div class="section"><h3>Implementations<a name="Implementations"></a></h3>
- <p>
- Below is a list of known implementations of JDO, showing the level of JDO that
- the implementation tries to implement, and the type of datastore that the
- implementation supports. You should check the vendors website for details of whether
- the implementation is fully compliant with the specification claimed - Apache JDO
- simply provides visibility of known implementations.
- </p>
- <table border="0" class="bodyTable">
- <tr class="a">
- <th>Name</th>
- <th>License</th>
- <th>JDO Spec</th>
- <th>Datastore(s)</th>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.datanucleus.org">DataNucleus Access Platform</a></td>
- <td>NonCommercial</td>
- <td>1.0, 2.0, 2.1, 2.2, 3.0, 3.1</td>
- <td>RDBMS, db4o, NeoDatis, LDAP, Excel XLS, Excel OOXML, ODF, XML, JSON,
- Google BigTable, HBase, Amazon S3, MongoDB, GoogleStorage, Cassandra,
- OrientDB, Salesforce.com, Neo4j</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://www.jdoinstruments.org/">JDOInstruments</a></td>
- <td>NonCommercial</td>
- <td>1.0</td>
- <td>JDOInstruments</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.jpox.org"><i>JPOX</i></a></td>
- <td>NonCommercial</td>
- <td>1.0, 2.0, 2.1</td>
- <td>RDBMS, db4o</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://www.bea.com/kodo"><i>Kodo</i></a></td>
- <td>Commercial</td>
- <td>1.0, 2.0</td>
- <td>RDBMS, XML</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.objectdb.com/">ObjectDB for Java/JDO</a></td>
- <td>Commercial</td>
- <td>1.0, 2.0</td>
- <td>ObjectDB</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://www.objectivity.com/pages/object-database-solutions/java-data-objects.asp">Objectivity</a></td>
- <td>Commercial</td>
- <td>1.0</td>
- <td>ObjectivityDB</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.orientechnologies.com/cms/">Orient</a></td>
- <td>Commercial</td>
- <td>1.0</td>
- <td>Orient</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://pejava.tripod.com/index.html"><i>hywy's PE:J</i></a></td>
- <td>Commercial</td>
- <td>1.0</td>
- <td>RDBMS</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.signsoft.de/signsoft/en/intelliBO/"><i>SignSoft intelliBO</i></a></td>
- <td>Commercial</td>
- <td>1.0</td>
- <td>intelliBO</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://speedo.objectweb.org/"><i>Speedo</i></a></td>
- <td>NonCommercial</td>
- <td>1.0</td>
- <td>RDBMS</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://tjdo.sourceforge.net/"><i>TJDO</i></a></td>
- <td>NonCommercial</td>
- <td>1.0</td>
- <td>RDBMS</td>
- </tr>
- <tr class="a">
- <td><a class="externalLink" href="http://www.versant.com/en_US/products/objectdatabase/">Versant</a></td>
- <td>Commercial</td>
- <td>1.0, 2.0</td>
- <td>Versant Object Database</td>
- </tr>
- <tr class="b">
- <td><a class="externalLink" href="http://www.xcalia.com/xdn/specs/jdo">Xcalia</a></td>
- <td>Commercial</td>
- <td>1.0, 2.0</td>
- <td>RDBMS, XML, Versant ODBMS, Jalisto, Web services, mainframe transactions and screens (CICS, IMS...), packaged applications (ERP, CRM,SFA...), components (EJB...).</td>
- </tr>
- </table>
- </div>
- </div>
-
+ <!-- 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. -->
+
+ <div class="section"><h2>JDO Implementations<a name="JDO_Implementations"></a></h2>
+ <p>
+ To build and run your JDO application, you need a JDO implementation.
+ This page lists commercial and non-commercial JDO implementations.
+ For information on how vendors certify compliance with the JDO specifications,
+ see <a href="tck.html">TCK</a>.
+ </p>
+
+ <div class="section"><h3>JDO Reference Implementations<a name="JDO_Reference_Implementations"></a></h3>
+ <ul>
+ <li><b>JDO 1.0</b> : <a class="externalLink" href="http://jcp.org/aboutJava/communityprocess/final/jsr012/index2.html">FOStore</a></li>
+ <li><b>JDO 2.0</b> : <a class="externalLink" href="http://www.jpox.org/docs/1_1/">JPOX 1.1</a></li>
+ <li><b>JDO 2.1</b> : <a class="externalLink" href="http://www.jpox.org/docs/1_2/">JPOX 1.2</a></li>
+ <li><b>JDO 2.2</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_1_0/index.html">DataNucleus AccessPlatform 1.0.1</a></li>
+ <li><b>JDO 3.0</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_2_1/index.html">DataNucleus AccessPlatform 2.1.0</a></li>
+ <li><b>JDO 3.1</b> : <a class="externalLink" href="http://www.datanucleus.org/products/accessplatform_3_2/index.html">DataNucleus AccessPlatform 3.2.0</a></li>
+ </ul>
+ <br />
+ </div>
+
+ <div class="section"><h3>Implementations<a name="Implementations"></a></h3>
+ <p>
+ Below is a list of known implementations of JDO, showing the level of JDO that
+ the implementation tries to implement, and the type of datastore that the
+ implementation supports. You should check the vendors website for details of whether
+ the implementation is fully compliant with the specification claimed - Apache JDO
+ simply provides visibility of known implementations.
+ </p>
+ <table border="0" class="bodyTable">
+ <tr class="a">
+ <th>Name</th>
+ <th>License</th>
+ <th>JDO Spec</th>
+ <th>Datastore(s)</th>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.datanucleus.org">DataNucleus Access Platform</a></td>
+ <td>NonCommercial</td>
+ <td>1.0, 2.0, 2.1, 2.2, 3.0, 3.1</td>
+ <td>RDBMS, db4o, NeoDatis, LDAP, Excel XLS, Excel OOXML, ODF, XML, JSON,
+ Google BigTable, HBase, Amazon S3, MongoDB, GoogleStorage, Cassandra,
+ OrientDB, Salesforce.com, Neo4j</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://www.jdoinstruments.org/">JDOInstruments</a></td>
+ <td>NonCommercial</td>
+ <td>1.0</td>
+ <td>JDOInstruments</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.jpox.org"><i>JPOX</i></a></td>
+ <td>NonCommercial</td>
+ <td>1.0, 2.0, 2.1</td>
+ <td>RDBMS, db4o</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://www.bea.com/kodo"><i>Kodo</i></a></td>
+ <td>Commercial</td>
+ <td>1.0, 2.0</td>
+ <td>RDBMS, XML</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.objectdb.com/">ObjectDB for Java/JDO</a></td>
+ <td>Commercial</td>
+ <td>1.0, 2.0</td>
+ <td>ObjectDB</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://www.objectivity.com/pages/object-database-solutions/java-data-objects.asp">Objectivity</a></td>
+ <td>Commercial</td>
+ <td>1.0</td>
+ <td>ObjectivityDB</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.orientechnologies.com/cms/">Orient</a></td>
+ <td>Commercial</td>
+ <td>1.0</td>
+ <td>Orient</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://pejava.tripod.com/index.html"><i>hywy's PE:J</i></a></td>
+ <td>Commercial</td>
+ <td>1.0</td>
+ <td>RDBMS</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.signsoft.de/signsoft/en/intelliBO/"><i>SignSoft intelliBO</i></a></td>
+ <td>Commercial</td>
+ <td>1.0</td>
+ <td>intelliBO</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://speedo.objectweb.org/"><i>Speedo</i></a></td>
+ <td>NonCommercial</td>
+ <td>1.0</td>
+ <td>RDBMS</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://tjdo.sourceforge.net/"><i>TJDO</i></a></td>
+ <td>NonCommercial</td>
+ <td>1.0</td>
+ <td>RDBMS</td>
+ </tr>
+ <tr class="a">
+ <td><a class="externalLink" href="http://www.versant.com/en_US/products/objectdatabase/">Versant</a></td>
+ <td>Commercial</td>
+ <td>1.0, 2.0</td>
+ <td>Versant Object Database</td>
+ </tr>
+ <tr class="b">
+ <td><a class="externalLink" href="http://www.xcalia.com/xdn/specs/jdo">Xcalia</a></td>
+ <td>Commercial</td>
+ <td>1.0, 2.0</td>
+ <td>RDBMS, XML, Versant ODBMS, Jalisto, Web services, mainframe transactions and screens (CICS, IMS...), packaged applications (ERP, CRM,SFA...), components (EJB...).</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
</div>
</div>