Я разрабатываю и приложение, которое работает как служба Windows. Существуют и другие компоненты, которые включают несколько служб WCF, клиентский графический интерфейс и т. Д., Но это - служба Windows, которая обращается к базе данных.
Итак, приложение - это долго работающий сервер, и я хотел бы улучшить его производительность и масштабируемость, я стремился улучшить доступ к данным среди прочего. Я написал в другой ветке о кэшировании второго уровня.
Этот пост посвящен управлению сессиями для долго работающего потока, который обращается к базе данных.
Должен ли я использовать поток-статический контекст?
Если да, то есть ли пример того, как это будет реализовано?
Кажется, что каждый в сети, кто использует NHibernate, сильно сосредоточен на архитектурах стиля веб-приложений. Похоже, что существует нехватка документации / обсуждения для не-веб-приложений.
В данный момент моя длинная ветка делает это:
- Вызов 3 или 4 метода DAO
- Проверка состояния возвращенных отсоединенных объектов.
- Обновите состояние, если необходимо.
- Вызовите несколько методов DAO, чтобы сохранить обновленные экземпляры. (передайте идентификатор объекта и самого экземпляра - DAO снова получит объект из БД и установит обновленные значения и session.SaveOrUpdate () перед принятием транзакции.
- Сон 'n' секунд
- Повторите все заново!
Итак, следующая общая схема, которую мы используем для каждого из методов DAO:
- Открыть сессию с помощью sessionFactory.OpenSession ()
- Начать транзакцию
- ДБ работает. получить / обновить и т. д.
- Совершить транс
- (откат в случае исключений)
- Наконец, всегда удаляйте транзакцию и сессию. Close ()
Это происходит для каждого вызова метода класса DAO.
Я подозреваю, что это своего рода анти-паттерн, как мы это делаем.
Однако я нигде не могу найти достаточно указаний относительно того, как мы могли бы его улучшить.
Обратите внимание, что пока этот поток работает в фоновом режиме и выполняет свои функции, поступают запросы от клиентов WCF, каждый из которых может сам выполнять 2-3 вызова DAO, иногда запрашивая / обновляя одни и те же объекты в течение длительного времени нить имеет дело с
Будем весьма благодарны за любые идеи / предложения / указатели по улучшению нашего дизайна.
Если мы сможем провести хорошую дискуссию, мы сможем сделать это вики-сообществом, и, возможно, ссылку здесь с http://nhibernate.info
Кришна