From 52bff39c22339807db5f03dec3ede45854615005 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 25 May 2015 13:12:47 +0200 Subject: [PATCH] DATAMONGO-1224 - Ensure Spring Framework 4.2 compatibility. Removed obsolete generics in MongoPersistentEntityIndexCreator to make sure MappingContextEvents are delivered to the listener on Spring 4.2 which applies more strict generics handling to ApplicationEvents. Tweaked PersonBeforeSaveListener in test code to actually reflect how an ApplicationEventListener for MongoDB would be implemented. Removed deprecated (and now removed) usage of ConversionServiceFactory in AbstractMongoConverter. Added MongoMappingEventPublisher.publishEvent(Object) as NoOp. --- .../core/convert/AbstractMongoConverter.java | 8 +++----- .../index/MongoMappingEventPublisher.java | 8 +++++++- .../MongoPersistentEntityIndexCreator.java | 18 ++++++++--------- .../event/PersonBeforeSaveListener.java | 20 ++++++++++++------- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/AbstractMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/AbstractMongoConverter.java index 023603e6f..be2f90b13 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/AbstractMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/AbstractMongoConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 the original author or authors. + * Copyright 2011-2015 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. @@ -20,7 +20,7 @@ import java.math.BigInteger; import org.bson.types.ObjectId; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.convert.ConversionService; -import org.springframework.core.convert.support.ConversionServiceFactory; +import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.data.convert.EntityInstantiators; import org.springframework.data.mongodb.core.convert.MongoConverters.BigIntegerToObjectIdConverter; @@ -46,10 +46,8 @@ public abstract class AbstractMongoConverter implements MongoConverter, Initiali * * @param conversionService */ - @SuppressWarnings("deprecation") public AbstractMongoConverter(GenericConversionService conversionService) { - this.conversionService = conversionService == null ? ConversionServiceFactory.createDefaultConversionService() - : conversionService; + this.conversionService = conversionService == null ? new DefaultConversionService() : conversionService; } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoMappingEventPublisher.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoMappingEventPublisher.java index ddd1fcdbc..26ce21680 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoMappingEventPublisher.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoMappingEventPublisher.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2012 the original author or authors. + * Copyright 2011-2015 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. @@ -60,4 +60,10 @@ public class MongoMappingEventPublisher implements ApplicationEventPublisher { indexCreator.onApplicationEvent((MappingContextEvent, MongoPersistentProperty>) event); } } + + /* + * (non-Javadoc) + * @see org.springframework.context.ApplicationEventPublisher#publishEvent(java.lang.Object) + */ + public void publishEvent(Object event) {} } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java index d6f73b2b1..945959ca6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreator.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2014 the original author or authors. + * Copyright 2011-2015 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. @@ -29,7 +29,6 @@ import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexRes import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; -import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.util.Assert; /** @@ -43,8 +42,7 @@ import org.springframework.util.Assert; * @author Laurent Canet * @author Christoph Strobl */ -public class MongoPersistentEntityIndexCreator implements - ApplicationListener, MongoPersistentProperty>> { +public class MongoPersistentEntityIndexCreator implements ApplicationListener> { private static final Logger LOGGER = LoggerFactory.getLogger(MongoPersistentEntityIndexCreator.class); @@ -54,7 +52,7 @@ public class MongoPersistentEntityIndexCreator implements private final IndexResolver indexResolver; /** - * Creats a new {@link MongoPersistentEntityIndexCreator} for the given {@link MongoMappingContext} and + * Creates a new {@link MongoPersistentEntityIndexCreator} for the given {@link MongoMappingContext} and * {@link MongoDbFactory}. * * @param mappingContext must not be {@literal null}. @@ -65,7 +63,7 @@ public class MongoPersistentEntityIndexCreator implements } /** - * Creats a new {@link MongoPersistentEntityIndexCreator} for the given {@link MongoMappingContext} and + * Creates a new {@link MongoPersistentEntityIndexCreator} for the given {@link MongoMappingContext} and * {@link MongoDbFactory}. * * @param mappingContext must not be {@literal null}. @@ -92,7 +90,7 @@ public class MongoPersistentEntityIndexCreator implements * (non-Javadoc) * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) */ - public void onApplicationEvent(MappingContextEvent, MongoPersistentProperty> event) { + public void onApplicationEvent(MappingContextEvent event) { if (!event.wasEmittedBy(mappingContext)) { return; @@ -102,7 +100,7 @@ public class MongoPersistentEntityIndexCreator implements // Double check type as Spring infrastructure does not consider nested generics if (entity instanceof MongoPersistentEntity) { - checkForIndexes(event.getPersistentEntity()); + checkForIndexes((MongoPersistentEntity) entity); } } @@ -132,8 +130,8 @@ public class MongoPersistentEntityIndexCreator implements } private void createIndex(IndexDefinitionHolder indexDefinition) { - mongoDbFactory.getDb().getCollection(indexDefinition.getCollection()) - .createIndex(indexDefinition.getIndexKeys(), indexDefinition.getIndexOptions()); + mongoDbFactory.getDb().getCollection(indexDefinition.getCollection()).createIndex(indexDefinition.getIndexKeys(), + indexDefinition.getIndexOptions()); } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/PersonBeforeSaveListener.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/PersonBeforeSaveListener.java index 6a234e275..beabaf860 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/PersonBeforeSaveListener.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/PersonBeforeSaveListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 by the original author(s). + * Copyright 2011-2015 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. @@ -16,17 +16,23 @@ package org.springframework.data.mongodb.core.mapping.event; import java.util.ArrayList; +import java.util.List; import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationListener; import org.springframework.data.mongodb.core.mapping.PersonPojoStringId; -public class PersonBeforeSaveListener implements ApplicationListener> { +import com.mongodb.DBObject; - public final ArrayList seenEvents = new ArrayList(); +public class PersonBeforeSaveListener extends AbstractMongoEventListener { - public void onApplicationEvent(BeforeSaveEvent event) { - this.seenEvents.add(event); + public final List seenEvents = new ArrayList(); + + /* + * (non-Javadoc) + * @see org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener#onBeforeSave(java.lang.Object, com.mongodb.DBObject) + */ + @Override + public void onBeforeSave(PersonPojoStringId source, DBObject dbo) { + seenEvents.add(new BeforeSaveEvent(source, dbo)); } - }