Skip to content

Commit

Permalink
HSEARCH-3544 Move the "session open" check from HibernateOrmSearchQue…
Browse files Browse the repository at this point in the history
…ry to HibernateOrmLoadingContext

That's one less useful feature in HibernateOrmSearchQuery, so we're one
step closer to replacing it with a generic query type.
  • Loading branch information
yrodiere committed May 14, 2019
1 parent 0ff4b98 commit 3db945d
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 11 deletions.
Expand Up @@ -269,6 +269,13 @@ public void reuseSearchQueryAfterOrmSessionIsClosed_noMatching() {
SearchQuery<IndexedEntity> query = createSimpleQuery( searchSession );
session.close();

backendMock.expectSearchObjects(
Arrays.asList( IndexedEntity.INDEX ),
b -> { },
// The call will fail, this doesn't matter
StubSearchWorkBehavior.empty()
);

SubTest.expectException( () -> {
query.fetchHits();
} )
Expand Down
Expand Up @@ -39,7 +39,7 @@ public SearchQueryResultDefinitionContextImpl(
new ObjectLoaderBuilder<>( sessionImplementor, searchScopeDelegate.getIncludedIndexedTypes() );
this.loadingOptions = new MutableObjectLoadingOptions();
this.loadingContextBuilder = new HibernateOrmLoadingContext.Builder<>(
searchScopeDelegate, objectLoaderBuilder, loadingOptions
sessionImplementor, searchScopeDelegate, objectLoaderBuilder, loadingOptions
);
}

Expand Down
Expand Up @@ -6,35 +6,57 @@
*/
package org.hibernate.search.mapper.orm.search.loading.context.impl;

import java.lang.invoke.MethodHandles;

import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.search.engine.search.loading.context.spi.LoadingContext;
import org.hibernate.search.engine.search.loading.context.spi.LoadingContextBuilder;
import org.hibernate.search.engine.search.loading.spi.DefaultProjectionHitMapper;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.mapper.orm.logging.impl.Log;
import org.hibernate.search.mapper.orm.search.loading.impl.MutableObjectLoadingOptions;
import org.hibernate.search.mapper.orm.search.loading.impl.ObjectLoaderBuilder;
import org.hibernate.search.mapper.pojo.search.PojoReference;
import org.hibernate.search.mapper.pojo.search.spi.PojoSearchScopeDelegate;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

public final class HibernateOrmLoadingContext<O> implements LoadingContext<PojoReference, O> {

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

private final SessionImplementor sessionImplementor;

private final ProjectionHitMapper<PojoReference, O> projectionHitMapper;

private HibernateOrmLoadingContext(ProjectionHitMapper<PojoReference, O> projectionHitMapper) {
private HibernateOrmLoadingContext(SessionImplementor sessionImplementor,
ProjectionHitMapper<PojoReference, O> projectionHitMapper) {
this.sessionImplementor = sessionImplementor;
this.projectionHitMapper = projectionHitMapper;
}

@Override
public ProjectionHitMapper<PojoReference, O> getProjectionHitMapper() {
try {
sessionImplementor.checkOpen();
}
catch (IllegalStateException e) {
throw log.hibernateSessionIsClosed( e );
}

return projectionHitMapper;
}

public static final class Builder<O> implements LoadingContextBuilder<PojoReference, O> {
private final SessionImplementor sessionImplementor;
private final PojoSearchScopeDelegate<?, ?> scopeDelegate;
private final ObjectLoaderBuilder<O> objectLoaderBuilder;
private final MutableObjectLoadingOptions loadingOptions;

public Builder(PojoSearchScopeDelegate<?, ?> scopeDelegate,
public Builder(SessionImplementor sessionImplementor,
PojoSearchScopeDelegate<?, ?> scopeDelegate,
ObjectLoaderBuilder<O> objectLoaderBuilder,
MutableObjectLoadingOptions loadingOptions) {
this.sessionImplementor = sessionImplementor;
this.scopeDelegate = scopeDelegate;
this.objectLoaderBuilder = objectLoaderBuilder;
this.loadingOptions = loadingOptions;
Expand All @@ -46,7 +68,7 @@ public LoadingContext<PojoReference, O> build() {
scopeDelegate::toPojoReference,
objectLoaderBuilder.build( loadingOptions )
);
return new HibernateOrmLoadingContext<>( projectionHitMapper );
return new HibernateOrmLoadingContext<>( sessionImplementor, projectionHitMapper );
}
}
}
Expand Up @@ -103,13 +103,6 @@ String getQueryString() {
}

private SearchResult<R> doFetch(Long limit, Long offset) {
try {
sessionImplementor.checkOpen();
}
catch (IllegalStateException e) {
throw log.hibernateSessionIsClosed( e );
}

// TODO HSEARCH-3352 handle timeouts
final IndexSearchResult<R> results = delegate.fetch( limit, offset );
return new HibernateOrmSearchResult<>( results );
Expand Down

0 comments on commit 3db945d

Please sign in to comment.