From ce72381bcd200653e7bc905549587b25b892fa54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Thu, 20 Jun 2019 12:26:34 +0200 Subject: [PATCH] HSEARCH-3604 Use dedicated interfaces for the mapping and session context passed to SearchScopeImpl This will be necessary to move PojoReference transforming out of the scope. --- .../orm/mapping/impl/HibernateOrmMapping.java | 4 +-- .../impl/HibernateOrmScopeMappingContext.java | 14 ++++++++++ .../impl/HibernateOrmScopeSessionContext.java | 18 ++++++++++++ .../orm/scope/impl/SearchScopeImpl.java | 27 ++++++++---------- .../impl/HibernateOrmSearchSession.java | 28 +++++++++++++------ 5 files changed, 66 insertions(+), 25 deletions(-) create mode 100644 mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeMappingContext.java create mode 100644 mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeSessionContext.java diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMapping.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMapping.java index b4458c7f7d1..4d67d6080ec 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMapping.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/mapping/impl/HibernateOrmMapping.java @@ -16,7 +16,7 @@ import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy; import org.hibernate.search.mapper.orm.logging.impl.Log; import org.hibernate.search.mapper.orm.mapping.context.impl.HibernateOrmMappingContextImpl; -import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext; +import org.hibernate.search.mapper.orm.scope.impl.HibernateOrmScopeMappingContext; import org.hibernate.search.mapper.orm.session.AutomaticIndexingSynchronizationStrategy; import org.hibernate.search.mapper.orm.session.impl.HibernateOrmSearchSession; import org.hibernate.search.mapper.pojo.mapping.spi.AbstractPojoMappingImplementor; @@ -26,7 +26,7 @@ import org.hibernate.search.util.common.logging.impl.LoggerFactory; public class HibernateOrmMapping extends AbstractPojoMappingImplementor - implements HibernateOrmMassIndexingMappingContext { + implements HibernateOrmScopeMappingContext { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeMappingContext.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeMappingContext.java new file mode 100644 index 00000000000..5d00fbf49de --- /dev/null +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeMappingContext.java @@ -0,0 +1,14 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.mapper.orm.scope.impl; + +import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext; + +public interface HibernateOrmScopeMappingContext + extends HibernateOrmMassIndexingMappingContext { + +} diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeSessionContext.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeSessionContext.java new file mode 100644 index 00000000000..e199fbab1b8 --- /dev/null +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/HibernateOrmScopeSessionContext.java @@ -0,0 +1,18 @@ +/* + * Hibernate Search, full-text search for your domain model + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.search.mapper.orm.scope.impl; + +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.search.engine.mapper.session.context.spi.DetachedSessionContextImplementor; + +public interface HibernateOrmScopeSessionContext { + + SessionImplementor getSession(); + + DetachedSessionContextImplementor getDetachedSessionContext(); + +} diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeImpl.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeImpl.java index c31c8cce530..039ce669703 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeImpl.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/scope/impl/SearchScopeImpl.java @@ -7,37 +7,34 @@ package org.hibernate.search.mapper.orm.scope.impl; import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.search.engine.mapper.session.context.spi.DetachedSessionContextImplementor; import org.hibernate.search.engine.search.dsl.predicate.SearchPredicateFactoryContext; import org.hibernate.search.engine.search.dsl.projection.SearchProjectionFactoryContext; import org.hibernate.search.engine.search.dsl.sort.SearchSortFactoryContext; import org.hibernate.search.mapper.orm.massindexing.MassIndexer; -import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext; import org.hibernate.search.mapper.orm.massindexing.impl.MassIndexerImpl; -import org.hibernate.search.mapper.orm.writing.SearchWriter; -import org.hibernate.search.mapper.orm.writing.impl.SearchWriterImpl; import org.hibernate.search.mapper.orm.scope.SearchScope; import org.hibernate.search.mapper.orm.search.dsl.query.HibernateOrmSearchQueryResultDefinitionContext; import org.hibernate.search.mapper.orm.search.dsl.query.impl.HibernateOrmSearchQueryResultDefinitionContextImpl; import org.hibernate.search.mapper.orm.search.loading.context.impl.HibernateOrmLoadingContext; import org.hibernate.search.mapper.orm.search.loading.impl.EntityLoaderBuilder; import org.hibernate.search.mapper.orm.search.loading.impl.MutableEntityLoadingOptions; -import org.hibernate.search.mapper.orm.session.context.impl.HibernateOrmSessionContextImpl; -import org.hibernate.search.mapper.pojo.search.PojoReference; +import org.hibernate.search.mapper.orm.writing.SearchWriter; +import org.hibernate.search.mapper.orm.writing.impl.SearchWriterImpl; import org.hibernate.search.mapper.pojo.scope.spi.PojoScopeDelegate; +import org.hibernate.search.mapper.pojo.search.PojoReference; public class SearchScopeImpl implements SearchScope, org.hibernate.search.mapper.orm.search.SearchScope { - private final HibernateOrmMassIndexingMappingContext massIndexingMappingContext; + private final HibernateOrmScopeMappingContext mappingContext; + private final HibernateOrmScopeSessionContext sessionContext; private final PojoScopeDelegate> delegate; - private final HibernateOrmSessionContextImpl sessionContext; - public SearchScopeImpl(HibernateOrmMassIndexingMappingContext massIndexingMappingContext, - PojoScopeDelegate> delegate, - HibernateOrmSessionContextImpl sessionContext) { - this.massIndexingMappingContext = massIndexingMappingContext; - this.delegate = delegate; + public SearchScopeImpl(HibernateOrmScopeMappingContext mappingContext, + HibernateOrmScopeSessionContext sessionContext, + PojoScopeDelegate> delegate) { + this.mappingContext = mappingContext; this.sessionContext = sessionContext; + this.delegate = delegate; } @Override @@ -79,9 +76,9 @@ public SearchWriter writer() { public MassIndexer massIndexer() { return new MassIndexerImpl( sessionContext.getSession().getFactory(), - massIndexingMappingContext, + mappingContext, delegate.getIncludedIndexedTypes(), - DetachedSessionContextImplementor.of( sessionContext ), + sessionContext.getDetachedSessionContext(), delegate.executor() ); } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/session/impl/HibernateOrmSearchSession.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/session/impl/HibernateOrmSearchSession.java index 8803e777af5..f23633d5ed5 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/session/impl/HibernateOrmSearchSession.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/session/impl/HibernateOrmSearchSession.java @@ -22,9 +22,11 @@ import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy; import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy; +import org.hibernate.search.engine.mapper.session.context.spi.DetachedSessionContextImplementor; import org.hibernate.search.mapper.orm.logging.impl.Log; -import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext; import org.hibernate.search.mapper.orm.scope.impl.HibernateOrmScopeIndexedTypeContext; +import org.hibernate.search.mapper.orm.scope.impl.HibernateOrmScopeMappingContext; +import org.hibernate.search.mapper.orm.scope.impl.HibernateOrmScopeSessionContext; import org.hibernate.search.mapper.orm.scope.impl.HibernateOrmScopeTypeContextProvider; import org.hibernate.search.mapper.orm.search.SearchScope; import org.hibernate.search.mapper.orm.scope.impl.SearchScopeImpl; @@ -45,14 +47,14 @@ * The actual implementation of {@link SearchSession}. */ public class HibernateOrmSearchSession extends AbstractPojoSearchSession - implements SearchSession { + implements SearchSession, HibernateOrmScopeSessionContext { private static final String WORK_PLAN_PER_TRANSACTION_MAP_KEY = HibernateOrmSearchSession.class.getName() + "#WORK_PLAN_PER_TRANSACTION_KEY"; private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - private final HibernateOrmMassIndexingMappingContext massIndexingMappingContext; + private final HibernateOrmScopeMappingContext scopeMappingContext; private final HibernateOrmScopeTypeContextProvider typeContextProvider; private final HibernateOrmSessionContextImpl sessionContext; private AutomaticIndexingSynchronizationStrategy synchronizationStrategy; @@ -72,7 +74,7 @@ private HibernateOrmSearchSession(HibernateOrmSearchSessionBuilder builder) { private HibernateOrmSearchSession(HibernateOrmSearchSessionBuilder builder, HibernateOrmSessionContextImpl sessionContext) { super( builder, sessionContext ); - this.massIndexingMappingContext = builder.massIndexingMappingContext; + this.scopeMappingContext = builder.scopeMappingContext; this.typeContextProvider = builder.typeContextProvider; this.sessionContext = sessionContext; this.synchronizationStrategy = builder.synchronizationStrategy; @@ -101,7 +103,7 @@ public SearchScope scope(Collection> types) types, typeContextProvider::getIndexedByExactClass ); - return new SearchScopeImpl<>( massIndexingMappingContext, scopeDelegate, sessionContext ); + return new SearchScopeImpl<>( scopeMappingContext, this, scopeDelegate ); } @Override @@ -118,6 +120,16 @@ public void setAutomaticIndexingSynchronizationStrategy( this.synchronizationStrategy = synchronizationStrategy; } + @Override + public SessionImplementor getSession() { + return sessionContext.getSession(); + } + + @Override + public DetachedSessionContextImplementor getDetachedSessionContext() { + return DetachedSessionContextImplementor.of( sessionContext ); + } + public PojoSessionWorkExecutor createSessionWorkExecutor(DocumentCommitStrategy commitStrategy) { return getDelegate().createSessionWorkExecutor( commitStrategy ); } @@ -249,20 +261,20 @@ void checkOrmSessionIsOpen() { public static class HibernateOrmSearchSessionBuilder extends AbstractBuilder { private final HibernateOrmMappingContextImpl mappingContext; - private final HibernateOrmMassIndexingMappingContext massIndexingMappingContext; + private final HibernateOrmScopeMappingContext scopeMappingContext; private final HibernateOrmScopeTypeContextProvider typeContextProvider; private final SessionImplementor sessionImplementor; private final AutomaticIndexingSynchronizationStrategy synchronizationStrategy; public HibernateOrmSearchSessionBuilder(PojoMappingDelegate mappingDelegate, HibernateOrmMappingContextImpl mappingContext, - HibernateOrmMassIndexingMappingContext massIndexingMappingContext, + HibernateOrmScopeMappingContext scopeMappingContext, HibernateOrmScopeTypeContextProvider typeContextProvider, SessionImplementor sessionImplementor, AutomaticIndexingSynchronizationStrategy synchronizationStrategy) { super( mappingDelegate ); this.mappingContext = mappingContext; - this.massIndexingMappingContext = massIndexingMappingContext; + this.scopeMappingContext = scopeMappingContext; this.typeContextProvider = typeContextProvider; this.sessionImplementor = sessionImplementor; this.synchronizationStrategy = synchronizationStrategy;