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 2015/03/19 00:21:07 UTC

[1/2] isis git commit: ISIS-1096: ignore @PersistenceCapable(schema=""), ie treat as if null and don't install an ObjectTypeFacet.

Repository: isis
Updated Branches:
  refs/heads/master 8e1fc5fc9 -> 1695572d5


ISIS-1096: ignore @PersistenceCapable(schema=""), ie treat as if null and don't install an ObjectTypeFacet.


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

Branch: refs/heads/master
Commit: f6a4347d0e0fe51fe703f0a0ff55c82c6abd2a98
Parents: 8e1fc5f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 18 23:05:19 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 18 23:11:09 2015 +0000

----------------------------------------------------------------------
 .../ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java    | 2 +-
 .../JdoPersistenceCapableAnnotationFacetFactory.java            | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f6a4347d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
index 1789373..4767c5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
@@ -36,7 +36,7 @@ public class ObjectSpecIdFacetForJdoPersistenceCapableAnnotation extends ObjectS
             return null;
         }
         final String schema = persistenceCapableFacet.getSchema();
-        if(schema == null) {
+        if(Strings.isNullOrEmpty(schema)) {
             return null;
         }
         final String objectType = schema.toLowerCase(Locale.ROOT) + "." + persistenceCapableFacet.getTable();

http://git-wip-us.apache.org/repos/asf/isis/blob/f6a4347d/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 86aab2e..ff97abf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -43,7 +43,10 @@ public class JdoPersistenceCapableAnnotationFacetFactory extends FacetFactoryAbs
         if (annotation == null) {
             return;
         }
-        final String annotationSchemaAttribute = annotation.schema();
+        String annotationSchemaAttribute = annotation.schema();
+        if(Strings.isNullOrEmpty(annotationSchemaAttribute)) {
+            annotationSchemaAttribute = null;
+        }
         String annotationTableAttribute = annotation.table();
         if (Strings.isNullOrEmpty(annotationTableAttribute)) {
             annotationTableAttribute = cls.getSimpleName();


[2/2] isis git commit: ISIS-1100: improvement to algorithm for flushing transaction.

Posted by da...@apache.org.
ISIS-1100: improvement to algorithm for flushing transaction.


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

Branch: refs/heads/master
Commit: 1695572d506afa0d9ab7a0307062da0e361de7ee
Parents: f6a4347
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 18 23:10:42 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 18 23:11:10 2015 +0000

----------------------------------------------------------------------
 .../system/transaction/IsisTransaction.java     | 82 +++++++++++++-------
 .../jdo/datanucleus/DataNucleusObjectStore.java | 12 +++
 2 files changed, 68 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1695572d/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index b53110b..d98381f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -85,7 +85,6 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext.TransactionS
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.runtime.persistence.ObjectPersistenceException;
 import org.apache.isis.core.runtime.persistence.PersistenceConstants;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
@@ -512,37 +511,31 @@ public class IsisTransaction implements TransactionScopedComponent {
         // with previous algorithm that always went through the execute phase at least once.
         //
         do {
-            // We take a copy of the commands to be executed (executing these
-            // might add to this.commands).
-            final List<PersistenceCommand> commandsPrior = 
-                    Collections.unmodifiableList(Lists.newArrayList(commands));
-            try {
-                objectStore.execute(commandsPrior);
-                for (final PersistenceCommand command : commandsPrior) {
+            // this algorithm ensures that we never execute the same command twice,
+            // and also allow new commands to be added to end
+            PersistenceCommand command = commands.isEmpty()? null: commands.get(0);
+
+            if(command != null) {
+                // so won't be processed again if a flush is encountered subsequently
+                commands.remove(command);
+                try {
+                    objectStore.execute(Collections.singletonList(command));
                     if (command instanceof DestroyObjectCommand) {
                         final ObjectAdapter adapter = command.onAdapter();
                         adapter.setVersion(null);
-                        if(!adapter.isDestroyed()) {
+                        if (!adapter.isDestroyed()) {
                             adapter.changeState(ResolveState.DESTROYED);
                         }
                     }
+                } catch (final RuntimeException ex) {
+                    // if there's an exception, we want to make sure that
+                    // all commands are cleared and propagate
+                    commands.clear();
+                    throw ex;
                 }
-                commands.removeAll(commandsPrior);
-            } catch(final RuntimeException ex) {
-                // if there's an exception, we want to make sure that 
-                // all commands are cleared and propagate
-                commands.clear();
-                throw ex;
             }
-        } while(!commands.isEmpty() && i++ < MAX_FLUSH_ATTEMPTS);
+        } while(!commands.isEmpty());
         
-        if(!commands.isEmpty()) {
-            // must have hit max flush
-            final List<PersistenceCommand> commandsStillToFlush = 
-                    Collections.unmodifiableList(Lists.newArrayList(commands));
-            commands.clear();
-            throw new ObjectPersistenceException("Failed to flush transaction after " + MAX_FLUSH_ATTEMPTS + " attempts; commands still to flush:\n " + commandsStillToFlush.toString());
-        }
     }
 
     protected void doAudit(final Set<Entry<AdapterAndProperty, PreAndPostValues>> changedObjectProperties) {
@@ -1330,7 +1323,10 @@ public class IsisTransaction implements TransactionScopedComponent {
      * Supported by the JDO object store; check documentation for support in other objectstores.
      */
     public void enlistDeleting(ObjectAdapter adapter) {
-        enlist(adapter, ChangeKind.DELETE);
+        final boolean enlisted = enlist(adapter, ChangeKind.DELETE);
+        if(!enlisted) {
+            return;
+        }
         for (ObjectAssociation property : adapter.getSpecification().getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.PROPERTIES)) {
             final AdapterAndProperty aap = AdapterAndProperty.of(adapter, property);
             if(property.isNotPersisted()) {
@@ -1346,8 +1342,42 @@ public class IsisTransaction implements TransactionScopedComponent {
     }
 
 
-    private void enlist(ObjectAdapter adapter, ChangeKind changeKind) {
-        changeKindByEnlistedAdapter.put(adapter, changeKind);
+    /**
+     *
+     * @param adapter
+     * @param current
+     * @return <code>true</code> if successfully enlisted, <code>false</code> if was already enlisted
+     */
+    private boolean enlist(final ObjectAdapter adapter, final ChangeKind current) {
+        final ChangeKind previous = changeKindByEnlistedAdapter.get(adapter);
+        if(previous == null) {
+            changeKindByEnlistedAdapter.put(adapter, current);
+            return true;
+        }
+        switch (previous) {
+            case CREATE:
+                switch (current) {
+                    case DELETE:
+                        changeKindByEnlistedAdapter.remove(adapter);
+                    case CREATE:
+                    case UPDATE:
+                        return false;
+                }
+                break;
+            case UPDATE:
+                switch (current) {
+                    case DELETE:
+                        changeKindByEnlistedAdapter.put(adapter, current);
+                        return true;
+                    case CREATE:
+                    case UPDATE:
+                        return false;
+                }
+                break;
+            case DELETE:
+                return false;
+        }
+        return previous == null;
     }
     
     

http://git-wip-us.apache.org/repos/asf/isis/blob/1695572d/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
index 828115d..d6624cb 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
@@ -29,6 +29,7 @@ import javax.jdo.Query;
 import javax.jdo.spi.PersistenceCapable;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import org.datanucleus.api.jdo.NucleusJDOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
@@ -585,6 +586,17 @@ public class DataNucleusObjectStore implements ObjectStore {
         return this.registeredServices.get(serviceSpec.getSpecId());
     }
 
+
+    // ///////////////////////////////////////////////////////////////////////
+    // Not API
+    // ///////////////////////////////////////////////////////////////////////
+
+
+    public boolean isDeleted(final ObjectAdapter adapter) {
+        return NucleusJDOHelper.isDeleted(adapter.getObject());
+    }
+
+
     // ///////////////////////////////////////////////////////////////////////
     // Helpers: ensure*
     // ///////////////////////////////////////////////////////////////////////