|
|
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Мой вопрос наверно покажется глупым) При изучении сервлетов я читал что при обработке запроса doGET скажем, внутри метода надо создавать новый экземпляр DAO например myDAOImpl и работать с ним. Для этого чтобы не было запросов к одному объекту myDAOImpl из разных запросов/потоков. В примерах по Spring MVC обычно делают DI в следующем порядке: HibernateTemplate - DAOImpl - ServiceImpl -> Controller Как я понимаю по умолчанию(как показано в примерах) Spring создает синглетон бинов. Как в это случае не происходит проблем с конкурентным доступом? Ведь тогда во всех запросах будет использовать один и тот же экземпляр ServiceImpl, соответственно один и тот же DAOImpl и HibernateImpl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2012, 21:58 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Отличный вопрос! Ну, для начала попробуем понять, что же такое пул коннектов? Конкурентный доступ эт когда много потоком одновременно меняют состояние одного объекта, тут такого не происходит. Потоки получают данные из одного метода и все. При этом даже сессии у них различны(могут быть) и количество потоков ограничено размером пула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 00:00 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Кароч проще открыть мануал и почитать теорию! И ваще, а почему тебя не интересует вопрос, что сервлет один а метод doGet дергает несколько потоков, аналогичная ведь ситуация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 00:04 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Допустим сервлет. Правильно: doGet () { MyDao dao = new MyDao(); dao.func(); } Неправильно: public class Servlet.... { private Mydao dao = new MyDao(); doGet () { dao.func() } } Для спринга: @Controller class .... { @Autowired Service service (или dao) @RequestMapping post() { service.func(); // service то для всех один будет, так? } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 00:46 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
new MyDao? - Это уже не Спринг. DI как бы для того и есть, чтобы передать контроллеру существующий, уже созданный ДАО. Аналогично и с сессией, и с зависимыми сервисами и контроллерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 02:36 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, посмотри внимательно) часть я написал для простых сервлетов, а часть для спринга. Там нет new(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 02:46 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdm, как я себе представляю на пальцах по вашему примеру: Controller наследник спрингового сервлета отвечает за потоки.приходят поток1 и поток 2 в контролер. контролер обращается к сервису сначала с вопросом на основании поток1, а потом поток 2 или наоборот. т.е. пока сервис занят одним потоком второй ждет. в спринге инжектящийся класс синглтон по дефолту, но если надо он может быть например прототипом (т.е. экземпляр создается на реквест\сессию\..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 08:44 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdmIDVsbruck, посмотри внимательно) часть я написал для простых сервлетов, а часть для спринга. Там нет new(). Сервисы и DAO должны быть stateless. Тогда проблем с многопоточностью не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 08:45 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdm во всех запросах будет использовать один и тот же экземпляр ServiceImpl экземпляр один, а выдает не обязательно одно и тоже, а то, что вы хотите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 08:49 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
LeonidvСервисы должны быть stateless. а если данные статичны? например: Сервис вертает карты справочники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 08:54 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
silvanт.е. пока сервис занят одним потоком второй ждет пример кода есть. что ...он ждёт...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 09:24 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Petro123, нет.предположение.вдруг какие статичные методы вызываем. коды у автора топика спросите) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 09:32 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
silvan, ну да. Надо аффтару привести более конкретный код с ПРОБЛЕМОЙ. imho в вопросе намешаны несколько вопросов. Потокобезопасные объекты\сингелетоны\DAO\Хибер. Каждый элемент можно написать потокоустойчивым и нет. Безотносительно DI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 09:57 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Афтор жжот! Пожалуйста почитай мануал? Ты сам не понимаешь, что пишешь. rdmПравильно: doGet () { Этот метод у кого? У сервлета. Сервлет то тоже синглтон! Подумай, почему работает то? Начни с азов, рановато тебе еще сервлеты и хибернеты всякие. Сервис один, а метод для каждого возвращает разные значения! НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ПОЧИТАТЬ МАНУАЛ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 10:59 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
silvanLeonidvСервисы должны быть stateless. например: Сервис вертает карты справочники. Раскройте пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 11:31 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Вот пример (с хабра) ссылка @Repository public class ContactDAOImpl implements ContactDAO { @Autowired private HibernateTemplate hibernateTemplate; public void addContact(Contact contact) { hibernateTemplate.save(contact); } } @Service public class ContactServiceImpl implements ContactService { @Autowired private ContactDAO contactDAO; @Transactional public void addContact(Contact contact) { contactDAO.addContact(contact); } } public class ContactController { @Autowired private ContactService contactService; @RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; } } Меня даже собственно не волнует вопрос почему это правильно, если это правильно и проблем с конкурентным доступом нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 11:46 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Другими словами, такую структуру можно использовать только как пример или она правильная? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 12:04 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Leonidv, а как обеспечить stateless? Спринг сам за этим следит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 12:05 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdmLeonidv, а как обеспечить stateless? Спринг сам за этим следит? Девелопер сам за этим следит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 12:11 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Bean factorу поддерживает два вида объектов: Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов. Правильно? Я примерно такого ответа ждал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 12:20 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdmBlazkowicz, Bean factorу поддерживает два вида объектов: Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов. Правильно? Я примерно такого ответа ждал) Лучше помнить, что scope больше, чем два http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes А так правильно. Делаем stateless (т.е. разным потокам просто нечего совместно использовать) или же делаем синхронизацию там, где это нужно (первый вариант сильно лучше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:18 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
rdmBean factorу поддерживает два вида объектов: Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов. Правильно? Я примерно такого ответа ждал) Spring Singleton, в отличие от Stateless Session Bean, не заводит никаких пулов, чтобы гарантировать отсутствие состояние между сессиями. А какой "второй" ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:22 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
И, да scope это не совсем "вид объекта". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:23 |
|
||
|
Spring IoC, DAO и синглтон
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я нагуглил статью 2004 года. Второй там был прототип. вот . Собственно не понял как синглтон без состояния может безопасно использоваться разными потоками, ну да ладно) главное работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 13:26 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=37733810&tid=2127751]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 441ms |

| 0 / 0 |
