Сеанс JDBC для встроенного причала (версия выше 9.4)

Я пытаюсь реализовать сеанс jdbc для встроенного сервера причала, чтобы делиться сеансами между узлами (чтобы пользователи не теряли свои сеансы при развертывании) в среде openshift. Существующая официальная документация (https://www.eclipse.org/jetty/documentation/9.4.32.v20200930/configuring-sessions-jdbc.html) содержат сведения о реализации только для реализации дистрибутива Jetty. Аналогичное, но неполное решение есть в Как настроить встроенный Jetty для использования сеансов JDBC

// Configure a JDBCSessionDataStoreFactory.
JDBCSessionDataStoreFactory sessionDataStoreFactory = new JDBCSessionDataStoreFactory();
sessionDataStoreFactory.setGracePeriodSec(3600);
sessionDataStoreFactory.setSavePeriodSec(0);
sessionDataStoreFactory.setDatabaseAdaptor(...);

JDBCSessionDataStore.SessionTableSchema schema = new JDBCSessionDataStore.SessionTableSchema();
schema.setAccessTimeColumn("accessTime");
schema.setContextPathColumn("contextPath");
// ... more configuration here
sessionDataStoreFactory.setSessionTableSchema(schema);

// Add the SessionDataStoreFactory as a bean on the server.
server.addBean(sessionDataStoreFactory);

Здесь было непонятно, как создать объект DatabaseAdaptor. Может ли кто-нибудь помочь в этом?


person Erlil Kanangasabai    schedule 20.10.2020    source источник


Ответы (1)


Создать DatabaseAdaptor довольно просто. Вот пример:

DatabaseAdaptor driverAdaptor = new DatabaseAdaptor();
driverAdaptor.setDriverInfo("com.mysql.jdbc.Driver",
                            "jdbc:mysql://127.0.0.1:3306/sessions?user=sessionsadmin");

Это действительно все, что вам нужно сделать, чтобы создать его с помощью класса драйвера. Существуют также другие варианты передачи javax.sql.DataSource вместо этого или строки jndi для поиска для получения javax.sql.DataSource. Но использование класса драйвера и строки jdbc очень распространено.

На самом деле вам не нужно ничего настраивать в DatabaseAdapter, поскольку он пытается выяснить, что ему нужно, из метаданных, возвращаемых из соединения, для вещей, которые меняются между базами данных. Некоторыми примерами вещей, которые меняются между базами данных, являются имена некоторых типов sql, таких как строки, длинные и большие двоичные объекты. Например, для Oracle длина равна number(20), а для других баз данных — bigint. В случае, когда DatabaseAdapter не может обработать это, вам может потребоваться явно сообщить ему, что это за имена типов, но в большинстве случаев DatabaseAdapter может это обработать.

person Jan    schedule 20.10.2020