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*
// ///////////////////////////////////////////////////////////////////////