Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Транзакция для чтения / 20 сообщений из 20, страница 1 из 1
16.10.2012, 22:59:22
    #38001445
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Подскажите пожалуйста, зачем задавать транзакцию для режима чтения из базы - типа
Код: java
1.
2.
3.
4.
@Transactional(readOnly=true)
public List<Contact> findAll() 
{
}



И еще вопрос - что происходит, если мы задаем для метода
Код: java
1.
2.
3.
4.
@Transactional(propagation=Propagation.NEVER)
public long countAll()
{
}


Во втором случае транзакция вообще не запускается - из-за propagation=Propagation.NEVER.
То есть таким образом ее просто отключили для этого конкретного метода?
...
Рейтинг: 0 / 0
17.10.2012, 08:30:39
    #38001643
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
oson,
намудрили они конечно с таким количеством флагов:

Ошибки, связанные с флагом "только чтение" аннотации @Transactional
http://www.ibm.com/developerworks/ru/library/j-ts1/index.html
...
Рейтинг: 0 / 0
18.10.2012, 00:49:07
    #38003436
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Во втором случае транзакция вообще не запускается
Любой запрос всегда исполняется в рамках некоторой транзакции. У JDBC Connection может быть включен autocommit, в этом случае драйвер будет сам автоматически посылать серверу команду commit после каждого запроса. Автокоммит вредная вещь, потому что угрожает целостности данных. Если какая-то аннотация приводит к тому, что запросы исполняются в режиме автокоммита, то это вредная аннотация и ее использовать не следует. В каких-то древних СУБД короткие транзакции были лучше для производительности, но сейчас это не актуально.
Подскажите пожалуйста, зачем задавать транзакцию для режима чтения из базы - типа

Для обеспечения transaction level read consistency.
...
Рейтинг: 0 / 0
18.10.2012, 01:19:02
    #38003452
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
В статье на ibm.com написана какая-то фигня. Либо автор не грамотен, либо перевод плохой, либо автор работает с какой-то экзотической СУБД.
Зачем надо начинать транзакцию, если речь идет только о чтении данных? Разумеется, этого делать не нужно.

Для statement level read consistency. Автор считает, что есть два режима - использовать транзакции и не использовать. И при использовании транзакции расходуются какие-то дорогостоящие ресурсы. Это не так. Транзакция неизбежно начинается при выполнении первого запроса, и заканчивается при commit/rollback.
Если вас не заботит качество ваших данных, то нет причин думать на тему применения транзакций, поскольку на платформе Java они могут серьезно снизить производительность

Это абсолютно неверное утверждение. Автокоммит наоборот увеличивает число транзакций и снижает производительность.
...
Рейтинг: 0 / 0
18.10.2012, 01:19:43
    #38003453
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
авторДля statement level read consistency

Для transaction level read consistency, я имел в виду.
...
Рейтинг: 0 / 0
18.10.2012, 10:08:19
    #38003699
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Йуный джавистЪ,
Мы же не говорим про jdbc.
Он применяется для простейших проектов. Там автокоммит Оправдан.
Сабж про Управление транзакциями, когда он выключен по дефолту. Иначе работать не будет.
...
Рейтинг: 0 / 0
31.10.2012, 23:04:10
    #38020847
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
прочитал в Spring 3 PRO, что @Transactional(readOnly=true) позволяет

// Other code omitted
@Transactional(readOnly=true)
public List<Contact> findAll() {
return sessionFactory.getCurrentSession().
createQuery("from Contact c").list();
}
}
...
The @Transactional(readOnly=true), which means we want
the transaction to be set as read-only. Setting that attribute for finder methods will result in better
performance.

Но транзакция значит в любом случае открывается и коммитится, даже для чтения?
...
Рейтинг: 0 / 0
01.11.2012, 01:10:18
    #38020930
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Но транзакция значит в любом случае открывается и коммитится, даже для чтения?

См http://kickjava.com/src/org/springframework/jdbc/datasource/DataSourceTransactionManager.java.htm, методы doBegin и doCommit.
Кстати, тут Blazkowich писал, что классы в спринге простые и понятные. Вот отличный пример:
Data access code that should remain unaware of Spring's data access support can work with this proxy to seamlessly participate in Spring-managed transactions. Note that the transaction manager, for example DataSourceTransactionManager, still needs to work with the underlying DataSource, not with this proxy.

Make sure that TransactionAwareDataSourceProxy is the outermost DataSource of a chain of DataSource proxies/adapters. TransactionAwareDataSourceProxy can delegate either directly to the target connection pool or to some intermediary proxy/adapter like LazyConnectionDataSourceProxy or UserCredentialsDataSourceAdapter.

При этом все нужное API состоит из 3 функций: Datasource.getConnection, Connection.commit и Connection.rollback.
...
Рейтинг: 0 / 0
01.11.2012, 13:39:28
    #38021603
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Йуный джавистЪСм http://kickjava.com/src/org/springframework/jdbc/datasource/DataSourceTransactionManager.java.htm, методы doBegin и doCommit.открой для себя grepcode
...
Рейтинг: 0 / 0
01.11.2012, 13:41:21
    #38021612
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
osonНо транзакция значит в любом случае открывается и коммитится, даже для чтения?
чувак, скажи какую часть этой фразы ты не понял

Йуный джавистЪЛюбой запрос всегда исполняется в рамках некоторой транзакции
...
Рейтинг: 0 / 0
01.11.2012, 13:56:11
    #38021672
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
chpasha,
не ругайся))
Сервер открывает свою серверную транзакцию (для чтения) Сам.
Для этого обрамлять SELECT на клиенте в Java begin tran необязательно.
...
Рейтинг: 0 / 0
01.11.2012, 14:53:44
    #38021830
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Petro123не ругайся))
Сервер открывает свою серверную транзакцию (для чтения) Сам.
Вообще говоря не всегда. Версионникам транзакции для чтения не нужны.
...
Рейтинг: 0 / 0
01.11.2012, 15:24:27
    #38021916
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Сергей АрсеньевPetro123не ругайся))
Сервер открывает свою серверную транзакцию (для чтения) Сам.
Вообще говоря не всегда. Версионникам транзакции для чтения не нужны.
ну дак я и добавил к твоей фразе строку для форума Java - "с клиента стартовать её не надо".
И называется она - клиентская.
Их много разных видов и спор ни о чём.
ЗЫ
Для сиквела SELECT тоже не надо обрамлять.
...
Рейтинг: 0 / 0
01.11.2012, 22:27:10
    #38022524
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Petro123,

С другой стороны у тогоже Oracle read-only транзакция это совсем не то же самое, что и обычный select.
И ее надо объявлять явно.
...
Рейтинг: 0 / 0
01.11.2012, 23:23:09
    #38022558
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Сергей АрсеньевPetro123,
С другой стороны у тогоже Oracle read-only транзакция это совсем не то же самое, что и обычный select.
И ее надо объявлять явно.
Сергей!
Тут с транзакциями замешанными на все виды СУБД столько сторон и ньюансов, что их флажками и аннотациями не решить.
О том, что всё неоднозначно и не так просто для понимания, я и сказал во втором посте.

На уровне прикладного Java кода нет слов Оракл. Все СУБД под одну аннотацию не завести.
И конечно, лучше делать транзакции короткими, а читающую транзакцию делать на уровне оператора. А не длинной транзакции с несколькими SELECT.
http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_10005.htm
imho
Т.е. идём сначала от простейших случаев на все СУБД, а потом уже "перчим" всё фичами и прибамбасами-хинтами.
...
Рейтинг: 0 / 0
02.11.2012, 06:41:03
    #38022693
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Сергей Арсеньев Вообще говоря не всегда.Всегда.Версионникам транзакции для чтения не нужны.Нужны. Именно транзакции определяют какую версию записи возвращать клиенту.
...
Рейтинг: 0 / 0
03.11.2012, 00:34:03
    #38024188
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Basil A. SidorovСергей Арсеньев Вообще говоря не всегда.Всегда.Версионникам транзакции для чтения не нужны.Нужны. Именно транзакции определяют какую версию записи возвращать клиенту.

В общем клиентская транзакция должна открываться - коммититься и для чтения данных тоже.
...
Рейтинг: 0 / 0
03.11.2012, 00:41:43
    #38024193
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
osonВ общем клиентская транзакция должна открываться - коммититься и для чтения данных тоже.И? Как это влияет на механизм работы версионника?
...
Рейтинг: 0 / 0
03.11.2012, 01:02:24
    #38024212
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
Да я ж про версионник не спрашивал. Меня изначальный вопрос интересует :)
...
Рейтинг: 0 / 0
03.11.2012, 01:07:06
    #38024218
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция для чтения
osonДа я ж про версионник не спрашивал.Тогда не надо выдавать неправильные ответы.
Просто игнорируйте то, что вам не нужно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Транзакция для чтения / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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