Skip to content

Commit 5dee1bd

Browse files
DSXVIIodrotbohm
authored andcommitted
GH-866 - JDBC event publication support for Oracle database.
We now support Oracle as database backend for the JDBC-based EventPublicationRegistry. Original pull request: GH-868.
1 parent 5f1d390 commit 5dee1bd

File tree

7 files changed

+61
-1
lines changed

7 files changed

+61
-1
lines changed

spring-modulith-events/spring-modulith-events-jdbc/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@
116116
<scope>test</scope>
117117
</dependency>
118118

119+
<dependency>
120+
<groupId>org.testcontainers</groupId>
121+
<artifactId>oracle-free</artifactId>
122+
<scope>test</scope>
123+
</dependency>
124+
119125
<dependency>
120126
<groupId>com.microsoft.sqlserver</groupId>
121127
<artifactId>mssql-jdbc</artifactId>
@@ -152,6 +158,12 @@
152158
<scope>test</scope>
153159
</dependency>
154160

161+
<dependency>
162+
<groupId>com.oracle.database.jdbc</groupId>
163+
<artifactId>ojdbc11</artifactId>
164+
<scope>test</scope>
165+
</dependency>
166+
155167
</dependencies>
156168

157169
</project>

spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/DatabaseType.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,24 @@ UUID databaseToUUID(Object id) {
8282
return UUID.fromString(id.toString());
8383
}
8484

85+
@Override
86+
boolean isSchemaSupported() {
87+
return false;
88+
}
89+
},
90+
91+
ORACLE("oracle", "Oracle") {
92+
93+
@Override
94+
Object uuidToDatabase(UUID id) {
95+
return id.toString();
96+
}
97+
98+
@Override
99+
UUID databaseToUUID(Object id) {
100+
return UUID.fromString(id.toString());
101+
}
102+
85103
@Override
86104
boolean isSchemaSupported() {
87105
return false;

spring-modulith-events/spring-modulith-events-jdbc/src/main/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ private TargetEventPublication resultSetToPublication(ResultSet rs) throws SQLEx
400400
var completionDate = rs.getTimestamp("COMPLETION_DATE");
401401
var publicationDate = rs.getTimestamp("PUBLICATION_DATE").toInstant();
402402
var listenerId = rs.getString("LISTENER_ID");
403-
var serializedEvent = rs.getString("SERIALIZED_EVENT");
403+
var serializedEvent = Optional.ofNullable(rs.getString("SERIALIZED_EVENT")).orElse("");
404404

405405
return new JdbcEventPublication(id, publicationDate, listenerId,
406406
() -> serializer.deserialize(serializedEvent, eventClass),
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-- oracle database support 'create xx if not exists' from 23c, lower version should create table and index manually
2+
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION (
3+
ID VARCHAR2(36) NOT NULL,
4+
LISTENER_ID VARCHAR2(512) NOT NULL,
5+
EVENT_TYPE VARCHAR2(512) NOT NULL,
6+
SERIALIZED_EVENT VARCHAR2(4000),
7+
PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
8+
COMPLETION_DATE TIMESTAMP(6),
9+
CONSTRAINT EVENT_PUBLICATION_PK PRIMARY KEY(ID)
10+
);
11+
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/DatabaseSchemaInitializerIntegrationTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,8 @@ class MariaDB extends WithInitEnabled {}
130130
@Nested
131131
@ActiveProfiles("mssql")
132132
class MSSQL extends WithInitEnabled {}
133+
134+
@Nested
135+
@ActiveProfiles("oracle")
136+
class Oracle extends WithInitEnabled {}
133137
}

spring-modulith-events/spring-modulith-events-jdbc/src/test/java/org/springframework/modulith/events/jdbc/JdbcEventPublicationRepositoryIntegrationTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,14 @@ class MariaDBWithNoDefinedSchemaName extends WithNoDefinedSchemaName {}
476476

477477
@WithMariaDB
478478
class MariaDBWithDeleteCompletion extends WithDeleteCompletion {}
479+
480+
// Oracle
481+
482+
@WithOracle
483+
class OracleWithNoDefinedSchemaName extends WithNoDefinedSchemaName {}
484+
485+
@WithOracle
486+
class OracleWithDeleteCompletion extends WithDeleteCompletion {}
479487

480488
@Value
481489
private static final class TestEvent {
@@ -515,4 +523,9 @@ private static final class Sample {}
515523
@ActiveProfiles("mssql")
516524
@Retention(RetentionPolicy.RUNTIME)
517525
@interface WithMssql {}
526+
527+
@Nested
528+
@ActiveProfiles("oracle")
529+
@Retention(RetentionPolicy.RUNTIME)
530+
@interface WithOracle {}
518531
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
spring.datasource.url=jdbc:tc:oracle:23-slim-faststart:///events
2+
spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver

0 commit comments

Comments
 (0)