JDBC-backed session map implementation for Selenium Grid providing database-backed storage for distributed WebDriver sessions.
npx @tessl/cli install tessl/maven-org-seleniumhq-selenium--selenium-session-map-jdbc@4.33.0The Selenium JDBC Session Map provides a database-backed implementation of the SessionMap interface for Selenium Grid. It enables distributed session management through database persistence, allowing WebDriver session state to be stored, retrieved, and shared across multiple grid nodes for enterprise-scale browser automation infrastructure.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-session-map-jdbc</artifactId>
<version>4.33.0</version>
</dependency>import org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcSessionMapOptions;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcSessionMapFlags;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcException;
import org.openqa.selenium.grid.sessionmap.SessionMap;
import org.openqa.selenium.grid.data.Session;
import org.openqa.selenium.remote.SessionId;
import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.events.EventBus;
import org.openqa.selenium.remote.tracing.Tracer;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ImmutableCapabilities;
import org.openqa.selenium.NoSuchSessionException;
import java.sql.Connection;
import java.sql.SQLException;
import java.net.URI;
import java.time.Instant;
import java.io.Closeable;import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap;
// Using the static factory method with configuration
Config config = // ... your grid configuration
SessionMap sessionMap = JdbcBackedSessionMap.create(config);
// Manual construction with explicit dependencies
import org.openqa.selenium.remote.tracing.Tracer;
import java.sql.Connection;
import org.openqa.selenium.events.EventBus;
Tracer tracer = // ... your tracer instance
Connection connection = // ... your JDBC connection
EventBus eventBus = // ... your event bus
JdbcBackedSessionMap sessionMap = new JdbcBackedSessionMap(tracer, connection, eventBus);import org.openqa.selenium.grid.config.Config;
import org.openqa.selenium.grid.sessionmap.jdbc.JdbcSessionMapOptions;
import java.sql.Connection;
// Configure JDBC connection options
JdbcSessionMapOptions options = new JdbcSessionMapOptions(config);
Connection connection = options.getJdbcConnection();
String jdbcUrl = options.getJdbcUrl();
String jdbcUser = options.getJdbcUser();# Configure Selenium Grid with JDBC session map
java -jar selenium-server-4.33.0.jar standalone \
--jdbc-url "jdbc:mysql://localhost:3306/selenium_grid" \
--jdbc-user "grid_user" \
--jdbc-password "password123"The JDBC Session Map integrates with several key Selenium Grid components:
Core session storage and retrieval operations with database persistence.
public boolean add(Session session);
public Session get(SessionId id) throws NoSuchSessionException;
public void remove(SessionId id);
public URI getUri(SessionId id) throws NoSuchSessionException;
public void removeByUri(URI sessionUri);
public boolean isReady();
public void close();Database connection management and Grid configuration integration for JDBC session storage.
public static SessionMap create(Config config);
public JdbcBackedSessionMap(Tracer tracer, Connection jdbcConnection, EventBus bus);
public Connection getJdbcConnection() throws SQLException;
public String getJdbcUrl();
public String getJdbcUser();Custom exception types for JDBC session map error scenarios.
public class JdbcException extends WebDriverException {
public JdbcException();
public JdbcException(String message);
public JdbcException(Throwable cause);
public JdbcException(String message, Throwable cause);
}public class JdbcBackedSessionMap extends SessionMap implements Closeable {
public JdbcBackedSessionMap(Tracer tracer, Connection jdbcConnection, EventBus bus);
public static SessionMap create(Config config);
public boolean add(Session session);
public Session get(SessionId id) throws NoSuchSessionException;
public void remove(SessionId id);
public void removeByUri(URI sessionUri);
public boolean isReady();
public void close();
}
public class JdbcSessionMapOptions {
public JdbcSessionMapOptions(Config config);
public Connection getJdbcConnection() throws SQLException;
public String getJdbcUrl();
public String getJdbcUser();
}
public class JdbcSessionMapFlags implements HasRoles {
public Set<Role> getRoles();
}
public class Session implements Serializable {
public Session(SessionId id, URI uri, Capabilities stereotype, Capabilities capabilities, Instant startTime);
public SessionId getId();
public URI getUri();
public Capabilities getStereotype();
public Capabilities getCapabilities();
public Instant getStartTime();
}
public class JdbcException extends WebDriverException {
public JdbcException();
public JdbcException(String message);
public JdbcException(Throwable cause);
public JdbcException(String message, Throwable cause);
}