diff --git a/spring-data-mongodb-cross-store/.classpath b/spring-data-mongodb-cross-store/.classpath index cad9eafec..b1ef66a27 100644 --- a/spring-data-mongodb-cross-store/.classpath +++ b/spring-data-mongodb-cross-store/.classpath @@ -2,7 +2,7 @@ - + diff --git a/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java b/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java index eb906d323..e36f94a85 100644 --- a/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java +++ b/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java @@ -36,11 +36,12 @@ public class MongoChangeSetPersister implements ChangeSetPersister { @Override public void getPersistentState(Class entityClass, Object id, ChangeSet changeSet) throws DataAccessException, NotFoundException { - String collection = ClassUtils.getQualifiedName(entityClass); + String collection = ClassUtils.getShortName(entityClass).toLowerCase(); DBObject q = new BasicDBObject(); q.put("_id", id); try { DBObject dbo = mongoTemplate.getCollection(collection).findOne(q); + log.debug("Found DBObject: " + dbo); if (dbo == null) { throw new NotFoundException(); } @@ -90,7 +91,7 @@ public class MongoChangeSetPersister implements ChangeSetPersister { if (id == null) { log.info("Flush: entity make persistent; data store will assign id"); cs.set("_class", entityClass.getName()); - String collection = entityClass.getName(); + String collection = entityClass.getSimpleName().toLowerCase(); DBCollection dbc = mongoTemplate.getCollection(collection); DBObject dbo = mapChangeSetToDbObject(cs); if (dbc == null) { diff --git a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java index c9e863383..8de689735 100644 --- a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java @@ -4,12 +4,18 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.document.mongodb.MongoTemplate; +import org.springframework.persistence.document.test.MongoPerson; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.BeforeTransaction; import org.springframework.transaction.annotation.Transactional; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; import com.mongodb.Mongo; +import com.mongodb.MongoException; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext.xml") @@ -18,6 +24,17 @@ public class CrossStoreMongoTests { @Autowired private Mongo mongo; + @Autowired + private MongoTemplate mongoTemplate; + + @BeforeTransaction + public void setUp() { + DBCollection col = this.mongoTemplate.getCollection(MongoPerson.class.getSimpleName().toLowerCase()); + if (col != null) { + this.mongoTemplate.dropCollection(MongoPerson.class.getName()); + } + } + @Test @Transactional @Rollback(false) @@ -29,4 +46,17 @@ public class CrossStoreMongoTests { Assert.assertEquals(1 + age, p.getAge()); } + @Test + @Transactional + public void testInstantiatedFinder() throws MongoException { + String key = MongoPerson.class.getSimpleName().toLowerCase(); + DBCollection col = this.mongoTemplate.getCollection(key); + DBObject dbo = col.findOne(); + Object id1 = dbo.get("_id"); + MongoPerson found = MongoPerson.findPerson(id1); + Assert.assertNotNull(found); + Assert.assertEquals(id1, found.getId()); + System.out.println("Loaded MongoPerson data: " + found); + } + } diff --git a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/Account.java b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/Account.java similarity index 93% rename from spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/Account.java rename to spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/Account.java index 87b882df2..f73a6586e 100644 --- a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/Account.java +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/Account.java @@ -1,4 +1,4 @@ -package org.springframework.data.document.persistence; +package org.springframework.persistence.document.test; import javax.persistence.Entity; import javax.persistence.Id; diff --git a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/MongoPerson.java b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson.java similarity index 95% rename from spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/MongoPerson.java rename to spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson.java index c1a32ee02..0603beb86 100644 --- a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/MongoPerson.java +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson.java @@ -1,4 +1,4 @@ -package org.springframework.data.document.persistence; +package org.springframework.persistence.document.test; import org.springframework.persistence.RelatedEntity; import org.springframework.persistence.document.DocumentEntity; diff --git a/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson_Roo_Mongo_Entity.aj b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson_Roo_Mongo_Entity.aj new file mode 100644 index 000000000..3cd14ee18 --- /dev/null +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/persistence/document/test/MongoPerson_Roo_Mongo_Entity.aj @@ -0,0 +1,60 @@ +package org.springframework.persistence.document.test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.persistence.support.ChangeSet; +import org.springframework.persistence.support.ChangeSetBacked; +import org.springframework.persistence.support.ChangeSetConfiguration; +import org.springframework.persistence.support.ChangeSetPersister; +import org.springframework.persistence.support.ChangeSetSynchronizer; +import org.springframework.persistence.support.HashMapChangeSet; +import org.springframework.persistence.support.ChangeSetPersister.NotFoundException; + +/** + * EXAMPLE OF CODE THAT SHOULD BE GENERATED BY ROO BESIDES EACH MONGOENTITY CLASS + * + * Note: Combines X_Roo_Entity with X_Roo_Finder, as + * we need only a single aspect for entities. + * + * @author Thomas Risberg + * + */ +privileged aspect MongoPerson_Roo_Mongo_Entity { + + private static ChangeSetPersister changeSetPersister() { + return new MongoConfigurationHolder().changeSetConfig.getChangeSetPersister(); + } + + private static ChangeSetSynchronizer changeSetManager() { + return new MongoConfigurationHolder().changeSetConfig.getChangeSetManager(); + } + + @Configurable + public static class MongoConfigurationHolder { + @Autowired + @Qualifier("mongoChangeSetConfiguration") + public ChangeSetConfiguration changeSetConfig; + } + + /** + * Add constructor that takes ChangeSet. + * @param ChangeSet + */ + public MongoPerson.new(ChangeSet cs) { + super(); + setChangeSet(cs); + } + + public static MongoPerson MongoPerson.findPerson(Object id) { + ChangeSet rv = new HashMapChangeSet(); + try { + changeSetPersister().getPersistentState(MongoPerson.class, id, rv); + return new MongoPerson(rv); + } + catch (NotFoundException ex) { + return null; + } + } + +} diff --git a/spring-data-mongodb-cross-store/src/test/resources/META-INF/persistence.xml b/spring-data-mongodb-cross-store/src/test/resources/META-INF/persistence.xml index 6415a90e8..232536c0d 100644 --- a/spring-data-mongodb-cross-store/src/test/resources/META-INF/persistence.xml +++ b/spring-data-mongodb-cross-store/src/test/resources/META-INF/persistence.xml @@ -2,7 +2,7 @@ org.hibernate.ejb.HibernatePersistence - org.springframework.data.document.persistence.Account + org.springframework.persistence.document.test.Account diff --git a/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml b/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml index da626d90e..bffad856c 100644 --- a/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml +++ b/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml @@ -3,10 +3,20 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" + xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> + + + + + + + + @@ -15,7 +25,6 @@ -