DBZ-8164 Upgrade Outbox Extension to Quarkus 3.14.0

This commit is contained in:
Chris Cranford 2024-08-21 19:14:21 -04:00 committed by Jiri Pechanec
parent 97c4ccbd52
commit f3f8621e97
12 changed files with 114 additions and 129 deletions

View File

@ -8,10 +8,11 @@
import java.util.Optional; import java.util.Optional;
import io.debezium.outbox.quarkus.internal.OutboxConstants; import io.debezium.outbox.quarkus.internal.OutboxConstants;
import io.quarkus.runtime.annotations.ConfigGroup;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
/** /**
* Configuration root class for Debezium Outbox pattern that defines the available user * Configuration root class for Debezium Outbox pattern that defines the available user
@ -19,211 +20,185 @@
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.BUILD_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxCommonConfig { @ConfigRoot(phase = ConfigPhase.BUILD_TIME)
public interface DebeziumOutboxCommonConfig {
/** /**
* The table name to be used for the outbox table * The table name to be used for the outbox table
*/ */
@ConfigItem(defaultValue = "OutboxEvent") @WithDefault("OutboxEvent")
public String tableName; String tableName();
/** /**
* Outbox identifier configurable attributes * Outbox identifier configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigId id();
public DebeziumOutboxConfigId id;
/** /**
* Outbox aggregate-id configurable attributes * Outbox aggregate-id configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigAggregateId aggregateId();
public DebeziumOutboxConfigAggregateId aggregateId;
/** /**
* Outbox aggregate-type configurable attributes * Outbox aggregate-type configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigAggregateType aggregateType();
public DebeziumOutboxConfigAggregateType aggregateType;
/** /**
* Outbox type configurable attributes * Outbox type configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigType type();
public DebeziumOutboxConfigType type;
/** /**
* Outbox timestamp configurable attributes * Outbox timestamp configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigTimestamp timestamp();
public DebeziumOutboxConfigTimestamp timestamp;
/** /**
* Outbox payload configurable attributes * Outbox payload configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigPayload payload();
public DebeziumOutboxConfigPayload payload;
/** /**
* Outbox additional fields * Outbox additional fields
*/ */
@ConfigItem Optional<String> additionalFields();
public Optional<String> additionalFields;
/** /**
* Outbox Tracing configurable attributes * Outbox Tracing configurable attributes
*/ */
@ConfigItem DebeziumOutboxConfigTracingSpan tracingSpan();
public DebeziumOutboxConfigTracingSpan tracingSpan;
/** /**
* OpenTelemetry configuration option * OpenTelemetry configuration option
*/ */
@ConfigItem(name = "tracing.enabled", defaultValue = "true") @WithDefault("true")
public boolean tracingEnabled; @WithName("tracing.enabled")
boolean tracingEnabled();
@ConfigGroup interface DebeziumOutboxConfigId {
public static class DebeziumOutboxConfigId {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "id") @WithDefault("id")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
} }
@ConfigGroup interface DebeziumOutboxConfigAggregateType {
public static class DebeziumOutboxConfigAggregateType {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "aggregatetype") @WithDefault("aggregatetype")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
/** /**
* The column's attribute converter fully qualified class name. * The column's attribute converter fully qualified class name.
* @see jakarta.persistence.AttributeConverter * @see jakarta.persistence.AttributeConverter
*/ */
@ConfigItem Optional<String> converter();
public Optional<String> converter;
} }
@ConfigGroup interface DebeziumOutboxConfigAggregateId {
public static class DebeziumOutboxConfigAggregateId {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "aggregateid") @WithDefault("aggregateid")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
/** /**
* The column's attribute converter fully qualified class name. * The column's attribute converter fully qualified class name.
* @see jakarta.persistence.AttributeConverter * @see jakarta.persistence.AttributeConverter
*/ */
@ConfigItem Optional<String> converter();
public Optional<String> converter;
} }
@ConfigGroup interface DebeziumOutboxConfigType {
public static class DebeziumOutboxConfigType {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "type") @WithDefault("type")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
/** /**
* The column's attribute converter fully qualified class name. * The column's attribute converter fully qualified class name.
* @see jakarta.persistence.AttributeConverter * @see jakarta.persistence.AttributeConverter
*/ */
@ConfigItem Optional<String> converter();
public Optional<String> converter;
} }
@ConfigGroup interface DebeziumOutboxConfigTimestamp {
public static class DebeziumOutboxConfigTimestamp {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "timestamp") @WithDefault("timestamp")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
/** /**
* The column's attribute converter fully qualified class name. * The column's attribute converter fully qualified class name.
* @see jakarta.persistence.AttributeConverter * @see jakarta.persistence.AttributeConverter
*/ */
@ConfigItem Optional<String> converter();
public Optional<String> converter;
} }
@ConfigGroup interface DebeziumOutboxConfigPayload {
public static class DebeziumOutboxConfigPayload {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = "payload") @WithDefault("payload")
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
/** /**
* The column's attribute converter fully qualified class name. * The column's attribute converter fully qualified class name.
* @see jakarta.persistence.AttributeConverter * @see jakarta.persistence.AttributeConverter
*/ */
@ConfigItem Optional<String> converter();
public Optional<String> converter;
/** /**
* The column's type definition class * The column's type definition class
*/ */
@ConfigItem Optional<String> type();
public Optional<String> type;
} }
@ConfigGroup interface DebeziumOutboxConfigTracingSpan {
public static class DebeziumOutboxConfigTracingSpan {
/** /**
* The column name. * The column name.
*/ */
@ConfigItem(defaultValue = OutboxConstants.TRACING_SPAN_CONTEXT) @WithDefault(OutboxConstants.TRACING_SPAN_CONTEXT)
public String name; String name();
/** /**
* The column definition. * The column definition.
*/ */
@ConfigItem Optional<String> columnDefinition();
public Optional<String> columnDefinition;
} }
} }

View File

@ -39,7 +39,7 @@ static JaxbHbmHibernateMapping write(DebeziumOutboxCommonConfig config, OutboxEv
final JaxbHbmRootEntityType entityType = new JaxbHbmRootEntityType(); final JaxbHbmRootEntityType entityType = new JaxbHbmRootEntityType();
entityType.setEntityName(OUTBOX_ENTITY_FULLNAME); entityType.setEntityName(OUTBOX_ENTITY_FULLNAME);
entityType.setTable(config.tableName); entityType.setTable(config.tableName());
mapping.getClazz().add(entityType); mapping.getClazz().add(entityType);
// Setup generator // Setup generator
@ -55,13 +55,13 @@ static JaxbHbmHibernateMapping write(DebeziumOutboxCommonConfig config, OutboxEv
entityType.getAttributes().add(createTypeAttribute(config)); entityType.getAttributes().add(createTypeAttribute(config));
entityType.getAttributes().add(createTimestampAttribute(config)); entityType.getAttributes().add(createTimestampAttribute(config));
entityType.getAttributes().add(createPayloadAttribute(config, outboxEventEntityBuildItem)); entityType.getAttributes().add(createPayloadAttribute(config, outboxEventEntityBuildItem));
if (config.tracingEnabled) { if (config.tracingEnabled()) {
entityType.getAttributes().add(createTracingSpanAttribute(config)); entityType.getAttributes().add(createTracingSpanAttribute(config));
} }
// Additional fields // Additional fields
if (config.additionalFields.isPresent()) { if (config.additionalFields().isPresent()) {
String[] fields = config.additionalFields.get().split(","); String[] fields = config.additionalFields().get().split(",");
for (int fieldIndex = 0; fieldIndex < fields.length; ++fieldIndex) { for (int fieldIndex = 0; fieldIndex < fields.length; ++fieldIndex) {
String[] parts = fields[fieldIndex].split(":"); String[] parts = fields[fieldIndex].split(":");
if (parts.length < 2) { if (parts.length < 2) {
@ -96,8 +96,8 @@ private static JaxbHbmSimpleIdType createIdAttribute(DebeziumOutboxCommonConfig
attribute.setTypeAttribute(UUID.class.getName()); attribute.setTypeAttribute(UUID.class.getName());
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.id.name); column.setName(config.id().name());
config.id.columnDefinition.ifPresent(column::setSqlType); config.id().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumn().add(column); attribute.getColumn().add(column);
final JaxbHbmGeneratorSpecificationType generator = new JaxbHbmGeneratorSpecificationType(); final JaxbHbmGeneratorSpecificationType generator = new JaxbHbmGeneratorSpecificationType();
@ -111,16 +111,16 @@ private static JaxbHbmBasicAttributeType createAggregateTypeAttribute(DebeziumOu
final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType(); final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType();
attribute.setName("aggregateType"); attribute.setName("aggregateType");
attribute.setNotNull(true); attribute.setNotNull(true);
if (config.aggregateType.converter.isPresent()) { if (config.aggregateType().converter().isPresent()) {
attribute.setTypeAttribute("converted::" + config.aggregateType.converter.get()); attribute.setTypeAttribute("converted::" + config.aggregateType().converter().get());
} }
else { else {
attribute.setTypeAttribute("string"); attribute.setTypeAttribute("string");
} }
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.aggregateType.name); column.setName(config.aggregateType().name());
config.aggregateType.columnDefinition.ifPresent(column::setSqlType); config.aggregateType().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumnOrFormula().add(column); attribute.getColumnOrFormula().add(column);
return attribute; return attribute;
@ -131,16 +131,16 @@ private static JaxbHbmBasicAttributeType createAggregateIdAttribute(DebeziumOutb
final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType(); final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType();
attribute.setName("aggregateId"); attribute.setName("aggregateId");
attribute.setNotNull(true); attribute.setNotNull(true);
if (config.aggregateId.converter.isPresent()) { if (config.aggregateId().converter().isPresent()) {
attribute.setTypeAttribute("converted::" + config.aggregateId.converter.get()); attribute.setTypeAttribute("converted::" + config.aggregateId().converter().get());
} }
else { else {
attribute.setTypeAttribute(outboxEventEntityBuildItem.getAggregateIdType().name().toString()); attribute.setTypeAttribute(outboxEventEntityBuildItem.getAggregateIdType().name().toString());
} }
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.aggregateId.name); column.setName(config.aggregateId().name());
config.aggregateId.columnDefinition.ifPresent(column::setSqlType); config.aggregateId().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumnOrFormula().add(column); attribute.getColumnOrFormula().add(column);
return attribute; return attribute;
@ -150,16 +150,16 @@ private static JaxbHbmBasicAttributeType createTypeAttribute(DebeziumOutboxCommo
final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType(); final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType();
attribute.setName("type"); attribute.setName("type");
attribute.setNotNull(true); attribute.setNotNull(true);
if (config.type.converter.isPresent()) { if (config.type().converter().isPresent()) {
attribute.setTypeAttribute("converted::" + config.type.converter.get()); attribute.setTypeAttribute("converted::" + config.type().converter().get());
} }
else { else {
attribute.setTypeAttribute("string"); attribute.setTypeAttribute("string");
} }
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.type.name); column.setName(config.type().name());
config.type.columnDefinition.ifPresent(column::setSqlType); config.type().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumnOrFormula().add(column); attribute.getColumnOrFormula().add(column);
return attribute; return attribute;
@ -169,8 +169,8 @@ private static JaxbHbmBasicAttributeType createTimestampAttribute(DebeziumOutbox
final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType(); final JaxbHbmBasicAttributeType attribute = new JaxbHbmBasicAttributeType();
attribute.setName("timestamp"); attribute.setName("timestamp");
attribute.setNotNull(true); attribute.setNotNull(true);
if (config.timestamp.converter.isPresent()) { if (config.timestamp().converter().isPresent()) {
attribute.setTypeAttribute("converted::" + config.timestamp.converter.get()); attribute.setTypeAttribute("converted::" + config.timestamp().converter().get());
} }
else { else {
// Hibernate 6.x expects full qualified class names for this whereas Hibernate 5.x had // Hibernate 6.x expects full qualified class names for this whereas Hibernate 5.x had
@ -179,8 +179,8 @@ private static JaxbHbmBasicAttributeType createTimestampAttribute(DebeziumOutbox
} }
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.timestamp.name); column.setName(config.timestamp().name());
config.timestamp.columnDefinition.ifPresent(column::setSqlType); config.timestamp().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumnOrFormula().add(column); attribute.getColumnOrFormula().add(column);
return attribute; return attribute;
@ -195,13 +195,13 @@ private static JaxbHbmBasicAttributeType createPayloadAttribute(DebeziumOutboxCo
attribute.setName("payload"); attribute.setName("payload");
attribute.setNotNull(false); attribute.setNotNull(false);
if (config.payload.type.isPresent()) { if (config.payload().type().isPresent()) {
LOGGER.info("Using payload type: {}", config.payload.type.get()); LOGGER.info("Using payload type: {}", config.payload().type().get());
attribute.setTypeAttribute(config.payload.type.get()); attribute.setTypeAttribute(config.payload().type().get());
} }
else if (config.payload.converter.isPresent()) { else if (config.payload().converter().isPresent()) {
LOGGER.info("Using payload attribute converter: {}", config.payload.converter.get()); LOGGER.info("Using payload attribute converter: {}", config.payload().converter().get());
attribute.setTypeAttribute("converted::" + config.payload.converter.get()); attribute.setTypeAttribute("converted::" + config.payload().converter().get());
} }
else if (isJacksonJsonNode) { else if (isJacksonJsonNode) {
LOGGER.info("Using payload attribute converter: {}", JsonNodeAttributeConverter.class.getName()); LOGGER.info("Using payload attribute converter: {}", JsonNodeAttributeConverter.class.getName());
@ -214,10 +214,10 @@ else if (isJacksonJsonNode) {
} }
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.payload.name); column.setName(config.payload().name());
if (config.payload.columnDefinition.isPresent()) { if (config.payload().columnDefinition().isPresent()) {
column.setSqlType(config.payload.columnDefinition.get()); column.setSqlType(config.payload().columnDefinition().get());
} }
else if (isJacksonJsonNode) { else if (isJacksonJsonNode) {
column.setSqlType("varchar(8000)"); column.setSqlType("varchar(8000)");
@ -235,10 +235,10 @@ private static JaxbHbmBasicAttributeType createTracingSpanAttribute(DebeziumOutb
attribute.setTypeAttribute("string"); attribute.setTypeAttribute("string");
final JaxbHbmColumnType column = new JaxbHbmColumnType(); final JaxbHbmColumnType column = new JaxbHbmColumnType();
column.setName(config.tracingSpan.name); column.setName(config.tracingSpan().name());
column.setLength(256); column.setLength(256);
config.tracingSpan.columnDefinition.ifPresent(column::setSqlType); config.tracingSpan().columnDefinition().ifPresent(column::setSqlType);
attribute.getColumnOrFormula().add(column); attribute.getColumnOrFormula().add(column);

View File

@ -5,20 +5,22 @@
*/ */
package io.debezium.outbox.quarkus.internal; package io.debezium.outbox.quarkus.internal;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;
/** /**
* Debezium outbox Quarkus extension common runtime configuration properties. * Debezium outbox Quarkus extension common runtime configuration properties.
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxCommonRuntimeConfig { @ConfigRoot(phase = ConfigPhase.RUN_TIME)
public interface DebeziumOutboxCommonRuntimeConfig {
/** /**
* Remove outbox entity after being inserted. Default is {@code true}. * Remove outbox entity after being inserted. Default is {@code true}.
*/ */
@ConfigItem(defaultValue = "true") @WithDefault("true")
public boolean removeAfterInsert; boolean removeAfterInsert();
} }

View File

@ -8,6 +8,7 @@
import io.debezium.outbox.quarkus.deployment.DebeziumOutboxCommonConfig; import io.debezium.outbox.quarkus.deployment.DebeziumOutboxCommonConfig;
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
/** /**
* Configuration root class for Debezium Outbox pattern that defines the available user * Configuration root class for Debezium Outbox pattern that defines the available user
@ -15,7 +16,8 @@
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.BUILD_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxConfig extends DebeziumOutboxCommonConfig { @ConfigRoot(phase = ConfigPhase.BUILD_TIME)
public interface DebeziumOutboxConfig extends DebeziumOutboxCommonConfig {
} }

View File

@ -42,7 +42,7 @@ public void build(OutboxEventEntityBuildItem outboxBuildItem,
BuildProducer<GeneratedResourceBuildItem> generatedResourcesProducer, BuildProducer<GeneratedResourceBuildItem> generatedResourcesProducer,
BuildProducer<ReflectiveClassBuildItem> reflectiveClassProducer, BuildProducer<ReflectiveClassBuildItem> reflectiveClassProducer,
Capabilities capabilities) { Capabilities capabilities) {
if (debeziumOutboxConfig.tracingEnabled && capabilities.isPresent(Capability.OPENTELEMETRY_TRACER)) { if (debeziumOutboxConfig.tracingEnabled() && capabilities.isPresent(Capability.OPENTELEMETRY_TRACER)) {
additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(DebeziumTracerEventDispatcher.class)); additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(DebeziumTracerEventDispatcher.class));
} }

View File

@ -48,7 +48,7 @@ protected Uni<Void> persist(Map<String, Object> dataMap) {
} }
protected Uni<Integer> removeFromOutbox(Map<String, Object> dataMap) { protected Uni<Integer> removeFromOutbox(Map<String, Object> dataMap) {
if (config.removeAfterInsert) { if (config.removeAfterInsert()) {
LOGGER.debug("removing outbox event"); LOGGER.debug("removing outbox event");
return factory.withSession( return factory.withSession(
session -> session.withTransaction( session -> session.withTransaction(

View File

@ -8,13 +8,15 @@
import io.debezium.outbox.quarkus.internal.DebeziumOutboxCommonRuntimeConfig; import io.debezium.outbox.quarkus.internal.DebeziumOutboxCommonRuntimeConfig;
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
/** /**
* Debezium outbox Quarkus extension runtime configuration properties. * Debezium outbox Quarkus extension runtime configuration properties.
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxRuntimeConfig extends DebeziumOutboxCommonRuntimeConfig { @ConfigRoot(phase = ConfigPhase.RUN_TIME)
public interface DebeziumOutboxRuntimeConfig extends DebeziumOutboxCommonRuntimeConfig {
} }

View File

@ -7,6 +7,7 @@
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
/** /**
* Configuration root class for Debezium Outbox pattern that defines the available user * Configuration root class for Debezium Outbox pattern that defines the available user
@ -14,7 +15,8 @@
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.BUILD_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxConfig extends DebeziumOutboxCommonConfig { @ConfigRoot(phase = ConfigPhase.BUILD_TIME)
public interface DebeziumOutboxConfig extends DebeziumOutboxCommonConfig {
} }

View File

@ -38,7 +38,7 @@ public void build(OutboxEventEntityBuildItem outboxBuildItem,
BuildProducer<GeneratedResourceBuildItem> generatedResourcesProducer, BuildProducer<GeneratedResourceBuildItem> generatedResourcesProducer,
BuildProducer<ReflectiveClassBuildItem> reflectiveClassProducer, BuildProducer<ReflectiveClassBuildItem> reflectiveClassProducer,
Capabilities capabilities) { Capabilities capabilities) {
if (getConfig().tracingEnabled && capabilities.isPresent(Capability.OPENTELEMETRY_TRACER)) { if (getConfig().tracingEnabled() && capabilities.isPresent(Capability.OPENTELEMETRY_TRACER)) {
additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(DebeziumTracerEventDispatcher.class)); additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(DebeziumTracerEventDispatcher.class));
} }
else { else {

View File

@ -47,7 +47,7 @@ protected Void persist(Map<String, Object> dataMap) {
private void remove(Map<String, Object> dataMap, Session session) { private void remove(Map<String, Object> dataMap, Session session) {
// Remove entity if the configuration deems doing so, leaving useful for debugging // Remove entity if the configuration deems doing so, leaving useful for debugging
if (config.removeAfterInsert) { if (config.removeAfterInsert()) {
session.delete(OUTBOX_ENTITY_FULLNAME, dataMap); session.delete(OUTBOX_ENTITY_FULLNAME, dataMap);
} }
} }

View File

@ -7,13 +7,15 @@
import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.runtime.annotations.ConfigRoot;
import io.smallrye.config.ConfigMapping;
/** /**
* Debezium outbox Quarkus extension runtime configuration properties. * Debezium outbox Quarkus extension runtime configuration properties.
* *
* @author Chris Cranford * @author Chris Cranford
*/ */
@ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "debezium-outbox") @ConfigMapping(prefix = "quarkus.debezium-outbox")
public class DebeziumOutboxRuntimeConfig extends DebeziumOutboxCommonRuntimeConfig { @ConfigRoot(phase = ConfigPhase.RUN_TIME)
public interface DebeziumOutboxRuntimeConfig extends DebeziumOutboxCommonRuntimeConfig {
} }

View File

@ -125,7 +125,7 @@
<!-- Quarkus --> <!-- Quarkus -->
<!-- Version used for Outbox extension development, changes frequently to align with latest Quarkus --> <!-- Version used for Outbox extension development, changes frequently to align with latest Quarkus -->
<quarkus.version.extension>3.12.0</quarkus.version.extension> <quarkus.version.extension>3.14.0</quarkus.version.extension>
<!-- Version used in Debezium Server, Operator, etc., usually a LTS version --> <!-- Version used in Debezium Server, Operator, etc., usually a LTS version -->
<!-- Must be aligned with Apicurio version below --> <!-- Must be aligned with Apicurio version below -->