JDBC-backed session map implementation for Selenium Grid providing database-backed storage for distributed WebDriver sessions.
—
Database connection management and Selenium Grid configuration integration for JDBC session storage.
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 tracingManages 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());
}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();
}// 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:
jdbc:mysql://hostname:port/databasejdbc:postgresql://hostname:port/databasejdbc:h2:mem:testdb or jdbc:h2:file:/path/to/dbjdbc:sqlite:/path/to/database.dbjdbc:oracle:thin:@hostname:port:sidjdbc:sqlserver://hostname:port;databaseName=database// Command line flag
--jdbc-user "grid_user"
// Configuration section: "sessions"
// Configuration key: "jdbc-user"
// Example: "myTestUser"// Command line flag
--jdbc-password "password123"
// Configuration section: "sessions"
// Configuration key: "jdbc-password"
// Example: "hunter2"# 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"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);// 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);The configuration system validates required settings:
JdbcException if --jdbc-url is not providedtry {
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());
}The JDBC session map integrates seamlessly with Selenium Grid's configuration system:
@AutoServiceInstall with Tessl CLI
npx tessl i tessl/maven-org-seleniumhq-selenium--selenium-session-map-jdbc