CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-testcontainers--oracle-xe

Testcontainers module for Oracle XE database - provides lightweight, throwaway instances of Oracle XE database for integration testing

Overview
Eval results
Files

jdbc-connectivity.mddocs/

JDBC Connectivity

Standard JDBC database connectivity with Oracle-specific connection URLs, driver management, and database operations. Provides seamless integration with JUnit testing frameworks and connection pooling libraries.

Capabilities

Connection Information

Provides Oracle-specific JDBC connection details including driver class names, connection URLs, and authentication credentials with support for both PDB and SID connection modes.

public String getDriverClassName();
public String getJdbcUrl();
public String getUsername();
public String getPassword();
public String getTestQueryString();

Returns:

  • String: Oracle JDBC driver class name ("oracle.jdbc.OracleDriver" or "oracle.jdbc.driver.OracleDriver")
  • String: Complete JDBC connection URL with host, port, and database/SID
  • String: Database username (application user or system user based on connection mode)
  • String: Database password
  • String: Test query for connection validation ("SELECT 1 FROM DUAL")

Usage Example:

OracleContainer container = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
    .withUsername("appuser")
    .withPassword("apppass");
container.start();

// Get connection details
String driverClass = container.getDriverClassName();
String jdbcUrl = container.getJdbcUrl();
String username = container.getUsername();
String password = container.getPassword();

// Example URLs:
// PDB mode: jdbc:oracle:thin:@localhost:32768/xepdb1
// SID mode: jdbc:oracle:thin:@localhost:32768:xe

// Test query
String testQuery = container.getTestQueryString(); // "SELECT 1 FROM DUAL"

Direct Connection Management

Creates and manages JDBC connections with automatic driver loading, connection parameter handling, and query string support for connection customization.

public Connection createConnection(String queryString) throws SQLException, NoDriverFoundException;
public Connection createConnection(String queryString, Properties info) throws SQLException, NoDriverFoundException;
public Driver getJdbcDriverInstance() throws NoDriverFoundException;

Parameters:

  • queryString (String): Additional query parameters for connection URL
  • info (Properties): JDBC connection properties

Returns:

  • Connection: Active JDBC database connection
  • Driver: Oracle JDBC driver instance

Throws:

  • SQLException: Database connection errors
  • NoDriverFoundException: JDBC driver loading failures

Usage Example:

OracleContainer container = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim");
container.start();

// Create basic connection
try (Connection conn = container.createConnection("")) {
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT SYSDATE FROM DUAL");
    if (rs.next()) {
        System.out.println("Current time: " + rs.getTimestamp(1));
    }
}

// Create connection with properties
Properties props = new Properties();
props.setProperty("oracle.net.CONNECT_TIMEOUT", "10000");
props.setProperty("oracle.jdbc.ReadTimeout", "30000");

try (Connection conn = container.createConnection("", props)) {
    // Use connection with custom properties
    DatabaseMetaData meta = conn.getMetaData();
    System.out.println("Database: " + meta.getDatabaseProductName());
}

// Get driver instance
Driver oracleDriver = container.getJdbcDriverInstance();

Container Provider Integration

Service Provider Interface (SPI) implementation for automatic container discovery and creation in testing frameworks and dependency injection containers.

public class OracleContainerProvider extends JdbcDatabaseContainerProvider {
    public boolean supports(String databaseType);
    public JdbcDatabaseContainer newInstance();
    public JdbcDatabaseContainer newInstance(String tag);
}

Parameters:

  • databaseType (String): Database type identifier ("oracle")
  • tag (String): Docker image tag for container creation

Returns:

  • boolean: Whether provider supports the database type
  • JdbcDatabaseContainer: New Oracle container instance

Usage Example:

// SPI automatic discovery (used by testing frameworks)
ServiceLoader<JdbcDatabaseContainerProvider> providers = 
    ServiceLoader.load(JdbcDatabaseContainerProvider.class);

for (JdbcDatabaseContainerProvider provider : providers) {
    if (provider.supports("oracle")) {
        JdbcDatabaseContainer container = provider.newInstance("21.3.0-slim");
        // Use container
        break;
    }
}

// Direct provider usage
OracleContainerProvider provider = new OracleContainerProvider();
boolean supportsOracle = provider.supports("oracle"); // true
JdbcDatabaseContainer container1 = provider.newInstance(); // default tag
JdbcDatabaseContainer container2 = provider.newInstance("21.3.0-slim"); // custom tag

Connection URL Formats

Oracle XE Testcontainers supports two connection URL formats depending on the connection mode:

PDB (Pluggable Database) Mode (Default):

jdbc:oracle:thin:@<host>:<port>/<database_name>

SID (System Identifier) Mode:

jdbc:oracle:thin:@<host>:<port>:<sid>

Usage Example:

// PDB mode (default)
OracleContainer pdbContainer = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
    .withDatabaseName("testdb");
pdbContainer.start();
String pdbUrl = pdbContainer.getJdbcUrl();
// Result: jdbc:oracle:thin:@localhost:32768/testdb

// SID mode
OracleContainer sidContainer = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
    .usingSid();
sidContainer.start();
String sidUrl = sidContainer.getJdbcUrl();
// Result: jdbc:oracle:thin:@localhost:32768:xe
String sidUser = sidContainer.getUsername(); // "system" (not app user)

Integration Patterns

JUnit 5 Integration

@Testcontainers
class OracleJdbcTest {
    
    @Container
    static OracleContainer oracle = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
        .withDatabaseName("testdb")
        .withUsername("testuser")
        .withPassword("testpass")
        .withInitScript("classpath:init.sql");
    
    @Test
    void testDatabaseConnection() throws SQLException {
        String jdbcUrl = oracle.getJdbcUrl();
        try (Connection conn = DriverManager.getConnection(
                jdbcUrl, oracle.getUsername(), oracle.getPassword())) {
            
            // Test connection
            assertTrue(conn.isValid(30));
            
            // Execute test query
            try (Statement stmt = conn.createStatement()) {
                ResultSet rs = stmt.executeQuery(oracle.getTestQueryString());
                assertTrue(rs.next());
                assertEquals(1, rs.getInt(1));
            }
        }
    }
}

Spring Boot Integration

@SpringBootTest
@Testcontainers
class SpringOracleTest {
    
    @Container
    static OracleContainer oracle = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim");
    
    @DynamicPropertySource
    static void configureProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", oracle::getJdbcUrl);
        registry.add("spring.datasource.username", oracle::getUsername);
        registry.add("spring.datasource.password", oracle::getPassword);
        registry.add("spring.datasource.driver-class-name", oracle::getDriverClassName);
    }
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Test
    void testSpringDataSource() {
        Integer result = jdbcTemplate.queryForObject("SELECT 1 FROM DUAL", Integer.class);
        assertEquals(1, result);
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-org-testcontainers--oracle-xe

docs

container-configuration.md

index.md

jdbc-connectivity.md

r2dbc-connectivity.md

tile.json