Управление сессиями с использованием Hibernate в * многопоточном * Swing-приложении

В настоящее время я работаю над (довольно крупным) моим любимым проектом, приложением Swing.Сама природа должна быть многопоточной. Почти все пользовательские взаимодействия могут получать данные с некоторых удаленных серверов через Интернет, поскольку я не контролирую ни эти серверы, ни сам Интернет, поэтому большое время отклика неизбежно. Очевидно, что пользовательский интерфейс Swing не может перерисовывать себя, пока EDT занят, поэтому все вызовы удаленного сервера должны выполняться фоновыми потоками.

Моя проблема:

Данные, извлекаемые фоновыми потоками, получают 'обогащается» с данными из локальной (в памяти) базы данных (удаленный сервер возвращает идентификаторы / ссылки на данные в локальной базе данных). Эти данные позже в конечном итоге передаются в EDT, где они становятся частью модели представления. Некоторые объекты не полностью инициализируются в этот момент (ленивая выборка включена), поэтому пользователь может запустить ленивую выборку, например, прокрутка в JTable. Поскольку сеанс гибернации уже закрыт, это вызовет исключение LazyInitializationException. Я могу'Не знаю, когда пользователь может инициировать отложенную выборку, поэтому создание сеанса по требованию / присоединение отсоединенного объекта здесь не сработает.

решено» эта проблема по:

использование одного (синхронизированного, поскольку экземпляры сеанса не поточно-ориентированного) сеанса для всего приложенияотключение ленивого извлечения полностью

Пока это работает, приложениеПроизводительность сильно пострадала (иногда близка к непригодной для использования). Замедление в основном вызвано большим количеством объектов, которые теперь выбираются каждым запросом.

В настоящее время я думаю об изменении приложенияс дизайн дляSession-за нить» и перенос всех объектов, извлеченных не-EDT-потоками, в EDT-поток 'сессия (аналогичноэта публикация на форумах Hibernate).

Примечание: любые проблемы, связанные с обновлениями базы данных, не применяются, поскольку все объекты базы данных доступны только для чтения (справочные данные).

Любые другие идеи о том, как использовать Hibernateс ленивая загрузка в этом сценарии?

Ответы на вопрос(3)

Ваш ответ на вопрос