Skip to content

Commit 37882de

Browse files
Add Oracle Free module, to be used as the main Oracle Database (#535)
* Add Oracle Free module * Add Oracle Free Reactive module * Add Oracle Free R2DBC module * Fix docs * Fix tests * Fix binary checks
1 parent d576695 commit 37882de

File tree

45 files changed

+686
-20
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+686
-20
lines changed

gradle/libs.versions.toml

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ managed-testcontainers-mssql = { module = "org.testcontainers:mssqlserver", vers
6767
managed-testcontainers-mysql = { module = "org.testcontainers:mysql", version.ref = "managed-testcontainers" }
6868
managed-testcontainers-neo4j = { module = "org.testcontainers:neo4j", version.ref = "managed-testcontainers" }
6969
managed-testcontainers-oracle-xe = { module = "org.testcontainers:oracle-xe", version.ref = "managed-testcontainers" }
70+
managed-testcontainers-oracle-free = { module = "org.testcontainers:oracle-free", version.ref = "managed-testcontainers" }
7071
managed-testcontainers-postgres = { module = "org.testcontainers:postgresql", version.ref = "managed-testcontainers" }
7172
managed-testcontainers-rabbitmq = { module = "org.testcontainers:rabbitmq", version.ref = "managed-testcontainers" }
7273
managed-testcontainers-redis = { module = "com.redis.testcontainers:testcontainers-redis", version.ref = "managed-testcontainers-redis" }

settings.gradle

+4-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def jdbcModules = [
2929
'mysql',
3030
'mariadb',
3131
'oracle-xe',
32+
'oracle-free',
3233
'postgresql',
3334
'mssql'
3435
]
@@ -37,6 +38,7 @@ def r2dbcModules = [
3738
'mariadb',
3839
'mysql',
3940
'oracle-xe',
41+
'oracle-free',
4042
'postgresql',
4143
'mssql',
4244
'pool'
@@ -47,7 +49,8 @@ def hibernateReactiveModules = [
4749
'mssql',
4850
'mysql',
4951
'postgresql',
50-
'oracle-xe'
52+
'oracle-xe',
53+
'oracle-free'
5154
]
5255

5356
def localstackModules = [

src/main/docs/guide/modules-databases-jdbc.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ https://dev.mysql.com/doc/connector-j/en/connector-j-using-xdevapi.html[MySQL X
1010

1111
In order for the database to be properly detected, _one of_ the following properties has to be set:
1212

13-
- `datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `postgres`)
13+
- `datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `oracle-xe`, `postgres`)
1414
- `datasources.*.driverClassName`: the class name of the driver (fallback)
1515
- `datasources.*.dialect`: the dialect to use for the database (fallback)

src/main/docs/guide/modules-databases-r2dbc.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ The following properties will automatically be set when using a JDBC database:
88
99
In order for the database to be properly detected, _one of_ the following properties has to be set:
1010

11-
- `r2dbc.datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `postgresql`)
11+
- `r2dbc.datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `oracle-xe`, `postgresql`)
1212
- `r2dbc.datasources.*.driverClassName`: the class name of the driver (fallback)
1313
- `r2dbc.datasources.*.dialect`: the dialect to use for the database (fallback)
1414
1515
In addition, R2DBC databases can be configured simply by reading the traditional JDBC properties:
1616

17-
- `datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `postgresql`)
17+
- `datasources.*.db-type`: the kind of database (preferred, one of `mariadb`, `mysql`, `oracle`, `oracle-xe`, `postgresql`)
1818
- `datasources.*.driverClassName`: the class name of the driver (fallback)
1919
- `datasources.*.dialect`: the dialect to use for the database (fallback)
2020
- `datasources.*.db-name`: overrides the default test database name

src/main/docs/guide/modules-databases.adoc

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ Micronaut Test Resources provides support for the following databases:
88

99
| https://mariadb.org/[MariaDB] | Yes | Yes | `mariadb` | `mariadb`
1010
| https://www.mysql.com/[MySQL] | Yes | Yes | `mysql` | `container-registry.oracle.com/mysql/community-server`
11-
| https://www.oracle.com/database/[Oracle Database] | Yes | Yes | `oracle` | `gvenzl/oracle-xe:slim-faststart`
11+
| https://www.oracle.com/database/technologies/appdev/xe.html[Oracle Database XE] | Yes | Yes | `oracle-xe` | `gvenzl/oracle-xe:slim-faststart`
12+
| https://www.oracle.com/database/free/[Oracle Database Free] | Yes | Yes | `oracle` | `gvenzl/oracle-free:slim-faststart`
1213
| https://www.postgresql.org/[PostgreSQL] | Yes | Yes | `postgres` | `postgres`
1314
| https://www.microsoft.com/sql-server[Microsoft SQL Server] | Yes | Yes | `mssql` | `mcr.microsoft.com/mssql/server:2019-CU16-GDR1-ubuntu-20.04`
1415

test-resources-build-tools/src/main/java/io/micronaut/testresources/buildtools/TestResourcesClasspath.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ public final class TestResourcesClasspath implements KnownModules {
8989
private static final String MYSQL_MODULE = "jdbc-mysql";
9090
private static final String REACTIVE_MYSQL_MODULE = "r2dbc-mysql";
9191
private static final String NEO4J_MODULE = "neo4j";
92-
private static final String ORACLE_XE_MODULE = "jdbc-oracle-xe";
92+
private static final String ORACLE_FREE_MODULE = "jdbc-oracle-free";
9393
private static final String RABBITMQ_MODULE = "rabbitmq";
94-
private static final String REACTIVE_ORACLE_XE_MODULE = "r2dbc-oracle-xe";
94+
private static final String REACTIVE_ORACLE_FREE_MODULE = "r2dbc-oracle-free";
9595
private static final String POSTGRESQL_MODULE = "jdbc-postgresql";
9696
private static final String REACTIVE_POSTGRESQL_MODULE = "r2dbc-postgresql";
9797
private static final String MARIADB_MODULE = "jdbc-mariadb";
@@ -152,11 +152,11 @@ private static Stream<MavenDependency> inferSingle(MavenDependency input, List<M
152152
m.onArtifact(name -> name.startsWith(MICRONAUT_DATA_PREFIX), deps -> deps.anyMatch(moduleEquals(POSTGRESQL_DRIVER)), POSTGRESQL_MODULE);
153153
m.onArtifact(name -> name.startsWith(MICRONAUT_DATA_PREFIX), deps -> deps.anyMatch(moduleEquals(MARIADB_JAVA_CLIENT)), MARIADB_MODULE);
154154
m.onArtifact(name -> name.startsWith(MICRONAUT_DATA_PREFIX), deps -> deps.anyMatch(moduleEquals(MSSQL_DRIVER)), MSSQL_MODULE);
155-
m.onArtifact(name -> name.startsWith(MICRONAUT_DATA_PREFIX), deps -> deps.anyMatch(d -> ORACLE_DRIVERS.contains(d.getModule())), ORACLE_XE_MODULE);
155+
m.onArtifact(name -> name.startsWith(MICRONAUT_DATA_PREFIX), deps -> deps.anyMatch(d -> ORACLE_DRIVERS.contains(d.getModule())), ORACLE_FREE_MODULE);
156156
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(d -> REACTIVE_MYSQL_DRIVERS.contains(d.getModule())), REACTIVE_MYSQL_MODULE);
157157
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(moduleEquals(REACTIVE_MARIADB_DRIVER)), REACTIVE_MARIADB_MODULE);
158158
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(moduleEquals(REACTIVE_POSTGRESQL_DRIVER)), REACTIVE_POSTGRESQL_MODULE);
159-
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(moduleEquals(REACTIVE_ORACLE_DRIVER)), REACTIVE_ORACLE_XE_MODULE);
159+
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(moduleEquals(REACTIVE_ORACLE_DRIVER)), REACTIVE_ORACLE_FREE_MODULE);
160160
m.onArtifact(name -> name.equals(MICRONAUT_DATA_R2DBC), deps -> deps.anyMatch(moduleEquals(REACTIVE_MSSQL_DRIVER)), REACTIVE_MSSQL_MODULE);
161161
m.passthroughModules(
162162
MYSQL_MYSQL_CONNECTOR_JAVA, MYSQL_MYSQL_CONNECTOR_J,

test-resources-build-tools/src/test/groovy/io/micronaut/testresources/buildtools/TestResourcesClasspathTest.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class TestResourcesClasspathTest extends Specification {
9191
'com.mysql:mysql-connector-j' | 'mysql'
9292
'org.postgresql:postgresql' | 'postgresql'
9393
'org.mariadb.jdbc:mariadb-java-client' | 'mariadb'
94-
'com.oracle.database.jdbc:ojdbc8' | 'oracle-xe'
94+
'com.oracle.database.jdbc:ojdbc8' | 'oracle-free'
9595
'com.microsoft.sqlserver:mssql-jdbc' | 'mssql'
9696
}
9797

@@ -138,7 +138,7 @@ class TestResourcesClasspathTest extends Specification {
138138
'io.asyncer:r2dbc-mysql' | 'mysql'
139139
'org.mariadb:r2dbc-mariadb' | 'mariadb'
140140
'org.postgresql:r2dbc-postgresql' | 'postgresql'
141-
'com.oracle.database.r2dbc:oracle-r2dbc' | 'oracle-xe'
141+
'com.oracle.database.r2dbc:oracle-r2dbc' | 'oracle-free'
142142
'io.r2dbc:r2dbc-mssql' | 'mssql'
143143
'io.r2dbc:r2dbc-pool' | 'pool'
144144
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
plugins {
2+
id 'io.micronaut.build.internal.hibernate-reactive-module'
3+
}
4+
5+
description = """
6+
Provides support for launching an Oracle Free test container for Hibernate Reactive.
7+
"""
8+
9+
dependencies {
10+
implementation(libs.managed.testcontainers.oracle.free)
11+
runtimeOnly(projects.micronautTestResourcesJdbcOracleFree)
12+
13+
testRuntimeOnly(libs.vertx.oracle)
14+
}
15+
16+
micronautBuild {
17+
binaryCompatibility {
18+
enabled = version != '2.5.0-SNAPSHOT'
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright 2017-2021 original authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.micronaut.testresources.hibernate.reactive.oracle;
17+
18+
import io.micronaut.testresources.hibernate.reactive.core.AbstractHibernateReactiveTestResourceProvider;
19+
import org.testcontainers.oracle.OracleContainer;
20+
import org.testcontainers.utility.DockerImageName;
21+
22+
import java.util.Map;
23+
24+
/**
25+
* A test resource provider which will spawn an Oracle Free test container.
26+
*/
27+
public class HibernateReactiveOracleFreeTestResourceProvider extends AbstractHibernateReactiveTestResourceProvider<OracleContainer> {
28+
public static final String DISPLAY_NAME = "Oracle Database (Hibernate Reactive)";
29+
30+
@Override
31+
public String getDisplayName() {
32+
return DISPLAY_NAME;
33+
}
34+
35+
@Override
36+
protected String getSimpleName() {
37+
return "oracle";
38+
}
39+
40+
@Override
41+
protected String getDefaultImageName() {
42+
return "gvenzl/oracle-free:slim-faststart";
43+
}
44+
45+
@Override
46+
protected OracleContainer createContainer(DockerImageName imageName, Map<String, Object> requestedProperties, Map<String, Object> testResourcesConfig) {
47+
return new OracleContainer(imageName);
48+
}
49+
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.micronaut.testresources.hibernate.reactive.oracle.HibernateReactiveOracleFreeTestResourceProvider
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.micronaut.testresources.hibernate.reactive.oracle
2+
3+
import io.micronaut.test.extensions.spock.annotation.MicronautTest
4+
import io.micronaut.testresources.hibernate.reactive.core.Book
5+
import io.micronaut.testresources.hibernate.reactive.core.BookRepository
6+
import io.micronaut.testresources.testcontainers.AbstractTestContainersSpec
7+
import jakarta.inject.Inject
8+
9+
import java.time.Duration
10+
import java.time.temporal.ChronoUnit
11+
12+
@MicronautTest(transactional = false, environments = "standalone")
13+
class StandaloneStartOracleFreeDBTest extends AbstractTestContainersSpec {
14+
private static final Duration TEST_TIMEOUT = Duration.of(10, ChronoUnit.SECONDS)
15+
16+
@Inject
17+
BookRepository repository
18+
19+
def "starts a Oracle container"() {
20+
def book = new Book(title: "Micronaut for Spring developers")
21+
repository.save(book).block(TEST_TIMEOUT)
22+
23+
when:
24+
def books = repository.findAll().collectList().block(TEST_TIMEOUT)
25+
26+
then:
27+
books.size() == 1
28+
29+
and:
30+
listContainers().size() == 1
31+
}
32+
33+
@Override
34+
String getImageName() {
35+
"oracle"
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.micronaut.testresources.hibernate.reactive.oracle
2+
3+
import io.micronaut.test.extensions.spock.annotation.MicronautTest
4+
import io.micronaut.testresources.hibernate.reactive.core.Book
5+
import io.micronaut.testresources.hibernate.reactive.core.BookRepository
6+
import io.micronaut.testresources.testcontainers.AbstractTestContainersSpec
7+
import jakarta.inject.Inject
8+
9+
import java.time.Duration
10+
import java.time.temporal.ChronoUnit
11+
12+
@MicronautTest(transactional = false, environments = "jdbc")
13+
class WithJdbcStartOracleFreeDBTest extends AbstractTestContainersSpec {
14+
private static final Duration TEST_TIMEOUT = Duration.of(10, ChronoUnit.SECONDS)
15+
16+
@Inject
17+
BookRepository repository
18+
19+
def "starts a Oracle container"() {
20+
def book = new Book(title: "Micronaut for Spring developers")
21+
repository.save(book).block(TEST_TIMEOUT)
22+
23+
when:
24+
def books = repository.findAll().collectList().block(TEST_TIMEOUT)
25+
26+
then:
27+
books.size() == 1
28+
29+
and:
30+
listContainers().size() == 1
31+
}
32+
33+
@Override
34+
String getImageName() {
35+
"oracle"
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
datasources:
2+
default:
3+
db-type: oracle
4+
schema-generate: CREATE_DROP
5+
dialect: ORACLE
6+
jpa:
7+
default:
8+
reactive: true
9+
entity-scan:
10+
packages: io.micronaut.testresources.hibernate.reactive.core
11+
properties:
12+
hibernate:
13+
hbm2ddl:
14+
auto: update
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
jpa:
2+
default:
3+
reactive: true
4+
entity-scan:
5+
packages: io.micronaut.testresources.hibernate.reactive.core
6+
properties:
7+
hibernate:
8+
connection:
9+
db-type: oracle
10+
hbm2ddl:
11+
auto: update
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<configuration>
2+
3+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4+
<!-- encoders are assigned the type
5+
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
6+
<encoder>
7+
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
8+
</encoder>
9+
</appender>
10+
11+
<root level="info">
12+
<appender-ref ref="STDOUT" />
13+
</root>
14+
15+
16+
</configuration>

test-resources-hibernate-reactive/test-resources-hibernate-reactive-oracle-xe/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Provides support for launching an Oracle XE test container for Hibernate Reactiv
88

99
dependencies {
1010
implementation(libs.managed.testcontainers.oracle.xe)
11-
runtimeOnly(project(":micronaut-test-resources-jdbc-oracle-xe"))
11+
runtimeOnly(projects.micronautTestResourcesJdbcOracleXe)
1212

1313
testRuntimeOnly(libs.vertx.oracle)
1414
}

test-resources-hibernate-reactive/test-resources-hibernate-reactive-oracle-xe/src/main/java/io/micronaut/testresources/hibernate/reactive/oracle/HibernateReactiveOracleXETestResourceProvider.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323

2424
/**
2525
* A test resource provider which will spawn an Oracle XE test container.
26+
*
27+
* @deprecated Use <code>oracle</code> instead.
2628
*/
29+
@Deprecated(since = "2.4.0", forRemoval = true)
2730
public class HibernateReactiveOracleXETestResourceProvider extends AbstractHibernateReactiveTestResourceProvider<OracleContainer> {
2831
public static final String DISPLAY_NAME = "Oracle Database (Hibernate Reactive)";
2932

@@ -34,7 +37,7 @@ public String getDisplayName() {
3437

3538
@Override
3639
protected String getSimpleName() {
37-
return "oracle";
40+
return "oracle-xe";
3841
}
3942

4043
@Override

test-resources-hibernate-reactive/test-resources-hibernate-reactive-oracle-xe/src/test/resources/application-jdbc.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
datasources:
22
default:
3-
db-type: oracle
3+
db-type: oracle-xe
44
schema-generate: CREATE_DROP
55
dialect: ORACLE
66
jpa:

test-resources-hibernate-reactive/test-resources-hibernate-reactive-oracle-xe/src/test/resources/application-standalone.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ jpa:
66
properties:
77
hibernate:
88
connection:
9-
db-type: oracle
9+
db-type: oracle-xe
1010
hbm2ddl:
1111
auto: update
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'io.micronaut.build.internal.jdbc-module'
3+
}
4+
5+
description = """
6+
Provides support for launching a Oracle Free test container.
7+
"""
8+
9+
dependencies {
10+
implementation(libs.managed.testcontainers.oracle.free)
11+
12+
testRuntimeOnly(mnSql.ojdbc8)
13+
}
14+
15+
micronautBuild {
16+
binaryCompatibility {
17+
enabled = version != '2.5.0-SNAPSHOT'
18+
}
19+
}

0 commit comments

Comments
 (0)