From 0798add2f244fa1b29cdad8114f09b9a5afd300c Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Sun, 15 Aug 2010 20:18:36 -0400 Subject: [PATCH] moved shared cross-store code to cross-store project --- pom.xml | 14 +++- ...AbstractConstructorEntityInstantiator.java | 61 --------------- .../support/AbstractMixinFields.aj | 54 ------------- .../AbstractTypeAnnotatingMixinFields.aj | 21 ----- .../support/EntityInstantiator.java | 32 -------- .../NaiveDoubleTransactionManager.java | 78 ------------------- template.mf | 1 + 7 files changed, 12 insertions(+), 249 deletions(-) delete mode 100644 src/main/java/org/springframework/persistence/support/AbstractConstructorEntityInstantiator.java delete mode 100644 src/main/java/org/springframework/persistence/support/AbstractMixinFields.aj delete mode 100644 src/main/java/org/springframework/persistence/support/AbstractTypeAnnotatingMixinFields.aj delete mode 100644 src/main/java/org/springframework/persistence/support/EntityInstantiator.java delete mode 100644 src/main/java/org/springframework/persistence/transaction/NaiveDoubleTransactionManager.java diff --git a/pom.xml b/pom.xml index a7bab5f97..027ad9e7e 100644 --- a/pom.xml +++ b/pom.xml @@ -11,11 +11,19 @@ UTF-8 3.0.3.RELEASE - 1.6.9 + 1.6.10.BUILD-SNAPSHOT 1.6.0 + + spring-maven-snapshot + + true + + Springframework Maven SNAPSHOT Repository + http://maven.springframework.org/snapshot + neo4j-public-repository http://m2.neo4j.org @@ -138,8 +146,8 @@ - org.springframework.data - data-commons + org.springframework.datastore + datastore-cross-store 1.0.0.CI-SNAPSHOT diff --git a/src/main/java/org/springframework/persistence/support/AbstractConstructorEntityInstantiator.java b/src/main/java/org/springframework/persistence/support/AbstractConstructorEntityInstantiator.java deleted file mode 100644 index 9d7efbc10..000000000 --- a/src/main/java/org/springframework/persistence/support/AbstractConstructorEntityInstantiator.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.springframework.persistence.support; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.util.ClassUtils; - -/** - * Try for a constructor taking state: failing that, try a no-arg - * constructor and then setUnderlyingNode(). - * - * @author Rod Johnson - */ -public abstract class AbstractConstructorEntityInstantiator implements EntityInstantiator { - - private final Log log = LogFactory.getLog(getClass()); - - final public T createEntityFromState(STATE n, Class c) { - try { - return fromStateInternal(n, c); - } catch (InstantiationException e) { - throw new IllegalArgumentException(e); - } catch (IllegalAccessException e) { - throw new IllegalArgumentException(e); - } catch (InvocationTargetException e) { - throw new IllegalArgumentException(e); - } - } - - final private T fromStateInternal(STATE n, Class c) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { - // TODO this is fragile - Class stateInterface = (Class) n.getClass().getInterfaces()[0]; - Constructor nodeConstructor = ClassUtils.getConstructorIfAvailable(c, stateInterface); - if (nodeConstructor != null) { - // TODO is this the correct way to instantiate or does Spring have a preferred way? - log.info("Using " + c + " constructor taking " + stateInterface); - return nodeConstructor.newInstance(n); - } - - Constructor noArgConstructor = ClassUtils.getConstructorIfAvailable(c); - if (noArgConstructor != null) { - log.info("Using " + c + " no-arg constructor"); - T t = noArgConstructor.newInstance(); - setState(t, n); - return t; - } - - throw new IllegalArgumentException(getClass().getSimpleName() + ": entity " + c + " must have either a constructor taking [" + stateInterface + - "] or a no-arg constructor and state set method"); - } - - /** - * Subclasses must implement to set state - * @param entity - * @param s - */ - protected abstract void setState(BACKING_INTERFACE entity, STATE s); - -} diff --git a/src/main/java/org/springframework/persistence/support/AbstractMixinFields.aj b/src/main/java/org/springframework/persistence/support/AbstractMixinFields.aj deleted file mode 100644 index 9e6473ea3..000000000 --- a/src/main/java/org/springframework/persistence/support/AbstractMixinFields.aj +++ /dev/null @@ -1,54 +0,0 @@ -package org.springframework.persistence.support; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Configurable; -import org.springframework.persistence.RelatedEntity; - -/** - * Abstract superaspect to advise field read and write - * and introduce a mixin interface. - * - * @param type of introduced interface - * - * @author Rod Johnson - */ -privileged abstract public aspect AbstractMixinFields { - - protected final Log log = LogFactory.getLog(getClass()); - - //------------------------------------------------------------------------- - // ITDs to add behavior and state to classes - //------------------------------------------------------------------------- - // Enable Spring DI for all mixed-in objects - declare @type: N+: @Configurable; - - //------------------------------------------------------------------------- - // Advice for field get/set to delegate to backing Node. - //------------------------------------------------------------------------- - protected pointcut entityFieldGet(N entity) : - get(* N+.*) && - this(entity) && - !(get(@RelatedEntity * *) - || get(* N.*) - || getsNotToAdvise()); - - /** - * Never matches. Subclasses can override to exempt certain field reads from advice - */ - protected pointcut getsNotToAdvise(); - - protected pointcut entityFieldSet(N entity, Object newVal) : - set(* N+.*) && - this(entity) && - args(newVal) && - !(set(@RelatedEntity * *) || - set(* N.*) || - setsNotToAdvise()); - - /** - * Never matches. Subclasses can override to exempt certain field writes from advice - */ - protected pointcut setsNotToAdvise(); - -} diff --git a/src/main/java/org/springframework/persistence/support/AbstractTypeAnnotatingMixinFields.aj b/src/main/java/org/springframework/persistence/support/AbstractTypeAnnotatingMixinFields.aj deleted file mode 100644 index ba63e81e4..000000000 --- a/src/main/java/org/springframework/persistence/support/AbstractTypeAnnotatingMixinFields.aj +++ /dev/null @@ -1,21 +0,0 @@ -package org.springframework.persistence.support; - -import java.lang.annotation.Annotation; - -/** - * Abstract superaspect for aspects that advice - * field access with a mixin for all types annotated with - * a given annotation. - * - * @param annotation on entity - * @param type of introduced interface - * - * @author Rod Johnson - */ -privileged abstract public aspect AbstractTypeAnnotatingMixinFields - extends AbstractMixinFields { - - // ITD to introduce N state to Annotated objects - declare parents : (@ET *) implements N; - -} diff --git a/src/main/java/org/springframework/persistence/support/EntityInstantiator.java b/src/main/java/org/springframework/persistence/support/EntityInstantiator.java deleted file mode 100644 index f17db133e..000000000 --- a/src/main/java/org/springframework/persistence/support/EntityInstantiator.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.springframework.persistence.support; - - -/** - * Interface to be implemented by classes that can instantiate and - * configure entities. - * The framework must do this when creating objects resulting from finders, - * even when there may be no no-arg constructor supplied by the user. - * - * @author Rod Johnson - */ -public interface EntityInstantiator { - - /* - * The best solution if available is to add a constructor that takes Node - * to each GraphEntity. This means generating an aspect beside every - * class as Roo presently does. - * - * An alternative that does not require Roo - * is a user-authored constructor taking Node and calling setUnderlyingNode() - * but this is less elegant and pollutes the domain object. - * - * If the user supplies a no-arg constructor, instantiation can occur by invoking it - * prior to calling setUnderlyingNode(). - * - * If the user does NOT supply a no-arg constructor, we must rely on Sun-specific - * code to instantiate entities without invoking a constructor. - */ - - T createEntityFromState(STATE s, Class c); - -} diff --git a/src/main/java/org/springframework/persistence/transaction/NaiveDoubleTransactionManager.java b/src/main/java/org/springframework/persistence/transaction/NaiveDoubleTransactionManager.java deleted file mode 100644 index b4e11742f..000000000 --- a/src/main/java/org/springframework/persistence/transaction/NaiveDoubleTransactionManager.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.springframework.persistence.transaction; - -import java.util.IdentityHashMap; -import java.util.Map; - -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionException; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionStatus; - -public class NaiveDoubleTransactionManager implements PlatformTransactionManager { - Map status=new IdentityHashMap(); - private final PlatformTransactionManager a; - - private final PlatformTransactionManager b; - - public NaiveDoubleTransactionManager(PlatformTransactionManager a, PlatformTransactionManager b) { - System.err.println("WARNING: Naive JTA/Neo4j Spring transaction manager--must implement properly"); - this.a = a; - this.b = b; - } - - @Override - public void commit(TransactionStatus ts) throws TransactionException { - try { - final TransactionStatus tsb = copyTransactionStatus(status.get(ts)); - try { - a.commit(ts); - } - catch (Throwable t) { - System.err.println("Continuing to commit tx despite this:" + t); - } - try { - b.commit(tsb); - } - catch (Throwable t) { - System.err.println("Can't commit tx" + t); - throw new TransactionException(t.getMessage(), t) {}; - } - } finally { - status.remove(ts); - } - } - - private TransactionStatus copyTransactionStatus(TransactionStatus ts) { - Object t = (ts instanceof DefaultTransactionStatus) ? ((DefaultTransactionStatus) ts).getTransaction() : null; - return new DefaultTransactionStatus(t,ts.isNewTransaction(), false, false, false, null); - } - - @Override - public TransactionStatus getTransaction(TransactionDefinition td) - throws TransactionException { - TransactionStatus atx = a.getTransaction(td); - TransactionStatus btx = b.getTransaction(td); - status.put(atx, btx); - return atx; - } - - @Override - public void rollback(TransactionStatus ts) throws TransactionException { - final TransactionStatus tsb = copyTransactionStatus(status.remove(ts)); - try { - a.rollback(ts); - } - catch (Throwable t) { - System.err.println("Continuing to rollback tx despite this:" + t); - } - try { - b.rollback(tsb); - } - catch (Throwable t) { - System.err.println("Can't rollback tx" + t); - throw new TransactionException(t.getMessage(), t) {}; - } - } - -} diff --git a/template.mf b/template.mf index afc0c65cb..27cdc767c 100644 --- a/template.mf +++ b/template.mf @@ -11,6 +11,7 @@ Import-Template: org.springframework.util.*;version="[3.0.0, 4.0.0)", org.springframework.data.core.*;version="[1.0.0, 2.0.0)", org.springframework.datastore.core.*;version="[1.0.0, 2.0.0)", + org.springframework.datastore.persistence.*;version="[1.0.0, 2.0.0)", org.neo4j.*;version="[1.1.0, 2.0.0)", org.aspectj.*;version="[1.6.5, 2.0.0)", org.apache.commons.logging.*;version="[1.1.1, 2.0.0)"