You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2011/06/07 20:16:00 UTC

svn commit: r1133121 - in /labs/magma/trunk/database-mongodb/src: main/java/org/apache/magma/database/mongo/ test/java/org/apache/magma/database/mongo/ test/java/org/apache/magma/database/mongo/test/domain/

Author: simoneg
Date: Tue Jun  7 18:16:00 2011
New Revision: 1133121

URL: http://svn.apache.org/viewvc?rev=1133121&view=rev
Log:
Use underlying properties

Modified:
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanCollectionModifiedListener.java
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanMapModifiedListener.java
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityDoc.aj
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityFindMains.aj
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityLazyRelations.aj
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityTransactionMethods.aj
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/Transaction.java
    labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionPart.java
    labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/ReadingTest.java
    labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/test/domain/Person.java

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanCollectionModifiedListener.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanCollectionModifiedListener.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanCollectionModifiedListener.java (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanCollectionModifiedListener.java Tue Jun  7 18:16:00 2011
@@ -20,7 +20,7 @@ public class BeanCollectionModifiedListe
 		this.delegate = c;
 		this.bean = bean;
 		this.bsonList = bson;
-		this.prop = prop;
+		this.prop = prop.getUnderlying();
 	}
 	
 	public void inited() {

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanMapModifiedListener.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanMapModifiedListener.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanMapModifiedListener.java (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/BeanMapModifiedListener.java Tue Jun  7 18:16:00 2011
@@ -28,7 +28,7 @@ public class BeanMapModifiedListener imp
 		this.delegate = map;
 		this.bean = bean;
 		this.bson = bson;
-		this.pi = pi;
+		this.pi = pi.getUnderlying();
 		this.keyConverter = Converters.getConverterFor(pi.getMapKeyClass());
 		this.valueConverter = Converters.getConverterFor(pi.getMapValueClass());
 	}

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityDoc.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityDoc.aj?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityDoc.aj (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityDoc.aj Tue Jun  7 18:16:00 2011
@@ -9,7 +9,6 @@ import javax.persistence.Transient;
 
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 import org.apache.magma.database.InstallIdByDefault.WithDefaultId;
 import org.apache.magma.database.openjpa.InstallVersionByDefault.WithDefaultVersion;
@@ -55,16 +54,16 @@ public aspect MongoEntityDoc {
 	
 	void MongoEntity.loadBasicProperties() {
 		BeanData bd = this.beanData();
-		BeanHandler bh = this.handler();
 		Set<String> names = bd.getPropertyNames();
 		for (String name : names) {
 			PropertyInfo pi = bd.getProperty(name);
+			pi = pi.getUnderlying();
 			if (!pi.isBasicType() && pi.getType() != null && !Enum.class.isAssignableFrom(pi.getType())) continue;
 			Object val = null;
 			if (pi.isJpaId()) {
 				val = this.entityDoc.get("_id");
 				// Special case for WithDefaultId, where id is read only from the bean handler
-				if (!pi.isWriteable() && this instanceof WithDefaultId) {
+				if (this instanceof WithDefaultId) {
 					long id = 0;
 					if (val == null) {
 						id = LongObjectId.generate();
@@ -74,8 +73,11 @@ public aspect MongoEntityDoc {
 						throw new MagmaException("Cannot convert {0} to a long for default id", val); 
 					}
 					((WithDefaultId)this).setId(id);
-					bh.updated(pi);
 					val = null;
+				} else if (pi.isWriteable()) {
+					pi.set(this, val);
+				} else {
+					throw new MagmaException("Cannot set id on {0}", this.getClass());
 				}
 			} else {
 				val = this.entityDoc.get(pi.getJpaColName());
@@ -91,11 +93,9 @@ public aspect MongoEntityDoc {
 			if (val != null) {
 				val = MongoUtils.convertFromMongo(val, pi.getType());
 				if (val != null)
-					bh.setValue(name, val);
+					pi.set(this, val);
 			}
 		}
-		
-		bh.commit();
 	}
 	
 	void MongoEntity.prepareForDb(Transaction t) {
@@ -106,28 +106,27 @@ public aspect MongoEntityDoc {
 			this.entityDoc.put("_jcl", getMyTransaction().getMeta().convertToName(this.getClass()));
 			
 			PropertyInfo vf = bd.getJpaVersionField();
+			vf = vf.getUnderlying();
 			if (vf != null) {
 				this.entityDoc.put(vf.getJpaColName(), 1);
 				if (vf.isWriteable()) {
-					BeanHandler bh = this.handler();
-					bh.setValue(vf.getName(), 1);
-					bh.commit();
+					vf.set(this, 1);
 				} else if (this instanceof WithDefaultVersion) {
 					((WithDefaultVersion)this).setVersion(1);
 				}
 			}
 			
 			// It's the first time we are persisting this entity, look for values getters
-			BeanHandler bh = this.handler();
 			Set<String> pinames = bd.getPropertyNames();
 			for (String piname : pinames) {
 				PropertyInfo prop = bd.getProperty(piname);
+				prop = prop.getUnderlying();
 				if (!prop.isReadable()) continue;
 				if (prop.isJpaId() || prop.isJpaVersion() || prop.isJpaTransient()) continue;
 				boolean read = prop.isBasicType() || (prop.isMongoPersisted() && !prop.isMap() && !prop.isCollection());
 				// TODO is this the best way to do this? It takes a lot of time, and causes "property":null in the db
 				if (read) {
-					bh.getValue(piname);
+					prop.get(this);
 				}
 			}
 			this.entityDocNeedsInit = false;

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityFindMains.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityFindMains.aj?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityFindMains.aj (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityFindMains.aj Tue Jun  7 18:16:00 2011
@@ -12,7 +12,6 @@ import java.util.Map.Entry;
 import javax.persistence.CascadeType;
 
 import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 
 import com.mongodb.util.IdentitySet;
@@ -38,9 +37,9 @@ public aspect MongoEntityFindMains {
 		boolean loadedOnly = !cascade.equals(CascadeType.REMOVE);
 		BeanData bd = this.beanData();
 		set.put(this,state);
-		BeanHandler bh = this.handler();
 		List<PropertyInfo> rels = bd.getJpaRelationFields();
 		for (PropertyInfo pi : rels) {
+			pi = pi.getUnderlying();
 			CascadeType[] cascades = pi.getJpaCascadeType();
 			if (cascades != null && cascades.length > 0) {
 				if (Arrays.binarySearch(cascades, CascadeType.ALL) < 0)
@@ -54,7 +53,7 @@ public aspect MongoEntityFindMains {
 				Set loadeds = new HashSet(this.getLoaded(pi.getName()));
 				if (pi.isCollection()) {
 					Class<? extends MongoEntity> oth = pi.getCollectionClass();
-					Collection c = (Collection) bh.getValue(pi.getName());
+					Collection c = (Collection) pi.get(this);
 					for (Object val : c) {
 						if (val != null) ((MongoEntity)val).findMainEntities(cascade, set,state,dones);
 						loadeds.remove(val);
@@ -66,7 +65,7 @@ public aspect MongoEntityFindMains {
 					Class mv = pi.getMapValueClass();
 					BeanData vbd = BeanData.getFor(mv);
 					if (kbd.isJpaClass() || vbd.isJpaClass()) {
-						Map val = (Map) bh.getValue(pi.getName());
+						Map val = (Map) pi.get(this);
 						for (Object entryobj : val.entrySet()) {
 							Map.Entry entry = (Entry) entryobj;
 							if (kbd.isJpaClass()) {
@@ -83,7 +82,7 @@ public aspect MongoEntityFindMains {
 					}
 				} else {
 					Class<? extends MongoEntity> oth = pi.getType();
-					MongoEntity val = (MongoEntity) bh.getValue(pi.getName());
+					MongoEntity val = (MongoEntity) pi.get(this);
 					if (val != null) val.findMainEntities(cascade, set, state, dones);
 					loadeds.remove(val);					
 				}

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityLazyRelations.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityLazyRelations.aj?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityLazyRelations.aj (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityLazyRelations.aj Tue Jun  7 18:16:00 2011
@@ -16,7 +16,6 @@ import javax.persistence.Transient;
 
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 import org.apache.magma.database.InstallIdByDefault.WithDefaultId;
 import org.apache.magma.database.mongo.collections.ListeningCollectionWrapper;
@@ -39,6 +38,7 @@ public aspect MongoEntityLazyRelations {
 		
 		Collection collection = proceed(bean);
 		PropertyInfo pi = bean.beanData().findProperty(((MethodSignature)thisJoinPointStaticPart.getSignature()).getMethod());
+		pi = pi.getUnderlying();
 		if (pi.isJpaTransient()) return collection;
 
 		
@@ -95,9 +95,7 @@ public aspect MongoEntityLazyRelations {
 		}
 		listener.inited();
 
-		BeanHandler bh = bean.handler();
-		bh.setValue(pi.getName(), ret);
-		bh.commit();			
+		pi.set(bean, ret);
 		
 		if (dynamic) {
 			bean.loaded(pi.getName(), collection);
@@ -114,6 +112,7 @@ public aspect MongoEntityLazyRelations {
 		
 		Map collection = proceed(bean);
 		PropertyInfo pi = bean.beanData().findProperty(((MethodSignature)thisJoinPointStaticPart.getSignature()).getMethod());
+		pi = pi.getUnderlying();
 		if (pi.isJpaTransient()) return collection;
 		
 		if (collection instanceof ListeningMapWrapper) return collection;
@@ -134,9 +133,7 @@ public aspect MongoEntityLazyRelations {
 		listener.preload();
 		listener.inited();
 		
-		BeanHandler bh = bean.handler();
-		bh.setValue(pi.getName(), ret);
-		bh.commit();			
+		pi.set(bean, ret);
 		
 		Class valclazz = pi.getMapValueClass();
 		if (MongoEntity.class.isAssignableFrom(valclazz)) {
@@ -160,7 +157,7 @@ public aspect MongoEntityLazyRelations {
 		Object oret = proceed(bean);
 		
 		PropertyInfo pi = bean.beanData().findProperty(((MethodSignature)thisJoinPointStaticPart.getSignature()).getMethod());
-
+		pi = pi.getUnderlying();
 		if (pi.isJpaTransient() || !pi.isMongoPersisted()) return oret;
 
 		if (bean.isLoaded(pi.getName())) return oret;
@@ -178,9 +175,7 @@ public aspect MongoEntityLazyRelations {
 		}
 		
 		if (toset) {
-			BeanHandler bh = bean.handler();
-			bh.setValue(pi.getName(), ret);
-			bh.commit();			
+			pi.set(bean, ret);
 			bean.loaded(pi.getName(), ret);			
 		} else if (ret != null) {
 			bean.loaded(pi.getName(), ret);			

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityTransactionMethods.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityTransactionMethods.aj?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityTransactionMethods.aj (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/MongoEntityTransactionMethods.aj Tue Jun  7 18:16:00 2011
@@ -6,7 +6,6 @@ import java.util.List;
 import java.util.Collection;
 
 import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 import org.aspectj.lang.reflect.MethodSignature;
 
@@ -78,6 +77,7 @@ public aspect MongoEntityTransactionMeth
 	
 	void MongoEntity.dirtyHandleProperty(PropertyInfo pi, Object val) {
 		MongoEntity bean = this;
+		pi = pi.getUnderlying();
 		if (pi.isJpaTransient() || pi.isJpaVersion()) return;
 
 		// null = remove
@@ -118,6 +118,7 @@ public aspect MongoEntityTransactionMeth
 	{
 		Method method = ((MethodSignature)thisJoinPointStaticPart.getSignature()).getMethod();
 		PropertyInfo pi = bean.beanData().findProperty(method);
+		pi = pi.getUnderlying();
 		if (pi.isMongoPersisted() && !pi.isMap() && !pi.isCollection() && !bean.isLoaded(pi.getName()) && pi.isReadable()) {
 			// Force a load to store previous bean if any
 			try {

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/Transaction.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/Transaction.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/Transaction.java (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/Transaction.java Tue Jun  7 18:16:00 2011
@@ -23,7 +23,6 @@ import org.apache.commons.collections.ma
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 import org.apache.magma.database.Database;
 import org.apache.magma.database.InstallIdByDefault.WithDefaultId;
@@ -471,8 +470,8 @@ public class Transaction {
 					long nversion = -1;
 					// Check for version field for optimistic lock
 					BeanData bd = ent.beanData();
-					BeanHandler bh = ent.handler();
 					PropertyInfo vf = bd.getJpaVersionField();
+					vf = vf.getUnderlying();
 					if (ent instanceof WithDefaultVersion) {
 						long version = ((WithDefaultVersion)ent).getVersion();
 						if (version > 0) search.append("version", version);
@@ -485,14 +484,13 @@ public class Transaction {
 						if (vf != null) {
 							version = 1;
 							try {
-								version = ((Number)bh.getValue(vf.getName())).longValue();
+								version = ((Number)vf.get(ent)).longValue();
 							} catch (NullPointerException e) {}
 							search.append(vf.getJpaColName(), version);
-							bh.setValue(vf.getName(), version + 1);
+							vf.set(ent, version + 1);
 							nversion = version + 1;
 							// We need this because setVersion is not weaved by MongoEntity Impls cause of LTW bugs 
 							ent.checkGetBson().put(vf.getJpaColName(), version + 1);
-							bh.commit();
 						}
 					}
 					update.put("$set", new BasicDBObject("version", nversion));

Modified: labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionPart.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionPart.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionPart.java (original)
+++ labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionPart.java Tue Jun  7 18:16:00 2011
@@ -7,7 +7,6 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.PropertyInfo;
 import org.bson.BSONObject;
 import org.junit.runner.manipulation.Sortable;
@@ -66,14 +65,14 @@ public class TransactionPart extends Bas
 		BSONObject bson = ent.checkGetBson();
 		this.put("_jcl", bson.get("_jcl"));
 		BeanData db = ent.beanData();
-		BeanHandler handler = ent.handler();
 		Set<String> names = db.getPropertyNames();
 		for (String propname : names) {
 			PropertyInfo pi = db.getProperty(propname);
-			if (!pi.isBasicType()) continue;
+			pi = pi.getUnderlying();
+			if (!pi.isBasicType() && !pi.isEnum()) continue;
 			if (!pi.isWriteable() || pi.isJpaTransient()) continue;
 			if (pi.isJpaId() || pi.isJpaVersion()) continue;
-			Object val = handler.getValue(propname);
+			Object val = pi.get(ent);
 			ent.dirtyModified(pi, val);
 		}	
 	}

Modified: labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/ReadingTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/ReadingTest.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/ReadingTest.java (original)
+++ labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/ReadingTest.java Tue Jun  7 18:16:00 2011
@@ -155,6 +155,22 @@ public class ReadingTest extends MongoDb
 		assertThat(p.getBool(), equalTo(true));
 		
 	}
+
+	@Test
+	public void readMagRo() throws Exception {
+		DBObject cloneDbo = cloneDbo(BSONPieces.simplePerson);
+		cloneDbo.put("magRo", true);
+		mdb.getCollection("test", "person")
+			.expectFindOne(dbObject("{'_id':'" + BSONPieces.simplePersonId + "'}"), cloneDbo);
+		
+		Person p = db.load(Person.class, BSONPieces.simplePersonId);
+		
+		mdb.checkAll();
+		BSONPieces.assertSimplePersonLoaded(p);
+		assertThat(p.getMagRo(), equalTo(true));
+		
+	}
+	
 	
 	@Test
 	public void readEnum() throws Exception {

Modified: labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/test/domain/Person.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/test/domain/Person.java?rev=1133121&r1=1133120&r2=1133121&view=diff
==============================================================================
--- labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/test/domain/Person.java (original)
+++ labs/magma/trunk/database-mongodb/src/test/java/org/apache/magma/database/mongo/test/domain/Person.java Tue Jun  7 18:16:00 2011
@@ -13,6 +13,7 @@ import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Transient;
 
+import org.apache.magma.beans.MagReadOnly;
 import org.apache.magma.database.LogicallyNamed;
 import org.apache.openjpa.persistence.ElementDependent;
 
@@ -33,6 +34,8 @@ public class Person implements Logically
 	private List<Address> addresses = new ArrayList<Address>();
 	private List<ToDo> todos = new ArrayList<ToDo>();
 	
+	private boolean magRo = false;
+	
 	public enum PersonType {
 		FRIENDLY,
 		HATEFUL
@@ -142,4 +145,12 @@ public class Person implements Logically
 		this.type = type;
 	}
 	
+	@MagReadOnly
+	public boolean getMagRo() {
+		return magRo;
+	}
+	public void setMagRo(boolean magRo) {
+		this.magRo = magRo;
+	}
+	
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org