powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Два маленьких вопроса про Spring
21 сообщений из 21, страница 1 из 1
Два маленьких вопроса про Spring
    #37734374
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)На методы какого уровня(DAO/Service/Facade/Controller обычно/правильно/принято ставить аннотации @Transactional ?

2)Какой способ борьбы с LazyInitializationException для Web вы используете?
-OpenSessionInViewFilter
-HibernateInterceptor
-Value Bean
-Hibernate.initialize
-HQL(FETCH)
что нибудь еще?
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734393
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm1)На методы какого уровня(DAO/Service/Facade/Controller обычно/правильно/принято ставить аннотации @Transactional ?
На Service. Потому что в большинстве случаев Service это реализация паттерна Transaction Script - посмотрите у Фаулера.
Контроллер не должен использовать несколько методов разных сервисов, потому что это уже бизнес-логика будет.
В фасаде тоже не всгеда есть смысл. Будет ситуация что в одном фасаде одни траназакции, а в другом уже другие? Зачем?
В DAO можно для подстраховки. Чтобы, например, выкидывался Exception, если нет транзакционного контекста. Но такой прощще сделать в Spring XML на все DAO методы сразу, чем писать в каждом аннотацию.

rdm2)Какой способ борьбы с LazyInitializationException для Web вы используете?
-OpenSessionInViewFilter

Гуглить "Open Session In View Antipattern" - много подробных статей с описанием проблем этого подхода.

rdm -HibernateInterceptor
-Value Bean

Не очень понял что за подходы.

rdm -Hibernate.initialize
-HQL(FETCH)

Вот эти два - однозначно. Есть интересные альтернативы например http://noon.gilead.free.fr/gilead/index.php?page=tutorial
Но они не во всех случаях подходят. Конкретно этот под GWT заточен. Но можно подсмотреть идею и написать реализацию для своего сервера.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734413
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
-HibernateInterceptor
тут есть пример, у меня честно говоря он не заработал, может вы подскажете почему?

<bean id="hibernateInterceptor"

class="org.springframework.orm.hibernate3.HibernateInterceptor">

<property name="sessionFactory">

<ref bean="sessionFactory"/>

</property>

</bean>



<bean id="businessObjectTarget" class="org.beq.BusinessObjectImpl">

<property name="someDAO">

<ref bean="someDAO" />

</property>

</bean>



<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="target">

<ref bean="businessObjectTarget" />

</property>

<property name="proxyInterfaces">

<value>org.beq.IBusinessObject</value>

</property>

<property name="interceptorNames">

<list>

<value>hibernateInterceptor</value>

</list>

</property>

</bean>

Ошибки нет, а в логах пишет следующее:
Not refreshing target: Bean name not specified in 'interceptorNames'.

-Value Bean
это аналог DTO, т.е. заполняем аналогичные поля вызывает просто get()
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734417
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, в если в методе контроллера надо вызвать методы двух разных сервисов или 3-5? Как обойтись без фасада?
Как я понял из ваших слов, тогда получается бизнес логика в контроллере?
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734456
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm-HibernateInterceptor
тут есть пример, у меня честно говоря он не заработал, может вы подскажете почему?

Ну, это как бы и есть дефолтное поведение. На всех сервисах где есть транзакционный контекст биндится туда же и Session. Что такого особого в этом HibernateInterceptor? Это вроде и есть самый обычный подход.

rdm Ошибки нет, а в логах пишет следующее:
Not refreshing target: Bean name not specified in 'interceptorNames'.

Интерцептор нужно привязывать ко всем сервисам. interceptorNames - имена всех бинов, для которых Interceptor будет вызыватся.

rdm -Value Bean
это аналог DTO, т.е. заполняем аналогичные поля вызывает просто get()
Тут просто масса минусов. Если DTO максимально повтрояет сущности. То нужно поддерживать обе модели. Два набора схожих классов.
Точно так же никуда не девается проблема N+1, как и в Open Session In View. Т.е. вероятность схлопотать N+1 всегда есть, если девелопер не планирует правильный Fetch в каждом месте.
Могут быть другие нюансы в зависимости от приложения. Например удаление работает через Persistent коллекции.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734462
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmBlazkowicz, в если в методе контроллера надо вызвать методы двух разных сервисов или 3-5? Как обойтись без фасада?
Как я понял из ваших слов, тогда получается бизнес логика в контроллере?
Не понял при чем тут фасад?
Контроллер это то что обрабатывает ввод пользователя и формирует view. Логику он делегирует сервису.
Фасад это вообще подмножество методов доступных из разных сервисов. Если фасад начинает сам в одном своём методе вызывать разные методы сервисов, это снова бизнес логика не на месте.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734473
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm2)Какой способ борьбы с LazyInitializationException для Web вы используете?
что нибудь еще?
- все способы индивидуальны под проект
- не забывать самому коммитить когда надо, закрывать сессию когда она не нужна.
Автоуборщиков и сборщиков тут нету.
ЗЫ.
В архитектуре почти нет антипаттернов, т.к. зависит от проекта
А вот в семантике кода - полно, т.к. задача кода обычно локальна и описывается одной функцией (атомарна)
http://govnokod.ru/
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734555
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm2) -HQL(FETCH)
Я за этот.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734556
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В архитектуре почти нет антипаттернов, т.к. зависит от проекта
Есть. Почитай Тейта "Горький вкус Java".
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734565
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm1)На методы какого уровня(DAO/Service/Facade/Controller обычно/правильно/принято ставить аннотации @Transactional ?

Вот тут очень грамотно описаны всевозможные стратегии по транзакциям http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=transaction+strategies:
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734569
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, читал из серии 2 статьи, которые на русском)
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734581
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmзабыл ник, читал из серии 2 статьи, которые на русском)
На английском лучше) Еще можно и его книгу прочитать) А раз читали, то почему у вас вопросы возникают? Там весьма и весьма грамотно описано где, как и почему надо использовать @Transactional
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734587
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, как сделать чтобы несколько ModelAttribute методов выполнялись в одной транзакции? Вот пример из документации:
// Add one attribute
// The return value of the method is added to the model under the name "account"
// You can customize the name via @ModelAttribute("myAccount")

@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountManager.findAccount(number);
}

// Add multiple attributes

@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountManager.findAccount(number));
// add more ...
}
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734590
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, я не запоминаю, так сказать lazy память.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734597
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪКстати, как сделать чтобы несколько ModelAttribute методов выполнялись в одной транзакции? Вот пример из документации:

Нет такого понятия "ModelAttribute-метод" и к транзакциям эта аннотация вообще не относится. Это просто пометку спрингу положить результат работы метода в model. Как их запустить в одной транзакции это отдельный вопрос.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734607
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет такого понятия "ModelAttribute-метод"

Под "ModelAttribute-метод" я имел в виду метод с аннотацией @ModelAttribute.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734613
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как их запустить в одной транзакции это отдельный вопрос.

По-видимому, никак. Для сложных контроллеров получение соединения из пула и создание хибернейт сессии будет происходить десятки раз.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734631
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪПо-видимому, никак. Для сложных контроллеров получение соединения из пула и создание хибернейт сессии будет происходить десятки раз.
Что такое "сложный" контроллер? Это тот в котором реализована логика в нарушение SRP. Контроллер не должен контролировать транзации. Он должен контроллировать ввод и сборку модели.
В том примере это вообще 2 разных методы самого контроллера. Два примера сделать одно и то же разными способами. Они вообще в одной транзакции никогда не работают
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734654
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvPetro123В архитектуре почти нет антипаттернов, т.к. зависит от проекта
Есть. Почитай Тейта "Горький вкус Java".
ты пиши проще. Типа: "-1" или "я против".
Иначе ждём антипаттерн с той книги.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734759
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Иначе ждём антипаттерн с той книги.
Любой, кто хочет познакомится с антипаттернами из этой книги, может сделать это прочитав ее. Книга хорошая, хотя может и малость устаревшая.
...
Рейтинг: 0 / 0
Два маленьких вопроса про Spring
    #37734795
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Два маленьких вопроса про Spring
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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