Spring и No session found в потоке (Runnable). scope="prototype" bean

 
 
 
Сообщения:206
Про пересмотр архитектуры - в каком направлении посоветуете почитать доков по это теме? Я со спрингом недавно знаком, многово не понимаю.
и 2 вопрос. Я все таки не понимаю, почему это каждый поток получит свое соединение с базой данных? Ведь класс, в котором получается сессия, и, следовательно, соединение с базой - один единственный на виртуальную машину, он же синглтон. Разве не так?

El Gringo
Изменен:27 мая 2014 20:58
 
 
Сообщения:586
Смотрите, фабрика бинов спринга у вас тоже единая, но это не мешает ей строить прототайп-бины. Вы же уже с этим разобрались. В дао вы инжектируете фабрику сессий, дао у вас одно, фабрика сессий одна, но на каждый поток строится своя сессия!

Чтобы подсказать по архитектуре нужно знать, какую в итоге задачу вы решаете.
 
 
Сообщения:206
samolisov:
Чтобы подсказать по архитектуре нужно знать, какую в итоге задачу вы решаете.

Я снова тут. Задачу в смысле что мне конкретно нужно или что вы имеете ввиду?
Мне надо в runnable классе сохранять данные через DAO.
Навешивать транзакцию на метод public void run() я так понимаю - не лучший вариант.
Можно ли по другому решить проблему, не отказываясь от runnable класса, и не меняя его на Callable - ведь в последнем случае главный поток должен будет ждать возвращения всех Future объектов, а это тоже время.
Мне надо запустить несколько runnable, передать им данные и начать обрабатывать следующую партию.

El Gringo
Изменен:02 июн 2014 21:01
 
 
Сообщения:586
Навешать транзакцию на run можно, если вам не нужна согласованность всех изменений из разных потоков. Но лучше все же выделить отдельный сервис, а к нему уже обращаться из run. Важно! Не стартовать потоки внутри сервиса, а работать с ним в уже запущенных потоках. Если же такая согласованность нужна, то надо выделить согласованные изменения в опять таки отдеЛьный сервис и запускать их все в одном потоке. Идея такая: одна транзакция - один поток.
 
 
Сообщения:206
У меня в потоках происходит сохранение данных в БД, после обработки. Собственно, в данном конкретно случае, никакой согласованности не надо.
Через сервис да, и правда, все работает. Спасибо большое за помощь!

El Gringo
 
 
Сообщения:33
Добрый день

Разбираюсь с такой-же проблемой. Не совсем понятно что значит отдельный сервис? Класс который будет дергать dao в отдельных потоках?
Тогда придется на каждый запрос создавать dao обьект, на сколько я понимаю, в нем создавать hibernate сессию и выполнять транзакцию. По моему не совсем удобно.
Если можно, дайте больше информации по этому вопросу. Заранее спасибо.
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет