Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / HibernateUtil.currentSession() уже не модно? / 20 сообщений из 20, страница 1 из 1
30.10.2007, 07:36:19
    #34903444
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Услышал такие мнения в одном из топиков, где мусолили EJB vs Spring.

Интересует целесообразность использования модели: SessionFactory injected in DAO.

Ведь, в случае, если понадобится получить доступ к базе из, например, POJO класса, получится облом.

В случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Entity
@Table(name = "cats")
 Class  Cat
{
        @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	 public  Integer getId() {
		 return   this .id;
	}

	 public   void  setId(Integer id) {
		 this .id = id;
	}
          
         public  List getKittensMaxPrice()
           {
               HibernateUtil.currentSession()....
           }
        
}


Рассмотрим Spring HibernateTemplate, что он делает:

1. Открывает Hibernate session
2. Что-то делает
3. Закрывает Hibernate session

Далее(в моем случае) результат передается на View layer (jsp).

Ежели в JSP нужно подгрузить коллекцию lazy-методом или many-to-one, будет облом, т.к. сессия уже закрыта.

Вобщем пока не нахожу для себя перичин не использовать подход HibernateUtil.currentSession().

Что скажете?
...
Рейтинг: 0 / 0
30.10.2007, 09:00:37
    #34903518
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey TurnВобщем пока не нахожу для себя перичин не использовать подход HibernateUtil.currentSession().

Что скажете? Если не находишь то скорее всего их нет :)

Alexey Turn
Ежели в JSP нужно подгрузить коллекцию lazy-методом или many-to-one, будет облом, т.к. сессия уже закрыта. А для этого есть "Open Session in View", в спринге через фильтр или интерцепрор (OpenSessionInViewFilte, OpenSessionInViewInterceptor).
...
Рейтинг: 0 / 0
30.10.2007, 09:10:43
    #34903544
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey TurnВ случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: А вообще странный подход пихать код доступа к БД в "любое место".
...
Рейтинг: 0 / 0
30.10.2007, 09:58:41
    #34903642
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
vas0 Alexey TurnВ случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места: А вообще странный подход пихать код доступа к БД в "любое место".

А чем плох такой подход?

Есть два подхода:

1. Когда все должно лежать в своем слое.
2. Когда все скрыто внутри объектов.
3. Смешанный подход.

На мой взгляд, смешанный подход гибче.

Т.е. если Вы делайте запрос к бд всего один раз, то, возможно не стоит заморачиваться вшиванием его в DAO объект...

Если вы делаете этот же запрос в другом месте, то, пожалуй стоит задуматься, будет ли ситуация, в которой нужно будет его третье использование.

И только в случае утвердительного ответа, имхо, стоит пихать код доступа к БД в DAO, а DAO, в свою очередь вшивать в нужный слой (Юзаю Spring).

Иначе все эти телодвижения не окупаются.

2. Вытянули вы из сессии POJO объект Client, допустим. Желаем пофетчить друзей клиента, которые входят в партию "Любителей пива".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Client {

   Integer id;
   List fetchFriendsWhoIsBeerParty(Object otherParameter)
    {
        HibernateUtil.currentSession() ...
    }
} 

У нас уже есть информация о клиенте - его Id. Вызов выглядит более естественным.

В случае сервиса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ClientService {
 
   private  ClientDAO clientDAO;  

   private  OtherDAO .....

  List fetchFriendsWhoIsBeerParty(Client client, Object otherParameter)
   { 
             clientDAO......
   }

}

Выглядит менее естественно, но более упорядочено из-за структуры пирога.
...
Рейтинг: 0 / 0
30.10.2007, 12:38:40
    #34904272
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
1. в entity передаются репозитории (через интерфейсы), этим обеспечивается независимость от хибера (lightweight) см. POJO in Action
2. "Open Session in View" имхо слабый паттерн
3. при использовании HibUtil теряете лёгкие юнит тесты, переконфигурацию на разные SF. как правило в HiberUtil написан ужос.
4. не стоит забывать отличия DAO и Repository
5. JTA транзакции рулят
6. fetching it's a facade's concern
...
Рейтинг: 0 / 0
30.10.2007, 12:47:38
    #34904324
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Все варианты работы имеют право на существование, многое здесь зависит от контекста. И говорить что есть единственно правильный вариант работы будет глупо. Но возможность встретить в любом pojo вот такой код, меня пугает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   class  Bean {

     public   void  method1() {
        ...
    }

     public   void  method2() {
        Session session = HibernateUtil.currentSession();
        // и тут понеслась работа с БД
    }
}

По теории приятней видеть что то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
 public   interface  DataAccessObject<T> {

     void  save(T object);

     void  update(T object);

     void  delete(T object);

    List<T> findAll();

    T find(Serializable id);
}

/* Базовая абстрактная реализация */
 abstract   class  AbstractDao<T>  extends  HibernateDaoSupport  implements  DataAccessObject<T> {

     private  T clazz;

     public   void  save(T object) {
        getHibernateTemplate().saveOrUpdate(object);
    }

     public   void  update(T object) {
        getHibernateTemplate().saveOrUpdate(object);
    }

     public   void  delete(T object) {
        getHibernateTemplate().delete(object);
    }

     public  List<T> findAll() {
         return  getHibernateTemplate().loadAll(clazz.getClass());
    }

     public  T find(Serializable id) {
         return  (T) getHibernateTemplate().load(clazz.getClass(), id);
    }
}

/* Пошли конкретные реализации*/
 public   class  PersonDao  extends  AbstractDao<Person>{
}

 public   class  CountryDao  extends  AbstractDao<Country>{
}

...
Рейтинг: 0 / 0
30.10.2007, 13:23:48
    #34904508
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey TurnУслышал такие мнения в одном из топиков, где мусолили EJB vs Spring.
В случае же ThreadLocal session (HibernateUtil.currentSession() ), можно вызывать код доступа к БД из любого места:
Что скажете?
У вас правильный вопрос, но совершенно не логичные обоснования. Есть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. Вот у них вам стоит поучится, у них более разумные обоснования по поводу чем использование HibernateTemplate хуже. Если сами не найдете - могу подкинуть ссылок.
...
Рейтинг: 0 / 0
30.10.2007, 14:17:34
    #34904733
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
BlazkowiczЕсть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. ... у них более разумные обоснования по поводу чем использование HibernateTemplate хуже..... сцылца?
...
Рейтинг: 0 / 0
30.10.2007, 14:21:54
    #34904756
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
expp
1. в entity передаются репозитории (через интерфейсы), этим обеспечивается независимость от хибера (lightweight) см. POJO in Action
2. "Open Session in View" имхо слабый паттерн
3. при использовании HibUtil теряете лёгкие юнит тесты, переконфигурацию на разные SF. как правило в HiberUtil написан ужос.
4. не стоит забывать отличия DAO и Repository
5. JTA транзакции рулят
6. fetching it's a facade's concern

1. Скачал POJO in Action, надеюсь в нем есть определения словам: репозитории через интерфейсы.
2. Чем слабый?
3. Хмм.. мне казалось, что HibernateUtil как раз таки дает использовать легкие юнит-тесты без поднятия части контейнера Spring.

Для переконфигурации на разные SF можно еще написать сколько нужно HibernateUtil-ов, на каждую SF.

Ну ужос. Но не ужос ужос ужос (c) Что вы имеете под словом ужос? Это ужос?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
/*
 * Created on Mar 9, 2007
 * 
 * TODO To change the template for this generated file go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
 package  rating.utils;

 import  java.util.Properties;

 import  org.hibernate.*;
 import  org.hibernate.cfg.*;
 import  org.apache.commons.logging.*;

 import  rating.pojo.Coefficient;
 import  rating.pojo.Vote;
 import  rating.pojo.VoteTarget;
 import  rating.pojo.Voting;

 public   class  HibernateUtil {
	 private   static  Log log = LogFactory.getLog(HibernateUtil. class );

	 private   static   final  SessionFactory sessionFactory;

	 public   static   final  ThreadLocal transaction =  new  ThreadLocal();

	 static  {
		 try  {

			Configuration cfg =  new  Configuration();
			sessionFactory = cfg.buildSessionFactory();

		}  catch  (Throwable ex) {

			log.error("Initial SessionFactory creation failed.", ex);
			 throw   new  ExceptionInInitializerError(ex);
		}
	}

	 public   static   final  ThreadLocal session =  new  ThreadLocal();

	 public   static  Session currentSession() {
		Session s = (Session) session.get();
		// Open a new Session, if this Thread has none yet
		 if  (s ==  null ) {
			s = sessionFactory.openSession();
			session.set(s);
		}
		 return  s;
	}

	 public   static   void  closeSession() {
		Session s = (Session) session.get();
		 if  (s !=  null )
			s.close();
		session.set( null );
	}

	/**
	 * Begin Hibernate transaction
	 */
	 public   static   void  beginTransaction() {
		Transaction tx = (Transaction) transaction.get();
		 try  {
			 if  (tx ==  null ) {
				tx = currentSession().beginTransaction();
				transaction.set(tx);
			}
		}  catch  (HibernateException e) {

			log.error("Begin transaction error: " + e.getMessage());
		}
	}

	/**
	 * Commit Hibernate transaction
	 */
	 public   static   void  commitTransaction() {
		Transaction tx = (Transaction) transaction.get();
		 try  {
			 if  (tx !=  null  && !tx.wasCommitted() && !tx.wasRolledBack()) {
				tx.commit();
			}
			transaction.set( null );
		}  catch  (HibernateException e) {
			rollbackTransaction();
			log.error("Commit transaction error: " + e.getMessage());
		}
	}

	/**
	 * Rollback Hibernate transaction
	 */
	 public   static   void  rollbackTransaction() {
		Transaction tx = (Transaction) transaction.get();
		 try  {
			transaction.set( null );
			 if  (tx !=  null  && !tx.wasCommitted() && !tx.wasRolledBack()) {
				tx.rollback();
			}
		}  catch  (HibernateException e) {
			log.error("Rollback transaction error: " + e.getMessage());
		}  finally  {
			closeSession();
		}
	}

	 public   static   void  evictQueries(String cacheRegion) {
		sessionFactory.evictQueries(cacheRegion);
	}

	 public   static   void  evictQueries() {
		sessionFactory.evictQueries();
	}

}

4. Про Repository почитаю. Жаль, не знаю что это такое...

5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от

Код: plaintext
1.
2.
HibernateUtil.beginTransaction();
//do something
HibernateUtil.commitTransaction();

6. Сообщил модератору.
...
Рейтинг: 0 / 0
30.10.2007, 14:30:48
    #34904779
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
vas0Все варианты работы имеют право на существование, многое здесь зависит от контекста. И говорить что есть единственно правильный вариант работы будет глупо. Но возможность встретить в любом pojo вот такой код, меня пугает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   class  Bean {

     public   void  method1() {
        ...
    }

     public   void  method2() {
        Session session = HibernateUtil.currentSession();
        // и тут понеслась работа с БД
    }
}

По теории приятней видеть что то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
 public   interface  DataAccessObject<T> {

     void  save(T object);

     void  update(T object);

     void  delete(T object);

    List<T> findAll();

    T find(Serializable id);
}

/* Базовая абстрактная реализация */
 abstract   class  AbstractDao<T>  extends  HibernateDaoSupport  implements  DataAccessObject<T> {

     private  T clazz;

     public   void  save(T object) {
        getHibernateTemplate().saveOrUpdate(object);
    }

     public   void  update(T object) {
        getHibernateTemplate().saveOrUpdate(object);
    }

     public   void  delete(T object) {
        getHibernateTemplate().delete(object);
    }

     public  List<T> findAll() {
         return  getHibernateTemplate().loadAll(clazz.getClass());
    }

     public  T find(Serializable id) {
         return  (T) getHibernateTemplate().load(clazz.getClass(), id);
    }
}

/* Пошли конкретные реализации*/
 public   class  PersonDao  extends  AbstractDao<Person>{
}

 public   class  CountryDao  extends  AbstractDao<Country>{
}



В теории может и хорошо.

На практике:

Что делать, когда нужно одновременно вытащить из базы данные, относящиеся не только к Person, но и цвет шерсти его любимой собаки Dog

Как сие действие укладывается в такую теорию?

С Open Session in View вроде разобрались, но его ругают выше слабым.
...
Рейтинг: 0 / 0
30.10.2007, 15:15:04
    #34904928
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey TurnЧто делать, когда нужно одновременно вытащить из базы данные, относящиеся не только к Person, но и цвет шерсти его любимой собаки Dog

Как сие действие укладывается в такую теорию?
"Вот это - вопрос! Вы же меня наповал убиваете этим вопросом!" (с) Груздев

А плохо вписывается в эту теорию и здесь начинают изращаться, кто на что горазд.

Вариант 1.
Замапить так, чтобы сразу нужные объекты поднимать, либо вариации на тему Open Session In View.

Вариант 2. Добавление специального метода в PersonDao
Код: plaintext
1.
2.
3.
4.
 public   class  PersonDao  extends  AbstractDao {

    List<Person> findWithDogs();

}

Вариант 3. Добавление специального метода в DogDao
Код: plaintext
1.
2.
3.
4.
 public   class  DogDao  extends  AbstractDao {

    List<Dog> find(Person person);

}
...
Рейтинг: 0 / 0
30.10.2007, 15:37:48
    #34905006
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
expp BlazkowiczЕсть такие люди - авторы Hibernate, так вот они полностью отрицают целесообразность использования Spring HibernateTemplate. И при каждом удобном случае пытаются пнуть Spring. ... у них более разумные обоснования по поводу чем использование HibernateTemplate хуже..... сцылца?
Отсюда , но как я вижу часть содержимого по ссылокам про всякие терки Hibernate vs Spring уже потерли.
...
Рейтинг: 0 / 0
30.10.2007, 15:45:28
    #34905037
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey Turn4. Про Repository почитаю. Жаль, не знаю что это такое...
Анти-паттерн такой

Alexey Turn5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от
Тут сразу 2 скрытых вопроса.
1) Чем JTA лучше транзакций БД
Достаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД.

2) Чем декларативное управление транзакциями лучше явного.
Так это же тоже просто.
- Уменьшение и упрощение кода заменой явных вызовов на декларативность.
- Возможность оборачивать в транзакции любые бизнес-методы, запросы к слою бизнес-уровня не делая сам бизнес слой зависимым от БД.
...
Рейтинг: 0 / 0
30.10.2007, 15:57:44
    #34905085
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey Turn
2. Чем слабый?

когда вам нужно закончить транзакцию и взависимости от оспеха или отката отрендерить нужный view.
Alexey Turn
3. ...переконфигурации на разные SF можно еще написать сколько нужно HibernateUtil-ов, на каждую SF.
имхо для этого и xml конфиг и нужен, чтоб не"писать сколько нужно HibernateUtil-ов, на каждую"
Код: plaintext
1.
HibernateUtil
Hibernate3 предоставляет отличную реализацию currentSession(). используйте хотя бы её.
она может привязываться jta. Создание SF imho удобнее через spring конфигурацию

Alexey Turn5. Чем JTA рулящие транзакции отличаются(лучше,рульнее) от
даж не знаю. принято использльзовать. недостатков не замеченно
Alexey Turn6. Сообщил модератору. футко? или перевести
...
Рейтинг: 0 / 0
30.10.2007, 16:24:04
    #34905190
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Blazkowicz
Отсюда , но нерелевантно
...
Рейтинг: 0 / 0
30.10.2007, 19:05:24
    #34905733
Alexey Turn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
1. Расскажите пожалуйста про JTA.

авторДостаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД.


Ссылочку на спеку, если не сложно?

Очень, очень интересно, как это - вкладывать в транзакцию не только работу с БД (Не реализовывая откат самому).

class CatSaver{

void save(Cat cat)
{
ImageResizer.resize(cat.getPhotoGrivo(),"C://cat.jpg");
ImageResizer.resize(cat.getPhotoHvost(),"C://cat.jpg");
HibernateUtil.currentSession().save(cat);
}

}

Метод CatSaver.save() совершает два действия:

1. Записывает фотки кота на диск.
2. Сохраняет кота в базе.

Предположим база добра не дает. Как JTA откатит изменения? Что-то нереальное...

Я бы поместил Все это добро в блок try и catch и в случае Exception написал бы код отката. Правильно?

Относительно распределенных вобще хрен поймешь...

2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении?

3. Ежели из базы приложение тянет результаты хранимой процедуры и схожие с ними(например SelectTableOfClientsWhoPaydZaGazAndOrganizationsWhoNoPaydZaSvetAndDolgnikoff), какой шаблон проектирования лучше пользовать?

4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны?

5. Читал про репозиторий

Вот пример со Spring. Правильно ли я воспроизвел его в этом примере?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 class  Cat
{
   
    public  Repository getRepository { return   null ;}

    public  List load....() 
     {
           this .getRepository ().load( this ....);
     }

}
<bean id="cat"  class ="Cat">
<lookup-method name="getRepository "
			bean="catRepository " />
</bean>

6. Чем плохо зависимость бизнес слоя от БД? (Кслову, думаю, что Ораклисты скажут противоположеное...). Напротив, БД следит за целостностью данных и ругнется, ежели чего вы с бизнес слоем напутаете.

7. Модератор так и не принял меры на: fetching it's a facade's concern =) переведите плз.
...
Рейтинг: 0 / 0
31.10.2007, 12:58:34
    #34907321
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey Turn1. Расскажите пожалуйста про JTA.
Ссылочку на спеку, если не сложно?

Гугл подаст.

Alexey Turn2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении?
Это все дурацкие мифы. Тормоза приложений практически никогда не связаны с reflection или использованием разнообразных проксей. Основные причины тормозов - это взаимные блокировки, лишние циклы обращений к медленным внешним сервисам(таким как база) и использование не продуманных решений, которые на одну бизнес операцию требуют серьезных затрат CPU (например парсинг XML запросов).

Alexey Turn4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны?
"Дальше" в каком плане? В километрах сети?

Alexey Turn6. Чем плохо зависимость бизнес слоя от БД? (Кслову, думаю, что Ораклисты скажут противоположеное...).
Например, сложностью юнит тестирования. Хотя это все субъективно.
...
Рейтинг: 0 / 0
31.10.2007, 15:20:16
    #34907933
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Alexey Turn1. Расскажите пожалуйста про JTA. да я как бы не эксперт. проще самому почитать.

авторДостаточно спеку почитать, чтобы разобратся. Взять хотя бы propagation, распределенные транзакции и возможность вкладывать в транзакцию не только работу с БД.

jta wiki ejb-tx
автор
Очень, очень интересно, как это - вкладывать в транзакцию не только работу с БД (Не реализовывая откат самому).... в JTA(S) никакой магии не. если ресурсный менеджер реализует JTS то координатор может им управлять и делать откат .. и т.д.
автор
Относительно распределенных вобще хрен поймешь... несколько баз (ресурсных менеджеров) как правило кроме баз дёргают: JMS, TreeCache, BerkleyDB
автор
2. Декларативные транзакции - красиво. В Spring они реализованы через RTTI, и есть подозрения, что будут тормозить все эти перехваты. Как в реальном приложении? я не уверен про РТТИ, но и spiring и ejb (касательно транзакций) это тош самое - aop. на скорость никто не жаловался. (кроме build-time ejb гы ыгы г)

авторнапример SelectTableOfClientsWhoPaydZaGazAndOrganizationsWhoNoPaydZaSvetAndDolgnikoff), какой шаблон проектирования лучше пользовать? выглядит как обычный репозиторный метод. как правило SP плохо сочетаются DDD
автор
4. Чем дальше бизнес-логика от базы данных тем тормазнутее приложение. Согласны? несущественно: трёхзвенко с дддой рулят. имхо споки и триггеры старшнее

автор
Вот пример со Spring. Правильно ли я воспроизвел его в этом примере?
ну похоже вроде но:
" this.getRepository ().load(this....);" оооочень странно. обычно бывает: add/remove/findXXX
вызов репозитория из сущности используется сравнительно редко.
иметь ссылцу на репозиторий из сущности - не оч хор идея. чаще репозитории (или регистры с ними) передают в метод сущности как параметр.

авторНапротив, БД следит за целостностью данных и ругнется, ежели чего вы с бизнес слоем напутаете. обычно или бд слишком тупа, чтоб осилить всю логику. либо наоборот имеет слишком мощный язык (орасл) об который можно моск сломать. поэтому база обычно проверяет уникальность ID и целостность FK... а логика на жабе. всё. триггер и спока видятсе мне в страшном сне
автор
7. Модератор так и не принял меры на: fetching it's a facade's concern =) переведите плз. выборка данных (именно в смысле fetch) это дела Фасада который передаёт это дело в нужном объёме на view layer. репозиторий может найти сущности но о том сколько данных в этот раз нужно клиенту он не в курсе

сори если опоздал - писал пол дня
...
Рейтинг: 0 / 0
01.11.2007, 09:42:52
    #34909278
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
Blazkowicz
Отсюда , но как я вижу ... думаю это более точно отражает позицию Jboss по отношению к спрингу
...
Рейтинг: 0 / 0
01.11.2007, 12:41:07
    #34909962
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HibernateUtil.currentSession() уже не модно?
exppдумаю это более точно отражает позицию Jboss по отношению к спрингу
Что-то ничего относящегося к теме там не обнаружил. Корни раздора Hibernate vs Spring растут из HibernateTemplate. После присоединения Hibernate к JBoss, начались трения в области JBoss vs Spring, как например объявление JmsTemplate вселенским злом.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / HibernateUtil.currentSession() уже не модно? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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