CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-seleniumhq-selenium--selenium-session-map-jdbc

JDBC-backed session map implementation for Selenium Grid providing database-backed storage for distributed WebDriver sessions.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration

Database connection management and Selenium Grid configuration integration for JDBC session storage.

Capabilities

Static Factory Creation

Creates a JDBC session map from Selenium Grid configuration.

/**
 * Creates a JDBC-backed session map from Grid configuration
 * @param config The Grid configuration containing JDBC settings
 * @return A fully configured JdbcBackedSessionMap instance
 * @throws ConfigException if required configuration is missing or invalid
 * @throws JdbcException if database connection fails
 */
public static SessionMap create(Config config);

Usage Example:

import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.grid.sessionmap.SessionMap;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap;

// Create from Grid configuration
Config config = // ... your Grid configuration
SessionMap sessionMap = JdbcBackedSessionMap.create(config);

// The factory method handles:
// - Reading JDBC configuration from config
// - Creating database connection
// - Setting up event bus integration
// - Configuring distributed tracing

JDBC Connection Management

Manages database connections and configuration options for the session map.

/**
 * Configuration manager for JDBC session map options
 */
public class JdbcSessionMapOptions {
  /**
   * Creates JDBC options from Grid configuration
   * @param config The Grid configuration
   * @throws JdbcException if required JDBC URL is missing
   */
  public JdbcSessionMapOptions(Config config);
  
  /**
   * Creates a JDBC connection using configured parameters
   * @return A JDBC connection ready for use
   * @throws SQLException if connection fails
   */
  public Connection getJdbcConnection() throws SQLException;
  
  /**
   * Gets the configured JDBC URL
   * @return The database connection URL
   */
  public String getJdbcUrl();
  
  /**
   * Gets the configured JDBC username
   * @return The database username
   */
  public String getJdbcUser();
}

Usage Example:

import org.openqa.selenium.grid.sessionmap.jdbc.JdbcSessionMapOptions;
import java.sql.Connection;

// Create options from configuration
JdbcSessionMapOptions options = new JdbcSessionMapOptions(config);

// Get connection details
String url = options.getJdbcUrl();
String user = options.getJdbcUser();
System.out.println("Connecting to: " + url + " as " + user);

// Get active connection
try {
    Connection connection = options.getJdbcConnection();
    System.out.println("Database connection established");
    // Use connection...
} catch (SQLException e) {
    System.err.println("Failed to connect to database: " + e.getMessage());
}

Command-Line Configuration

Defines command-line flags and configuration keys for JDBC session map setup.

/**
 * Command-line flags for JDBC session map configuration
 * Implements HasRoles for Grid role-based configuration
 */
import com.google.auto.service.AutoService;
import org.openqa.selenium.grid.config.HasRoles;
import org.openqa.selenium.grid.config.Role;
import java.util.Set;

@AutoService(HasRoles.class)
public class JdbcSessionMapFlags implements HasRoles {
  /**
   * Gets the Grid roles this configuration applies to
   * @return Set containing SESSION_MAP_ROLE
   */
  public Set<Role> getRoles();
}

Configuration Options

JDBC URL Configuration

// Command line flag
--jdbc-url "jdbc:mysql://localhost:3306/selenium_grid"

// Configuration section: "sessions"
// Configuration key: "jdbc-url"
// Example: "jdbc:mysql://localhost:3306/TestDatabase"

Supported Database URLs:

  • MySQL: jdbc:mysql://hostname:port/database
  • PostgreSQL: jdbc:postgresql://hostname:port/database
  • H2: jdbc:h2:mem:testdb or jdbc:h2:file:/path/to/db
  • SQLite: jdbc:sqlite:/path/to/database.db
  • Oracle: jdbc:oracle:thin:@hostname:port:sid
  • SQL Server: jdbc:sqlserver://hostname:port;databaseName=database

JDBC User Configuration

// Command line flag
--jdbc-user "grid_user"

// Configuration section: "sessions"
// Configuration key: "jdbc-user"
// Example: "myTestUser"

JDBC Password Configuration

// Command line flag
--jdbc-password "password123"

// Configuration section: "sessions"
// Configuration key: "jdbc-password"
// Example: "hunter2"

Complete Configuration Examples

Command Line Setup

# Standalone Grid with JDBC session map
java -jar selenium-server-4.33.0.jar standalone \
  --jdbc-url "jdbc:mysql://db.example.com:3306/selenium_grid" \
  --jdbc-user "selenium_user" \
  --jdbc-password "secure_password"

# Hub with JDBC session map
java -jar selenium-server-4.33.0.jar hub \
  --jdbc-url "jdbc:postgresql://postgres.grid.com:5432/sessions" \
  --jdbc-user "grid_admin" \
  --jdbc-password "admin_pass"

Programmatic Configuration

import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.grid.config.MapConfig;
import java.util.Map;

// Create configuration programmatically
Map<String, Object> configMap = Map.of(
    "sessions", Map.of(
        "jdbc-url", "jdbc:h2:mem:testdb",
        "jdbc-user", "sa",
        "jdbc-password", ""
    )
);

Config config = new MapConfig(configMap);
SessionMap sessionMap = JdbcBackedSessionMap.create(config);

Environment-Based Configuration

// Using environment variables in configuration
String jdbcUrl = System.getenv("SELENIUM_JDBC_URL");
String jdbcUser = System.getenv("SELENIUM_JDBC_USER");
String jdbcPassword = System.getenv("SELENIUM_JDBC_PASSWORD");

Map<String, Object> configMap = Map.of(
    "sessions", Map.of(
        "jdbc-url", jdbcUrl != null ? jdbcUrl : "jdbc:h2:mem:default",
        "jdbc-user", jdbcUser != null ? jdbcUser : "sa",
        "jdbc-password", jdbcPassword != null ? jdbcPassword : ""
    )
);

Config config = new MapConfig(configMap);

Configuration Validation

The configuration system validates required settings:

  • JDBC URL is required: The system throws JdbcException if --jdbc-url is not provided
  • User and password are optional: Default to empty strings if not specified
  • Connection testing: The factory method attempts to establish a connection during creation
try {
    SessionMap sessionMap = JdbcBackedSessionMap.create(config);
    System.out.println("JDBC session map configured successfully");
} catch (ConfigException e) {
    System.err.println("Configuration error: " + e.getMessage());
} catch (JdbcException e) {
    System.err.println("Database connection error: " + e.getMessage());
}

Integration with Grid Configuration

The JDBC session map integrates seamlessly with Selenium Grid's configuration system:

  • Role-based configuration: Only applies to components with SESSION_MAP_ROLE
  • Config section: Uses "sessions" section for all JDBC-related settings
  • Automatic discovery: Grid automatically discovers and loads the configuration via @AutoService
  • Factory integration: Works with Grid's dependency injection system

Install with Tessl CLI

npx tessl i tessl/maven-org-seleniumhq-selenium--selenium-session-map-jdbc

docs

configuration.md

exceptions.md

index.md

session-management.md

tile.json