Skip to content

Commit 6dcd7de

Browse files
committed
Hibernate Search: Add support for new outbox-polling properties in 6.2
1 parent 8770476 commit 6dcd7de

File tree

7 files changed

+374
-1
lines changed

7 files changed

+374
-1
lines changed

docs/src/main/asciidoc/hibernate-search-orm-elasticsearch.adoc

+19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
55
////
66
= Hibernate Search guide
77
:hibernate-search-doc-prefix: https://docs.jboss.org/hibernate/search/6.2/reference/en-US/html_single/
8+
:hibernate-orm-doc-prefix: https://docs.jboss.org/hibernate/orm/6.2/userguide/html_single/Hibernate_User_Guide.html
89
include::_attributes.adoc[]
910
:categories: data
1011
:summary: Hibernate Search allows you to index your entities in an Elasticsearch cluster and easily offer full text search in all your Hibernate ORM-based applications.
@@ -896,6 +897,24 @@ then no worries: the entities required by Hibernate Search will be included in t
896897
* Otherwise, you must
897898
link:{hibernate-search-doc-prefix}#coordination-outbox-polling-schema[manually alter your schema to add the necessary tables/sequences].
898899

900+
[NOTE]
901+
====
902+
The database schema Hibernate Search will expect for outbox-polling coordination
903+
may be customized through the following configuration properties:
904+
905+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.agent.catalog[`quarkus.hibernate-search-orm.coordination.entity.mapping.agent.catalog`]
906+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.agent.schema[`quarkus.hibernate-search-orm.coordination.entity.mapping.agent.schema`]
907+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.agent.table[`quarkus.hibernate-search-orm.coordination.entity.mapping.agent.table`]
908+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.agent.uuid-gen-strategy[`quarkus.hibernate-search-orm.coordination.entity.mapping.agent.uuid-gen-strategy`]
909+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.agent.uuid-type[`quarkus.hibernate-search-orm.coordination.entity.mapping.agent.uuid-type`]
910+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.catalog[`quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.catalog`]
911+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.schema[`quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.schema`]
912+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.table[`quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.table`]
913+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.uuid-gen-strategy[`quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.uuid-gen-strategy`]
914+
* link:#quarkus-hibernate-search-orm-coordination-outboxpolling_quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.uuid-type[`quarkus.hibernate-search-orm.coordination.entity.mapping.outbox-event.uuid-type`]
915+
916+
====
917+
899918
Once you are done with the above, you're ready to use Hibernate Search with an outbox.
900919
Don't change any code, and just start your application:
901920
it will automatically detect when multiple applications are connected to the same database,

extensions/hibernate-search-orm-coordination-outbox-polling/deployment/src/main/java/io/quarkus/hibernate/search/orm/coordination/outboxpolling/deployment/HibernateSearchOutboxPollingProcessor.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.quarkus.deployment.builditem.AdditionalIndexedClassesBuildItem;
1515
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
1616
import io.quarkus.hibernate.orm.deployment.spi.AdditionalJpaModelBuildItem;
17+
import io.quarkus.hibernate.search.orm.coordination.outboxpolling.runtime.HibernateSearchOutboxPollingBuildTimeConfig;
1718
import io.quarkus.hibernate.search.orm.coordination.outboxpolling.runtime.HibernateSearchOutboxPollingRecorder;
1819
import io.quarkus.hibernate.search.orm.coordination.outboxpolling.runtime.HibernateSearchOutboxPollingRuntimeConfig;
1920
import io.quarkus.hibernate.search.orm.elasticsearch.deployment.HibernateSearchElasticsearchPersistenceUnitConfiguredBuildItem;
@@ -43,6 +44,7 @@ void registerInternalModel(BuildProducer<AdditionalIndexedClassesBuildItem> addi
4344
@BuildStep
4445
@Record(ExecutionTime.STATIC_INIT)
4546
void setStaticConfig(HibernateSearchOutboxPollingRecorder recorder,
47+
HibernateSearchOutboxPollingBuildTimeConfig buildTimeConfig,
4648
List<HibernateSearchElasticsearchPersistenceUnitConfiguredBuildItem> configuredPersistenceUnits,
4749
BuildProducer<HibernateSearchIntegrationStaticConfiguredBuildItem> staticConfigured) {
4850
for (HibernateSearchElasticsearchPersistenceUnitConfiguredBuildItem configuredPersistenceUnit : configuredPersistenceUnits) {
@@ -51,7 +53,8 @@ void setStaticConfig(HibernateSearchOutboxPollingRecorder recorder,
5153
}
5254
String puName = configuredPersistenceUnit.getPersistenceUnitName();
5355
staticConfigured.produce(new HibernateSearchIntegrationStaticConfiguredBuildItem(
54-
HIBERNATE_SEARCH_ORM_COORDINATION_OUTBOX_POLLING, puName, null)
56+
HIBERNATE_SEARCH_ORM_COORDINATION_OUTBOX_POLLING, puName,
57+
recorder.createStaticInitListener(buildTimeConfig, puName))
5558
// Additional entities such as Agent and OutboxEvent are defined through XML
5659
// (because there's no other way).
5760
.setXmlMappingRequired(true));

extensions/hibernate-search-orm-coordination-outbox-polling/deployment/src/test/java/io/quarkus/hibernate/search/orm/coordination/outboxpolling/test/configuration/ConfigPropertiesTest.java

+75
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.hibernate.SessionFactory;
1111
import org.hibernate.search.mapper.orm.coordination.outboxpolling.cfg.HibernateOrmMapperOutboxPollingSettings;
12+
import org.hibernate.search.mapper.orm.coordination.outboxpolling.cfg.UuidGenerationStrategy;
1213
import org.jboss.shrinkwrap.api.ShrinkWrap;
1314
import org.jboss.shrinkwrap.api.spec.JavaArchive;
1415
import org.junit.jupiter.api.Test;
@@ -32,6 +33,20 @@ public class ConfigPropertiesTest {
3233
.addPackage(IndexedEntity.class.getPackage())
3334
.addPackage(IndexedEntityForPU1.class.getPackage()))
3435
.withConfigurationResource("application-multiple-persistence-units.properties")
36+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.agent.catalog", "myagentcatalog")
37+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.agent.schema", "myagentschema")
38+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.agent.table", "myagenttable")
39+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.agent.uuid-gen-strategy", "random")
40+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.agent.uuid-type", "uuid-char")
41+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.catalog",
42+
"myoutboxeventcatalog")
43+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.schema",
44+
"myoutboxeventschema")
45+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.table",
46+
"myoutboxeventtable")
47+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.uuid-gen-strategy",
48+
"time")
49+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.uuid-type", "uuid-binary")
3550
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.event-processor.enabled", "false")
3651
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.event-processor.shards.total-count", "10")
3752
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.event-processor.shards.assigned", "1,2")
@@ -44,6 +59,28 @@ public class ConfigPropertiesTest {
4459
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.mass-indexer.polling-interval", "0.048S")
4560
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.mass-indexer.pulse-interval", "0.049S")
4661
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.mass-indexer.pulse-expiration", "50S")
62+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.mass-indexer.pulse-interval", "0.049S")
63+
.overrideConfigKey("quarkus.hibernate-search-orm.coordination.mass-indexer.pulse-expiration", "50S")
64+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.agent.catalog",
65+
"myagentcatalogpu1")
66+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.agent.schema",
67+
"myagentschemapu1")
68+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.agent.table",
69+
"myagenttablepu1")
70+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.agent.uuid-gen-strategy",
71+
"time")
72+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.agent.uuid-type",
73+
"uuid-binary")
74+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.outbox-event.catalog",
75+
"myoutboxeventcatalogpu1")
76+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.outbox-event.schema",
77+
"myoutboxeventschemapu1")
78+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.outbox-event.table",
79+
"myoutboxeventtablepu1")
80+
.overrideConfigKey(
81+
"quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.outbox-event.uuid-gen-strategy", "random")
82+
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.entity-mapping.outbox-event.uuid-type",
83+
"uuid-char")
4784
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.event-processor.enabled", "false")
4885
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.event-processor.shards.total-count", "110")
4986
.overrideConfigKey("quarkus.hibernate-search-orm.\"pu1\".coordination.event-processor.shards.assigned", "11,12")
@@ -100,6 +137,24 @@ public class ConfigPropertiesTest {
100137
public void root() {
101138
assertThat(sessionFactory.getProperties())
102139
.contains(
140+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_CATALOG,
141+
"myagentcatalog"),
142+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_SCHEMA,
143+
"myagentschema"),
144+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_TABLE, "myagenttable"),
145+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_UUID_GEN_STRATEGY,
146+
UuidGenerationStrategy.RANDOM),
147+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_UUID_TYPE, "uuid-char"),
148+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_CATALOG,
149+
"myoutboxeventcatalog"),
150+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_SCHEMA,
151+
"myoutboxeventschema"),
152+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_TABLE,
153+
"myoutboxeventtable"),
154+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_UUID_GEN_STRATEGY,
155+
UuidGenerationStrategy.TIME),
156+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_UUID_TYPE,
157+
"uuid-binary"),
103158
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_ENABLED, false),
104159
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_SHARDS_TOTAL_COUNT, 10),
105160
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_SHARDS_ASSIGNED,
@@ -119,6 +174,26 @@ public void root() {
119174
public void perNamedPersistenceUnit() {
120175
assertThat(sessionFactoryForNamedPU1.getProperties())
121176
.contains(
177+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_CATALOG,
178+
"myagentcatalogpu1"),
179+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_SCHEMA,
180+
"myagentschemapu1"),
181+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_TABLE,
182+
"myagenttablepu1"),
183+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_UUID_GEN_STRATEGY,
184+
UuidGenerationStrategy.TIME),
185+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_AGENT_UUID_TYPE,
186+
"uuid-binary"),
187+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_CATALOG,
188+
"myoutboxeventcatalogpu1"),
189+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_SCHEMA,
190+
"myoutboxeventschemapu1"),
191+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_TABLE,
192+
"myoutboxeventtablepu1"),
193+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_UUID_GEN_STRATEGY,
194+
UuidGenerationStrategy.RANDOM),
195+
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_ENTITY_MAPPING_OUTBOXEVENT_UUID_TYPE,
196+
"uuid-char"),
122197
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_ENABLED, false),
123198
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_SHARDS_TOTAL_COUNT, 110),
124199
entry(HibernateOrmMapperOutboxPollingSettings.COORDINATION_EVENT_PROCESSOR_SHARDS_ASSIGNED,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.quarkus.hibernate.search.orm.coordination.outboxpolling.runtime;
2+
3+
import java.util.Map;
4+
5+
import io.quarkus.runtime.annotations.ConfigDocMapKey;
6+
import io.quarkus.runtime.annotations.ConfigDocSection;
7+
import io.quarkus.runtime.annotations.ConfigPhase;
8+
import io.quarkus.runtime.annotations.ConfigRoot;
9+
import io.smallrye.config.ConfigMapping;
10+
import io.smallrye.config.WithParentName;
11+
12+
@ConfigMapping(prefix = "quarkus.hibernate-search-orm")
13+
@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
14+
public interface HibernateSearchOutboxPollingBuildTimeConfig {
15+
16+
/**
17+
* Configuration for the default persistence unit.
18+
*/
19+
@WithParentName
20+
HibernateSearchOutboxPollingBuildTimeConfigPersistenceUnit defaultPersistenceUnit();
21+
22+
/**
23+
* Configuration for additional named persistence units.
24+
*/
25+
@ConfigDocSection
26+
@ConfigDocMapKey("persistence-unit-name")
27+
@WithParentName
28+
Map<String, HibernateSearchOutboxPollingBuildTimeConfigPersistenceUnit> persistenceUnits();
29+
30+
}

0 commit comments

Comments
 (0)