Skip to content

Commit

Permalink
Merge pull request #23901 from yrodiere/hsearch-disabled-message
Browse files Browse the repository at this point in the history
Clarify error message when trying to retrieve SearchMapping/SearchSession while Hibernate Search is disabled
  • Loading branch information
gsmet authored Feb 23, 2022
2 parents 7231534 + df6ef64 commit d53b6c9
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@
import io.quarkus.hibernate.orm.PersistenceUnit;
import io.quarkus.hibernate.orm.runtime.PersistenceUnitUtil;
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRecorder;
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig;

public class HibernateSearchElasticsearchCdiProcessor {

@Record(ExecutionTime.STATIC_INIT)
@Record(ExecutionTime.RUNTIME_INIT)
@BuildStep
void generateSearchBeans(HibernateSearchElasticsearchRecorder recorder,
HibernateSearchElasticsearchRuntimeConfig runtimeConfig,
List<HibernateSearchElasticsearchPersistenceUnitConfiguredBuildItem> configuredPersistenceUnits,
BuildProducer<SyntheticBeanBuildItem> syntheticBeanBuildItemBuildProducer) {
for (HibernateSearchElasticsearchPersistenceUnitConfiguredBuildItem persistenceUnit : configuredPersistenceUnits) {
Expand All @@ -34,13 +36,13 @@ void generateSearchBeans(HibernateSearchElasticsearchRecorder recorder,
.produce(createSyntheticBean(persistenceUnitName,
isDefaultPersistenceUnit,
SearchMapping.class,
recorder.searchMappingSupplier(persistenceUnitName, isDefaultPersistenceUnit)));
recorder.searchMappingSupplier(runtimeConfig, persistenceUnitName, isDefaultPersistenceUnit)));

syntheticBeanBuildItemBuildProducer
.produce(createSyntheticBean(persistenceUnitName,
PersistenceUnitUtil.isDefaultPersistenceUnit(persistenceUnitName),
SearchSession.class,
recorder.searchSessionSupplier(persistenceUnitName, isDefaultPersistenceUnit)));
recorder.searchSessionSupplier(runtimeConfig, persistenceUnitName, isDefaultPersistenceUnit)));
}
}

Expand All @@ -50,7 +52,8 @@ private static <T> SyntheticBeanBuildItem createSyntheticBean(String persistence
.configure(type)
.scope(Singleton.class)
.unremovable()
.supplier(supplier);
.supplier(supplier)
.setRuntimeInit();

if (isDefaultPersistenceUnit) {
configurator.addQualifier(Default.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

import javax.inject.Inject;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.search.mapper.orm.Search;
import org.hibernate.search.mapper.orm.mapping.SearchMapping;
import org.hibernate.search.mapper.orm.session.SearchSession;
import org.hibernate.search.util.common.SearchException;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
Expand All @@ -30,11 +32,23 @@ public class ConfigDisabledAndIndexedEntityTest {
@Test
public void testDisabled() {
assertThatThrownBy(() -> Arc.container().instance(SearchMapping.class).get())
.isInstanceOf(SearchException.class)
.hasMessageContaining("Hibernate Search was not initialized");
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining(
"Cannot retrieve the SearchMapping: Hibernate Search was disabled through configuration properties");

assertThatThrownBy(() -> Search.mapping(sessionFactory))
.isInstanceOf(SearchException.class)
.hasMessageContaining("Hibernate Search was not initialized");
.hasMessageContaining("Hibernate Search was not initialized.");

assertThatThrownBy(() -> Arc.container().instance(SearchSession.class).get())
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining(
"Cannot retrieve the SearchSession: Hibernate Search was disabled through configuration properties");

try (Session session = sessionFactory.openSession()) {
assertThatThrownBy(() -> Search.session(session).search(IndexedEntity.class))
.isInstanceOf(SearchException.class)
.hasMessageContaining("Hibernate Search was not initialized.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,25 @@ public HibernateOrmIntegrationStaticInitListener createDisabledStaticInitListene
public HibernateOrmIntegrationRuntimeInitListener createRuntimeInitListener(
HibernateSearchElasticsearchRuntimeConfig runtimeConfig, String persistenceUnitName,
List<HibernateOrmIntegrationRuntimeInitListener> integrationRuntimeInitListeners) {
HibernateSearchElasticsearchRuntimeConfigPersistenceUnit puConfig = PersistenceUnitUtil
.isDefaultPersistenceUnit(persistenceUnitName)
? runtimeConfig.defaultPersistenceUnit
: runtimeConfig.persistenceUnits.get(persistenceUnitName);
HibernateSearchElasticsearchRuntimeConfigPersistenceUnit puConfig = runtimePuConfig(runtimeConfig, persistenceUnitName);
return new HibernateSearchIntegrationRuntimeInitListener(puConfig, integrationRuntimeInitListeners);
}

public HibernateOrmIntegrationRuntimeInitListener createDisabledRuntimeInitListener() {
return new HibernateSearchIntegrationRuntimeInitListener(null, Collections.emptyList());
}

public Supplier<SearchMapping> searchMappingSupplier(String persistenceUnitName, boolean isDefaultPersistenceUnit) {
public Supplier<SearchMapping> searchMappingSupplier(HibernateSearchElasticsearchRuntimeConfig runtimeConfig,
String persistenceUnitName, boolean isDefaultPersistenceUnit) {
return new Supplier<SearchMapping>() {
@Override
public SearchMapping get() {
HibernateSearchElasticsearchRuntimeConfigPersistenceUnit config = runtimePuConfig(runtimeConfig,
persistenceUnitName);
if (config != null && !config.enabled) {
throw new IllegalStateException(
"Cannot retrieve the SearchMapping: Hibernate Search was disabled through configuration properties");
}
SessionFactory sessionFactory;
if (isDefaultPersistenceUnit) {
sessionFactory = Arc.container().instance(SessionFactory.class).get();
Expand All @@ -83,10 +87,17 @@ public SearchMapping get() {
};
}

public Supplier<SearchSession> searchSessionSupplier(String persistenceUnitName, boolean isDefaultPersistenceUnit) {
public Supplier<SearchSession> searchSessionSupplier(HibernateSearchElasticsearchRuntimeConfig runtimeConfig,
String persistenceUnitName, boolean isDefaultPersistenceUnit) {
return new Supplier<SearchSession>() {
@Override
public SearchSession get() {
HibernateSearchElasticsearchRuntimeConfigPersistenceUnit config = runtimePuConfig(runtimeConfig,
persistenceUnitName);
if (config != null && !config.enabled) {
throw new IllegalStateException(
"Cannot retrieve the SearchSession: Hibernate Search was disabled through configuration properties");
}
Session session;
if (isDefaultPersistenceUnit) {
session = Arc.container().instance(Session.class).get();
Expand All @@ -99,6 +110,13 @@ public SearchSession get() {
};
}

private HibernateSearchElasticsearchRuntimeConfigPersistenceUnit runtimePuConfig(
HibernateSearchElasticsearchRuntimeConfig runtimeConfig, String persistenceUnitName) {
return PersistenceUnitUtil.isDefaultPersistenceUnit(persistenceUnitName)
? runtimeConfig.defaultPersistenceUnit
: runtimeConfig.persistenceUnits.get(persistenceUnitName);
}

private static final class HibernateSearchIntegrationDisabledListener
implements HibernateOrmIntegrationStaticInitListener {
private HibernateSearchIntegrationDisabledListener() {
Expand Down

0 comments on commit d53b6c9

Please sign in to comment.