From d73f0088848c0c47fbc7c3b4ff36b491283285c6 Mon Sep 17 00:00:00 2001 From: Chris Cranford Date: Wed, 24 Jan 2024 15:32:10 -0500 Subject: [PATCH] DBZ-7388 Fix Hibernate API deprecated usages --- .../DebeziumOutboxCommonConfig.java | 10 +++---- .../deployment/OutboxEventHbmWriter.java | 4 +-- .../quarkus/it/AbstractOutboxTest.java | 27 +++++++++--------- .../reactive/quarkus/it/OutboxTest.java | 4 +-- .../it/OutboxWithoutOpenTelemetryTest.java | 19 ++++--------- .../reactive/quarkus/it/TestAsserts.java | 28 +++++++++++++++++++ .../internal/DebeziumOutboxHandler.java | 3 +- .../outbox/quarkus/it/AbstractOutboxTest.java | 23 +++++++-------- .../it/OutboxWithoutOpenTelemetryTest.java | 6 ++-- .../outbox/quarkus/it/TestAsserts.java | 28 +++++++++++++++++++ 10 files changed, 99 insertions(+), 53 deletions(-) create mode 100644 debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/TestAsserts.java create mode 100644 debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/TestAsserts.java diff --git a/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/DebeziumOutboxCommonConfig.java b/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/DebeziumOutboxCommonConfig.java index 7e36288a8..79aab0c22 100644 --- a/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/DebeziumOutboxCommonConfig.java +++ b/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/DebeziumOutboxCommonConfig.java @@ -112,7 +112,7 @@ public static class DebeziumOutboxConfigAggregateType { /** * The column's attribute converter fully qualified class name. - * @see javax.persistence.AttributeConverter + * @see jakarta.persistence.AttributeConverter */ @ConfigItem public Optional converter; @@ -134,7 +134,7 @@ public static class DebeziumOutboxConfigAggregateId { /** * The column's attribute converter fully qualified class name. - * @see javax.persistence.AttributeConverter + * @see jakarta.persistence.AttributeConverter */ @ConfigItem public Optional converter; @@ -156,7 +156,7 @@ public static class DebeziumOutboxConfigType { /** * The column's attribute converter fully qualified class name. - * @see javax.persistence.AttributeConverter + * @see jakarta.persistence.AttributeConverter */ @ConfigItem public Optional converter; @@ -178,7 +178,7 @@ public static class DebeziumOutboxConfigTimestamp { /** * The column's attribute converter fully qualified class name. - * @see javax.persistence.AttributeConverter + * @see jakarta.persistence.AttributeConverter */ @ConfigItem public Optional converter; @@ -200,7 +200,7 @@ public static class DebeziumOutboxConfigPayload { /** * The column's attribute converter fully qualified class name. - * @see javax.persistence.AttributeConverter + * @see jakarta.persistence.AttributeConverter */ @ConfigItem public Optional converter; diff --git a/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/OutboxEventHbmWriter.java b/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/OutboxEventHbmWriter.java index 8642e71b6..6b448f7b4 100644 --- a/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/OutboxEventHbmWriter.java +++ b/debezium-quarkus-outbox-common/deployment/src/main/java/io/debezium/outbox/quarkus/deployment/OutboxEventHbmWriter.java @@ -238,9 +238,7 @@ private static JaxbHbmBasicAttributeType createTracingSpanAttribute(DebeziumOutb column.setName(config.tracingSpan.name); column.setLength(256); - if (config.tracingSpan.columnDefinition.isPresent()) { - column.setSqlType(config.tracingSpan.columnDefinition.get()); - } + config.tracingSpan.columnDefinition.ifPresent(column::setSqlType); attribute.getColumnOrFormula().add(column); diff --git a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/AbstractOutboxTest.java b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/AbstractOutboxTest.java index aebc049f6..81bcde818 100644 --- a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/AbstractOutboxTest.java +++ b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/AbstractOutboxTest.java @@ -5,6 +5,7 @@ */ package io.debezium.outbox.reactive.quarkus.it; +import static io.debezium.outbox.reactive.quarkus.it.TestAsserts.assertIsType; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -16,7 +17,7 @@ import jakarta.inject.Inject; -import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.reactive.mutiny.Mutiny; import org.junit.jupiter.api.Test; @@ -46,19 +47,19 @@ public abstract class AbstractOutboxTest { @Test public void testOutboxEntityMetamodelExists() throws Exception { - final MetamodelImplementor metadata = (MetamodelImplementor) sessionFactory.getMetamodel(); - final EntityPersister persister = metadata.entityPersister(OutboxConstants.OUTBOX_ENTITY_FULLNAME); + final MappingMetamodelImplementor metadata = (MappingMetamodelImplementor) sessionFactory.getMetamodel(); + final EntityPersister persister = metadata.findEntityDescriptor(OutboxConstants.OUTBOX_ENTITY_FULLNAME); assertNotNull(persister); // this assumes the default mapping settings, no custom converters or column types assertEquals(UUID.class, persister.getIdentifierType().getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("aggregateType").getReturnedClass()); - assertEquals(Long.class, persister.getPropertyType("aggregateId").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("type").getReturnedClass()); - assertEquals(Instant.class, persister.getPropertyType("timestamp").getReturnedClass()); - assertEquals(JsonNode.class, persister.getPropertyType("payload").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name_upper").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name_no_columndef").getReturnedClass()); + assertIsType(persister, String.class, "aggregateType"); + assertIsType(persister, Long.class, "aggregateId"); + assertIsType(persister, String.class, "type"); + assertIsType(persister, Instant.class, "timestamp"); + assertIsType(persister, JsonNode.class, "payload"); + assertIsType(persister, String.class, "name"); + assertIsType(persister, String.class, "name_upper"); + assertIsType(persister, String.class, "name_no_columndef"); } @Test @@ -80,8 +81,8 @@ public void firedEventGetsPersistedInOutboxTable() { throw new RuntimeException(e); } - final Map row = (Map) sessionFactory.withSession( - session -> session.createQuery("FROM OutboxEvent").getSingleResult()) + final Map row = sessionFactory.withSession( + session -> session.createSelectionQuery("FROM OutboxEvent", Map.class).getSingleResult()) .await().indefinitely(); assertNotNull(row.get("id")); assertEquals(1L, row.get("aggregateId")); diff --git a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxTest.java b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxTest.java index eb8771071..50294226f 100644 --- a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxTest.java +++ b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxTest.java @@ -60,8 +60,8 @@ public void firedEventGetsPersistedInOutboxTable() { catch (JsonProcessingException e) { throw new RuntimeException(e); } - final Map row = (Map) sessionFactory.withSession( - session -> session.createQuery("FROM OutboxEvent").getSingleResult()) + final Map row = sessionFactory.withSession( + session -> session.createSelectionQuery("FROM OutboxEvent", Map.class).getSingleResult()) .await().indefinitely(); assertNotNull(row.get("id")); assertEquals(1L, row.get("aggregateId")); diff --git a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxWithoutOpenTelemetryTest.java b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxWithoutOpenTelemetryTest.java index 06addbc07..679a2cc92 100644 --- a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxWithoutOpenTelemetryTest.java +++ b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/OutboxWithoutOpenTelemetryTest.java @@ -5,12 +5,9 @@ */ package io.debezium.outbox.reactive.quarkus.it; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.fail; -import org.hibernate.QueryException; -import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.entity.EntityPersister; import org.junit.jupiter.api.Test; @@ -31,18 +28,12 @@ public class OutboxWithoutOpenTelemetryTest extends AbstractOutboxTest { @Test public void testOutboxEntityMetamodelDoesntHaveTracingSpanColumn() throws Exception { - final MetamodelImplementor metadata = (MetamodelImplementor) sessionFactory.getMetamodel(); + final MappingMetamodelImplementor metadata = (MappingMetamodelImplementor) sessionFactory.getMetamodel(); - final EntityPersister persister = metadata.entityPersister(OutboxConstants.OUTBOX_ENTITY_FULLNAME); + final EntityPersister persister = metadata.findEntityDescriptor(OutboxConstants.OUTBOX_ENTITY_FULLNAME); assertNotNull(persister); - try { - assertEquals(String.class, persister.getPropertyType("aggregateType").getReturnedClass()); - persister.getPropertyType("tracingspancontext"); - fail("Expected exception not thrown"); - } - catch (QueryException e) { - assertEquals("could not resolve property: tracingspancontext of: io.debezium.outbox.quarkus.internal.OutboxEvent", e.getMessage()); - } + TestAsserts.assertIsType(persister, String.class, "aggregateType"); + TestAsserts.assertHasNoMapping(persister, "tracingspancontext"); } } diff --git a/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/TestAsserts.java b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/TestAsserts.java new file mode 100644 index 000000000..41dce8e21 --- /dev/null +++ b/debezium-quarkus-outbox-reactive/integration-tests/src/test/java/io/debezium/outbox/reactive/quarkus/it/TestAsserts.java @@ -0,0 +1,28 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.outbox.reactive.quarkus.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.hibernate.persister.entity.EntityPersister; + +/** + * @author Chris Cranford + */ +public class TestAsserts { + + private TestAsserts() { + } + + public static void assertIsType(EntityPersister persister, Class type, String attributeName) { + assertEquals(type.getName(), persister.findAttributeMapping(attributeName).getJavaType().getTypeName()); + } + + public static void assertHasNoMapping(EntityPersister persister, String attributeName) { + assertNull(persister.findAttributeMapping(attributeName)); + } +} diff --git a/debezium-quarkus-outbox-reactive/runtime/src/main/java/io/debezium/outbox/reactive/quarkus/internal/DebeziumOutboxHandler.java b/debezium-quarkus-outbox-reactive/runtime/src/main/java/io/debezium/outbox/reactive/quarkus/internal/DebeziumOutboxHandler.java index de4cbea2c..04ba120b9 100644 --- a/debezium-quarkus-outbox-reactive/runtime/src/main/java/io/debezium/outbox/reactive/quarkus/internal/DebeziumOutboxHandler.java +++ b/debezium-quarkus-outbox-reactive/runtime/src/main/java/io/debezium/outbox/reactive/quarkus/internal/DebeziumOutboxHandler.java @@ -13,6 +13,7 @@ import io.smallrye.mutiny.Uni; import io.vertx.core.eventbus.DeliveryOptions; import io.vertx.mutiny.core.eventbus.EventBus; +import io.vertx.mutiny.core.eventbus.Message; @ApplicationScoped public class DebeziumOutboxHandler { @@ -24,6 +25,6 @@ public class DebeziumOutboxHandler { public Uni persistToOutbox(ExportedEvent incomingEvent) { return bus. request("debezium-outbox", incomingEvent, options) - .onItem().transform(message -> message.body()); + .onItem().transform(Message::body); } } diff --git a/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/AbstractOutboxTest.java b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/AbstractOutboxTest.java index 124cf80e3..720756978 100644 --- a/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/AbstractOutboxTest.java +++ b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/AbstractOutboxTest.java @@ -5,6 +5,7 @@ */ package io.debezium.outbox.quarkus.it; +import static io.debezium.outbox.quarkus.it.TestAsserts.assertIsType; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -17,7 +18,7 @@ import jakarta.persistence.EntityManager; import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.metamodel.spi.MappingMetamodelImplementor; import org.hibernate.persister.entity.EntityPersister; import org.junit.jupiter.api.Test; @@ -40,21 +41,21 @@ public abstract class AbstractOutboxTest { @Test public void testOutboxEntityMetamodelExists() throws Exception { - final MetamodelImplementor metadata = entityManager.unwrap(SessionImplementor.class).getFactory().getMetamodel(); + final MappingMetamodelImplementor metadata = entityManager.unwrap(SessionImplementor.class).getFactory().getMappingMetamodel(); - final EntityPersister persister = metadata.entityPersister(OutboxConstants.OUTBOX_ENTITY_FULLNAME); + final EntityPersister persister = metadata.findEntityDescriptor(OutboxConstants.OUTBOX_ENTITY_FULLNAME); assertNotNull(persister); // this assumes the default mapping settings, no custom converters or column types assertEquals(UUID.class, persister.getIdentifierType().getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("aggregateType").getReturnedClass()); - assertEquals(Long.class, persister.getPropertyType("aggregateId").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("type").getReturnedClass()); - assertEquals(Instant.class, persister.getPropertyType("timestamp").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("payload").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name_upper").getReturnedClass()); - assertEquals(String.class, persister.getPropertyType("name_no_columndef").getReturnedClass()); + assertIsType(persister, String.class, "aggregateType"); + assertIsType(persister, Long.class, "aggregateId"); + assertIsType(persister, String.class, "type"); + assertIsType(persister, Instant.class, "timestamp"); + assertIsType(persister, String.class, "payload"); + assertIsType(persister, String.class, "name"); + assertIsType(persister, String.class, "name_upper"); + assertIsType(persister, String.class, "name_no_columndef"); } @Test diff --git a/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/OutboxWithoutOpenTelemetryTest.java b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/OutboxWithoutOpenTelemetryTest.java index 30f3facdf..d41364c39 100644 --- a/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/OutboxWithoutOpenTelemetryTest.java +++ b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/OutboxWithoutOpenTelemetryTest.java @@ -5,9 +5,7 @@ */ package io.debezium.outbox.quarkus.it; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.metamodel.spi.MappingMetamodelImplementor; @@ -36,7 +34,7 @@ public void testOutboxEntityMetamodelDoesntHaveTracingSpanColumn() throws Except final EntityPersister persister = metadata.getEntityDescriptor(OutboxConstants.OUTBOX_ENTITY_FULLNAME); assertNotNull(persister); - assertEquals(String.class.getName(), persister.findAttributeMapping("aggregateType").getJavaType().getTypeName()); - assertNull(persister.findAttributeMapping("tracingspancontext")); + TestAsserts.assertIsType(persister, String.class, "aggregateType"); + TestAsserts.assertHasNoMapping(persister, "tracingspancontext"); } } diff --git a/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/TestAsserts.java b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/TestAsserts.java new file mode 100644 index 000000000..4ed44a0c3 --- /dev/null +++ b/debezium-quarkus-outbox/integration-tests/src/test/java/io/debezium/outbox/quarkus/it/TestAsserts.java @@ -0,0 +1,28 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.outbox.quarkus.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.hibernate.persister.entity.EntityPersister; + +/** + * @author Chris Cranford + */ +public class TestAsserts { + + private TestAsserts() { + } + + public static void assertIsType(EntityPersister persister, Class type, String attributeName) { + assertEquals(type.getName(), persister.findAttributeMapping(attributeName).getJavaType().getTypeName()); + } + + public static void assertHasNoMapping(EntityPersister persister, String attributeName) { + assertNull(persister.findAttributeMapping(attributeName)); + } +}