Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring IoC, DAO и синглтон / 25 сообщений из 46, страница 1 из 2
01.04.2012, 21:58
    #37733810
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Мой вопрос наверно покажется глупым)
При изучении сервлетов я читал что при обработке запроса doGET скажем, внутри метода надо создавать новый экземпляр DAO например myDAOImpl и работать с ним. Для этого чтобы не было запросов к одному объекту myDAOImpl из разных запросов/потоков.
В примерах по Spring MVC обычно делают DI в следующем порядке: HibernateTemplate - DAOImpl - ServiceImpl -> Controller
Как я понимаю по умолчанию(как показано в примерах) Spring создает синглетон бинов. Как в это случае не происходит проблем с конкурентным доступом? Ведь тогда во всех запросах будет использовать один и тот же экземпляр ServiceImpl, соответственно один и тот же DAOImpl и HibernateImpl.
...
Рейтинг: 0 / 0
02.04.2012, 00:00
    #37733965
Шмяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Отличный вопрос! Ну, для начала попробуем понять, что же такое пул коннектов? Конкурентный доступ эт когда много потоком одновременно меняют состояние одного объекта, тут такого не происходит. Потоки получают данные из одного метода и все. При этом даже сессии у них различны(могут быть) и количество потоков ограничено размером пула.
...
Рейтинг: 0 / 0
02.04.2012, 00:04
    #37733968
Шмяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Кароч проще открыть мануал и почитать теорию! И ваще, а почему тебя не интересует вопрос, что сервлет один а метод doGet дергает несколько потоков, аналогичная ведь ситуация?
...
Рейтинг: 0 / 0
02.04.2012, 00:46
    #37733992
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Допустим сервлет.

Правильно:

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 то для всех один будет, так?

}

}
...
Рейтинг: 0 / 0
02.04.2012, 02:36
    #37734030
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
new MyDao? - Это уже не Спринг. DI как бы для того и есть, чтобы передать контроллеру существующий, уже созданный ДАО. Аналогично и с сессией, и с зависимыми сервисами и контроллерами.
...
Рейтинг: 0 / 0
02.04.2012, 02:46
    #37734032
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
IDVsbruck, посмотри внимательно) часть я написал для простых сервлетов, а часть для спринга. Там нет new().
...
Рейтинг: 0 / 0
02.04.2012, 08:44
    #37734096
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdm, как я себе представляю на пальцах по вашему примеру:
Controller наследник спрингового сервлета отвечает за потоки.приходят поток1 и поток 2 в контролер. контролер обращается к сервису сначала с вопросом на основании поток1, а потом поток 2 или наоборот. т.е. пока сервис занят одним потоком второй ждет. в спринге инжектящийся класс синглтон по дефолту, но если надо он может быть например прототипом (т.е. экземпляр создается на реквест\сессию\..)
...
Рейтинг: 0 / 0
02.04.2012, 08:45
    #37734097
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdmIDVsbruck, посмотри внимательно) часть я написал для простых сервлетов, а часть для спринга. Там нет new().
Сервисы и DAO должны быть stateless. Тогда проблем с многопоточностью не будет.
...
Рейтинг: 0 / 0
02.04.2012, 08:49
    #37734099
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdm во всех запросах будет использовать один и тот же экземпляр ServiceImpl
экземпляр один, а выдает не обязательно одно и тоже, а то, что вы хотите
...
Рейтинг: 0 / 0
02.04.2012, 08:54
    #37734105
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
LeonidvСервисы должны быть stateless.
а если данные статичны? например: Сервис вертает карты справочники.
...
Рейтинг: 0 / 0
02.04.2012, 09:24
    #37734131
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
silvanт.е. пока сервис занят одним потоком второй ждет
пример кода есть. что ...он ждёт...?
...
Рейтинг: 0 / 0
02.04.2012, 09:32
    #37734140
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Petro123, нет.предположение.вдруг какие статичные методы вызываем. коды у автора топика спросите)
...
Рейтинг: 0 / 0
02.04.2012, 09:57
    #37734175
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
silvan,
ну да. Надо аффтару привести более конкретный код с ПРОБЛЕМОЙ.
imho
в вопросе намешаны несколько вопросов. Потокобезопасные объекты\сингелетоны\DAO\Хибер.
Каждый элемент можно написать потокоустойчивым и нет. Безотносительно DI.
...
Рейтинг: 0 / 0
02.04.2012, 10:59
    #37734262
Шмяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Афтор жжот! Пожалуйста почитай мануал? Ты сам не понимаешь, что пишешь.
rdmПравильно:

doGet () {


Этот метод у кого? У сервлета. Сервлет то тоже синглтон! Подумай, почему работает то?
Начни с азов, рановато тебе еще сервлеты и хибернеты всякие.
Сервис один, а метод для каждого возвращает разные значения!
НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ПОЧИТАТЬ МАНУАЛ!
...
Рейтинг: 0 / 0
02.04.2012, 11:31
    #37734316
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
silvanLeonidvСервисы должны быть stateless.
например: Сервис вертает карты справочники.
Раскройте пример.
...
Рейтинг: 0 / 0
02.04.2012, 11:46
    #37734349
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Вот пример (с хабра) ссылка

@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";
}


}


Меня даже собственно не волнует вопрос почему это правильно, если это правильно и проблем с конкурентным доступом нет.
...
Рейтинг: 0 / 0
02.04.2012, 12:04
    #37734385
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Другими словами, такую структуру можно использовать только как пример или она правильная? )
...
Рейтинг: 0 / 0
02.04.2012, 12:05
    #37734386
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Leonidv, а как обеспечить stateless? Спринг сам за этим следит?
...
Рейтинг: 0 / 0
02.04.2012, 12:11
    #37734396
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdmLeonidv, а как обеспечить stateless? Спринг сам за этим следит?
Девелопер сам за этим следит.
...
Рейтинг: 0 / 0
02.04.2012, 12:20
    #37734407
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Blazkowicz,

Bean factorу поддерживает два вида объектов:

Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов.

Правильно? Я примерно такого ответа ждал)
...
Рейтинг: 0 / 0
02.04.2012, 13:18
    #37734543
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdmBlazkowicz,

Bean factorу поддерживает два вида объектов:

Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов.

Правильно? Я примерно такого ответа ждал)
Лучше помнить, что scope больше, чем два
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes

А так правильно. Делаем stateless (т.е. разным потокам просто нечего совместно использовать) или же делаем синхронизацию там, где это нужно (первый вариант сильно лучше).
...
Рейтинг: 0 / 0
02.04.2012, 13:22
    #37734550
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
rdmBean factorу поддерживает два вида объектов:
Синглтон: в данном случае создается один разделяемый экземпляр объекта с определенным именем, которое будет возвращено при поиске. Это применяемый по умолчанию и наиболее часто используемый режим, идеальный для сервисных stateless-объектов.
Правильно? Я примерно такого ответа ждал)
Spring Singleton, в отличие от Stateless Session Bean, не заводит никаких пулов, чтобы гарантировать отсутствие состояние между сессиями.

А какой "второй" ? :)
...
Рейтинг: 0 / 0
02.04.2012, 13:23
    #37734552
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
И, да scope это не совсем "вид объекта".
...
Рейтинг: 0 / 0
02.04.2012, 13:26
    #37734560
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Blazkowicz, я нагуглил статью 2004 года. Второй там был прототип. вот .
Собственно не понял как синглтон без состояния может безопасно использоваться разными потоками, ну да ладно) главное работает)
...
Рейтинг: 0 / 0
02.04.2012, 13:28
    #37734566
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring IoC, DAO и синглтон
Leonidv, спасибо!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring IoC, DAO и синглтон / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]