Skip to content

Commit

Permalink
HSEARCH-3604 Use dedicated interfaces for the mapping and session con…
Browse files Browse the repository at this point in the history
…text passed to SearchScopeImpl

This will be necessary to move PojoReference transforming out of the
scope.
  • Loading branch information
yrodiere committed Jun 21, 2019
1 parent 390dac6 commit ce72381
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 25 deletions.
Expand Up @@ -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;
Expand All @@ -26,7 +26,7 @@
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

public class HibernateOrmMapping extends AbstractPojoMappingImplementor<HibernateOrmMapping>
implements HibernateOrmMassIndexingMappingContext {
implements HibernateOrmScopeMappingContext {

private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() );

Expand Down
@@ -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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.mapper.orm.scope.impl;

import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext;

public interface HibernateOrmScopeMappingContext
extends HibernateOrmMassIndexingMappingContext {

}
@@ -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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
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();

}
Expand Up @@ -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<E> implements SearchScope<E>, org.hibernate.search.mapper.orm.search.SearchScope<E> {

private final HibernateOrmMassIndexingMappingContext massIndexingMappingContext;
private final HibernateOrmScopeMappingContext mappingContext;
private final HibernateOrmScopeSessionContext sessionContext;
private final PojoScopeDelegate<E, HibernateOrmScopeIndexedTypeContext<? extends E>> delegate;
private final HibernateOrmSessionContextImpl sessionContext;

public SearchScopeImpl(HibernateOrmMassIndexingMappingContext massIndexingMappingContext,
PojoScopeDelegate<E, HibernateOrmScopeIndexedTypeContext<? extends E>> delegate,
HibernateOrmSessionContextImpl sessionContext) {
this.massIndexingMappingContext = massIndexingMappingContext;
this.delegate = delegate;
public SearchScopeImpl(HibernateOrmScopeMappingContext mappingContext,
HibernateOrmScopeSessionContext sessionContext,
PojoScopeDelegate<E, HibernateOrmScopeIndexedTypeContext<? extends E>> delegate) {
this.mappingContext = mappingContext;
this.sessionContext = sessionContext;
this.delegate = delegate;
}

@Override
Expand Down Expand Up @@ -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()
);
}
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -101,7 +103,7 @@ public <T> SearchScope<T> scope(Collection<? extends Class<? extends T>> types)
types,
typeContextProvider::getIndexedByExactClass
);
return new SearchScopeImpl<>( massIndexingMappingContext, scopeDelegate, sessionContext );
return new SearchScopeImpl<>( scopeMappingContext, this, scopeDelegate );
}

@Override
Expand All @@ -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 );
}
Expand Down Expand Up @@ -249,20 +261,20 @@ void checkOrmSessionIsOpen() {

public static class HibernateOrmSearchSessionBuilder extends AbstractBuilder<HibernateOrmSearchSession> {
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;
Expand Down

0 comments on commit ce72381

Please sign in to comment.