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();
+ }
+
+
+}