From 6c7bf8144cff940c69897009b81b71349ae073ec Mon Sep 17 00:00:00 2001 From: "wojciech.stryjewski" Date: Fri, 27 Aug 2021 15:52:37 +0200 Subject: [PATCH] Add audit table suffix config property --- .../EnversAuditTableSuffixTestCase.java | 28 ++++++++++++++ .../EnversTestAuditTableSuffixResource.java | 38 +++++++++++++++++++ ...ation-with-store-data-at-delete.properties | 1 + .../HibernateEnversBuildTimeConfig.java | 7 ++++ .../envers/HibernateEnversRecorder.java | 1 + 5 files changed, 75 insertions(+) create mode 100644 extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversAuditTableSuffixTestCase.java create mode 100644 extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversTestAuditTableSuffixResource.java diff --git a/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversAuditTableSuffixTestCase.java b/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversAuditTableSuffixTestCase.java new file mode 100644 index 0000000000000..fe7e8560d1fc4 --- /dev/null +++ b/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversAuditTableSuffixTestCase.java @@ -0,0 +1,28 @@ +package io.quarkus.hibernate.orm.envers; + +import static org.hamcrest.Matchers.is; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.restassured.RestAssured; + +public class EnversAuditTableSuffixTestCase { + + @RegisterExtension + static QuarkusUnitTest runner = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addClasses(MyAuditedEntity.class, MyRevisionEntity.class, MyRevisionListener.class, + EnversTestAuditTableSuffixResource.class) + .addAsResource("application-with-store-data-at-delete.properties", "application.properties")); + + @Test + public void testAuditTableSuffix() { + RestAssured.when().get("/audit-table-suffix").then() + .body(is("OK")); + } + +} diff --git a/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversTestAuditTableSuffixResource.java b/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversTestAuditTableSuffixResource.java new file mode 100644 index 0000000000000..e4a1a07122beb --- /dev/null +++ b/extensions/hibernate-envers/deployment/src/test/java/io/quarkus/hibernate/orm/envers/EnversTestAuditTableSuffixResource.java @@ -0,0 +1,38 @@ +package io.quarkus.hibernate.orm.envers; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.hibernate.envers.boot.internal.EnversService; +import org.hibernate.envers.configuration.internal.AuditEntitiesConfiguration; +import org.hibernate.internal.SessionImpl; + +@Path("/audit-table-suffix") +@ApplicationScoped +public class EnversTestAuditTableSuffixResource { + + @Inject + EntityManager em; + + @Inject + @ConfigProperty(name = "quarkus.hibernate-envers.audit-table-suffix") + String configuredSuffix; + + @GET + public String getAuditTableName() { + AuditEntitiesConfiguration auditEntitiesConfiguration = ((((SessionImpl) em.getDelegate()) + .getFactory().getServiceRegistry()).getParentServiceRegistry()) + .getService(EnversService.class).getAuditEntitiesConfiguration(); + + String calculatedAuditTableName = auditEntitiesConfiguration.getAuditTableName("entity", "table"); + String expectedAuditTableName = "table" + configuredSuffix; + if (expectedAuditTableName.equals(calculatedAuditTableName)) { + return "OK"; + } + return "Obtained audit table name " + calculatedAuditTableName + " is not same as expected: " + expectedAuditTableName; + } +} diff --git a/extensions/hibernate-envers/deployment/src/test/resources/application-with-store-data-at-delete.properties b/extensions/hibernate-envers/deployment/src/test/resources/application-with-store-data-at-delete.properties index 721ddda002278..894a0911d762c 100644 --- a/extensions/hibernate-envers/deployment/src/test/resources/application-with-store-data-at-delete.properties +++ b/extensions/hibernate-envers/deployment/src/test/resources/application-with-store-data-at-delete.properties @@ -3,3 +3,4 @@ quarkus.datasource.jdbc.url=jdbc:h2:mem:test quarkus.hibernate-orm.database.generation=drop-and-create quarkus.hibernate-envers.store-data-at-delete=true +quarkus.hibernate-envers.audit-table-suffix=_SUFFIX \ No newline at end of file diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java index da15823cfd519..89d40847027b5 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java @@ -11,4 +11,11 @@ public class HibernateEnversBuildTimeConfig { */ @ConfigItem(defaultValue = "false") public boolean storeDataAtDelete; + + /** + * Defines a suffix for historical data table. + */ + @ConfigItem(defaultValue = "_AUD") + public String auditTableSuffix; + } diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java index 29d9a3386adbd..434d09da626cf 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java @@ -26,6 +26,7 @@ private HibernateEnversIntegrationListener(HibernateEnversBuildTimeConfig buildT @Override public void contributeBootProperties(BiConsumer propertyCollector) { addConfig(propertyCollector, EnversSettings.STORE_DATA_AT_DELETE, buildTimeConfig.storeDataAtDelete); + addConfig(propertyCollector, EnversSettings.AUDIT_TABLE_SUFFIX, buildTimeConfig.auditTableSuffix); } public static void addConfig(BiConsumer propertyCollector, String configPath, T value) {