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