You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by bu...@apache.org on 2013/02/15 14:19:11 UTC

svn commit: r850698 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/components/objectstores/jdo/

Author: buildbot
Date: Fri Feb 15 13:19:10 2013
New Revision: 850698

Log:
Staging update by buildbot for isis

Added:
    websites/staging/isis/trunk/content/components/objectstores/jdo/dates-blobs-lazy-loading.html
    websites/staging/isis/trunk/content/components/objectstores/jdo/maven-and-eclipse.html
Removed:
    websites/staging/isis/trunk/content/components/objectstores/jdo/hints-and-tips.html
Modified:
    websites/staging/isis/trunk/cgi-bin/   (props changed)
    websites/staging/isis/trunk/content/   (props changed)
    websites/staging/isis/trunk/content/components/objectstores/jdo/about.html
    websites/staging/isis/trunk/content/documentation.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Feb 15 13:19:10 2013
@@ -1 +1 @@
-1446499
+1446565

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Feb 15 13:19:10 2013
@@ -1 +1 @@
-1446499
+1446565

Modified: websites/staging/isis/trunk/content/components/objectstores/jdo/about.html
==============================================================================
--- websites/staging/isis/trunk/content/components/objectstores/jdo/about.html (original)
+++ websites/staging/isis/trunk/content/components/objectstores/jdo/about.html Fri Feb 15 13:19:10 2013
@@ -242,7 +242,8 @@
 <p>Hints and tips:</p>
 
 <ul>
-<li><a href="hints-and-tips.html">Maven and Eclipse</a></li>
+<li><a href="maven-and-eclipse.html">Maven and Eclipse</a></li>
+<li><a href="dates-blobs-lazy-loading.html">Dates, Blobs and Lazy Loading</a></li>
 </ul>
 
 <h3>Releases</h3>

Added: websites/staging/isis/trunk/content/components/objectstores/jdo/dates-blobs-lazy-loading.html
==============================================================================
--- websites/staging/isis/trunk/content/components/objectstores/jdo/dates-blobs-lazy-loading.html (added)
+++ websites/staging/isis/trunk/content/components/objectstores/jdo/dates-blobs-lazy-loading.html Fri Feb 15 13:19:10 2013
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+
+    <meta charset="utf-8">
+      <title>Dates, Blobs and Lazy Loading</title>
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <!-- Le styles -->
+    <link href="./../../../bootstrap.css" rel="stylesheet">
+    <link href="./../../../prettify.css" rel="stylesheet">
+    <link href="./../../../bootstrap-mods.css" rel="stylesheet">
+
+    <style type="text/css">
+        body {
+          padding-top: 60px;
+        }
+        .sprite {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../../images/sprites.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .edit-page {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../../images/edit.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .fb-share {
+            background-position: 0px -40px;
+        }
+        .gp-share {
+            background-position: 0px 0px;
+        }
+        .tw-share {
+            background-position: 0px -80px;
+        }
+        .markdown-content {
+            min-height: 500px;
+        }
+        .book-image img {
+          border: 1px;
+          border-style: solid;
+        }
+        .release-matrix .heading {
+            background-color: #eeeeee;
+        }
+        .release-matrix .new {
+            color: #dd0000;
+            font-weight: bolder;
+        }
+        .stub,.note {
+            position: relative;
+            padding: 7px 15px;
+            margin-bottom: 18px;
+            color: #404040;
+            background-color: #eedc94;
+            background-repeat: repeat-x;
+            background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
+            background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
+            background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+            background-image: linear-gradient(top, #fceec1, #eedc94);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
+            text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+            border-color: #eedc94 #eedc94 #e4c652;
+            border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+            text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+            border-width: 1px;
+            border-style: solid;
+            -webkit-border-radius: 4px;
+            -moz-border-radius: 4px;
+            border-radius: 4px;
+            -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+        }
+    </style>
+    <script type="text/javascript">
+      function fbshare () {
+          window.open(
+                  "http://www.facebook.com/sharer/sharer.php?u="+document.URL,
+                  'Share on Facebook',
+                  'width=640,height=426');
+      };
+      function gpshare () {
+          window.open(
+                  "https://plus.google.com/share?url="+document.URL,
+                  'Share on Google+',
+                  'width=584,height=385');
+      };
+      function twshare () {
+          window.open(
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Dates, Blobs and Lazy Loading",
+                  'Share on Twitter',
+                  'width=800,height=526');
+      };
+    </script>
+
+    <!-- Le fav and touch icons -->
+    <link rel="shortcut icon" href="./../../../images/favicon.ico">
+    <link rel="apple-touch-icon" href="./../../../images/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="./../../../images/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="./../../../images/apple-touch-icon-114x114.png">
+
+    <script src="./../../../javascript/prettify.js" type="text/javascript"></script>
+    <script src="./../../../javascript/jquery-latest.js"></script>
+
+
+    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
+    <script src="./../../../javascript/common.js"></script>
+    <script src="./../../../javascript/prettyprint.js"></script>
+
+    <script src="./../../../javascript/bootstrap-alert.js"></script>
+    <script src="./../../../javascript/bootstrap-dropdown.js"></script>
+    <script src="./../../../javascript/bootstrap-tooltip.js"></script>
+    <script src="./../../../javascript/bootstrap-alerts.js"></script>
+    <script src="./../../../javascript/bootstrap-modal.js"></script>
+    <script src="./../../../javascript/bootstrap-transition.js"></script>
+    <script src="./../../../javascript/bootstrap-button.js"></script>
+    <script src="./../../../javascript/bootstrap-popover.js"></script>
+    <script src="./../../../javascript/bootstrap-twipsy.js"></script>
+    <script src="./../../../javascript/bootstrap-buttons.js"></script>
+    <script src="./../../../javascript/bootstrap-scrollspy.js"></script>
+    <script src="./../../../javascript/bootstrap-typeahead.js"></script>
+    <script src="./../../../javascript/bootstrap-carousel.js"></script>
+    <script src="./../../../javascript/bootstrap-tab.js"></script>
+    <script src="./../../../javascript/bootstrap-collapse.js"></script>
+    <script src="./../../../javascript/bootstrap-tabs.js"></script>
+
+    
+    
+    
+
+    <script>
+    $(function () { prettyPrint() })
+    $().dropdown()
+    </script>
+
+    <!-- GAQ stuff removed here -->
+
+
+  </head>
+
+  <body>
+
+    <div class="topbar">
+      <div class="fill">
+        <div class="container">
+          <a class="brand" href="./../../../index.html">Apache Isis&trade;</a>
+          <ul class="nav">
+            <li><a href="./../../../index.html">Home</a></li>
+            <li><a href="./../../../download.html">Download</a></li>
+            <li class="dropdown">
+              <a href="#" class="dropdown-toggle" data-toggle="dropdown">Screenshots<b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li><a href="./../../../getting-started/screenshots.html">Screenshots</a></li>
+                <li><a href="./../../../getting-started/screencasts.html">Screencasts</a></li>
+                <!--
+                <li><a href="#">Online Demo</a></li>
+                -->
+              </ul>
+            </li>
+            <li><a href="./../../../documentation.html">Docs</a></li>
+            <li><a href="./../../../support.html">Support</a></li>
+            <li class="dropdown">
+              <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li>
+                  <a href="http://www.apache.org/">Apache Homepage <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/licenses/">Licenses <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/security/">Security <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/foundation/thanks.html">Thanks <i class="icon-share-alt"></i></a>
+                </li>
+              </ul>
+            </li>
+
+          </ul>
+
+            <!-- Google CSE Search Box Begins -->
+            <div style="float: right; position: relative; ">
+          <form action="http://www.google.com/cse" id="cse-search-box" _lpchecked="1">
+            <div>
+                <input type="hidden" name="cx" value="001500763902520246267:purt3m54z98">
+                <input type="hidden" name="ie" value="UTF-8">
+                <input type="text" name="q" size="31" style="border: 1px solid rgb(126, 157, 185); padding: 2px; background-color: rgb(255, 255, 255); background-position: 0% 50%; background-repeat: no-repeat no-repeat;">
+                <input type="submit" name="sa" value="Search">
+            </div>
+            <input name="siteurl" type="hidden" value="incubator.apache.org/isis/">
+            <input name="ref" type="hidden" value="">
+            <input name="ss" type="hidden" value="677j458329j2">
+        </form>
+        </div>
+            <!-- Google CSE Search Box Ends -->
+        </div>
+      </div>
+    </div>
+
+    <div class="container">
+      <div class="markdown-content">
+      
+
+<div class="page-header">
+<p><a href="./../../../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../../../components/about.html">Components</a>&nbsp;&raquo&nbsp;<a href="./../../../components/objectstores/about.html">Objectstores</a>&nbsp;&raquo&nbsp;<a href="./../../../components/objectstores/jdo/about.html">Jdo</a></p>
+<h1>Dates, Blobs and Lazy Loading
+
+</h1>
+</div>
+
+<h3>Joda Dates</h3>
+
+<p>Isis' JDO objectstore bundles DataNucleus' <a href="http://www.datanucleus.org/plugins/store.types.jodatime.html">built-in support</a> for Joda <code>LocalDate</code> and <code>LocalDateTime</code> datatypes, meaning that entity properties of these types will be persisted as appropriate data types in the database tables.</p>
+
+<p>It is, however, necessary to annotate your properties with <code>@javax.jdo.annotations.Persistent</code>, otherwise the data won't actually be persisted.  (See the <a href="http://db.apache.org/jdo/field_types.html">JDO docs</a> for more details on this).</p>
+
+<p>Moreover, these datatypes are <em>not</em> in the default fetch group, meaning that JDO/DataNucleus will perform an additional <code>SELECT</code> query for each attribute.  To avoid this extra query, the annotation should indicate that the property is in the default fetch group.</p>
+
+<p>For example, the <code>ToDoItem</code> (in the <a href="../../../getting-started/quickstart-archetype.html">wicket/restful/jdo archetype</a>) defines the <code>dueBy</code> property as follows:</p>
+
+<pre>
+public class ToDoItem ... {
+
+    ...
+
+    // {{ DueBy (property)
+    @javax.jdo.annotations.Persistent(defaultFetchGroup="true")
+    private LocalDate dueBy;
+
+    @MemberOrder(name="Detail", sequence = "3")
+    @Optional
+    public LocalDate getDueBy() {
+        return dueBy;
+    }
+
+    public void setDueBy(final LocalDate dueBy) {
+        this.dueBy = dueBy;
+    }
+
+    ...</div>
+</pre>
+
+<p>{{<div class="note">
+In DataNucleus 3.2, it will no longer be necessary to specify the "default fetc group" because this flag is <a href="http://datanucleus.svn.sourceforge.net/viewvc/datanucleus/platform/store.types.jodatime/trunk/plugin.xml?revision=16602&amp;content-type=text%2Fplain">switched on</a>.  See <a href="https://issues.apache.org/jira/browse/ISIS-303">ISIS-303</a> as to when this is incorporated into Isis JDO Objectstore.</div>}}</p>
+
+<h3>Blobs and Clobs</h3>
+
+<p>In addition to the support for JODA types, Isis also configures JDO/DataNucleus so that the properties of type <code>org.apache.isis.applib.value.Blob</code> and <code>org.apache.isis.applib.value.Clob</code> can also be persisted.</p>
+
+<p>Again, this requires the <code>@javax.jdo.annotations.Persistent</code> annotation.  However, whereas for dates one would always expect this value to be retrieved eagerly, for blobs and clobs it is not so clear cut.</p>
+
+<p>For example, in the <code>ToDoItem</code> (in the <a href="../../../getting-started/quickstart-archetype.html">wicket/restful/jdo archetype</a>) the <code>attachment</code> property is as follows:</p>
+
+<pre>
+public class ToDoItem ... {
+
+    ...
+    // {{ Attachment (property)
+    @javax.jdo.annotations.Persistent(defaultFetchGroup="false")
+    private Blob attachment;
+
+    @Optional
+    @MemberOrder(name="Detail", sequence = "7")
+    @Hidden(where=Where.STANDALONE_TABLES)
+    public Blob getAttachment() {
+        return attachment;
+    }
+
+    public void setAttachment(final Blob attachment) {
+        this.attachment = attachment;
+    }
+    // }}
+
+    ...</div>
+</pre>
+
+<p>Here we can see that the property is hidden in standalone tables, and so there's no need to retrieve it eagerly.  The converse of this the object is rendered by itself, then the attachment property will be retrieved as a one separate query; this seems like a reasonable compromise.</p>
+
+<h3>Lazy Loading</h3>
+
+<p>Lazy loading is a much more important consideration for collections.  By default, these are all rendered lazily and are thus also loaded lazily from the database.</p>
+
+<p>However, even in the case of collections that have annotated with <code>@Render(Type.EAGERLY)</code>, these should probably still be lazily loaded.  Otherwise, there will always be an unnecessary cost when rendering the object in a table.</p>
+
+<p>For example, in the <code>ToDoItem</code> (in the <a href="../../../getting-started/quickstart-archetype.html">wicket/restful/jdo archetype</a>) the <code>dependencies</code> collection is as follows:</p>
+
+<pre>
+public class ToDoItem ... {
+
+    ...
+    // {{ dependencies (Collection)
+    @javax.jdo.annotations.Persistent(table="TODO_DEPENDENCIES")
+    @javax.jdo.annotations.Join(column="DEPENDING_TODO_ID")
+    @javax.jdo.annotations.Element(column="DEPENDENT_TODO_ID")
+    private SortedSet<ToDoItem> dependencies = new TreeSet<ToDoItem>();
+
+    @Disabled
+    @MemberOrder(sequence = "1")
+    @Render(Type.EAGERLY)
+    public SortedSet<ToDoItem> getDependencies() {
+        return dependencies;
+    }
+
+    public void setDependencies(final SortedSet<ToDoItem> dependencies) {
+        this.dependencies = dependencies;
+    }
+    // }}
+    ...</div>
+</pre>
+
+<p>Even though <code>@Render(Type.EAGERLY)</code>, the <code>@javax.jdo.annotations.Persistent</code> annotation leaves the <code>defaultFetchGroup</code> as its default, which for collections is "false".</p>
+
+
+
+      </div>
+
+        <div id="edit" class="modal hide fade in" style="display: none; ">
+            <div class="modal-header">
+                <a class="close" data-dismiss="modal">x</a>
+
+                <h3>Thank you for contributing to the documention!</h3>
+            </div>
+            <div class="modal-body">
+                <h4>Any help with the documentation is greatly appreciated.</h4>
+                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
+                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
+                <!--[if gt IE 6]>
+                <h4>Internet Explorer Users</h4>
+                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
+                <![endif]-->
+
+            </div>
+            <div class="modal-footer">
+                Do you have an Apache ID?
+                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
+                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
+            </div>
+        </div>
+        <script src="./../../../javascript/bootstrap-modal.js"></script>
+
+      <footer>
+        <p>
+        Copyright &copy; 2012~2013 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+        <br/>
+        Apache Isis, Isis, Apache, the Apache feather logo, and the Apache Isis project logo are trademarks of The Apache Software Foundation.
+        </p>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>

Added: websites/staging/isis/trunk/content/components/objectstores/jdo/maven-and-eclipse.html
==============================================================================
--- websites/staging/isis/trunk/content/components/objectstores/jdo/maven-and-eclipse.html (added)
+++ websites/staging/isis/trunk/content/components/objectstores/jdo/maven-and-eclipse.html Fri Feb 15 13:19:10 2013
@@ -0,0 +1,471 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+
+    <meta charset="utf-8">
+      <title>Using JDO in Maven and Eclipse</title>
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    <!-- Le styles -->
+    <link href="./../../../bootstrap.css" rel="stylesheet">
+    <link href="./../../../prettify.css" rel="stylesheet">
+    <link href="./../../../bootstrap-mods.css" rel="stylesheet">
+
+    <style type="text/css">
+        body {
+          padding-top: 60px;
+        }
+        .sprite {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../../images/sprites.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .edit-page {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../../images/edit.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .fb-share {
+            background-position: 0px -40px;
+        }
+        .gp-share {
+            background-position: 0px 0px;
+        }
+        .tw-share {
+            background-position: 0px -80px;
+        }
+        .markdown-content {
+            min-height: 500px;
+        }
+        .book-image img {
+          border: 1px;
+          border-style: solid;
+        }
+        .release-matrix .heading {
+            background-color: #eeeeee;
+        }
+        .release-matrix .new {
+            color: #dd0000;
+            font-weight: bolder;
+        }
+        .stub,.note {
+            position: relative;
+            padding: 7px 15px;
+            margin-bottom: 18px;
+            color: #404040;
+            background-color: #eedc94;
+            background-repeat: repeat-x;
+            background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
+            background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
+            background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+            background-image: linear-gradient(top, #fceec1, #eedc94);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
+            text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+            border-color: #eedc94 #eedc94 #e4c652;
+            border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+            text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+            border-width: 1px;
+            border-style: solid;
+            -webkit-border-radius: 4px;
+            -moz-border-radius: 4px;
+            border-radius: 4px;
+            -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+        }
+    </style>
+    <script type="text/javascript">
+      function fbshare () {
+          window.open(
+                  "http://www.facebook.com/sharer/sharer.php?u="+document.URL,
+                  'Share on Facebook',
+                  'width=640,height=426');
+      };
+      function gpshare () {
+          window.open(
+                  "https://plus.google.com/share?url="+document.URL,
+                  'Share on Google+',
+                  'width=584,height=385');
+      };
+      function twshare () {
+          window.open(
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Using JDO in Maven and Eclipse",
+                  'Share on Twitter',
+                  'width=800,height=526');
+      };
+    </script>
+
+    <!-- Le fav and touch icons -->
+    <link rel="shortcut icon" href="./../../../images/favicon.ico">
+    <link rel="apple-touch-icon" href="./../../../images/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="./../../../images/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="./../../../images/apple-touch-icon-114x114.png">
+
+    <script src="./../../../javascript/prettify.js" type="text/javascript"></script>
+    <script src="./../../../javascript/jquery-latest.js"></script>
+
+
+    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
+    <script src="./../../../javascript/common.js"></script>
+    <script src="./../../../javascript/prettyprint.js"></script>
+
+    <script src="./../../../javascript/bootstrap-alert.js"></script>
+    <script src="./../../../javascript/bootstrap-dropdown.js"></script>
+    <script src="./../../../javascript/bootstrap-tooltip.js"></script>
+    <script src="./../../../javascript/bootstrap-alerts.js"></script>
+    <script src="./../../../javascript/bootstrap-modal.js"></script>
+    <script src="./../../../javascript/bootstrap-transition.js"></script>
+    <script src="./../../../javascript/bootstrap-button.js"></script>
+    <script src="./../../../javascript/bootstrap-popover.js"></script>
+    <script src="./../../../javascript/bootstrap-twipsy.js"></script>
+    <script src="./../../../javascript/bootstrap-buttons.js"></script>
+    <script src="./../../../javascript/bootstrap-scrollspy.js"></script>
+    <script src="./../../../javascript/bootstrap-typeahead.js"></script>
+    <script src="./../../../javascript/bootstrap-carousel.js"></script>
+    <script src="./../../../javascript/bootstrap-tab.js"></script>
+    <script src="./../../../javascript/bootstrap-collapse.js"></script>
+    <script src="./../../../javascript/bootstrap-tabs.js"></script>
+
+    
+    
+    
+
+    <script>
+    $(function () { prettyPrint() })
+    $().dropdown()
+    </script>
+
+    <!-- GAQ stuff removed here -->
+
+
+  </head>
+
+  <body>
+
+    <div class="topbar">
+      <div class="fill">
+        <div class="container">
+          <a class="brand" href="./../../../index.html">Apache Isis&trade;</a>
+          <ul class="nav">
+            <li><a href="./../../../index.html">Home</a></li>
+            <li><a href="./../../../download.html">Download</a></li>
+            <li class="dropdown">
+              <a href="#" class="dropdown-toggle" data-toggle="dropdown">Screenshots<b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li><a href="./../../../getting-started/screenshots.html">Screenshots</a></li>
+                <li><a href="./../../../getting-started/screencasts.html">Screencasts</a></li>
+                <!--
+                <li><a href="#">Online Demo</a></li>
+                -->
+              </ul>
+            </li>
+            <li><a href="./../../../documentation.html">Docs</a></li>
+            <li><a href="./../../../support.html">Support</a></li>
+            <li class="dropdown">
+              <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache <b class="caret"></b></a>
+              <ul class="dropdown-menu">
+                <li>
+                  <a href="http://www.apache.org/">Apache Homepage <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/licenses/">Licenses <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/security/">Security <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship <i class="icon-share-alt"></i></a>
+                </li>
+                <li>
+                  <a href="http://www.apache.org/foundation/thanks.html">Thanks <i class="icon-share-alt"></i></a>
+                </li>
+              </ul>
+            </li>
+
+          </ul>
+
+            <!-- Google CSE Search Box Begins -->
+            <div style="float: right; position: relative; ">
+          <form action="http://www.google.com/cse" id="cse-search-box" _lpchecked="1">
+            <div>
+                <input type="hidden" name="cx" value="001500763902520246267:purt3m54z98">
+                <input type="hidden" name="ie" value="UTF-8">
+                <input type="text" name="q" size="31" style="border: 1px solid rgb(126, 157, 185); padding: 2px; background-color: rgb(255, 255, 255); background-position: 0% 50%; background-repeat: no-repeat no-repeat;">
+                <input type="submit" name="sa" value="Search">
+            </div>
+            <input name="siteurl" type="hidden" value="incubator.apache.org/isis/">
+            <input name="ref" type="hidden" value="">
+            <input name="ss" type="hidden" value="677j458329j2">
+        </form>
+        </div>
+            <!-- Google CSE Search Box Ends -->
+        </div>
+      </div>
+    </div>
+
+    <div class="container">
+      <div class="markdown-content">
+      
+
+<div class="page-header">
+<p><a href="./../../../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../../../components/about.html">Components</a>&nbsp;&raquo&nbsp;<a href="./../../../components/objectstores/about.html">Objectstores</a>&nbsp;&raquo&nbsp;<a href="./../../../components/objectstores/jdo/about.html">Jdo</a></p>
+<h1>Using JDO in Maven and Eclipse
+
+</h1>
+</div>
+
+<p><div class="note">
+See also the screencast describing how to <a href="../../../getting-started/screencasts.html">import an application into Eclipse</a></div></p>
+
+<p>By leveraging the JDO/Datanucleus ORM, Isis' JDO objectstore is very powerful. However, with such power comes a little bit of complexity to the development environment: all domain objects must be enhanced through the <a href="http://db.apache.org/jdo/enhancement.html">JDO enhancer</a>.  So the enhancer must, in one way or another, be integrated into your development environment.</p>
+
+<p>If working from the Maven command line, JDO enhancement is done using the <code>maven-datanucleus-plugin</code>.</p>
+
+<p>If working in Eclipse, then JDO enhancement is done by installing <a href="http://www.datanucleus.org/products/datanucleus/guides/eclipse/index.html#preferences_enhancer">DataNucleus' plugin</a>.  This hooks the bytecode enhancement of your domain objects into Eclipse's normal incremental compilation.</p>
+
+<p>There are two distinct sets of problems you may encounter:</p>
+
+<ul>
+<li>if you are running on Windows (either in Maven or Eclipse), then there's a good chance you'll hit the <a href="http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath">maximum path length limit</a>. Fortunately, there is a workaround.</li>
+<li>if you are developing in Eclipse and a new version of DataNucleus is released to Maven central repo, then this can cause classpath issues.  Again, there is a workaround.</li>
+</ul>
+
+<p>In other words:</p>
+
+<table>
+<tr><th>&nbsp;</th><th>Maven</th><th>Eclipse</th></tr>
+<tr><td><b>Unix</b></td><td>use workaround when new DN version</td><td>no known issues</td></tr>
+<tr><td><b>Windows</b></td><td>use workaround for path limit<br/>use workaround when new DN versions</td> </td><td>use workaround for path limits</tr>
+</table>
+
+<p>In addition, Eclipse's enhancer needs some special care over the classpath.</p>
+
+<h2>For Eclipse: configuring the enhancer</h2>
+
+<p>for the domain object model project, first add DataNucleus support:</p>
+
+<p><img src="resources/eclipse-100-project-support.png"  width="600px"/></p>
+
+<p>Then turn on Auto-Enhancement:</p>
+
+<p><img src="resources/eclipse-110-project-support.png"  width="600px"/></p>
+
+<h3>For Eclipse: classpath considerations</h3>
+
+<p>Update domain object model's classpath to reference DataNucleus JARs:</p>
+
+<pre>
+&lt;dependencies&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
+        &lt;artifactId&gt;isis-core-applib&lt;/artifactId&gt;
+    &lt;/dependency&gt;
+
+    &lt;dependency&gt;
+        &lt;groupId&gt;org.apache.isis.objectstore&lt;/groupId&gt;
+        &lt;artifactId&gt;isis-objectstore-jdo-applib&lt;/artifactId&gt;
+    &lt;/dependency&gt;
+
+    &lt;!-- DataNucleus (horrid, but needed to run the enhancer)--&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;javax.jdo&lt;/groupId&gt;
+        &lt;artifactId&gt;jdo-api&lt;/artifactId&gt;
+    &lt;/dependency&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
+        &lt;artifactId&gt;datanucleus-core&lt;/artifactId&gt;
+    &lt;/dependency&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
+        &lt;artifactId&gt;datanucleus-enhancer&lt;/artifactId&gt;
+        &lt;exclusions&gt;
+            &lt;exclusion&gt;
+                &lt;groupId&gt;org.ow2.asm&lt;/groupId&gt;
+                &lt;artifactId&gt;asm&lt;/artifactId&gt;
+            &lt;/exclusion&gt;
+        &lt;/exclusions&gt;
+    &lt;/dependency&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
+        &lt;artifactId&gt;datanucleus-api-jdo&lt;/artifactId&gt;
+        &lt;/dependency&gt;
+&lt;/dependencies&gt;
+</pre>
+
+<p>And tell DataNucleus to use the project classpath:</p>
+
+<p><img src="resources/eclipse-010-windows-preferences.png" width="600px"/></p>
+
+<p>When the enhancer runs, it will print out to the console:</p>
+
+<p><img src="resources/eclipse-120-console.png" width="500px"/></p>
+
+<h2>Workaround for path limits: using <code>persistence.xml</code></h2>
+
+<h3>Create <code>persistence.xml</code></h3>
+
+<p>in <code>src/main/java/META-INF</code> of the domain project:</p>
+
+<p><img src="resources/eclipse-028-persistence-unit-xml.png" width="250px"/></p>
+
+<p>Ensure the <code>persistence-unit</code> is as specified in the project properties:</p>
+
+<pre>
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
+&lt;persistence xmlns=&quot;http://java.sun.com/xml/ns/persistence&quot;
+    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
+    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd&quot; version=&quot;1.0&quot;&gt;
+
+    &lt;persistence-unit name=&quot;quickstart&quot;&gt;
+    &lt;/persistence-unit&gt;
+&lt;/persistence&gt;
+</pre>
+
+<p>Then specify the <code>persistence-unit</code> in the project properties:</p>
+
+<p><img src="resources/eclipse-025-project-properties.png"  width="600px"/></p>
+
+<h2>Workaround for DN versions: using a profile</h2>
+
+<p>Every so often there will be a new release of DataNucleus plugins to the Maven central repo.  For better or for worse, the Maven DataNucleus plugin defines a range dependency: it will always use the latest version of the DN modules available.</p>
+
+<p>The Eclipse DataNucleus plugin on the other hand is configured to use the project classpath, and so it will remain compatible with the version referenced by Isis' own JDO objectstore.</p>
+
+<p>Unfortunately, if the enhancer is run referencing two different versions of the <code>org.datanucleus:dataducleus-core</code> jar, then it will fail:</p>
+
+<pre>
+[INFO] Example Claims .................................... SUCCESS [0.017s]
+[INFO] Example Claims App DOM ............................ FAILURE [1.532s]
+[INFO] Example Claims App Repositories (for ObjectStore Default)  SKIPPED
+[INFO] Example Claims App Fixtures ....................... SKIPPED
+[INFO] Example Claims App Repositories (for JDO ObjectStore)  SKIPPED
+...
+...
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD FAILURE
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 5:49.374s
+[INFO] Finished at: Thu Dec 06 15:54:44 GMT 2012
+[INFO] Final Memory: 113M/883M
+[INFO] ------------------------------------------------------------------------
+[ERROR] Failed to execute goal org.datanucleus:maven-datanucleus-plugin:3.1.1:en
+hance (default) on project claims-dom: Error executing DataNucleus tool org.data
+nucleus.enhancer.DataNucleusEnhancer: InvocationTargetException: Plugin (Bundle)
+ "org.datanucleus" is already registered. Ensure you dont have multiple JAR vers
+ions of the same plugin in the classpath. The URL "file:/C:/MVN/.m2/repository/o
+rg/datanucleus/datanucleus-core/3.1.3/datanucleus-core-3.1.3.jar" is already reg
+istered, and you are trying to register an identical plugin located at URL "file
+:/C:/MVN/.m2/repository/org/datanucleus/datanucleus-core/3.1.2/datanucleus-core-
+3.1.2.jar." -&gt; [Help 1]
+[ERROR]
+[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
+ch.
+</pre>
+
+<p>The fix is to use a Maven profile:</p>
+
+<pre>
+    &lt;profiles&gt;
+        &lt;profile&gt;
+            &lt;id&gt;not-m2e&lt;/id&gt;
+            &lt;activation&gt;
+                &lt;property&gt;
+                    &lt;name&gt;!m2e.version&lt;/name&gt;
+                &lt;/property&gt;
+            &lt;/activation&gt;
+            &lt;dependencies&gt;
+                &lt;dependency&gt;
+                    &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
+                    &lt;artifactId&gt;datanucleus-core&lt;/artifactId&gt;
+                    &lt;version&gt;(3.0.99, 3.1.99)&lt;/version&gt;
+                    &lt;scope&gt;runtime&lt;/scope&gt;
+                &lt;/dependency&gt;
+                &lt;dependency&gt;
+                    &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
+                    &lt;artifactId&gt;datanucleus-enhancer&lt;/artifactId&gt;
+                    &lt;version&gt;(3.0.99, 3.1.99)&lt;/version&gt;
+                    &lt;scope&gt;runtime&lt;/scope&gt;
+                &lt;/dependency&gt;
+            &lt;/dependencies&gt;
+        &lt;/profile&gt;
+    &lt;/profiles&gt;
+</pre>
+
+<p>This says that when <em>not</em> run within Eclipse (the ${m2e.version} property is <em>not</em> set), then to use the latest version of the DataNucleus dependency can be referenced.  You can maintain the &lt;version&gt; to keep track with the latest-n-greatest available in the Maven repo.</p>
+
+<h2>For Eclipse: If the enhancer fails</h2>
+
+<p>On occasion it appears that Eclipse can attempt to run two instances of the DataNucleus enhancer.  This is probably due to multiple Eclipse builders being defined; we've noticed multiple entries in the Eclipse's <code>Debug</code> view:</p>
+
+<p><img src="resources/eclipse-210-enhancer-fails-duplicates.png"/></p>
+
+<p>At any rate, you'll know you've encountered this error if you see the following in the console:
+<img src="resources/eclipse-200-enhancer-fails-duplicates.png"/></p>
+
+<p>The best solution is to remove DataNucleus support and then to re-add it:</p>
+
+<p><img src="resources/eclipse-220-enhancer-fails-duplicates.png"  width="600px"/></p>
+
+
+
+      </div>
+
+        <div id="edit" class="modal hide fade in" style="display: none; ">
+            <div class="modal-header">
+                <a class="close" data-dismiss="modal">x</a>
+
+                <h3>Thank you for contributing to the documention!</h3>
+            </div>
+            <div class="modal-body">
+                <h4>Any help with the documentation is greatly appreciated.</h4>
+                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
+                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
+                <!--[if gt IE 6]>
+                <h4>Internet Explorer Users</h4>
+                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
+                <![endif]-->
+
+            </div>
+            <div class="modal-footer">
+                Do you have an Apache ID?
+                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
+                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
+            </div>
+        </div>
+        <script src="./../../../javascript/bootstrap-modal.js"></script>
+
+      <footer>
+        <p>
+        Copyright &copy; 2012~2013 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+        <br/>
+        Apache Isis, Isis, Apache, the Apache feather logo, and the Apache Isis project logo are trademarks of The Apache Software Foundation.
+        </p>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>

Modified: websites/staging/isis/trunk/content/documentation.html
==============================================================================
--- websites/staging/isis/trunk/content/documentation.html (original)
+++ websites/staging/isis/trunk/content/documentation.html Fri Feb 15 13:19:10 2013
@@ -434,7 +434,8 @@
 
 <ul>
 <li><a href="components/objectstores/jdo/about.html">About</a></li>
-<li><a href="components/objectstores/jdo/hints-and-tips.html">Maven and Eclipse</a>
+<li><a href="components/objectstores/jdo/maven-and-eclipse.html">Maven and Eclipse</a></li>
+<li><a href="components/objectstores/jdo/dates-blobs-lazy-loading.html">Dates, Blobs and Lazy Loading</a>
 </div>
 <div class="span-one-third"></p>