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.
This commit is contained in:
@@ -116,6 +116,12 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>oracle-free</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>mssql-jdbc</artifactId>
|
||||
@@ -152,6 +158,12 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.oracle.database.jdbc</groupId>
|
||||
<artifactId>ojdbc11</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
@@ -130,4 +130,8 @@ class DatabaseSchemaInitializerIntegrationTests {
|
||||
@Nested
|
||||
@ActiveProfiles("mssql")
|
||||
class MSSQL extends WithInitEnabled {}
|
||||
|
||||
@Nested
|
||||
@ActiveProfiles("oracle")
|
||||
class Oracle extends WithInitEnabled {}
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
spring.datasource.url=jdbc:tc:oracle:23-slim-faststart:///events
|
||||
spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
|
||||
Reference in New Issue
Block a user