DATAMONGO-883 - Adapted to changes in auditing config in Spring Data MongoDB.

This commit is contained in:
Oliver Gierke
2014-03-18 20:10:43 +01:00
parent fa9b5efdab
commit b24e34c360
5 changed files with 38 additions and 39 deletions

View File

@@ -17,15 +17,17 @@ package org.springframework.data.mongodb.config;
import static org.springframework.data.config.ParsingUtils.*;
import static org.springframework.data.mongodb.config.BeanNames.*;
import static org.springframework.data.mongodb.config.MappingMongoConverterParser.*;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.data.config.IsNewAwareAuditingHandlerBeanDefinitionParser;
import org.springframework.data.auditing.config.IsNewAwareAuditingHandlerBeanDefinitionParser;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.mapping.event.AuditingEventListener;
import org.springframework.util.StringUtils;
import org.w3c.dom.Element;
/**
@@ -61,22 +63,21 @@ public class MongoAuditingBeanDefinitionParser extends AbstractSingleBeanDefinit
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
BeanDefinitionRegistry registry = parserContext.getRegistry();
String mappingContextRef = element.getAttribute("mapping-context-ref");
String isNewStrategyFactoryName = IS_NEW_STRATEGY_FACTORY_BEAN_NAME;
String mappingContextName = MAPPING_CONTEXT_BEAN_NAME;
if (!StringUtils.hasText(mappingContextRef)) {
if (!registry.containsBeanDefinition(isNewStrategyFactoryName)) {
BeanDefinitionRegistry registry = parserContext.getRegistry();
if (!registry.containsBeanDefinition(mappingContextName)) {
mappingContextName = potentiallyCreateMappingContext(element, parserContext, null, null);
if (!registry.containsBeanDefinition(MAPPING_CONTEXT_BEAN_NAME)) {
registry.registerBeanDefinition(MAPPING_CONTEXT_BEAN_NAME, new RootBeanDefinition(MongoMappingContext.class));
}
isNewStrategyFactoryName = createIsNewStrategyFactoryBeanDefinition(mappingContextName, parserContext, element);
mappingContextRef = MAPPING_CONTEXT_BEAN_NAME;
}
IsNewAwareAuditingHandlerBeanDefinitionParser parser = new IsNewAwareAuditingHandlerBeanDefinitionParser(
isNewStrategyFactoryName);
mappingContextRef);
parser.parse(element, parserContext);
builder.addConstructorArgValue(getObjectFactoryBeanDefinition(parser.getResolvedBeanName(),

View File

@@ -21,8 +21,6 @@ import static org.springframework.data.mongodb.config.BeanNames.*;
import java.lang.annotation.Annotation;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
@@ -32,7 +30,6 @@ import org.springframework.data.auditing.IsNewAwareAuditingHandler;
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
import org.springframework.data.auditing.config.AuditingConfiguration;
import org.springframework.data.config.ParsingUtils;
import org.springframework.data.mapping.context.MappingContextIsNewStrategyFactory;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.mapping.event.AuditingEventListener;
import org.springframework.data.support.IsNewStrategyFactory;
@@ -88,7 +85,7 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
Assert.notNull(configuration, "AuditingConfiguration must not be null!");
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class);
builder.addConstructorArgReference(BeanNames.IS_NEW_STRATEGY_FACTORY_BEAN_NAME);
builder.addConstructorArgReference(MAPPING_CONTEXT_BEAN_NAME);
return configureDefaultAuditHandlerAttributes(configuration, builder);
}
@@ -103,13 +100,10 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
Assert.notNull(auditingHandlerDefinition, "BeanDefinition must not be null!");
Assert.notNull(registry, "BeanDefinitionRegistry must not be null!");
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ObjectFactoryCreatingFactoryBean.class);
builder.addPropertyValue("targetBeanName", getAuditingHandlerBeanName());
builder.setRole(ROLE_INFRASTRUCTURE);
BeanDefinitionBuilder listenerBeanDefinitionBuilder = BeanDefinitionBuilder
.rootBeanDefinition(AuditingEventListener.class);
listenerBeanDefinitionBuilder.addConstructorArgValue(builder.getBeanDefinition());
listenerBeanDefinitionBuilder.addConstructorArgValue(ParsingUtils.getObjectFactoryBeanDefinition(
getAuditingHandlerBeanName(), registry));
registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(),
AuditingEventListener.class.getName(), registry);
@@ -132,17 +126,5 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
registry.registerBeanDefinition(MAPPING_CONTEXT_BEAN_NAME, definition);
}
if (!registry.containsBeanDefinition(BeanNames.IS_NEW_STRATEGY_FACTORY_BEAN_NAME)) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder
.rootBeanDefinition(MappingContextIsNewStrategyFactory.class);
builder.addConstructorArgReference(MAPPING_CONTEXT_BEAN_NAME);
AbstractBeanDefinition definition = ParsingUtils.getSourceBeanDefinition(builder, source);
definition.setRole(ROLE_INFRASTRUCTURE);
registry.registerBeanDefinition(IS_NEW_STRATEGY_FACTORY_BEAN_NAME, definition);
}
}
}

View File

@@ -34,6 +34,9 @@ import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
*/
public class AuditingIntegrationTests {
/**
* @see DATAMONGO-577, DATAMONGO-800, DATAMONGO-883
*/
@Test
public void enablesAuditingAndSetsPropertiesAccordingly() throws Exception {
@@ -58,8 +61,13 @@ public class AuditingIntegrationTests {
class Entity {
@CreatedDate DateTime created;
@LastModifiedDate DateTime modified;
@Id Long id;
@CreatedDate DateTime created;
DateTime modified;
@LastModifiedDate
public DateTime getModified() {
return modified;
}
}
}

View File

@@ -84,20 +84,20 @@ public class AuditingViaJavaConfigRepositoriesTests {
}
/**
* @DATAMONGO-792
* @see DATAMONGO-792, DATAMONGO-883
*/
@Test
public void basicAuditing() {
doReturn(this.auditor).when(this.auditorAware).getCurrentAuditor();
AuditablePerson user = new AuditablePerson("user");
AuditablePerson savedUser = auditablePersonRepository.save(user);
AuditablePerson savedUser = auditablePersonRepository.save(new AuditablePerson("user"));
AuditablePerson createdBy = savedUser.getCreatedBy();
assertThat(createdBy, is(notNullValue()));
assertThat(createdBy.getFirstname(), is(this.auditor.getFirstname()));
assertThat(savedUser.getCreatedAt(), is(notNullValue()));
}
/**

View File

@@ -15,7 +15,10 @@
*/
package org.springframework.data.mongodb.core;
import java.util.Date;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
@@ -26,9 +29,10 @@ import org.springframework.data.mongodb.core.mapping.DBRef;
*/
public class AuditablePerson {
@Id private String id;
private @Id String id;
private String firstname;
@DBRef @CreatedBy private AuditablePerson createdBy;
private @DBRef @CreatedBy AuditablePerson createdBy;
private @CreatedDate Date createdAt;
public AuditablePerson() {}
@@ -59,4 +63,8 @@ public class AuditablePerson {
public void setCreatedBy(AuditablePerson createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedAt() {
return createdAt;
}
}