From eb5bbe46860b4059e3714b3ab1c442b66b1cfe39 Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Mon, 28 Feb 2011 16:56:35 -0500 Subject: [PATCH] added new cross-store module --- spring-data-document-parent/pom.xml | 17 ++ spring-data-mongodb-cross-store/.classpath | 10 + spring-data-mongodb-cross-store/.project | 24 +++ .../.settings/org.eclipse.jdt.core.prefs | 6 + .../.settings/org.maven.ide.eclipse.prefs | 8 + spring-data-mongodb-cross-store/pom.xml | 203 ++++++++++++++++++ .../persistence/document/DocumentEntity.java | 19 ++ .../data/document/persistence/Account.java | 49 +++++ .../persistence/CrossStoreMongoTests.java | 33 +++ .../document/persistence/MongoPerson.java | 63 ++++++ .../META-INF/spring/applicationContext.xml | 19 ++ spring-data-mongodb/pom.xml | 1 - 12 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 spring-data-mongodb-cross-store/.classpath create mode 100644 spring-data-mongodb-cross-store/.project create mode 100644 spring-data-mongodb-cross-store/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-data-mongodb-cross-store/.settings/org.maven.ide.eclipse.prefs create mode 100644 spring-data-mongodb-cross-store/pom.xml create mode 100644 spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java create mode 100644 spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/Account.java create mode 100644 spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java create mode 100644 spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/MongoPerson.java create mode 100644 spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml diff --git a/spring-data-document-parent/pom.xml b/spring-data-document-parent/pom.xml index 5d08af334..077bf9455 100644 --- a/spring-data-document-parent/pom.xml +++ b/spring-data-document-parent/pom.xml @@ -16,6 +16,8 @@ 1.8.4 1.5.10 3.0.5.RELEASE + 1.0.0.BUILD-SNAPSHOT + 1.6.11.M2 @@ -111,6 +113,11 @@ spring-tx ${org.springframework.version} + + org.springframework + spring-orm + ${org.springframework.version} + org.springframework spring-test @@ -119,6 +126,16 @@ + + org.springframework.data + spring-data-commons-core + ${data.commons.version} + + + org.springframework.data + spring-data-commons-aspects + ${data.commons.version} + org.springframework.data spring-data-document-core diff --git a/spring-data-mongodb-cross-store/.classpath b/spring-data-mongodb-cross-store/.classpath new file mode 100644 index 000000000..399cc9b91 --- /dev/null +++ b/spring-data-mongodb-cross-store/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/spring-data-mongodb-cross-store/.project b/spring-data-mongodb-cross-store/.project new file mode 100644 index 000000000..20315de9a --- /dev/null +++ b/spring-data-mongodb-cross-store/.project @@ -0,0 +1,24 @@ + + + spring-data-mongodb-cross-store + + + + + + org.eclipse.ajdt.core.ajbuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.eclipse.ajdt.ui.ajnature + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/spring-data-mongodb-cross-store/.settings/org.eclipse.jdt.core.prefs b/spring-data-mongodb-cross-store/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..2bafcc110 --- /dev/null +++ b/spring-data-mongodb-cross-store/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +#Mon Feb 28 16:26:01 EST 2011 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/spring-data-mongodb-cross-store/.settings/org.maven.ide.eclipse.prefs b/spring-data-mongodb-cross-store/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..e53ed8823 --- /dev/null +++ b/spring-data-mongodb-cross-store/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Mon Feb 28 16:25:59 EST 2011 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml new file mode 100644 index 000000000..ae18b6747 --- /dev/null +++ b/spring-data-mongodb-cross-store/pom.xml @@ -0,0 +1,203 @@ + + 4.0.0 + + org.springframework.data + spring-data-document-parent + 1.0.0.BUILD-SNAPSHOT + ../spring-data-document-parent/pom.xml + + spring-data-mongodb-cross-store + jar + Spring Data MongoDB Cross-store Persistence Support + + + + + org.springframework + spring-beans + + + org.springframework + spring-tx + + + org.springframework + spring-orm + + + + + org.springframework.data + spring-data-commons-core + + + org.springframework.data + spring-data-commons-aspects + + + org.springframework.data + spring-data-mongodb + + + + + + org.slf4j + slf4j-api + + + org.slf4j + jcl-over-slf4j + compile + + + org.slf4j + slf4j-log4j12 + runtime + + + log4j + log4j + + + javax.mail + mail + + + javax.jms + jms + + + com.sun.jdmk + jmxtools + + + com.sun.jmx + jmxri + + + runtime + + + + javax.annotation + jsr250-api + true + + + + org.mockito + mockito-all + test + + + + junit + junit + + + + org.aspectj + aspectjrt + ${aspectj.version} + + + cglib + cglib + 2.2 + + + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + 1.0.0.Final + + + + + org.hibernate + hibernate-entitymanager + 3.5.5-Final + test + + + hsqldb + hsqldb + 1.8.0.10 + test + + + javax.validation + validation-api + 1.0.0.GA + + + org.hibernate + hibernate-validator + 4.0.2.GA + test + + + + + + jboss-repository + JBoss Public Repository + http://repository.jboss.org/nexus/content/groups/public-jboss + + + spring-maven-snapshot + + true + + Springframework Maven SNAPSHOT Repository + http://maven.springframework.org/snapshot + + + + + + org.codehaus.mojo + aspectj-maven-plugin + 1.2 + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + compile + test-compile + + + + + true + + + org.springframework + spring-aspects + + + + 1.6 + 1.6 + + + + + diff --git a/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java b/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java new file mode 100644 index 000000000..b3130164e --- /dev/null +++ b/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java @@ -0,0 +1,19 @@ +package org.springframework.persistence.document; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation to denote an object that should be transparently persisted + * using MongoDB + * + * @author Thomas Risberg + */ + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface DocumentEntity { + +} 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/data/document/persistence/Account.java new file mode 100644 index 000000000..26edd39f3 --- /dev/null +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/Account.java @@ -0,0 +1,49 @@ +package org.springframework.data.document.persistence; + +import javax.persistence.Entity; + +@Entity +public class Account { + + private String name; + + private float balance; + + private String friendlyName; + + private String whatever; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public float getBalance() { + return balance; + } + + public void setBalance(float balance) { + this.balance = balance; + } + + public String getFriendlyName() { + return friendlyName; + } + + public void setFriendlyName(String friendlyName) { + this.friendlyName = friendlyName; + } + + public String getWhatever() { + return whatever; + } + + public void setWhatever(String whatever) { + this.whatever = whatever; + } + + +} 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 new file mode 100644 index 000000000..6cc76521d --- /dev/null +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/CrossStoreMongoTests.java @@ -0,0 +1,33 @@ +package org.springframework.data.document.persistence; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import com.mongodb.Mongo; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext.xml") +public class CrossStoreMongoTests { + + @Autowired + private Mongo mongo; + + @Test +// @Transactional +// @Rollback(false) + public void testUserConstructor() { + int age = 33; + MongoPerson p = new MongoPerson("Thomas", age); + //Assert.assertEquals(p.getRedisValue().getString("RedisPerson.name"), p.getName()); + Assert.assertEquals(age, p.getAge()); + p.birthday(); + Assert.assertEquals(1 + age, p.getAge()); + } + +} 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/data/document/persistence/MongoPerson.java new file mode 100644 index 000000000..c1a32ee02 --- /dev/null +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/MongoPerson.java @@ -0,0 +1,63 @@ +package org.springframework.data.document.persistence; + +import org.springframework.persistence.RelatedEntity; +import org.springframework.persistence.document.DocumentEntity; + +@DocumentEntity +public class MongoPerson { + + // TODO only public because of AspectJ bug + public String name; + + public int age; + + public java.util.Date birthDate; + + // TODO only public to check weaving bug-- + // seems to work whereas private didn't + @RelatedEntity + public Account account; + + public MongoPerson(String name, int age) { + this.name = name; + this.age = age; + this.birthDate = new java.util.Date(); + } + + public void birthday() { + ++age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public java.util.Date getBirthDate() { + return birthDate; + } + + public void setBirthDate(java.util.Date birthDate) { + this.birthDate = birthDate; + } + + public Account getAccount() { + return account; + } + + public void setAccount(Account account) { + this.account = 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 new file mode 100644 index 000000000..0e0d85184 --- /dev/null +++ b/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 3d2b56fdd..1fa14284d 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -35,7 +35,6 @@ org.springframework.data spring-data-commons-core - 1.0.0.BUILD-SNAPSHOT