From bfd79377ca6baaa5ba549830527854de4b942c0a Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 23 Mar 2011 07:45:25 +0100 Subject: [PATCH] Made MongoPersistentEntityIndexCreator an ApplicationListener again. MongoPersistentEntityIndexCreator now listens to MappingContextEvents to ensure indexes for added entities *after* the initial set had been added. --- .../mapping/MappingConfigurationHelper.java | 73 ++++++------------- 1 file changed, 22 insertions(+), 51 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MappingConfigurationHelper.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MappingConfigurationHelper.java index c6eb716d3..f2150192f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MappingConfigurationHelper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MappingConfigurationHelper.java @@ -30,10 +30,6 @@ import com.mongodb.MongoException; import com.mongodb.util.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationListener; import org.springframework.dao.DataAccessException; import org.springframework.data.document.mongodb.CollectionCallback; @@ -44,67 +40,42 @@ import org.springframework.data.document.mongodb.index.IndexDirection; import org.springframework.data.document.mongodb.index.Indexed; import org.springframework.data.mapping.PropertyHandler; import org.springframework.data.mapping.event.MappingContextEvent; -import org.springframework.data.mapping.model.MappingException; -import org.springframework.data.mapping.model.PersistentEntity; import org.springframework.data.mapping.model.PersistentProperty; +import org.springframework.util.Assert; /** + * Component that inspects {@link MongoPersistentEntity} instances contained in the given {@link MongoMappingContext} + * for indexing metadata and ensures the indexes to be available. + * * @author Jon Brisbin + * @author Oliver Gierke */ -public class MappingConfigurationHelper implements ApplicationListener, ApplicationContextAware, InitializingBean { +public class MongoPersistentEntityIndexCreator implements ApplicationListener{ - private static final Logger log = LoggerFactory.getLogger(MappingConfigurationHelper.class); + private static final Logger log = LoggerFactory.getLogger(MongoPersistentEntityIndexCreator.class); private Map compoundIndexes = new HashMap(); private Map fieldIndexes = new HashMap(); private Set> classesSeen = Collections.newSetFromMap(new ConcurrentHashMap, Boolean>()); - private ApplicationContext applicationContext; - private MongoMappingContext mappingContext; - private MongoTemplate mongoTemplate; + + private final MongoTemplate mongoTemplate; - public MappingConfigurationHelper(MongoMappingContext mappingContext, MongoTemplate mongoTemplate) { - this.mappingContext = mappingContext; + public MongoPersistentEntityIndexCreator(MongoMappingContext mappingContext, MongoTemplate mongoTemplate) { + + Assert.notNull(mongoTemplate); + Assert.notNull(mappingContext); this.mongoTemplate = mongoTemplate; + + for (MongoPersistentEntity entity : mappingContext.getPersistentEntities()) { + checkForIndexes(entity); + } } - - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - + + /* (non-Javadoc) + * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) + */ public void onApplicationEvent(MappingContextEvent event) { - PersistentEntity entity = event.getPersistentEntity(); - if (entity instanceof MongoPersistentEntity) { - checkForIndexes((MongoPersistentEntity) entity); - } - } - - public void afterPropertiesSet() throws Exception { - for (String className : mappingContext.getInitialEntitySet()) { - try { - Class clazz = Class.forName(className); - if (null == mappingContext.getPersistentEntity(clazz)) { - mappingContext.addPersistentEntity(clazz); - } - } catch (ClassNotFoundException e) { - throw new MappingException(e.getMessage(), e); - } - } - } - - public MongoMappingContext getMappingContext() { - return mappingContext; - } - - public void setMappingContext(MongoMappingContext mappingContext) { - this.mappingContext = mappingContext; - } - - public MongoTemplate getMongoTemplate() { - return mongoTemplate; - } - - public void setMongoTemplate(MongoTemplate mongoTemplate) { - this.mongoTemplate = mongoTemplate; + checkForIndexes((MongoPersistentEntity) event.getPersistentEntity()); } protected void checkForIndexes(MongoPersistentEntity entity) {