You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/04/20 23:42:02 UTC

git commit: ISIS-386: adding IsisjdoSupport and its impl to jdo/dn objectstore module

Updated Branches:
  refs/heads/master 7c624d1cb -> 079340d32


ISIS-386: adding IsisjdoSupport and its impl to jdo/dn objectstore module


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/079340d3
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/079340d3
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/079340d3

Branch: refs/heads/master
Commit: 079340d3251836b95e6201b1924b0c7b85d081e6
Parents: 7c624d1
Author: Dan Haywood <da...@apache.org>
Authored: Sat Apr 20 22:41:10 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Sat Apr 20 22:41:10 2013 +0100

----------------------------------------------------------------------
 .../jdo/applib/service/support/IsisJdoSupport.java |   36 ++++++++++++
 .../service/support/IsisJdoSupportImpl.java        |   43 +++++++++++++++
 2 files changed, 79 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/079340d3/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java b/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java
new file mode 100644
index 0000000..5e80dc6
--- /dev/null
+++ b/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java
@@ -0,0 +1,36 @@
+package org.apache.isis.objectstore.jdo.applib.service.support;
+
+/**
+ * Service that provide a number of workarounds when using JDO/DataNucleus. 
+ */
+public interface IsisJdoSupport {
+
+    /**
+     * Inject services and container into a domain object.
+     * 
+     * <p>
+     * This method is provided because we can't figure out why JDO/DataNucleus is not 
+     * calling the Isis callback (<tt>IsisLifecycleListener</tt>) when an object is lazily loaded.
+     * 
+     * <p>
+     * The particular example that led to this method being added was a 1:m bidirectional relationship,
+     * analogous to <tt>Customer <-> * Order</tt>.  No callback is received for the child <tt>Order</tt> objects. 
+     */
+    <T> T injected(T domainObject);
+
+    /**
+     * Force a reload (corresponding to the JDO <tt>PersistenceManager</tt>'s <tt>refresh()</tt> method)
+     * of a domain objects.
+     * 
+     * <p>
+     * In fact, may reset the lazy-load state of the domain object, but the effect is the same: to cause
+     * the object's state to be reloaded from the database.
+     * 
+     * <p>
+     * The particular example that led to this method being added was a 1:m bidirectional relationship,
+     * analogous to <tt>Customer <-> * Order</tt>.  Persisting the child <tt>Order</tt> object did not cause
+     * the parent <tt>Customer</tt>'s collection of orders to be updated.  Calling refresh on the parent
+     * <tt>Customer</tt> does the trick, however. 
+     */
+    <T> T refresh(T domainObject);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/079340d3/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
new file mode 100644
index 0000000..7614bf6
--- /dev/null
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java
@@ -0,0 +1,43 @@
+package org.apache.isis.objectstore.jdo.datanucleus.service.support;
+
+import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.objectstore.jdo.applib.service.support.IsisJdoSupport;
+import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore;
+
+@Hidden
+public class IsisJdoSupportImpl implements IsisJdoSupport {
+    
+    @Hidden
+    @Override
+    public <T> T injected(T domainObject) {
+        getServicesInjector().injectServicesInto(domainObject);
+        return domainObject;
+    }
+
+    @Override
+    public <T> T refresh(T domainObject) {
+        DataNucleusObjectStore objectStore = (DataNucleusObjectStore) getPersistenceSession().getObjectStore();
+        ObjectAdapter adapter = getAdapterManager().getAdapterFor(domainObject);
+        objectStore.refreshRoot(adapter);
+        return domainObject;
+    }
+
+    protected AdapterManager getAdapterManager() {
+        return getPersistenceSession().getAdapterManager();
+    }
+
+    protected PersistenceSession getPersistenceSession() {
+        return IsisContext.getPersistenceSession();
+    }
+
+    protected ServicesInjectorSpi getServicesInjector() {
+        return getPersistenceSession().getServicesInjector();
+    }
+
+
+}