Я работаю над веб-интерфейсом для базы данных. Цель состоит в том, чтобы создать инструмент, который студенты могут использовать для изучения SQL, выдачи запросов и просмотра результатов. До сих пор я использовал CLI. Его основными недостатками являются: а) студенты в наши дни более привыкли к GUI; и б) когда запрос возвращает очень широкую таблицу, его трудно прочитать, потому что он оборачивается. Мой веб-интерфейс предназначен для устранения этих недостатков.
Я использую GWT в качестве клиентского интерфейса и сервера базы данных PostgreSQL. GWT связывается с базой данных через контейнер сервлетов Java, размещенный на Jetty или Tomcat.
Использование механизма RPC GWT для выдачи простых запросов достаточно просто. Однако я застрял на том, как обрабатывать долгосрочные транзакции. Чтобы студенты лучше поняли, как ведут себя транзакции, мне нужно, чтобы они могли выполнить инструкцию BEGIN, затем выполнить один или несколько запросов, а затем COMMIT или ROLLBACK. Я бы хотел, чтобы они выполняли операторы BEGIN / COMMIT / ROLLBACK вручную, что означает, что транзакция может быть активной в течение нескольких минут.
(Это не предназначенный для использования в качестве высокопроизводительного сервера баз данных. Это обучающий инструмент, поэтому я ценю быстродействие пользователей).
Чтобы реализовать это, я должен быть уверен, что через всю транзакцию клиент будет подключен к одному и тому же соединению с базой данных. Используя традиционные (не сохраняющие состояние) методы, соединения с базой данных являются либо кратковременными, либо объединенными. Следовательно, никогда нельзя быть уверенным, что одно и то же соединение с базой данных будет использоваться для нескольких запросов.
Боюсь, я немного новичок в сервлетах Java, поэтому у меня есть несколько вопросов.
Прежде всего, существует ли существующий механизм для открытия соединения с базой данных и его использования в течение всего сеанса пользователя?
Во-вторых, я думал о создании облегченного серверного процесса, с которым взаимодействует сервлет. Процесс сервера сопоставит идентификаторы сеанса с активным подключением к базе данных и подключит клиента к соответствующему. Таким образом, облегченный сервер поддерживает само соединение с базой данных и сохраняется до тех пор, пока пользователь не выйдет из системы, как это делает CLI. Что-то подобное уже существует?