DATADOC-109 - Introduced MappingContext implementation for SimpleMongoConverter.
Adapted changes in Spring Data Commons. Adapted test cases accordingly. Introduced SimpleMongoMappingContext that that reflects the meta-model assumptions in SimpleMongoConverter. Adapted repository factories accordingly as we can now assume that there is a MappingContext available always. Refactored QueryMapper to be stateless so that we don't need to recreate instances of it. Added unit tests to verify id property to key mapping and type conversion to ObjectId. Polished MappingTests to simply drop the database after all test were finished to make sure it starts with a clean state on a potential next run.
This commit is contained in:
476
ajcore.20110315.195433.898.txt
Normal file
476
ajcore.20110315.195433.898.txt
Normal file
@@ -0,0 +1,476 @@
|
||||
---- AspectJ Properties ---
|
||||
AspectJ Compiler 1.6.11.M2 built on Tuesday Feb 22, 2011 at 17:15:06 GMT
|
||||
---- Dump Properties ---
|
||||
Dump file: ajcore.20110315.195433.898.txt
|
||||
Dump reason: abort
|
||||
Dump on exception: true
|
||||
Dump at exit condition: abort
|
||||
---- System Properties ---
|
||||
java.runtime.name=Java(TM) SE Runtime Environment
|
||||
sun.boot.library.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries
|
||||
java.vm.version=19.1-b02-334
|
||||
awt.nativeDoubleBuffering=true
|
||||
gopherProxySet=false
|
||||
mrj.build=10M3326
|
||||
java.vm.vendor=Apple Inc.
|
||||
java.vendor.url=http://www.apple.com/
|
||||
guice.disable.misplaced.annotation.check=true
|
||||
path.separator=:
|
||||
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
|
||||
file.encoding.pkg=sun.io
|
||||
sun.java.launcher=SUN_STANDARD
|
||||
user.country=DE
|
||||
sun.os.patch.level=unknown
|
||||
java.vm.specification.name=Java Virtual Machine Specification
|
||||
user.dir=/Users/olivergierke/Documents/workspace/spring-data-document
|
||||
java.runtime.version=1.6.0_24-b07-334-10M3326
|
||||
java.awt.graphicsenv=apple.awt.CGraphicsEnvironment
|
||||
java.endorsed.dirs=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/endorsed
|
||||
os.arch=x86_64
|
||||
java.io.tmpdir=/var/folders/pM/pMiDtflBHwGXrI8njdh15k+++TI/-Tmp-/
|
||||
line.separator=
|
||||
|
||||
java.vm.specification.vendor=Sun Microsystems Inc.
|
||||
os.name=Mac OS X
|
||||
classworlds.conf=/Applications/Tools/maven-3/bin/m2.conf
|
||||
sun.jnu.encoding=MacRoman
|
||||
java.library.path=.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
|
||||
java.specification.name=Java Platform API Specification
|
||||
java.class.version=50.0
|
||||
sun.management.compiler=HotSpot 64-Bit Server Compiler
|
||||
os.version=10.6.6
|
||||
http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
|
||||
user.home=/Users/olivergierke
|
||||
user.timezone=Europe/Berlin
|
||||
java.awt.printerjob=apple.awt.CPrinterJob
|
||||
file.encoding=MacRoman
|
||||
java.specification.version=1.6
|
||||
java.class.path=/Applications/Tools/maven-3/boot/plexus-classworlds-2.4.jar
|
||||
user.name=olivergierke
|
||||
java.vm.specification.version=1.0
|
||||
java.home=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
|
||||
sun.arch.data.model=64
|
||||
user.language=de
|
||||
java.specification.vendor=Sun Microsystems Inc.
|
||||
awt.toolkit=apple.awt.CToolkit
|
||||
java.vm.info=mixed mode
|
||||
java.version=1.6.0_24
|
||||
java.ext.dirs=/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext
|
||||
sun.boot.class.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar
|
||||
java.vendor=Apple Inc.
|
||||
maven.home=/Applications/Tools/maven-3
|
||||
file.separator=/
|
||||
java.vendor.url.bug=http://bugreport.apple.com/
|
||||
sun.io.unicode.encoding=UnicodeLittle
|
||||
sun.cpu.endian=little
|
||||
mrj.version=1060.1.6.0_24-334
|
||||
socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16
|
||||
ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
|
||||
sun.cpu.isalist=
|
||||
---- Command Line ---
|
||||
-encoding
|
||||
UTF-8
|
||||
-outxml
|
||||
-source
|
||||
1.6
|
||||
-target
|
||||
1.6
|
||||
-classpath
|
||||
/Users/olivergierke/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/Users/olivergierke/.m2/repository/asm/asm/3.1/asm-3.1.jar:/Users/olivergierke/.m2/repository/cglib/cglib/2.2/cglib-2.2.jar:/Users/olivergierke/.m2/repository/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar:/Users/olivergierke/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar:/Users/olivergierke/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar:/Users/olivergierke/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/olivergierke/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar:/Users/olivergierke/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar:/Users/olivergierke/.m2/repository/org/aspectj/aspectjrt/1.6.11.M2/aspectjrt-1.6.11.M2.jar:/Users/olivergierke/.m2/repository/org/hibernate/hibernate-entitymanager/3.5.5-Final/hibernate-entitymanager-3.5.5-Final.jar:/Users/olivergierke/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar:/Users/olivergierke/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar:/Users/olivergierke/.m2/repository/org/mockito/mockito-all/1.8.4/mockito-all-1.8.4.jar:/Users/olivergierke/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.10/jcl-over-slf4j-1.5.10.jar:/Users/olivergierke/.m2/repository/org/slf4j/slf4j-api/1.5.10/slf4j-api-1.5.10.jar:/Users/olivergierke/.m2/repository/org/slf4j/slf4j-log4j12/1.5.10/slf4j-log4j12-1.5.10.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-aop/3.0.5.RELEASE/spring-aop-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-context/3.0.5.RELEASE/spring-context-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-context-support/3.0.5.RELEASE/spring-context-support-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-expression/3.0.5.RELEASE/spring-expression-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-jdbc/3.0.5.RELEASE/spring-jdbc-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-tx/3.0.5.RELEASE/spring-tx-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-web/3.0.5.RELEASE/spring-web-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-webmvc/3.0.5.RELEASE/spring-webmvc-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-core/1.0.0.BUILD-SNAPSHOT/spring-data-commons-core-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-document-core/target/spring-data-document-core-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb/target/spring-data-mongodb-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes
|
||||
-aspectpath
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar
|
||||
-d
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java
|
||||
---- Full Classpath ---
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar(missing)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar(30961599 bytes)
|
||||
/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar(42463 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar(989361 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar(missing)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar(missing)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar(320697 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar(88256 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar(3551766 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar(35548 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar(62347 bytes)
|
||||
/Library/Java/Extensions/RXTXcomm.jar(112185 bytes)
|
||||
/System/Library/Java/Extensions/AppleScriptEngine.jar(6470 bytes)
|
||||
/System/Library/Java/Extensions/dns_sd.jar(17780 bytes)
|
||||
/System/Library/Java/Extensions/j3daudio.jar(1223487 bytes)
|
||||
/System/Library/Java/Extensions/j3dcore.jar(1157342 bytes)
|
||||
/System/Library/Java/Extensions/j3dutils.jar(685292 bytes)
|
||||
/System/Library/Java/Extensions/jai_codec.jar(275486 bytes)
|
||||
/System/Library/Java/Extensions/jai_core.jar(1544537 bytes)
|
||||
/System/Library/Java/Extensions/mlibwrapper_jai.jar(41239 bytes)
|
||||
/System/Library/Java/Extensions/MRJToolkit.jar(12849 bytes)
|
||||
/System/Library/Java/Extensions/QTJava.zip(938700 bytes)
|
||||
/System/Library/Java/Extensions/vecmath.jar(127628 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar(48726 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar(8228 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar(468491 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar(170239 bytes)
|
||||
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar(231749 bytes)
|
||||
/Users/olivergierke/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar(4467 bytes)
|
||||
/Users/olivergierke/.m2/repository/asm/asm/3.1/asm-3.1.jar(43033 bytes)
|
||||
/Users/olivergierke/.m2/repository/cglib/cglib/2.2/cglib-2.2.jar(278682 bytes)
|
||||
/Users/olivergierke/.m2/repository/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar(706710 bytes)
|
||||
/Users/olivergierke/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar(5848 bytes)
|
||||
/Users/olivergierke/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar(52150 bytes)
|
||||
/Users/olivergierke/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar(47433 bytes)
|
||||
/Users/olivergierke/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar(237047 bytes)
|
||||
/Users/olivergierke/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar(391834 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/aspectj/aspectjrt/1.6.11.M2/aspectjrt-1.6.11.M2.jar(116222 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/hibernate/hibernate-entitymanager/3.5.5-Final/hibernate-entitymanager-3.5.5-Final.jar(416039 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar(226653 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar(100884 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/mockito/mockito-all/1.8.4/mockito-all-1.8.4.jar(1409262 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.10/jcl-over-slf4j-1.5.10.jar(17289 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/slf4j/slf4j-api/1.5.10/slf4j-api-1.5.10.jar(23659 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/slf4j/slf4j-log4j12/1.5.10/slf4j-log4j12-1.5.10.jar(9692 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-aop/3.0.5.RELEASE/spring-aop-3.0.5.RELEASE.jar(321190 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE.jar(53082 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar(35548 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE.jar(555410 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-context/3.0.5.RELEASE/spring-context-3.0.5.RELEASE.jar(668861 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-context-support/3.0.5.RELEASE/spring-context-support-3.0.5.RELEASE.jar(100870 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar(382442 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-expression/3.0.5.RELEASE/spring-expression-3.0.5.RELEASE.jar(169752 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-jdbc/3.0.5.RELEASE/spring-jdbc-3.0.5.RELEASE.jar(385712 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar(334327 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-tx/3.0.5.RELEASE/spring-tx-3.0.5.RELEASE.jar(231922 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-web/3.0.5.RELEASE/spring-web-3.0.5.RELEASE.jar(395587 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/spring-webmvc/3.0.5.RELEASE/spring-webmvc-3.0.5.RELEASE.jar(418977 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar(62347 bytes)
|
||||
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-core/1.0.0.BUILD-SNAPSHOT/spring-data-commons-core-1.0.0.BUILD-SNAPSHOT.jar(148186 bytes)
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-document-core/target/spring-data-document-core-1.0.0.BUILD-SNAPSHOT.jar(62926 bytes)
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb/target/spring-data-mongodb-1.0.0.BUILD-SNAPSHOT.jar(183122 bytes)
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes(2 entries)
|
||||
---- Compiler Messages ---
|
||||
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar
|
||||
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar
|
||||
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar
|
||||
info Pipelining compilation
|
||||
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj
|
||||
info weaver operating in reweavable mode. Need to verify any required types exist.
|
||||
info woven aspect org.springframework.persistence.document.MongoDocumentBacking (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj)
|
||||
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java
|
||||
info woven class org.springframework.persistence.document.DocumentEntity (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java)
|
||||
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java
|
||||
abort trouble in:
|
||||
public class org.springframework.persistence.document.MongoEntityOperations extends org.springframework.persistence.OrderedEntityOperations:
|
||||
private org.springframework.data.document.mongodb.MongoTemplate mongoTemplate [RuntimeVisibleAnnotations]
|
||||
private org.springframework.persistence.support.EntityInstantiator entityInstantiator [Signature(Lorg/springframework/persistence/support/EntityInstantiator<Lorg/springframework/persistence/support/ChangeSetBacked;Lorg/springframework/persistence/support/ChangeSet;>;)]
|
||||
private org.springframework.persistence.document.MongoChangeSetPersister changeSetPersister
|
||||
public void <init>():
|
||||
ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 16)
|
||||
INVOKESPECIAL org.springframework.persistence.OrderedEntityOperations.<init> ()V
|
||||
constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.<init>())
|
||||
| RETURN
|
||||
constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.<init>())
|
||||
end public void <init>()
|
||||
|
||||
public void setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator) org.aspectj.weaver.MethodDeclarationLineNumber: 25:1040
|
||||
:
|
||||
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator))
|
||||
| ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 26)
|
||||
| ALOAD_1 // Lorg/springframework/persistence/support/EntityInstantiator; entityInstantiator
|
||||
| field-set(org.springframework.persistence.support.EntityInstantiator org.springframework.persistence.document.MongoEntityOperations.entityInstantiator)
|
||||
| | PUTFIELD org.springframework.persistence.document.MongoEntityOperations.entityInstantiator Lorg/springframework/persistence/support/EntityInstantiator;
|
||||
| field-set(org.springframework.persistence.support.EntityInstantiator org.springframework.persistence.document.MongoEntityOperations.entityInstantiator)
|
||||
| RETURN (line 27)
|
||||
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator))
|
||||
end public void setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator)
|
||||
|
||||
public void setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister) org.aspectj.weaver.MethodDeclarationLineNumber: 30:1218
|
||||
:
|
||||
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister))
|
||||
| ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 31)
|
||||
| ALOAD_1 // Lorg/springframework/persistence/document/MongoChangeSetPersister; changeSetPersister
|
||||
| field-set(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
|
||||
| | PUTFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
|
||||
| field-set(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
|
||||
| RETURN (line 32)
|
||||
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister))
|
||||
end public void setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister)
|
||||
|
||||
public boolean cacheInEntity() org.aspectj.weaver.MethodDeclarationLineNumber: 36:1377
|
||||
:
|
||||
method-execution(boolean org.springframework.persistence.document.MongoEntityOperations.cacheInEntity())
|
||||
| ICONST_1 (line 37)
|
||||
| IRETURN
|
||||
method-execution(boolean org.springframework.persistence.document.MongoEntityOperations.cacheInEntity())
|
||||
end public boolean cacheInEntity()
|
||||
|
||||
public org.springframework.persistence.support.ChangeSetBacked findEntity(Class, Object) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 41:1459
|
||||
:
|
||||
method-execution(org.springframework.persistence.support.ChangeSetBacked org.springframework.persistence.document.MongoEntityOperations.findEntity(java.lang.Class, java.lang.Object))
|
||||
| catch org.springframework.persistence.support.ChangeSetPersister$NotFoundException -> E0
|
||||
| | NEW org.springframework.persistence.support.HashMapChangeSet (line 43)
|
||||
| | DUP
|
||||
| | INVOKESPECIAL org.springframework.persistence.support.HashMapChangeSet.<init> ()V
|
||||
| | ASTORE_3
|
||||
| | ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 44)
|
||||
| | field-get(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
|
||||
| | | GETFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
|
||||
| | field-get(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
|
||||
| | ALOAD_1 // Ljava/lang/Class; entityClass
|
||||
| | ALOAD_2 // Ljava/lang/Object; key
|
||||
| | ALOAD_3 // Lorg/springframework/persistence/support/ChangeSet; cs
|
||||
| | method-call(void org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState(java.lang.Class, java.lang.Object, org.springframework.persistence.support.ChangeSet))
|
||||
| | | INVOKEVIRTUAL org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState (Ljava/lang/Class;Ljava/lang/Object;Lorg/springframework/persistence/support/ChangeSet;)V
|
||||
| | method-call(void org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState(java.lang.Class, java.lang.Object, org.springframework.persistence.support.ChangeSet))
|
||||
| | ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 45)
|
||||
| | GETFIELD org.springframework.persistence.document.MongoEntityOperations.entityInstantiator Lorg/springframework/persistence/support/EntityInstantiator;
|
||||
| | ALOAD_3 // Lorg/springframework/persistence/support/ChangeSet; cs
|
||||
| | ALOAD_1 // Ljava/lang/Class; entityClass
|
||||
| | INVOKEINTERFACE org.springframework.persistence.support.EntityInstantiator.createEntityFromState (Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
|
||||
| | CHECKCAST org.springframework.persistence.support.ChangeSetBacked
|
||||
| catch org.springframework.persistence.support.ChangeSetPersister$NotFoundException -> E0
|
||||
| ARETURN
|
||||
| E0: POP (line 46)
|
||||
| ACONST_NULL (line 47)
|
||||
| ARETURN
|
||||
method-execution(org.springframework.persistence.support.ChangeSetBacked org.springframework.persistence.document.MongoEntityOperations.findEntity(java.lang.Class, java.lang.Object))
|
||||
end public org.springframework.persistence.support.ChangeSetBacked findEntity(Class, Object) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public Object findUniqueKey(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 52:1847
|
||||
:
|
||||
ALOAD_1 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 53)
|
||||
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
|
||||
ARETURN
|
||||
end public Object findUniqueKey(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public boolean isTransactional() org.aspectj.weaver.MethodDeclarationLineNumber: 57:1980
|
||||
:
|
||||
ICONST_0 (line 59)
|
||||
IRETURN
|
||||
end public boolean isTransactional()
|
||||
|
||||
public boolean isTransient(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 63:2070
|
||||
:
|
||||
ALOAD_1 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 64)
|
||||
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
|
||||
IFNONNULL L0
|
||||
ICONST_1
|
||||
IRETURN
|
||||
L0: ICONST_0
|
||||
IRETURN
|
||||
end public boolean isTransient(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public Object makePersistent(Object, org.springframework.persistence.support.ChangeSetBacked, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 68:2208
|
||||
:
|
||||
ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 69)
|
||||
GETFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
|
||||
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity
|
||||
INVOKEVIRTUAL java.lang.Object.getClass ()Ljava/lang/Class;
|
||||
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity
|
||||
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getChangeSet (Lorg/springframework/persistence/support/ChangeSetBacked;)Lorg/springframework/persistence/support/ChangeSet;
|
||||
INVOKEVIRTUAL org.springframework.persistence.document.MongoChangeSetPersister.persistState (Ljava/lang/Class;Lorg/springframework/persistence/support/ChangeSet;)Ljava/lang/Object;
|
||||
POP
|
||||
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 70)
|
||||
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
|
||||
ARETURN
|
||||
end public Object makePersistent(Object, org.springframework.persistence.support.ChangeSetBacked, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public boolean supports(Class, org.springframework.persistence.RelatedEntity) org.aspectj.weaver.MethodDeclarationLineNumber: 74:2463
|
||||
:
|
||||
ALOAD_1 // Ljava/lang/Class; entityClass (line 75)
|
||||
LDC org.springframework.persistence.document.DocumentEntity
|
||||
INVOKEVIRTUAL java.lang.Class.isAnnotationPresent (Ljava/lang/Class;)Z
|
||||
IRETURN
|
||||
end public boolean supports(Class, org.springframework.persistence.RelatedEntity)
|
||||
|
||||
public volatile boolean isTransient(Object) throws org.springframework.dao.DataAccessException:
|
||||
ALOAD_0 (line 1)
|
||||
ALOAD_1
|
||||
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
|
||||
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.isTransient (Lorg/springframework/persistence/support/ChangeSetBacked;)Z
|
||||
IRETURN
|
||||
end public volatile boolean isTransient(Object) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public volatile Object findEntity(Class, Object) throws org.springframework.dao.DataAccessException:
|
||||
ALOAD_0 (line 1)
|
||||
ALOAD_1
|
||||
CHECKCAST java.lang.Class
|
||||
ALOAD_2
|
||||
CHECKCAST java.lang.Object
|
||||
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.findEntity (Ljava/lang/Class;Ljava/lang/Object;)Lorg/springframework/persistence/support/ChangeSetBacked;
|
||||
ARETURN
|
||||
end public volatile Object findEntity(Class, Object) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public volatile Object makePersistent(Object, Object, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException:
|
||||
ALOAD_0 (line 1)
|
||||
ALOAD_1
|
||||
ALOAD_2
|
||||
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
|
||||
ALOAD_3
|
||||
ALOAD 4
|
||||
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.makePersistent (Ljava/lang/Object;Lorg/springframework/persistence/support/ChangeSetBacked;Ljava/lang/reflect/Field;Lorg/springframework/persistence/RelatedEntity;)Ljava/lang/Object;
|
||||
ARETURN
|
||||
end public volatile Object makePersistent(Object, Object, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException
|
||||
|
||||
public volatile Object findUniqueKey(Object) throws org.springframework.dao.DataAccessException:
|
||||
ALOAD_0 (line 1)
|
||||
ALOAD_1
|
||||
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
|
||||
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.findUniqueKey (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
|
||||
ARETURN
|
||||
end public volatile Object findUniqueKey(Object) throws org.springframework.dao.DataAccessException
|
||||
|
||||
end public class org.springframework.persistence.document.MongoEntityOperations
|
||||
-- (AbortCompilation) null
|
||||
null
|
||||
org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:97)
|
||||
at org.aspectj.ajdt.internal.compiler.problem.AjProblemReporter.handle(AjProblemReporter.java:308)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:154)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter.handle(ProblemReporter.java:1735)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter.isClassPathCorrect(ProblemReporter.java:3531)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.cacheMissingBinaryType(LookupEnvironment.java:189)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:52)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:99)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:167)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:451)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:505)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.resolveSingleImport(CompilationUnitScope.java:698)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2487)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2228)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:142)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypesFor(SourceTypeBinding.java:1476)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.methodsBase(SourceTypeBinding.java:1185)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.methods(SourceTypeBinding.java:1757)
|
||||
at org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType.fillDeclaredMembers(EclipseSourceType.java:244)
|
||||
at org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType.getDeclaredMethods(EclipseSourceType.java:395)
|
||||
at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:770)
|
||||
at org.aspectj.weaver.ResolvedType.lookupMethod(ResolvedType.java:534)
|
||||
at org.aspectj.weaver.World.resolve(World.java:632)
|
||||
at org.aspectj.weaver.MemberImpl.resolve(MemberImpl.java:95)
|
||||
at org.aspectj.weaver.JoinPointSignatureIterator.addSignaturesUpToFirstDefiningMember(JoinPointSignatureIterator.java:112)
|
||||
at org.aspectj.weaver.JoinPointSignatureIterator.<init>(JoinPointSignatureIterator.java:49)
|
||||
at org.aspectj.weaver.MemberImpl.getJoinPointSignatures(MemberImpl.java:515)
|
||||
at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:316)
|
||||
at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:202)
|
||||
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
|
||||
at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:51)
|
||||
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
|
||||
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
|
||||
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
|
||||
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
|
||||
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
|
||||
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
|
||||
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
|
||||
at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:113)
|
||||
at org.aspectj.weaver.Advice.match(Advice.java:109)
|
||||
at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:149)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:3116)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.matchInvokeInstruction(BcelClassWeaver.java:3064)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2765)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2543)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:474)
|
||||
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:100)
|
||||
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1687)
|
||||
at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1631)
|
||||
at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1394)
|
||||
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1180)
|
||||
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:514)
|
||||
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:447)
|
||||
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:432)
|
||||
at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)
|
||||
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
|
||||
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1021)
|
||||
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
|
||||
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:181)
|
||||
at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
|
||||
at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
|
||||
at org.aspectj.tools.ajc.Main.run(Main.java:371)
|
||||
at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
|
||||
at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:360)
|
||||
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
|
||||
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:195)
|
||||
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
|
||||
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:140)
|
||||
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
|
||||
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
|
||||
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
|
||||
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
|
||||
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316)
|
||||
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153)
|
||||
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:451)
|
||||
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:188)
|
||||
at org.apache.maven.cli.MavenCli.main(MavenCli.java:134)
|
||||
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
|
||||
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
|
||||
at java.lang.reflect.Method.invoke(Method.java:597)
|
||||
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
|
||||
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
|
||||
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
|
||||
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
|
||||
|
||||
info woven class org.springframework.persistence.document.MongoEntityOperations (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java)
|
||||
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java
|
||||
error at (no source information available)
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:1:0::0 The type com.mongodb.DBCollection cannot be resolved. It is indirectly referenced from required .class files
|
||||
error at (no source information available)
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:1:0::0 The type com.mongodb.DBObject cannot be resolved. It is indirectly referenced from required .class files
|
||||
error at import com.mongodb.BasicDBObject;
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:3:0::0 The import com.mongodb.BasicDBObject cannot be resolved
|
||||
error at import com.mongodb.DBCollection;
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:4:0::0 The import com.mongodb.DBCollection cannot be resolved
|
||||
error at import com.mongodb.DBObject;
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:5:0::0 The import com.mongodb.DBObject cannot be resolved
|
||||
error at import com.mongodb.MongoException;
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:6:0::0 The import com.mongodb.MongoException cannot be resolved
|
||||
error at DBObject q = new BasicDBObject();
|
||||
^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:35:0::0 DBObject cannot be resolved to a type
|
||||
error at DBObject q = new BasicDBObject();
|
||||
^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:35:0::0 BasicDBObject cannot be resolved to a type
|
||||
error at DBObject dbo = mongoTemplate.getCollection(collection).findOne(q);
|
||||
^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:38:0::0 DBObject cannot be resolved to a type
|
||||
error at } catch (MongoException ex) {
|
||||
^^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:57:0::0 MongoException cannot be resolved to a type
|
||||
error at throw new DataAccessResourceFailureException("Can't read from Mongo", ex);
|
||||
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:58:0::0 ex cannot be resolved
|
||||
error at DBCollection dbc = mongoTemplate.getCollection(collection);
|
||||
^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:90:0::0 DBCollection cannot be resolved to a type
|
||||
error at DBObject dbo = mapChangeSetToDbObject(cs);
|
||||
^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:91:0::0 DBObject cannot be resolved to a type
|
||||
error at DBCollection dbc = mongoTemplate.getCollection(collection);
|
||||
^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:101:0::0 DBCollection cannot be resolved to a type
|
||||
error at DBObject dbo = mapChangeSetToDbObject(cs);
|
||||
^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:102:0::0 DBObject cannot be resolved to a type
|
||||
error at BasicDBObject dbo = new BasicDBObject();
|
||||
^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:113:0::0 BasicDBObject cannot be resolved to a type
|
||||
error at BasicDBObject dbo = new BasicDBObject();
|
||||
^^^^^^^^
|
||||
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:113:0::0 BasicDBObject cannot be resolved to a type
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/orm/jpa/aspectj/JpaExceptionTranslatorAspect.class:14::0 advice defined in org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/scheduling/aspectj/AbstractAsyncExecutionAspect.class:52::0 advice defined in org.springframework.scheduling.aspectj.AbstractAsyncExecutionAspect has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:53::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:66::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:111::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar!org/springframework/persistence/StoreSpanning.class:61::0 advice defined in org.springframework.persistence.StoreSpanning has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar!org/springframework/persistence/StoreSpanning.class:116::0 advice defined in org.springframework.persistence.StoreSpanning has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj:64::0 advice defined in org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/mock/staticmock/AbstractMethodMockingControl.class:160::0 advice defined in org.springframework.mock.staticmock.AbstractMethodMockingControl has not been applied [Xlint:adviceDidNotMatch]
|
||||
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/mock/staticmock/AbstractMethodMockingControl.class:169::0 advice defined in org.springframework.mock.staticmock.AbstractMethodMockingControl has not been applied [Xlint:adviceDidNotMatch]
|
||||
293
pom.xml.orig
Normal file
293
pom.xml.orig
Normal file
@@ -0,0 +1,293 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-document-dist</artifactId>
|
||||
<name>Spring Data Document Distribution</name>
|
||||
<version>1.0.0.BUILD-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<modules>
|
||||
<module>spring-data-document-parent</module>
|
||||
<module>spring-data-document-core</module>
|
||||
<module>spring-data-mongodb</module>
|
||||
<<<<<<< Updated upstream
|
||||
<module>spring-data-mongodb-cross-store</module>
|
||||
<module>spring-data-mongodb-log4j</module>
|
||||
=======
|
||||
<!--<module>spring-data-mongodb-cross-store</module>-->
|
||||
>>>>>>> Stashed changes
|
||||
<module>spring-data-couchdb</module>
|
||||
</modules>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>trisberg</id>
|
||||
<name>Thomas Risberg</name>
|
||||
<email>trisberg at vmware.com</email>
|
||||
<organization>SpringSource</organization>
|
||||
<organizationUrl>http://www.SpringSource.com</organizationUrl>
|
||||
<roles>
|
||||
<role>Project Admin</role>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
<timezone>-5</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<id>mpollack</id>
|
||||
<name>Mark Pollack</name>
|
||||
<email>mpollack at vmware.com</email>
|
||||
<organization>SpringSource</organization>
|
||||
<organizationUrl>http://www.SpringSource.com</organizationUrl>
|
||||
<roles>
|
||||
<role>Project Admin</role>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
<timezone>-5</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<id>ogierke</id>
|
||||
<name>Oliver Gierke</name>
|
||||
<email>ogierke at vmware.com</email>
|
||||
<organization>SpringSource</organization>
|
||||
<organizationUrl>http://www.springsource.com</organizationUrl>
|
||||
<roles>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<id>jbrisbin</id>
|
||||
<name>Jon Brisbin</name>
|
||||
<email>jbrisbin at vmware.com</email>
|
||||
<organization>SpringSource</organization>
|
||||
<organizationUrl>http://www.springsource.com</organizationUrl>
|
||||
<roles>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
<timezone>-6</timezone>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>Apache License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
|
||||
<comments>
|
||||
Copyright 2010 the original author or authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
</comments>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<!-- dist.* properties are used by the antrun tasks below -->
|
||||
<dist.id>spring-data-document</dist.id>
|
||||
<dist.name>Spring Data</dist.name>
|
||||
<dist.key>DATADOC</dist.key>
|
||||
<dist.version>${project.version}</dist.version>
|
||||
<dist.releaseType>snapshot</dist.releaseType>
|
||||
<dist.finalName>${dist.id}-${dist.version}</dist.finalName>
|
||||
<dist.fileName>${dist.finalName}.zip</dist.fileName>
|
||||
<dist.filePath>target/${dist.fileName}</dist.filePath>
|
||||
<dist.bucketName>dist.springframework.org</dist.bucketName>
|
||||
<!-- these properties should be in ~/.m2/settings.xml
|
||||
<dist.accessKey>s3 access key</dist.accessKey>
|
||||
<dist.secretKey>s3 secret key</dist.secretKey>
|
||||
-->
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<extensions>
|
||||
<extension>
|
||||
<groupId>org.springframework.build.aws</groupId>
|
||||
<artifactId>org.springframework.build.aws.maven</artifactId>
|
||||
<version>3.1.0.RELEASE</version>
|
||||
</extension>
|
||||
</extensions>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>com.agilejava.docbkx</groupId>
|
||||
<artifactId>docbkx-maven-plugin</artifactId>
|
||||
<version>2.0.7</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>generate-html</goal>
|
||||
<goal>generate-pdf</goal>
|
||||
</goals>
|
||||
<phase>pre-site</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.docbook</groupId>
|
||||
<artifactId>docbook-xml</artifactId>
|
||||
<version>4.4</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<includes>index.xml</includes>
|
||||
<xincludeSupported>true</xincludeSupported>
|
||||
<foCustomization>${project.basedir}/src/docbkx/resources/xsl/fopdf.xsl</foCustomization>
|
||||
<htmlStylesheet>css/html.css</htmlStylesheet>
|
||||
<chunkedOutput>false</chunkedOutput>
|
||||
<htmlCustomization>${project.basedir}/src/docbkx/resources/xsl/html.xsl</htmlCustomization>
|
||||
<useExtensions>1</useExtensions>
|
||||
<highlightSource>1</highlightSource>
|
||||
<highlightDefaultLanguage></highlightDefaultLanguage>
|
||||
<!-- callouts -->
|
||||
<entities>
|
||||
<entity>
|
||||
<name>version</name>
|
||||
<value>${pom.version}</value>
|
||||
</entity>
|
||||
</entities>
|
||||
<postProcess>
|
||||
<copy todir="${project.basedir}/target/site/reference">
|
||||
<fileset dir="${project.basedir}/target/docbkx">
|
||||
<include name="**/*.html"/>
|
||||
<include name="**/*.pdf"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<copy todir="${project.basedir}/target/site/reference/html">
|
||||
<fileset dir="${project.basedir}/src/docbkx/resources">
|
||||
<include name="**/*.css"/>
|
||||
<include name="**/*.png"/>
|
||||
<include name="**/*.gif"/>
|
||||
<include name="**/*.jpg"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<move file="${project.basedir}/target/site/reference/pdf/index.pdf"
|
||||
tofile="${project.basedir}/target/site/reference/pdf/spring-data-document-reference.pdf"
|
||||
failonerror="false"/>
|
||||
</postProcess>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<configuration>
|
||||
<javadoc:aggregate>true</javadoc:aggregate>
|
||||
<breakiterator>true</breakiterator>
|
||||
<header>Spring Data Graph</header>
|
||||
<source>1.6</source>
|
||||
<quiet>true</quiet>
|
||||
<javadocDirectory>${project.basedir}/src/main/javadoc</javadocDirectory>
|
||||
<overview>${project.basedir}/src/main/javadoc/overview.html</overview>
|
||||
<stylesheetfile>${project.basedir}/src/main/javadoc/spring-javadoc.css</stylesheetfile>
|
||||
<!-- copies doc-files subdirectory which contains image resources -->
|
||||
<docfilessubdirs>true</docfilessubdirs>
|
||||
<links>
|
||||
<link>http://static.springframework.org/spring/docs/3.0.x/javadoc-api</link>
|
||||
<link>http://java.sun.com/javase/6/docs/api</link>
|
||||
<link>http://api.mongodb.org/java/2.3</link>
|
||||
</links>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin><!--
|
||||
run `mvn package assembly:assembly` to trigger assembly creation.
|
||||
see http://www.sonatype.com/books/mvnref-book/reference/assemblies-set-dist-assemblies.html -->
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.2-beta-5</version>
|
||||
<inherited>false</inherited>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>distribution</id>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>${project.basedir}/src/assembly/distribution.xml</descriptor>
|
||||
</descriptors>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>1.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>upload-dist</id>
|
||||
<phase>deploy</phase>
|
||||
<configuration>
|
||||
<tasks>
|
||||
<ant antfile="${basedir}/src/ant/upload-dist.xml">
|
||||
<target name="upload-dist"/>
|
||||
</ant>
|
||||
</tasks>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.build</groupId>
|
||||
<artifactId>org.springframework.build.aws.ant</artifactId>
|
||||
<version>3.0.5.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jets3t</groupId>
|
||||
<artifactId>jets3t</artifactId>
|
||||
<version>0.7.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<!-- the name of this project is 'spring-data-document-dist';
|
||||
make sure the zip file is just 'spring-data-document'. -->
|
||||
<finalName>${dist.finalName}</finalName>
|
||||
</build>
|
||||
|
||||
<distributionManagement>
|
||||
<!-- see 'staging' profile for dry-run deployment settings -->
|
||||
<downloadUrl>http://www.springsource.com/spring-data</downloadUrl>
|
||||
<site>
|
||||
<id>static.springframework.org</id>
|
||||
<url>
|
||||
scp://static.springframework.org/var/www/domains/springframework.org/static/htdocs/spring-data/data-document/snapshot-site/
|
||||
</url>
|
||||
</site>
|
||||
<repository>
|
||||
<id>spring-milestone</id>
|
||||
<name>Spring Milestone Repository</name>
|
||||
<url>s3://maven.springframework.org/milestone</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>spring-snapshot</id>
|
||||
<name>Spring Snapshot Repository</name>
|
||||
<url>s3://maven.springframework.org/snapshot</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
</project>
|
||||
16
spring-data-mongodb/.classpath.orig
Normal file
16
spring-data-mongodb/.classpath.orig
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java"/>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
|
||||
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
|
||||
<classpathentry kind="src" output="target/test-classes" path="target/generated-sources/test-annotations"/>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
|
||||
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
@@ -18,8 +18,11 @@ package org.springframework.data.document.mongodb;
|
||||
|
||||
import static org.springframework.data.document.mongodb.query.Criteria.*;
|
||||
|
||||
import java.beans.IntrospectionException;
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -40,8 +43,6 @@ import com.mongodb.util.JSON;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.beans.ConfigurablePropertyAccessor;
|
||||
import org.springframework.beans.PropertyAccessorFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.ApplicationEventPublisherAware;
|
||||
@@ -65,7 +66,6 @@ import org.springframework.data.document.mongodb.query.Query;
|
||||
import org.springframework.data.document.mongodb.query.QueryMapper;
|
||||
import org.springframework.data.document.mongodb.query.Update;
|
||||
import org.springframework.data.mapping.MappingBeanHelper;
|
||||
import org.springframework.data.mapping.context.MappingContextAware;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.data.mapping.model.MappingException;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
@@ -81,7 +81,7 @@ import org.springframework.util.Assert;
|
||||
* @author Mark Pollack
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class MongoTemplate implements InitializingBean, MongoOperations, ApplicationEventPublisherAware, MappingContextAware {
|
||||
public class MongoTemplate implements InitializingBean, MongoOperations, ApplicationEventPublisherAware {
|
||||
|
||||
private static final Log LOGGER = LogFactory.getLog(MongoTemplate.class);
|
||||
|
||||
@@ -99,10 +99,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
*/
|
||||
private WriteResultChecking writeResultChecking = WriteResultChecking.NONE;
|
||||
|
||||
private MongoConverter mongoConverter;
|
||||
private MappingContext mappingContext;
|
||||
private final MongoConverter mongoConverter;
|
||||
private final MappingContext<MongoPersistentEntity<?>> mappingContext;
|
||||
private final Mongo mongo;
|
||||
private final MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator();
|
||||
private final QueryMapper mapper;
|
||||
|
||||
private String defaultCollectionName;
|
||||
private String databaseName;
|
||||
@@ -163,27 +164,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
this.mongo = mongo;
|
||||
this.databaseName = databaseName;
|
||||
this.writeConcern = writeConcern;
|
||||
this.mongoConverter = mongoConverter == null ? getDefaultMongoConverter() : mongoConverter;
|
||||
|
||||
if (this.mongoConverter instanceof MappingMongoConverter) {
|
||||
initializeMappingMongoConverter((MappingMongoConverter) this.mongoConverter);
|
||||
}
|
||||
|
||||
this.mappingContext = this.mongoConverter.getMappingContext();
|
||||
this.mapper = new QueryMapper(this.mongoConverter);
|
||||
|
||||
if (writeResultChecking != null) {
|
||||
this.writeResultChecking = writeResultChecking;
|
||||
}
|
||||
if (mongoConverter == null) {
|
||||
SimpleMongoConverter smc = new SimpleMongoConverter();
|
||||
smc.afterPropertiesSet();
|
||||
setMongoConverter(smc);
|
||||
} else {
|
||||
setMongoConverter(mongoConverter);
|
||||
}
|
||||
//setMongoConverter(mongoConverter == null ? new SimpleMongoConverter() : mongoConverter);
|
||||
}
|
||||
|
||||
private final MongoConverter getDefaultMongoConverter() {
|
||||
|
||||
SimpleMongoConverter converter = new SimpleMongoConverter();
|
||||
converter.afterPropertiesSet();
|
||||
return converter;
|
||||
}
|
||||
|
||||
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
|
||||
this.eventPublisher = applicationEventPublisher;
|
||||
}
|
||||
|
||||
public void setMappingContext(MappingContext mappingContext) {
|
||||
this.mappingContext = mappingContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the username to use to connect to the Mongo database
|
||||
*
|
||||
@@ -606,30 +611,25 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
* @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.util.List, org.springframework.data.document.mongodb.MongoWriter)
|
||||
*/
|
||||
public <T> void insertList(List<? extends T> listToSave, MongoWriter<T> writer) {
|
||||
if (null != mappingContext) {
|
||||
Map<String, List<Object>> objs = new HashMap<String, List<Object>>();
|
||||
for (Object o : listToSave) {
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(o.getClass());
|
||||
if (null != entity && entity instanceof MongoPersistentEntity) {
|
||||
@SuppressWarnings("unchecked")
|
||||
String coll = ((MongoPersistentEntity<T>) entity).getCollection();
|
||||
List<Object> objList = objs.get(coll);
|
||||
if (null == objList) {
|
||||
objList = new ArrayList<Object>();
|
||||
objs.put(coll, objList);
|
||||
}
|
||||
objList.add(o);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
Map<String, List<Object>> objs = new HashMap<String, List<Object>>();
|
||||
|
||||
for (Object o : listToSave) {
|
||||
|
||||
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(o.getClass());
|
||||
String collection = entity == null ? getDefaultCollectionName() : entity.getCollection();
|
||||
|
||||
List<Object> objList = objs.get(collection);
|
||||
if (null == objList) {
|
||||
objList = new ArrayList<Object>();
|
||||
objs.put(collection, objList);
|
||||
}
|
||||
for (Map.Entry<String, List<Object>> entry : objs.entrySet()) {
|
||||
insertList(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return;
|
||||
objList.add(o);
|
||||
|
||||
}
|
||||
|
||||
for (Map.Entry<String, List<Object>> entry : objs.entrySet()) {
|
||||
insertList(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
insertList(getDefaultCollectionName(), listToSave, writer);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -865,22 +865,26 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
}
|
||||
|
||||
public <T> void remove(Query query, Class<T> targetClass) {
|
||||
Assert.notNull(query);
|
||||
remove(getEntityCollection(targetClass), query, targetClass);
|
||||
}
|
||||
|
||||
private PersistentEntity<?> getPersistentEntity(Class<?> type) {
|
||||
return type == null ? null : mappingContext.getPersistentEntity(type);
|
||||
}
|
||||
|
||||
public <T> void remove(String collectionName, final Query query, Class<T> targetClass) {
|
||||
if (query == null) {
|
||||
throw new InvalidDataAccessApiUsageException("Query passed in to remove can't be null");
|
||||
}
|
||||
final DBObject queryObject = query.getQueryObject();
|
||||
PersistentEntity<T> entity = getPersistentEntity(targetClass);
|
||||
final QueryMapper<T> queryMapper = new QueryMapper<T>(queryObject, entity, mongoConverter);
|
||||
final PersistentEntity<?> entity = getPersistentEntity(targetClass);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("remove using query: " + queryObject);
|
||||
}
|
||||
execute(collectionName, new CollectionCallback<Void>() {
|
||||
public Void doInCollection(DBCollection collection) throws MongoException, DataAccessException {
|
||||
DBObject dboq = queryMapper.getMappedObject();
|
||||
DBObject dboq = mapper.getMappedObject(queryObject, entity);
|
||||
WriteResult wr = null;
|
||||
if (writeConcern == null) {
|
||||
wr = collection.remove(dboq);
|
||||
@@ -931,14 +935,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray());
|
||||
}
|
||||
|
||||
protected <T> PersistentEntity<T> getPersistentEntity(Class<T> targetClass) {
|
||||
if (null != targetClass && null != mappingContext) {
|
||||
return mappingContext.getPersistentEntity(targetClass);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected <T> void maybeEmitEvent(MongoMappingEvent<T> event) {
|
||||
if (null != eventPublisher) {
|
||||
eventPublisher.publishEvent(event);
|
||||
@@ -979,9 +975,10 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
if (readerToUse == null) {
|
||||
readerToUse = this.mongoConverter;
|
||||
}
|
||||
PersistentEntity<T> entity = getPersistentEntity(targetClass);
|
||||
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, readerToUse);
|
||||
return execute(new FindOneCallback(queryMapper.getMappedObject(), fields),
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
|
||||
DBObject mappedQuery = mapper.getMappedObject(query, entity);
|
||||
|
||||
return execute(new FindOneCallback(mappedQuery, fields),
|
||||
new ReadDbObjectCallback<T>(readerToUse, targetClass),
|
||||
collectionName);
|
||||
}
|
||||
@@ -1006,12 +1003,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
* @return the List of converted objects.
|
||||
*/
|
||||
protected <T> List<T> doFind(String collectionName, DBObject query, DBObject fields, Class<T> targetClass, CursorPreparer preparer) {
|
||||
PersistentEntity<T> entity = getPersistentEntity(targetClass);
|
||||
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, mongoConverter);
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("find using query: " + query + " fields: " + fields + " for class: " + targetClass);
|
||||
}
|
||||
return executeEach(new FindCallback(queryMapper.getMappedObject(), fields),
|
||||
return executeEach(new FindCallback(mapper.getMappedObject(query, entity), fields),
|
||||
preparer,
|
||||
new ReadDbObjectCallback<T>(mongoConverter, targetClass),
|
||||
collectionName);
|
||||
@@ -1030,12 +1026,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
* @return the List of converted objects.
|
||||
*/
|
||||
protected <T> List<T> doFind(String collectionName, DBObject query, DBObject fields, Class<T> targetClass, MongoReader<T> reader) {
|
||||
PersistentEntity<T> entity = getPersistentEntity(targetClass);
|
||||
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, reader);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("find using query: " + query + " fields: " + fields + " for class: " + targetClass);
|
||||
}
|
||||
return executeEach(new FindCallback(queryMapper.getMappedObject(), fields),
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
|
||||
return executeEach(new FindCallback(mapper.getMappedObject(query, entity), fields),
|
||||
null,
|
||||
new ReadDbObjectCallback<T>(reader, targetClass),
|
||||
collectionName);
|
||||
@@ -1074,44 +1069,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
if (readerToUse == null) {
|
||||
readerToUse = this.mongoConverter;
|
||||
}
|
||||
PersistentEntity<T> entity = null;
|
||||
if (null != mappingContext) {
|
||||
entity = mappingContext.getPersistentEntity(targetClass);
|
||||
}
|
||||
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, readerToUse);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("findAndRemove using query: " + query + " fields: " + fields + " sort: " + sort + " for class: " + targetClass);
|
||||
}
|
||||
return execute(new FindAndRemoveCallback(queryMapper.getMappedObject(), fields, sort),
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
|
||||
return execute(new FindAndRemoveCallback(mapper.getMappedObject(query, entity), fields, sort),
|
||||
new ReadDbObjectCallback<T>(readerToUse, targetClass),
|
||||
collectionName);
|
||||
}
|
||||
|
||||
protected Object getIdValue(Object object) {
|
||||
if (null != mappingContext) {
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(object.getClass());
|
||||
if (null != entity) {
|
||||
PersistentProperty idProp = entity.getIdProperty();
|
||||
if (null != idProp) {
|
||||
try {
|
||||
return MappingBeanHelper.getProperty(object, idProp, Object.class, true);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(object.getClass());
|
||||
PersistentProperty idProp = entity.getIdProperty();
|
||||
|
||||
if (idProp == null) {
|
||||
throw new MappingException("No id property found for object of type " + entity.getType().getName());
|
||||
}
|
||||
|
||||
ConfigurablePropertyAccessor bw = PropertyAccessorFactory.forDirectFieldAccess(object);
|
||||
MongoPropertyDescriptor idDescriptor = new MongoPropertyDescriptors(object.getClass()).getIdDescriptor();
|
||||
|
||||
if (idDescriptor == null) {
|
||||
return null;
|
||||
|
||||
try {
|
||||
return MappingBeanHelper.getProperty(object, idProp, Object.class, true);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
}
|
||||
return bw.getPropertyValue(idDescriptor.getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1126,38 +1108,107 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
return;
|
||||
}
|
||||
|
||||
if (null != mappingContext) {
|
||||
PersistentEntity<?> entity = mappingContext.getPersistentEntity(savedObject.getClass());
|
||||
if (null != entity) {
|
||||
PersistentProperty idProp = entity.getIdProperty();
|
||||
if (null != idProp) {
|
||||
try {
|
||||
MappingBeanHelper.setProperty(savedObject, idProp, id);
|
||||
return;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
PersistentProperty idProp = getIdPropertyFor(savedObject.getClass());
|
||||
|
||||
if (idProp == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
MappingBeanHelper.setProperty(savedObject, idProp, id);
|
||||
return;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new MappingException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
ConfigurablePropertyAccessor bw = PropertyAccessorFactory.forDirectFieldAccess(savedObject);
|
||||
MongoPropertyDescriptor idDescriptor = new MongoPropertyDescriptors(savedObject.getClass()).getIdDescriptor();
|
||||
private PersistentProperty getIdPropertyFor(Class<?> type) {
|
||||
return mappingContext.getPersistentEntity(type).getIdProperty();
|
||||
}
|
||||
|
||||
if (idDescriptor == null) {
|
||||
/**
|
||||
* Substitutes the id key if it is found in he query. Any 'id' keys will be replaced with '_id' and the value converted
|
||||
* to an ObjectId if possible. This conversion should match the way that the id fields are converted during read
|
||||
* operations.
|
||||
*
|
||||
* @param query
|
||||
* @param targetClass
|
||||
* @param reader
|
||||
*/
|
||||
protected void substituteMappedIdIfNecessary(DBObject query, Class<?> targetClass, MongoReader<?> reader) {
|
||||
MongoConverter converter = null;
|
||||
if (reader instanceof SimpleMongoConverter) {
|
||||
converter = (MongoConverter) reader;
|
||||
}
|
||||
else if (reader instanceof MappingMongoConverter) {
|
||||
converter = (MappingMongoConverter) reader;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (bw.getPropertyValue(idDescriptor.getName()) == null) {
|
||||
Object target = null;
|
||||
if (id instanceof ObjectId) {
|
||||
target = this.mongoConverter.convertObjectId((ObjectId) id, idDescriptor.getPropertyType());
|
||||
} else {
|
||||
target = id;
|
||||
String idKey = null;
|
||||
if (query.containsField("id")) {
|
||||
idKey = "id";
|
||||
}
|
||||
if (query.containsField("_id")) {
|
||||
idKey = "_id";
|
||||
}
|
||||
if (idKey == null) {
|
||||
// no ids in this query
|
||||
return;
|
||||
}
|
||||
MongoPropertyDescriptor descriptor;
|
||||
try {
|
||||
MongoPropertyDescriptor mpd = new MongoPropertyDescriptor(new PropertyDescriptor(idKey, targetClass), targetClass);
|
||||
descriptor = mpd;
|
||||
} catch (IntrospectionException e) {
|
||||
// no property descriptor for this key - try the other
|
||||
try {
|
||||
String theOtherIdKey = "id".equals(idKey) ? "_id" : "id";
|
||||
MongoPropertyDescriptor mpd2 = new MongoPropertyDescriptor(new PropertyDescriptor(theOtherIdKey, targetClass), targetClass);
|
||||
descriptor = mpd2;
|
||||
} catch (IntrospectionException e2) {
|
||||
// no property descriptor for this key either - bail
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (descriptor.isIdProperty() && descriptor.isOfIdType()) {
|
||||
Object value = query.get(idKey);
|
||||
if (value instanceof DBObject) {
|
||||
DBObject dbo = (DBObject) value;
|
||||
if (dbo.containsField("$in")) {
|
||||
List<Object> ids = new ArrayList<Object>();
|
||||
int count = 0;
|
||||
for (Object o : (Object[])dbo.get("$in")) {
|
||||
count++;
|
||||
ObjectId newValue = convertIdValue(converter, o);
|
||||
if (newValue != null) {
|
||||
ids.add(newValue);
|
||||
}
|
||||
}
|
||||
if (ids.size() > 0 && ids.size() != count) {
|
||||
throw new InvalidDataAccessApiUsageException("Inconsistent set of id values provided " +
|
||||
Arrays.asList((Object[])dbo.get("$in")));
|
||||
}
|
||||
if (ids.size() > 0) {
|
||||
dbo.removeField("$in");
|
||||
dbo.put("$in", ids.toArray());
|
||||
}
|
||||
}
|
||||
query.removeField(idKey);
|
||||
query.put(MongoPropertyDescriptor.ID_KEY, value);
|
||||
}
|
||||
else {
|
||||
ObjectId newValue = convertIdValue(converter, value);
|
||||
query.removeField(idKey);
|
||||
if (newValue != null) {
|
||||
query.put(MongoPropertyDescriptor.ID_KEY, newValue);
|
||||
} else {
|
||||
query.put(MongoPropertyDescriptor.ID_KEY, value);
|
||||
}
|
||||
}
|
||||
bw.setPropertyValue(idDescriptor.getName(), target);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1190,18 +1241,14 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
return null;
|
||||
}
|
||||
|
||||
private <T> String getEntityCollection(Class<T> clazz) {
|
||||
if (null != mappingContext) {
|
||||
PersistentEntity<T> entity = mappingContext.getPersistentEntity(clazz);
|
||||
if (entity == null) {
|
||||
entity = mappingContext.addPersistentEntity(clazz);
|
||||
}
|
||||
if (null != entity && entity instanceof MongoPersistentEntity) {
|
||||
return ((MongoPersistentEntity<T>) entity).getCollection();
|
||||
}
|
||||
}
|
||||
// Otherwise, return the default for this template.
|
||||
return getRequiredDefaultCollectionName();
|
||||
private String getEntityCollection(Class<?> clazz) {
|
||||
|
||||
if (clazz == null) {
|
||||
return getDefaultCollectionName();
|
||||
}
|
||||
|
||||
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(clazz);
|
||||
return entity.getCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1394,13 +1441,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
|
||||
}
|
||||
}
|
||||
|
||||
public void setMongoConverter(MongoConverter converter) {
|
||||
this.mongoConverter = converter;
|
||||
if (null != converter && converter instanceof MappingMongoConverter) {
|
||||
initializeMappingMongoConverter((MappingMongoConverter) mongoConverter);
|
||||
}
|
||||
}
|
||||
|
||||
public void setWriteResultChecking(WriteResultChecking resultChecking) {
|
||||
this.writeResultChecking = resultChecking;
|
||||
}
|
||||
|
||||
@@ -29,8 +29,6 @@ import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
|
||||
import org.springframework.data.document.mongodb.mapping.Document;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoMappingContext;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntityIndexCreator;
|
||||
import org.springframework.data.document.mongodb.mapping.event.LoggingEventListener;
|
||||
import org.springframework.data.document.mongodb.mapping.event.MongoMappingEvent;
|
||||
import org.springframework.data.mapping.context.MappingContextAwareBeanPostProcessor;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -47,7 +45,7 @@ public abstract class AbstractMongoConfiguration {
|
||||
@Bean
|
||||
public abstract MongoTemplate mongoTemplate() throws Exception;
|
||||
|
||||
public String getMappingBasePackage() {
|
||||
public String getMappingBasePackage() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -64,7 +62,7 @@ public abstract class AbstractMongoConfiguration {
|
||||
Set<Class<?>> initialEntitySet = new HashSet<Class<?>>();
|
||||
for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
|
||||
initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(), mappingContext.getClass().getClassLoader()));
|
||||
}
|
||||
}
|
||||
mappingContext.setInitialEntitySet(initialEntitySet);
|
||||
}
|
||||
return mappingContext;
|
||||
@@ -80,7 +78,7 @@ public abstract class AbstractMongoConfiguration {
|
||||
|
||||
/**
|
||||
* Hook that allows post-processing after the MappingMongoConverter has been
|
||||
* successfully created.
|
||||
* successfully created.
|
||||
* @param converter
|
||||
*/
|
||||
protected void afterMappingMongoConverterCreation(MappingMongoConverter converter) {
|
||||
@@ -94,7 +92,7 @@ public abstract class AbstractMongoConfiguration {
|
||||
}
|
||||
|
||||
@Bean MongoPersistentEntityIndexCreator mongoPersistentEntityIndexCreator() throws Exception {
|
||||
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() );
|
||||
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() );
|
||||
return indexCreator;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.expression.BeanFactoryResolver;
|
||||
@@ -54,6 +53,7 @@ import org.springframework.core.convert.converter.ConverterFactory;
|
||||
import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
|
||||
import org.springframework.core.convert.support.ConversionServiceFactory;
|
||||
import org.springframework.core.convert.support.GenericConversionService;
|
||||
import org.springframework.data.document.mongodb.mapping.BasicMongoPersistentEntity;
|
||||
import org.springframework.data.mapping.AssociationHandler;
|
||||
import org.springframework.data.mapping.MappingBeanHelper;
|
||||
import org.springframework.data.mapping.PropertyHandler;
|
||||
@@ -85,7 +85,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
|
||||
protected final GenericConversionService conversionService = ConversionServiceFactory.createDefaultConversionService();
|
||||
protected final Set<ConvertiblePair> customTypeMapping = new HashSet<ConvertiblePair>();
|
||||
protected final MappingContext mappingContext;
|
||||
protected final MappingContext<BasicMongoPersistentEntity<?>> mappingContext;
|
||||
protected SpelExpressionParser spelExpressionParser = new SpelExpressionParser();
|
||||
protected ApplicationContext applicationContext;
|
||||
protected boolean useFieldAccessOnly = true;
|
||||
@@ -97,7 +97,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
*
|
||||
* @param mappingContext
|
||||
*/
|
||||
public MappingMongoConverter(MappingContext mappingContext) {
|
||||
public MappingMongoConverter(MappingContext<BasicMongoPersistentEntity<?>> mappingContext) {
|
||||
this.mappingContext = mappingContext;
|
||||
this.conversionService.removeConvertible(Object.class, String.class);
|
||||
}
|
||||
@@ -146,22 +146,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
return null;
|
||||
}
|
||||
|
||||
public MappingContext getMappingContext() {
|
||||
public MappingContext<BasicMongoPersistentEntity<?>> getMappingContext() {
|
||||
return mappingContext;
|
||||
}
|
||||
|
||||
public Mongo getMongo() {
|
||||
return mongo;
|
||||
}
|
||||
|
||||
public void setMongo(Mongo mongo) {
|
||||
this.mongo = mongo;
|
||||
}
|
||||
|
||||
public String getDefaultDatabase() {
|
||||
return defaultDatabase;
|
||||
}
|
||||
|
||||
public void setDefaultDatabase(String defaultDatabase) {
|
||||
this.defaultDatabase = defaultDatabase;
|
||||
}
|
||||
@@ -216,9 +208,9 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
}
|
||||
|
||||
// Retrieve persistent entity info
|
||||
PersistentEntity<S> persistentEntity = mappingContext.getPersistentEntity(clazz);
|
||||
PersistentEntity<S> persistentEntity = (PersistentEntity<S>) mappingContext.getPersistentEntity(clazz);
|
||||
if (persistentEntity == null) {
|
||||
persistentEntity = mappingContext.addPersistentEntity(clazz);
|
||||
throw new MappingException("No mapping metadata found for " + clazz.getName());
|
||||
}
|
||||
|
||||
return read(persistentEntity, dbo);
|
||||
@@ -283,7 +275,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
return;
|
||||
}
|
||||
|
||||
Object obj = getValueInternal(prop, dbo, spelCtx, prop.getValueAnnotation());
|
||||
Object obj = getValueInternal(prop, dbo, spelCtx, prop.getSpelExpression());
|
||||
try {
|
||||
MappingBeanHelper.setProperty(instance, prop, obj, useFieldAccessOnly);
|
||||
} catch (IllegalAccessException e) {
|
||||
@@ -298,7 +290,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
entity.doWithAssociations(new AssociationHandler() {
|
||||
public void doWithAssociation(Association association) {
|
||||
PersistentProperty inverseProp = association.getInverse();
|
||||
Object obj = getValueInternal(inverseProp, dbo, spelCtx, inverseProp.getValueAnnotation());
|
||||
Object obj = getValueInternal(inverseProp, dbo, spelCtx, inverseProp.getSpelExpression());
|
||||
try {
|
||||
MappingBeanHelper.setProperty(instance, inverseProp, obj);
|
||||
} catch (IllegalAccessException e) {
|
||||
@@ -336,12 +328,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
}
|
||||
|
||||
if (null == entity) {
|
||||
// Must not have explictly added this entity yet
|
||||
entity = mappingContext.addPersistentEntity(obj.getClass());
|
||||
if (null == entity) {
|
||||
// We can't map this entity for some reason
|
||||
throw new MappingException("Unable to map entity " + obj);
|
||||
}
|
||||
throw new MappingException("No mapping metadata found for entity of type " + obj.getClass().getName());
|
||||
}
|
||||
|
||||
// Write the ID
|
||||
@@ -455,7 +442,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
if (null != dbref) {
|
||||
DBRef dbRef = createDBRef(propObjItem, dbref);
|
||||
dbList.add(dbRef);
|
||||
} else if (type.isArray() && MappingBeanHelper.isSimpleType(type.getComponentType())) {
|
||||
} else if (type.isArray() && MappingBeanHelper.isSimpleType(prop.getComponentType())) {
|
||||
dbList.add(propObjItem);
|
||||
} else if (propObjItem instanceof List) {
|
||||
List<?> propObjColl = (List<?>) propObjItem;
|
||||
@@ -478,7 +465,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
dbList.add(propObjItem);
|
||||
} else {
|
||||
BasicDBObject propDbObj = new BasicDBObject();
|
||||
write(propObjItem, propDbObj, mappingContext.getPersistentEntity(prop.getTypeInformation()));
|
||||
write(propObjItem, propDbObj, mappingContext.getPersistentEntity(prop.getComponentType()));
|
||||
dbList.add(propDbObj);
|
||||
}
|
||||
}
|
||||
@@ -576,14 +563,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
protected Object getValueInternal(PersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, Value spelExpr) {
|
||||
protected Object getValueInternal(PersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, String spelExpr) {
|
||||
|
||||
String name = prop.getName();
|
||||
Class<?> propertyType = prop.getType();
|
||||
|
||||
Object o;
|
||||
if (null != spelExpr) {
|
||||
Expression x = spelExpressionParser.parseExpression(spelExpr.value());
|
||||
Expression x = spelExpressionParser.parseExpression(spelExpr);
|
||||
o = x.getValue(ctx);
|
||||
} else {
|
||||
Object dbObj = dbo.get(name);
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.data.document.mongodb.convert;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.data.document.mongodb.MongoReader;
|
||||
import org.springframework.data.document.mongodb.MongoWriter;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
|
||||
|
||||
public interface MongoConverter extends MongoWriter<Object>, MongoReader<Object> {
|
||||
@@ -40,4 +41,6 @@ public interface MongoConverter extends MongoWriter<Object>, MongoReader<Object>
|
||||
* @return
|
||||
*/
|
||||
public ObjectId convertObjectId(Object id);
|
||||
|
||||
MappingContext getMappingContext();
|
||||
}
|
||||
|
||||
@@ -40,6 +40,9 @@ import org.springframework.core.convert.converter.ConverterFactory;
|
||||
import org.springframework.core.convert.support.ConversionServiceFactory;
|
||||
import org.springframework.core.convert.support.GenericConversionService;
|
||||
import org.springframework.data.document.mongodb.MongoPropertyDescriptors.MongoPropertyDescriptor;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
|
||||
import org.springframework.data.document.mongodb.mapping.SimpleMongoMappingContext;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.comparator.CompoundComparator;
|
||||
|
||||
@@ -107,6 +110,7 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean {
|
||||
}
|
||||
|
||||
private final GenericConversionService conversionService;
|
||||
private final MappingContext<? extends MongoPersistentEntity<?>> mappingContext;
|
||||
|
||||
/**
|
||||
* Creates a {@link SimpleMongoConverter}.
|
||||
@@ -114,6 +118,14 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean {
|
||||
public SimpleMongoConverter() {
|
||||
this.conversionService = ConversionServiceFactory.createDefaultConversionService();
|
||||
this.conversionService.removeConvertible(Object.class, String.class);
|
||||
this.mappingContext = new SimpleMongoMappingContext();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.document.mongodb.convert.MongoConverter#getMappingContext()
|
||||
*/
|
||||
public MappingContext<? extends MongoPersistentEntity<?>> getMappingContext() {
|
||||
return mappingContext;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2011 by the original author(s).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import org.springframework.data.mapping.BasicPersistentEntity;
|
||||
import org.springframework.data.mapping.model.MappingException;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
||||
/**
|
||||
* Mongo specific {@link PersistentEntity} implementation that adds Mongo specific meta-data such as the collection name
|
||||
* and the like.
|
||||
*
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class BasicMongoPersistentEntity<T> extends BasicPersistentEntity<T> implements MongoPersistentEntity<T> {
|
||||
|
||||
private final String collection;
|
||||
private final boolean isRootEntity;
|
||||
|
||||
/**
|
||||
* Creates a new {@link BasicMongoPersistentEntity} with the given {@link TypeInformation}. Will
|
||||
* default the collection name to the entities simple type name.
|
||||
*
|
||||
* @param typeInformation
|
||||
*/
|
||||
public BasicMongoPersistentEntity(TypeInformation typeInformation) {
|
||||
|
||||
super(typeInformation);
|
||||
|
||||
Class<?> rawType = typeInformation.getType();
|
||||
String fallback = rawType.getSimpleName().toLowerCase();
|
||||
|
||||
if (rawType.isAnnotationPresent(Document.class)) {
|
||||
Document d = rawType.getAnnotation(Document.class);
|
||||
this.collection = StringUtils.hasText(d.collection()) ? d.collection() : fallback;
|
||||
this.isRootEntity = true;
|
||||
} else {
|
||||
this.collection = fallback;
|
||||
this.isRootEntity = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection the entity should be stored in.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getCollection() {
|
||||
return collection;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.BasicPersistentEntity#verify()
|
||||
*/
|
||||
@Override
|
||||
public void verify() {
|
||||
if (isRootEntity && idProperty == null) {
|
||||
throw new MappingException(String.format("Root entity %s has to have an id property!", type.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,23 +18,18 @@ package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bson.types.CodeWScope;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.data.mapping.BasicMappingContext;
|
||||
import org.springframework.data.mapping.BasicPersistentEntity;
|
||||
import org.springframework.data.mapping.BasicPersistentProperty;
|
||||
import org.springframework.data.mapping.AbstractMappingContext;
|
||||
import org.springframework.data.mapping.MappingBeanHelper;
|
||||
import org.springframework.data.mapping.model.MappingConfigurationException;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
|
||||
/**
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
*/
|
||||
public class MongoMappingContext extends BasicMappingContext {
|
||||
public class MongoMappingContext extends AbstractMappingContext<BasicMongoPersistentEntity<?>, MongoPersistentProperty> {
|
||||
|
||||
public MongoMappingContext() {
|
||||
augmentSimpleTypes();
|
||||
@@ -50,32 +45,16 @@ public class MongoMappingContext extends BasicMappingContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException {
|
||||
if (field.isAnnotationPresent(DBRef.class)) {
|
||||
return true;
|
||||
}
|
||||
return super.isAssociation(field, descriptor);
|
||||
public MongoPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, BasicMongoPersistentEntity<?> owner) {
|
||||
return new MongoPersistentProperty(field, descriptor, owner);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.BasicMappingContext#getPersistentEntities()
|
||||
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation, org.springframework.data.mapping.model.MappingContext)
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Collection<MongoPersistentEntity<?>> getPersistentEntities() {
|
||||
return (Collection<MongoPersistentEntity<?>>) super.getPersistentEntities();
|
||||
@SuppressWarnings("rawtypes")
|
||||
protected BasicMongoPersistentEntity<?> createPersistentEntity(TypeInformation typeInformation) {
|
||||
return new BasicMongoPersistentEntity(typeInformation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasicPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor,
|
||||
TypeInformation information) throws MappingConfigurationException {
|
||||
return new MongoPersistentProperty(field, descriptor, information);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> BasicPersistentEntity<T> createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext)
|
||||
throws MappingConfigurationException {
|
||||
return new MongoPersistentEntity<T>(mappingContext, typeInformation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,69 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2011 by the original author(s).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import org.springframework.data.mapping.BasicPersistentEntity;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
|
||||
/**
|
||||
* Mongo specific {@link PersistentEntity} implementation that adds Mongo specific meta-data such as the collection name
|
||||
* and the like.
|
||||
*
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class MongoPersistentEntity<T> extends BasicPersistentEntity<T> {
|
||||
public interface MongoPersistentEntity<T> extends PersistentEntity<T> {
|
||||
|
||||
protected String collection;
|
||||
|
||||
/**
|
||||
* Creates a new {@link MongoPersistentEntity} with the given {@link MappingContext} and {@link TypeInformation}. Will
|
||||
* default the collection name to the entities simple type name.
|
||||
*
|
||||
* @param mappingContext
|
||||
* @param typeInformation
|
||||
*/
|
||||
public MongoPersistentEntity(MappingContext mappingContext, TypeInformation typeInformation) {
|
||||
super(mappingContext, typeInformation);
|
||||
this.collection = typeInformation.getType().getSimpleName().toLowerCase();
|
||||
if (typeInformation.getType().isAnnotationPresent(Document.class)) {
|
||||
Document d = typeInformation.getType().getAnnotation(Document.class);
|
||||
if (!"".equals(d.collection())) {
|
||||
this.collection = d.collection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection the entity should be stored in.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getCollection() {
|
||||
if (null == collection) {
|
||||
this.collection = type.getSimpleName().toLowerCase();
|
||||
}
|
||||
return collection;
|
||||
}
|
||||
|
||||
|
||||
public void setCollection(String collection) {
|
||||
this.collection = collection;
|
||||
}
|
||||
String getCollection();
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ import org.springframework.data.mapping.model.PersistentProperty;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Component that inspects {@link MongoPersistentEntity} instances contained in the given {@link MongoMappingContext}
|
||||
* Component that inspects {@link BasicMongoPersistentEntity} instances contained in the given {@link MongoMappingContext}
|
||||
* for indexing metadata and ensures the indexes to be available.
|
||||
*
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
@@ -81,15 +81,6 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener<Ma
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Analyzing class " + type + " for index information.");
|
||||
}
|
||||
// Check for special collection setting
|
||||
if (type.isAnnotationPresent(Document.class)) {
|
||||
Document doc = type.getAnnotation(Document.class);
|
||||
String collection = doc.collection();
|
||||
if ("".equals(collection)) {
|
||||
collection = type.getSimpleName().toLowerCase();
|
||||
}
|
||||
entity.setCollection(collection);
|
||||
}
|
||||
|
||||
// Make sure indexes get created
|
||||
if (type.isAnnotationPresent(CompoundIndexes.class)) {
|
||||
|
||||
@@ -22,8 +22,7 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.data.mapping.BasicPersistentProperty;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
import org.springframework.data.mapping.AnnotationBasedPersistentProperty;
|
||||
|
||||
/**
|
||||
* Mongo specific
|
||||
@@ -32,7 +31,7 @@ import org.springframework.data.util.TypeInformation;
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class MongoPersistentProperty extends BasicPersistentProperty {
|
||||
public class MongoPersistentProperty extends AnnotationBasedPersistentProperty {
|
||||
|
||||
private static final Set<Class<?>> SUPPORTED_ID_TYPES = new HashSet<Class<?>>();
|
||||
private static final Set<String> SUPPORTED_ID_PROPERTY_NAMES = new HashSet<String>();
|
||||
@@ -54,8 +53,16 @@ public class MongoPersistentProperty extends BasicPersistentProperty {
|
||||
* @param owningTypeInformation
|
||||
*/
|
||||
public MongoPersistentProperty(Field field,
|
||||
PropertyDescriptor propertyDescriptor, TypeInformation owningTypeInformation) {
|
||||
super(field, propertyDescriptor, owningTypeInformation);
|
||||
PropertyDescriptor propertyDescriptor, MongoPersistentEntity<?> owner) {
|
||||
super(field, propertyDescriptor, owner);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.FooBasicPersistentProperty#isAssociation()
|
||||
*/
|
||||
@Override
|
||||
public boolean isAssociation() {
|
||||
return field.isAnnotationPresent(DBRef.class) || super.isAssociation();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.mapping.AbstractMappingContext;
|
||||
import org.springframework.data.mapping.BasicPersistentEntity;
|
||||
import org.springframework.data.mapping.AbstractPersistentProperty;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class SimpleMongoMappingContext extends AbstractMappingContext<SimpleMongoMappingContext.SimpleMongoPersistentEntity<?>, SimpleMongoMappingContext.SimplePersistentProperty> {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation)
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("rawtypes")
|
||||
protected SimpleMongoPersistentEntity<?> createPersistentEntity(TypeInformation typeInformation) {
|
||||
return new SimpleMongoPersistentEntity(typeInformation);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentProperty(java.lang.reflect.Field, java.beans.PropertyDescriptor, org.springframework.data.util.TypeInformation, org.springframework.data.mapping.BasicPersistentEntity)
|
||||
*/
|
||||
@Override
|
||||
protected SimplePersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, SimpleMongoPersistentEntity<?> owner) {
|
||||
return new SimplePersistentProperty(field, descriptor, owner);
|
||||
}
|
||||
|
||||
static class SimplePersistentProperty extends AbstractPersistentProperty {
|
||||
|
||||
private static final List<String> ID_FIELD_NAMES = Arrays.asList("id", "_id");
|
||||
|
||||
/**
|
||||
* Creates a new {@link SimplePersistentProperty}.
|
||||
*
|
||||
* @param field
|
||||
* @param propertyDescriptor
|
||||
* @param information
|
||||
*/
|
||||
public SimplePersistentProperty(Field field, PropertyDescriptor propertyDescriptor, SimpleMongoPersistentEntity<?> owner) {
|
||||
super(field, propertyDescriptor, owner);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.mapping.BasicPersistentProperty#isIdProperty()
|
||||
*/
|
||||
public boolean isIdProperty() {
|
||||
return ID_FIELD_NAMES.contains(field.getName());
|
||||
}
|
||||
}
|
||||
|
||||
static class SimpleMongoPersistentEntity<T> extends BasicPersistentEntity<T> implements MongoPersistentEntity<T> {
|
||||
|
||||
/**
|
||||
* @param information
|
||||
*/
|
||||
public SimpleMongoPersistentEntity(TypeInformation information) {
|
||||
super(information);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.document.mongodb.mapping.MongoPersistentEntity#getCollection()
|
||||
*/
|
||||
public String getCollection() {
|
||||
return type.getSimpleName();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.document.mongodb.query;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -23,30 +22,41 @@ import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.core.convert.ConversionFailedException;
|
||||
import org.springframework.data.document.mongodb.MongoReader;
|
||||
import org.springframework.data.document.mongodb.convert.MongoConverter;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A helper class to encapsulate any modifications of a Query object before it gets submitted to the database.
|
||||
*
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class QueryMapper<T> {
|
||||
public class QueryMapper {
|
||||
|
||||
final private DBObject query;
|
||||
final private PersistentEntity<T> entity;
|
||||
final private MongoReader<Object> reader;
|
||||
private final MongoConverter converter;
|
||||
|
||||
public QueryMapper(DBObject query, PersistentEntity<T> entity, MongoReader<?> reader) {
|
||||
this.query = query;
|
||||
this.entity = entity;
|
||||
this.reader = (MongoReader<Object>) reader;
|
||||
/**
|
||||
* Creates a new {@link QueryMapper} with the given {@link MongoConverter}.
|
||||
*
|
||||
* @param converter
|
||||
*/
|
||||
public QueryMapper(MongoConverter converter) {
|
||||
Assert.notNull(converter);
|
||||
this.converter = converter;
|
||||
}
|
||||
|
||||
public DBObject getMappedObject() {
|
||||
/**
|
||||
* Replaces the property keys used in the given {@link DBObject} with the appropriate keys by using the
|
||||
* {@link PersistentEntity} metadata.
|
||||
*
|
||||
* @param query
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
public DBObject getMappedObject(DBObject query, PersistentEntity<?> entity) {
|
||||
String idKey = null;
|
||||
if (null != entity && null != entity.getIdProperty()) {
|
||||
if (null != entity && entity.getIdProperty() != null) {
|
||||
idKey = entity.getIdProperty().getName();
|
||||
} else if (query.containsField("id")) {
|
||||
idKey = "id";
|
||||
@@ -63,8 +73,8 @@ public class QueryMapper<T> {
|
||||
if ("$in".equals(key)) {
|
||||
List<Object> ids = new ArrayList<Object>();
|
||||
for (Object id : (Object[]) ((DBObject) value).get("$in")) {
|
||||
if (null != reader && !(id instanceof ObjectId)) {
|
||||
ObjectId oid = ((MongoConverter) reader).convertObjectId(id);
|
||||
if (null != converter && !(id instanceof ObjectId)) {
|
||||
ObjectId oid = converter.convertObjectId(id);
|
||||
ids.add(oid);
|
||||
} else {
|
||||
ids.add(id);
|
||||
@@ -72,9 +82,9 @@ public class QueryMapper<T> {
|
||||
}
|
||||
newDbo.put("$in", ids.toArray(new ObjectId[ids.size()]));
|
||||
}
|
||||
} else if (null != reader) {
|
||||
} else if (null != converter) {
|
||||
try {
|
||||
value = ((MongoConverter) reader).convertObjectId(value);
|
||||
value = converter.convertObjectId(value);
|
||||
} catch (ConversionFailedException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.repository;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
@@ -89,7 +91,7 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
|
||||
|
||||
DBObject result = new BasicDBObject();
|
||||
writer.write(value.getClass().isEnum() ? new EnumValueHolder((Enum<?>) value) : new ValueHolder(value), result);
|
||||
return result.get("value");
|
||||
return ((DBObject) result.get("value")).get("value");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,15 +148,15 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
|
||||
*/
|
||||
private static class ValueHolder {
|
||||
|
||||
private Object value;
|
||||
private Map<String, Object> value = new HashMap<String, Object>();
|
||||
|
||||
public ValueHolder(Object value) {
|
||||
|
||||
this.value = value;
|
||||
this.value.put("value", value);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public Object getValue() {
|
||||
public Map<String, Object> getValue() {
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -16,13 +16,14 @@
|
||||
package org.springframework.data.document.mongodb.repository;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.springframework.data.document.mongodb.mapping.BasicMongoPersistentEntity;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
|
||||
import org.springframework.data.mapping.MappingBeanHelper;
|
||||
import org.springframework.data.mapping.model.PersistentProperty;
|
||||
import org.springframework.data.repository.support.AbstractEntityInformation;
|
||||
|
||||
/**
|
||||
* {@link MongoEntityInformation} implementation using a {@link MongoPersistentEntity} instance to lookup the necessary
|
||||
* {@link MongoEntityInformation} implementation using a {@link BasicMongoPersistentEntity} instance to lookup the necessary
|
||||
* information.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
@@ -77,6 +78,6 @@ public class MappingMongoEntityInformation<T, ID extends Serializable> extends A
|
||||
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getIdAttribute()
|
||||
*/
|
||||
public String getIdAttribute() {
|
||||
return "_id";
|
||||
return entityMetadata.getIdProperty().getName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ import org.springframework.data.document.mongodb.query.Index;
|
||||
import org.springframework.data.document.mongodb.query.Order;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
import org.springframework.data.repository.query.QueryLookupStrategy;
|
||||
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
|
||||
import org.springframework.data.repository.query.RepositoryQuery;
|
||||
@@ -52,7 +51,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
|
||||
RepositoryFactoryBeanSupport<T, S, ID> {
|
||||
|
||||
private MongoTemplate template;
|
||||
private MappingContext mappingContext;
|
||||
private MappingContext<MongoPersistentEntity<?>> mappingContext;
|
||||
|
||||
/**
|
||||
* Configures the {@link MongoTemplate} to be used.
|
||||
@@ -69,7 +68,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
|
||||
*
|
||||
* @param mappingContext the mappingContext to set
|
||||
*/
|
||||
public void setMappingContext(MappingContext mappingContext) {
|
||||
public void setMappingContext(MappingContext<MongoPersistentEntity<?>> mappingContext) {
|
||||
this.mappingContext = mappingContext;
|
||||
}
|
||||
|
||||
@@ -100,6 +99,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
|
||||
|
||||
super.afterPropertiesSet();
|
||||
Assert.notNull(template, "MongoTemplate must not be null!");
|
||||
Assert.notNull(mappingContext, "MappingContext must not be null!");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,9 +118,10 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
|
||||
* @param template must not be {@literal null}
|
||||
* @param mappingContext
|
||||
*/
|
||||
public MongoRepositoryFactory(MongoTemplate template, MappingContext mappingContext) {
|
||||
public MongoRepositoryFactory(MongoTemplate template, MappingContext<MongoPersistentEntity<?>> mappingContext) {
|
||||
|
||||
Assert.notNull(template);
|
||||
Assert.notNull(mappingContext);
|
||||
this.template = template;
|
||||
this.entityInformationCreator = new EntityInformationCreator(mappingContext);
|
||||
}
|
||||
@@ -241,22 +242,17 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
|
||||
*/
|
||||
static class EntityInformationCreator {
|
||||
|
||||
private final MappingContext mappingContext;
|
||||
private final MappingContext<MongoPersistentEntity<?>> mappingContext;
|
||||
|
||||
public EntityInformationCreator(MappingContext mappingContext) {
|
||||
public EntityInformationCreator(MappingContext<MongoPersistentEntity<?>> mappingContext) {
|
||||
Assert.notNull(mappingContext);
|
||||
this.mappingContext = mappingContext;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T, ID extends Serializable> MongoEntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
|
||||
if (null == mappingContext) {
|
||||
return new SimpleMongoEntityInformation<T, ID>(domainClass);
|
||||
}
|
||||
|
||||
PersistentEntity<T> persistentEntity = mappingContext.getPersistentEntity(domainClass);
|
||||
if (persistentEntity == null) {
|
||||
persistentEntity = mappingContext.addPersistentEntity(domainClass);
|
||||
}
|
||||
return new MappingMongoEntityInformation<T, ID>((MongoPersistentEntity<T>) persistentEntity);
|
||||
MongoPersistentEntity<T> persistentEntity = (MongoPersistentEntity<T>) mappingContext.getPersistentEntity(domainClass);
|
||||
return new MappingMongoEntityInformation<T, ID>(persistentEntity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011 by the original author(s).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.repository;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.repository.support.AbstractEntityInformation;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
||||
/**
|
||||
* Expects the domain class to contain a field with a name out of the following
|
||||
* {@value #FIELD_NAMES}.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
class SimpleMongoEntityInformation<T extends Object, ID extends Serializable> extends AbstractEntityInformation<T, ID> implements MongoEntityInformation<T, ID> {
|
||||
|
||||
private static final List<String> FIELD_NAMES = Arrays.asList("ID", "id", "_id");
|
||||
private Field field;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new {@link SimpleMongoEntityInformation}.
|
||||
*
|
||||
* @param domainClass
|
||||
*/
|
||||
public SimpleMongoEntityInformation(Class<T> domainClass) {
|
||||
|
||||
super(domainClass);
|
||||
|
||||
for (String name : FIELD_NAMES) {
|
||||
|
||||
Field candidate = ReflectionUtils.findField(domainClass, name);
|
||||
|
||||
if (candidate != null) {
|
||||
ReflectionUtils.makeAccessible(candidate);
|
||||
this.field = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.field == null) {
|
||||
throw new IllegalArgumentException(String.format(
|
||||
"Given domain class %s does not contain an id property!",
|
||||
domainClass.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getCollectionName()
|
||||
*/
|
||||
public String getCollectionName() {
|
||||
|
||||
return StringUtils.uncapitalize(getJavaType().getSimpleName());
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getIdAttribute()
|
||||
*/
|
||||
public String getIdAttribute() {
|
||||
|
||||
return "_id";
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.springframework.data.repository.support.IdAware#getId(java.lang.Object
|
||||
* )
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public ID getId(Object entity) {
|
||||
|
||||
return (ID) ReflectionUtils.getField(field, entity);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* org.springframework.data.repository.support.EntityInformation#getIdType()
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public Class<ID> getIdType() {
|
||||
|
||||
return (Class<ID>) field.getType();
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,8 @@ import org.springframework.dao.DataAccessException;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import org.springframework.data.document.mongodb.convert.MongoConverter;
|
||||
import org.springframework.data.mapping.model.MappingContext;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
|
||||
/**
|
||||
* Abstract base class for unit tests to specify behaviour we expect from {@link MongoOperations}. Subclasses return
|
||||
@@ -75,6 +77,10 @@ public abstract class MongoOperationsUnitTests {
|
||||
public ObjectId convertObjectId(Object id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public MappingContext<PersistentEntity<?>> getMappingContext() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,12 +19,13 @@ import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.springframework.data.document.mongodb.query.Criteria.where;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.Mongo;
|
||||
import com.mongodb.WriteConcern;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
@@ -60,13 +61,14 @@ public class MongoTemplateTests {
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
@Autowired
|
||||
public void setMongo(Mongo mongo) {
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setMongo(Mongo mongo) throws Exception {
|
||||
|
||||
MongoMappingContext mappingContext = new MongoMappingContext();
|
||||
mappingContext.addPersistentEntity(PersonWith_idPropertyOfTypeObjectId.class);
|
||||
mappingContext.addPersistentEntity(PersonWith_idPropertyOfTypeString.class);
|
||||
mappingContext.addPersistentEntity(PersonWithIdPropertyOfTypeObjectId.class);
|
||||
mappingContext.addPersistentEntity(PersonWithIdPropertyOfTypeString.class);
|
||||
mappingContext.setInitialEntitySet(new HashSet<Class<?>>(Arrays.asList(PersonWith_idPropertyOfTypeObjectId.class,
|
||||
PersonWith_idPropertyOfTypeString.class, PersonWithIdPropertyOfTypeObjectId.class,
|
||||
PersonWithIdPropertyOfTypeString.class)));
|
||||
mappingContext.afterPropertiesSet();
|
||||
|
||||
MappingMongoConverter converter = new MappingMongoConverter(mappingContext);
|
||||
converter.afterPropertiesSet();
|
||||
@@ -97,7 +99,7 @@ public class MongoTemplateTests {
|
||||
public void updateFailure() throws Exception {
|
||||
|
||||
MongoTemplate mongoTemplate = new MongoTemplate(template.getDb().getMongo(), "test", "people");
|
||||
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
|
||||
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
|
||||
|
||||
Person person = new Person("Oliver2");
|
||||
person.setAge(25);
|
||||
@@ -274,6 +276,8 @@ public class MongoTemplateTests {
|
||||
|
||||
@Test
|
||||
public void testUsingAnInQuery() throws Exception {
|
||||
|
||||
template.remove(new Query(), PersonWithIdPropertyOfTypeObjectId.class);
|
||||
|
||||
PersonWithIdPropertyOfTypeObjectId p1 = new PersonWithIdPropertyOfTypeObjectId();
|
||||
p1.setFirstName("Sven");
|
||||
@@ -315,7 +319,7 @@ public class MongoTemplateTests {
|
||||
PersonWithIdPropertyOfTypeObjectId found1 = template.findOne(q1, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
assertThat(found1, notNullValue());
|
||||
Query _q = new Query(Criteria.where("_id").is(p1.getId()));
|
||||
template.remove(_q);
|
||||
template.remove(_q, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
PersonWithIdPropertyOfTypeObjectId notFound1 = template.findOne(q1, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
assertThat(notFound1, nullValue());
|
||||
|
||||
@@ -327,7 +331,7 @@ public class MongoTemplateTests {
|
||||
Query q2 = new Query(Criteria.where("id").is(p2.getId()));
|
||||
PersonWithIdPropertyOfTypeObjectId found2 = template.findOne(q2, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
assertThat(found2, notNullValue());
|
||||
template.remove(q2);
|
||||
template.remove(q2, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
PersonWithIdPropertyOfTypeObjectId notFound2 = template.findOne(q2, PersonWithIdPropertyOfTypeObjectId.class);
|
||||
assertThat(notFound2, nullValue());
|
||||
}
|
||||
@@ -345,7 +349,7 @@ public class MongoTemplateTests {
|
||||
private void testAddingToList(MongoTemplate template) {
|
||||
PersonWithAList p = new PersonWithAList();
|
||||
p.setFirstName("Sven");
|
||||
p.setAge(22);
|
||||
p.setAge(22);
|
||||
template.insert(p);
|
||||
|
||||
Query q1 = new Query(Criteria.where("id").is(p.getId()));
|
||||
|
||||
@@ -206,7 +206,7 @@ public class MvcAnalyticsTests {
|
||||
private void createAndStoreMvcEvent(int dataSize, int p1) {
|
||||
for (int i = 0; i < dataSize; i++) {
|
||||
MvcEvent event = generateEvent(p1);
|
||||
mongoTemplate.save(event);
|
||||
mongoTemplate.save("mvc", event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,21 +1,42 @@
|
||||
/*
|
||||
* Copyright (c) 2011 by the original author(s).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.convert;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoMappingContext;
|
||||
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
|
||||
/**
|
||||
* Test case to verify correct usage of custom {@link Converter} implementations to be used.
|
||||
*
|
||||
* @see DATADOC-101
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@@ -34,11 +55,11 @@ public class CustomConvertersUnitTests {
|
||||
|
||||
@Before
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setUp() {
|
||||
public void setUp() throws Exception {
|
||||
|
||||
context = new MongoMappingContext();
|
||||
context.addPersistentEntity(Foo.class);
|
||||
context.addPersistentEntity(Bar.class);
|
||||
context.setInitialEntitySet(new HashSet<Class<?>>(Arrays.asList(Foo.class, Bar.class)));
|
||||
context.afterPropertiesSet();
|
||||
|
||||
when(barToDBObjectConverter.convert(any(Bar.class))).thenReturn(new BasicDBObject());
|
||||
when(dbObjectToBarConverter.convert(any(DBObject.class))).thenReturn(new Bar());
|
||||
@@ -82,10 +103,14 @@ public class CustomConvertersUnitTests {
|
||||
}
|
||||
|
||||
public static class Foo {
|
||||
@Id
|
||||
public String id;
|
||||
public Bar bar;
|
||||
}
|
||||
|
||||
public static class Bar {
|
||||
@Id
|
||||
public String id;
|
||||
public String foo;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ package org.springframework.data.document.mongodb.mapping;
|
||||
*/
|
||||
public class Address {
|
||||
|
||||
private String id;
|
||||
private String[] lines;
|
||||
private String city;
|
||||
private String provinceOrState;
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.springframework.data.document.mongodb.mapping;
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.Collections;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import org.junit.Before;
|
||||
@@ -27,7 +28,6 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
|
||||
import org.springframework.data.document.mongodb.convert.MongoConverter;
|
||||
import org.springframework.data.mapping.BasicMappingContext;
|
||||
|
||||
/**
|
||||
* Unit tests for testing the mapping works with generic types.
|
||||
@@ -37,13 +37,15 @@ import org.springframework.data.mapping.BasicMappingContext;
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class GenericMappingTests {
|
||||
|
||||
BasicMappingContext context;
|
||||
MongoMappingContext context;
|
||||
MongoConverter converter;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
context = new BasicMappingContext();
|
||||
context.addPersistentEntity(StringWrapper.class);
|
||||
public void setUp() throws Exception {
|
||||
context = new MongoMappingContext();
|
||||
context.setInitialEntitySet(Collections.singleton(StringWrapper.class));
|
||||
context.afterPropertiesSet();
|
||||
|
||||
converter = new MappingMongoConverter(context);
|
||||
}
|
||||
|
||||
@@ -54,8 +56,6 @@ public class GenericMappingTests {
|
||||
wrapper.container = new Container<String>();
|
||||
wrapper.container.content = "Foo!";
|
||||
|
||||
context.addPersistentEntity(StringWrapper.class);
|
||||
|
||||
DBObject dbObject = new BasicDBObject();
|
||||
converter.write(wrapper, dbObject);
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
|
||||
import org.springframework.data.mapping.BasicMappingContext;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
|
||||
@@ -42,11 +41,11 @@ import com.mongodb.DBObject;
|
||||
public class MappingMongoConverterUnitTests {
|
||||
|
||||
MappingMongoConverter converter;
|
||||
BasicMappingContext mappingContext;
|
||||
MongoMappingContext mappingContext;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mappingContext = new BasicMappingContext();
|
||||
mappingContext = new MongoMappingContext();
|
||||
converter = new MappingMongoConverter(mappingContext);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,8 +89,6 @@ public class MappingTests {
|
||||
|
||||
@Test
|
||||
public void testPersonPojo() throws Exception {
|
||||
// POJOs aren't auto-detected, have to add manually
|
||||
mappingContext.addPersistentEntity(PersonPojo.class);
|
||||
|
||||
LOGGER.info("about to create new personpojo");
|
||||
PersonPojo p = new PersonPojo(12345, "Person", "Pojo");
|
||||
@@ -106,8 +104,6 @@ public class MappingTests {
|
||||
|
||||
@Test
|
||||
public void testPersonWithCustomIdName() {
|
||||
// POJOs aren't auto-detected, have to add manually
|
||||
mappingContext.addPersistentEntity(PersonCustomIdName.class);
|
||||
|
||||
PersonCustomIdName p = new PersonCustomIdName(123456, "Custom Id", null);
|
||||
template.insert(p);
|
||||
@@ -123,7 +119,6 @@ public class MappingTests {
|
||||
assertThat(result2.size(), is(1));
|
||||
assertNotNull(result2.get(0).getLastName());
|
||||
assertThat(result2.get(0).getLastName(), is("LastName"));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -16,12 +16,17 @@
|
||||
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
/**
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
*/
|
||||
@Document(collection = "person1")
|
||||
public class PersonCustomCollection1 extends BasePerson{
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
public PersonCustomCollection1(Integer ssn, String firstName, String lastName) {
|
||||
super(ssn, firstName, lastName);
|
||||
}
|
||||
|
||||
@@ -16,12 +16,17 @@
|
||||
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
/**
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
*/
|
||||
@Document(collection = "person2")
|
||||
public class PersonCustomCollection2 extends BasePerson {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
public PersonCustomCollection2(Integer ssn, String firstName, String lastName) {
|
||||
super(ssn, firstName, lastName);
|
||||
}
|
||||
|
||||
@@ -16,11 +16,16 @@
|
||||
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
/**
|
||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||
*/
|
||||
@Document
|
||||
public class PersonMultiDimArrays extends BasePerson {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
private String[][] grid;
|
||||
|
||||
public PersonMultiDimArrays(Integer ssn, String firstName, String lastName, String[][] grid) {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.springframework.data.document.mongodb.mapping;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.document.mongodb.mapping.SimpleMongoMappingContext.SimpleMongoPersistentEntity;
|
||||
import org.springframework.data.mapping.model.PersistentProperty;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class SimpleMappingContextUnitTests {
|
||||
|
||||
@Test
|
||||
public void testname() {
|
||||
SimpleMongoMappingContext context = new SimpleMongoMappingContext();
|
||||
SimpleMongoPersistentEntity<?> entity = context.getPersistentEntity(Person.class);
|
||||
|
||||
assertThat(entity.getPersistentProperties().isEmpty(), is(false));
|
||||
|
||||
PersistentProperty idProperty = entity.getIdProperty();
|
||||
assertThat(idProperty.getName(), is("id"));
|
||||
}
|
||||
|
||||
static class Person {
|
||||
String id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2011 by the original author(s).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.query;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.data.document.mongodb.convert.MongoConverter;
|
||||
import org.springframework.data.mapping.model.PersistentEntity;
|
||||
import org.springframework.data.mapping.model.PersistentProperty;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link QueryMapper}.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class QueryMapperUnitTests {
|
||||
|
||||
QueryMapper mapper;
|
||||
|
||||
@Mock
|
||||
MongoConverter converter;
|
||||
@Mock
|
||||
PersistentEntity<?> entity;
|
||||
@Mock
|
||||
PersistentProperty property;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
when(entity.getIdProperty()).thenReturn(property);
|
||||
when(converter.convertObjectId(any())).thenReturn(new ObjectId());
|
||||
mapper = new QueryMapper(converter);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translatesIdPropertyIntoIdKey() {
|
||||
|
||||
DBObject query = new BasicDBObject("foo", "value");
|
||||
|
||||
when(property.getName()).thenReturn("foo");
|
||||
|
||||
DBObject result = mapper.getMappedObject(query, entity);
|
||||
assertThat(result.get("_id"), is(notNullValue()));
|
||||
assertThat(result.get("foo"), is(nullValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertsStringIntoObjectId() {
|
||||
|
||||
DBObject query = new BasicDBObject("_id", new ObjectId().toString());
|
||||
DBObject result = mapper.getMappedObject(query, null);
|
||||
assertThat(result.get("_id"), is(ObjectId.class));
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.repository;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.springframework.data.document.mongodb.repository.StubParameterAccessor.getAccessor;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
@@ -24,11 +25,16 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.data.document.mongodb.Person;
|
||||
import org.springframework.data.document.mongodb.convert.MongoConverter;
|
||||
import org.springframework.data.repository.query.parser.PartTree;
|
||||
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
|
||||
|
||||
/**
|
||||
* Unit test for {@link MongoQueryCreator}.
|
||||
@@ -53,6 +59,14 @@ public class MongoQueryCreatorUnitTests {
|
||||
findByFirstnameAndFriend =
|
||||
Sample.class.getMethod("findByFirstnameAndFriend",
|
||||
String.class, Person.class);
|
||||
|
||||
doAnswer(new Answer<Void>() {
|
||||
public Void answer(InvocationOnMock invocation) throws Throwable {
|
||||
DBObject dbObject = (DBObject) invocation.getArguments()[1];
|
||||
dbObject.put("value", new BasicDBObject("value", "value"));
|
||||
return null;
|
||||
}
|
||||
}).when(converter).write(any(), any(DBObject.class));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -41,9 +41,11 @@ public class MongoRepositoryFactoryUnitTests {
|
||||
MongoTemplate template;
|
||||
|
||||
@Mock
|
||||
MappingContext mappingContext;
|
||||
MappingContext<MongoPersistentEntity<?>> mappingContext;
|
||||
|
||||
@Mock
|
||||
MongoPersistentEntity<Person> entity;
|
||||
@SuppressWarnings("rawtypes")
|
||||
MongoPersistentEntity entity;
|
||||
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
@@ -53,6 +55,7 @@ public class MongoRepositoryFactoryUnitTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void usesMappingMongoEntityInformationIfMappingContextSet() {
|
||||
|
||||
when(mappingContext.getPersistentEntity(Person.class)).thenReturn(entity);
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.document.mongodb.repository;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
/**
|
||||
* Unit test for {@link SimpleMongoEntityInformation}.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class SimpleMongoEntityInformationUnitTests {
|
||||
|
||||
@Test
|
||||
public void findsIdField() throws Exception {
|
||||
|
||||
SimpleMongoEntityInformation<Person, Long> isNewAware =
|
||||
new SimpleMongoEntityInformation<Person, Long>(Person.class);
|
||||
|
||||
Person person = new Person();
|
||||
assertThat(isNewAware.isNew(person), is(true));
|
||||
person.id = 1L;
|
||||
assertThat(isNewAware.isNew(person), is(false));
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void rejectsClassIfNoIdField() throws Exception {
|
||||
|
||||
new SimpleMongoEntityInformation<InvalidPerson, Long>(InvalidPerson.class);
|
||||
}
|
||||
|
||||
class Person {
|
||||
|
||||
Long id;
|
||||
}
|
||||
|
||||
class InvalidPerson {
|
||||
|
||||
Long foo;
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,9 @@ public class StringBasedMongoQueryUnitTests {
|
||||
MongoTemplate template;
|
||||
@Mock
|
||||
RepositoryMetadata metadata;
|
||||
@Mock
|
||||
EntityInformationCreator creator;
|
||||
|
||||
MongoConverter converter = new SimpleMongoConverter();
|
||||
|
||||
@Before
|
||||
@@ -56,7 +59,7 @@ public class StringBasedMongoQueryUnitTests {
|
||||
public void testname() throws Exception {
|
||||
|
||||
Method method = SampleRepository.class.getMethod("findByLastname", String.class);
|
||||
MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, new EntityInformationCreator(null));
|
||||
MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, creator);
|
||||
StringBasedMongoQuery mongoQuery = new StringBasedMongoQuery(queryMethod, template);
|
||||
ConvertingParameterAccessor accesor = StubParameterAccessor.getAccessor(converter, "Matthews");
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
|
||||
<constructor-arg ref="mongo"/>
|
||||
<constructor-arg value="database"/>
|
||||
<property name="defaultCollectionName" value="springdata"/>
|
||||
<property name="mongoConverter" ref="mongoConverter" />
|
||||
<constructor-arg value="springdata"/>
|
||||
<constructor-arg ref="mongoConverter" />
|
||||
</bean>
|
||||
|
||||
<bean id="mongoConverter" class="org.springframework.data.document.mongodb.convert.SimpleMongoConverter" />
|
||||
|
||||
@@ -5,7 +5,7 @@ Changes in version 1.0.0.RC1 MongoDB
|
||||
-------------------------------------------------
|
||||
|
||||
General
|
||||
*
|
||||
* Introducted MappingContext implementatio for SimpleMongoConverter (DATADOC-109)
|
||||
|
||||
Changes in version 1.0.0.M2 MongoDB (2011-04-09)
|
||||
------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user