Подключение к базе данных Domino для архитектуры Java bean
Мы перемещаем наше веб-приложение с несколькими базами данных из LS в архитектуру Java beans, но пытаемся решить, как лучше всего обрабатывать соединения с базами данных и какую область мы должны использовать для них.
Если мы используем sessionScope, то для каждого пользователя будет создано подключение к 5-6 базам данных за вызов. Если мы используем компонент applicationScope для подключения к базе данных, то он будет оставаться открытым до перезапуска сервера, что приведет к утечке памяти. Я понимаю, что определенные ценности, такие как система Значения конфигурации, которые редко меняются, можно кэшировать на уровне applicationScope, но меня беспокоят остальные соединения.
Мой вопрос на самом деле заключается в том, как лучше всего обрабатывать подключения к базе данных domino (объекты domino не сериализуемы), не влияя на производительность, утечки памяти или автоматические проблемы GC?
2 ответа:
Это сложно, потому что он имеет дело с проектированием конкретного решения против просто некоторых общих советов "это работает лучше, чем это". Мы добились большого успеха в разработке архитектуры потребительского приложения XPage, так что данные извлекаются из дополнительных баз данных. Что-то вроде переднего плана с бэкендами базы данных, но с Domino.
Мы не используем applicationScope ничего, потому что нет ничего глобального для приложения, но даже если бы там было достаточно болтовни, чтобы указать, что возможно, applicationScope не так распространен, как кажется, и поэтому вы должны внимательно следить за своими объектами.
Вы уже выяснили проблему объекта Domino, так что это должно быть сделано независимо от того, какой подход вы выберете.
В зависимости от вашего приложения вы можете смотреть вниз некоторые основные реархитектуры, но моя рекомендация состоит в том, чтобы сначала попробовать его с sessionScope и посмотреть, как он работает. Проведите сравнительный анализ. Если это работает достаточно быстро, то идите с этим, но по мере развития ваши бобы вы должны обратить самое пристальное внимание на оптимизацию производительности. Множественные вызовы базы данных могут быть проблемой, но вы действительно не будете знать, пока вы не поиграете с ним немного.
Одна вещь, которая поможет в том, что если вы создадите свои классы beans, используя более подробную архитектуру, чем вы думаете, что вам нужно сначала (не пытайтесь сложить все в один класс или боб), не только будет легче адаптировать вашу архитектуру, но вы также начнете видеть дизайн паттерны, которые вы, возможно, даже не знали, были возможностями.
Как упоминает Рассел, нет никакого одного способа сделать это, и у каждого есть свои плюсы/минусы.
Существует класс обернутых документов, который можно использовать для хранения информации о документе.
public static DominoDocument wrap(java.lang.String database, lotus.domino.Database db, java.lang.String parentId, java.lang.String form, java.lang.String computeWithForm, java.lang.String concurrencyMode, boolean allowDeletedDocs, java.lang.String saveLinksAs)
Javadoc здесь:
Однако это просто делает некоторые из обработки recycle() в фоновом режиме. Так что вы все равно собираетесь имейте те же накладные расходы, генерируемые созданием / recycle() объектов базы данных.
Основные накладные расходы, которые вы найдете, - это создание соединения с базой данных в вашем коде Java. Как только эта связь установлена, все остальное происходит относительно быстрее.
Я бы рекомендовал при тестировании этого на производительность использовать инструментарий XPages. Видео о том, как его использовать, являются частью мастер-класса XPages на openNTF.
Http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Masterclass