diff --git a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
index ab264c5c..86dd607a 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
+++ b/spring-modulith-events/spring-modulith-events-jdbc/pom.xml
@@ -116,6 +116,12 @@
test
+
+ org.testcontainers
+ oracle-free
+ test
+
+
com.microsoft.sqlserver
mssql-jdbc
@@ -152,6 +158,12 @@
test
+
+ com.oracle.database.jdbc
+ ojdbc11
+ test
+
+
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java
index 7a0e8513..6d2c091d 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java
@@ -82,6 +82,24 @@ enum DatabaseType {
return UUID.fromString(id.toString());
}
+ @Override
+ boolean isSchemaSupported() {
+ return false;
+ }
+ },
+
+ ORACLE("oracle", "Oracle") {
+
+ @Override
+ Object uuidToDatabase(UUID id) {
+ return id.toString();
+ }
+
+ @Override
+ UUID databaseToUUID(Object id) {
+ return UUID.fromString(id.toString());
+ }
+
@Override
boolean isSchemaSupported() {
return false;
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java
index 25cfa455..7c71ee60 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java
@@ -400,7 +400,7 @@ class JdbcEventPublicationRepository implements EventPublicationRepository, Bean
var completionDate = rs.getTimestamp("COMPLETION_DATE");
var publicationDate = rs.getTimestamp("PUBLICATION_DATE").toInstant();
var listenerId = rs.getString("LISTENER_ID");
- var serializedEvent = rs.getString("SERIALIZED_EVENT");
+ var serializedEvent = Optional.ofNullable(rs.getString("SERIALIZED_EVENT")).orElse("");
return new JdbcEventPublication(id, publicationDate, listenerId,
() -> serializer.deserialize(serializedEvent, eventClass),
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-oracle.sql b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-oracle.sql
new file mode 100644
index 00000000..9f25536c
--- /dev/null
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/main/resources/schema-oracle.sql
@@ -0,0 +1,11 @@
+-- oracle database support 'create xx if not exists' from 23c, lower version should create table and index manually
+CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION (
+ ID VARCHAR2(36) NOT NULL,
+ LISTENER_ID VARCHAR2(512) NOT NULL,
+ EVENT_TYPE VARCHAR2(512) NOT NULL,
+ SERIALIZED_EVENT VARCHAR2(4000),
+ PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
+ COMPLETION_DATE TIMESTAMP(6),
+ CONSTRAINT EVENT_PUBLICATION_PK PRIMARY KEY(ID)
+);
+CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java
index 86dd9d5f..b63a320d 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java
@@ -130,4 +130,8 @@ class DatabaseSchemaInitializerIntegrationTests {
@Nested
@ActiveProfiles("mssql")
class MSSQL extends WithInitEnabled {}
+
+ @Nested
+ @ActiveProfiles("oracle")
+ class Oracle extends WithInitEnabled {}
}
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java
index 4e77f087..bbe15631 100644
--- a/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java
@@ -476,6 +476,14 @@ class JdbcEventPublicationRepositoryIntegrationTests {
@WithMariaDB
class MariaDBWithDeleteCompletion extends WithDeleteCompletion {}
+
+ // Oracle
+
+ @WithOracle
+ class OracleWithNoDefinedSchemaName extends WithNoDefinedSchemaName {}
+
+ @WithOracle
+ class OracleWithDeleteCompletion extends WithDeleteCompletion {}
@Value
private static final class TestEvent {
@@ -515,4 +523,9 @@ class JdbcEventPublicationRepositoryIntegrationTests {
@ActiveProfiles("mssql")
@Retention(RetentionPolicy.RUNTIME)
@interface WithMssql {}
+
+ @Nested
+ @ActiveProfiles("oracle")
+ @Retention(RetentionPolicy.RUNTIME)
+ @interface WithOracle {}
}
diff --git a/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-oracle.properties b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-oracle.properties
new file mode 100644
index 00000000..f39d8172
--- /dev/null
+++ b/spring-modulith-events/spring-modulith-events-jdbc/src/test/resources/application-oracle.properties
@@ -0,0 +1,2 @@
+spring.datasource.url=jdbc:tc:oracle:23-slim-faststart:///events
+spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver