DBZ-8164 Upgrade Outbox Extension to Quarkus 3.14.0
This commit is contained in:
parent
97c4ccbd52
commit
f3f8621e97
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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(
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
2
pom.xml
2
pom.xml
@ -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 -->
|
||||||
|
Loading…
Reference in New Issue
Block a user