diff --git a/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingBeanDefinitionParser.java b/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingBeanDefinitionParser.java index 2e845ba77..7aa51e3be 100644 --- a/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingBeanDefinitionParser.java +++ b/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingBeanDefinitionParser.java @@ -28,8 +28,8 @@ import org.springframework.data.auditing.config.IsNewAwareAuditingHandlerBeanDef import org.springframework.data.elasticsearch.core.event.AuditingEntityCallback; import org.springframework.data.elasticsearch.core.event.ReactiveAuditingEntityCallback; import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; -import org.springframework.data.repository.util.ReactiveWrappers; import org.springframework.lang.Nullable; +import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.w3c.dom.Element; @@ -41,7 +41,9 @@ import org.w3c.dom.Element; */ public class ElasticsearchAuditingBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { - private static String MAPPING_CONTEXT_BEAN_NAME = "simpleElasticsearchMappingContext"; + private static final String MAPPING_CONTEXT_BEAN_NAME = "simpleElasticsearchMappingContext"; + private static final boolean PROJECT_REACTOR_AVAILABLE = ClassUtils.isPresent("reactor.core.publisher.Mono", + ElasticsearchAuditingRegistrar.class.getClassLoader()); /* * (non-Javadoc) @@ -90,7 +92,7 @@ public class ElasticsearchAuditingBeanDefinitionParser extends AbstractSingleBea parserContext.extractSource(element)); builder.addConstructorArgValue(isNewAwareAuditingHandler); - if (ReactiveWrappers.isAvailable(ReactiveWrappers.ReactiveLibrary.PROJECT_REACTOR)) { + if (PROJECT_REACTOR_AVAILABLE) { registerReactiveAuditingEntityCallback(parserContext.getRegistry(), isNewAwareAuditingHandler, parserContext.extractSource(element)); } diff --git a/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingRegistrar.java b/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingRegistrar.java index 06efe383a..cfa786615 100644 --- a/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingRegistrar.java +++ b/src/main/java/org/springframework/data/elasticsearch/config/ElasticsearchAuditingRegistrar.java @@ -18,10 +18,10 @@ package org.springframework.data.elasticsearch.config; import java.lang.annotation.Annotation; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.Ordered; import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; @@ -35,7 +35,8 @@ import org.springframework.util.Assert; * @author Peter-Josef Meisch * @since 4.0 */ -class ElasticsearchAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { +class ElasticsearchAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport implements Ordered +{ @Override protected Class getAnnotation() { @@ -47,18 +48,20 @@ class ElasticsearchAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupp return "elasticsearchAuditingHandler"; } + @Override + protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, + BeanDefinitionRegistry registry) { + + builder.setFactoryMethod("from").addConstructorArgReference("elasticsearchMappingContext"); + } + @Override protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) { Assert.notNull(configuration, "AuditingConfiguration must not be null!"); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class); - - BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntitiesFactoryBean.class); - definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR); - - builder.addConstructorArgValue(definition.getBeanDefinition()); - return configureDefaultAuditHandlerAttributes(configuration, builder); + return configureDefaultAuditHandlerAttributes(configuration, + BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class)); } @Override @@ -73,4 +76,9 @@ class ElasticsearchAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupp registerInfrastructureBeanWithId(builder.getBeanDefinition(), AuditingEntityCallback.class.getName(), registry); } + + @Override + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } } diff --git a/src/main/java/org/springframework/data/elasticsearch/config/ReactiveElasticsearchAuditingRegistrar.java b/src/main/java/org/springframework/data/elasticsearch/config/ReactiveElasticsearchAuditingRegistrar.java index 5a9995371..0fff2cc43 100644 --- a/src/main/java/org/springframework/data/elasticsearch/config/ReactiveElasticsearchAuditingRegistrar.java +++ b/src/main/java/org/springframework/data/elasticsearch/config/ReactiveElasticsearchAuditingRegistrar.java @@ -18,7 +18,6 @@ package org.springframework.data.elasticsearch.config; import java.lang.annotation.Annotation; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; @@ -47,18 +46,19 @@ class ReactiveElasticsearchAuditingRegistrar extends AuditingBeanDefinitionRegis return "reactiveElasticsearchAuditingHandler"; } + @Override + protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, + BeanDefinitionRegistry registry) { + builder.setFactoryMethod("from").addConstructorArgReference("elasticsearchMappingContext"); + } + @Override protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) { Assert.notNull(configuration, "AuditingConfiguration must not be null!"); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ReactiveIsNewAwareAuditingHandler.class); - - BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntitiesFactoryBean.class); - definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR); - - builder.addConstructorArgValue(definition.getBeanDefinition()); - return configureDefaultAuditHandlerAttributes(configuration, builder); + return configureDefaultAuditHandlerAttributes(configuration, + BeanDefinitionBuilder.rootBeanDefinition(ReactiveIsNewAwareAuditingHandler.class)); } @Override