Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Connection between threads / 25 сообщений из 67, страница 1 из 3
29.11.2012, 17:58:02
    #38058640
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Коллеги, есть задача в разных тредах асинхронно работать с одним и тем же оракловым Connection.

Как это грамотно реализовать, есть у кого нибудь опыт ?
...
Рейтинг: 0 / 0
29.11.2012, 18:03:06
    #38058649
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
JDBC по природе своей не многопоточный. Поэтому вариантов всего два. Либо синхронизировать все потоки по одному локу.
Либо складывать все задачи в очередь и разгребать одним потоком для запуска SQL.
Если есть какая-то конкретика про используемые SQL, то можно ещё что-то придумать. Например не использовать ResultSet с открытым курсором, а вычитывать данные в CachedRowSet и сразу же освобождать Connection.
...
Рейтинг: 0 / 0
29.11.2012, 18:06:02
    #38058655
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01Коллеги, есть задача в разных тредах асинхронно работать с одним и тем же оракловым Connection.

Как это грамотно реализовать, есть у кого нибудь опыт ?

Ну сначала стандартный вопрос - зачем вам это? Скорее всего вы изобретаете велосипед и наступаете на пройденные многими грабли.
Если же действительно есть такая необходимость - то в кратце Connection не ThreadSafe, так что можно разве что создать фасад над коннекшенами в который складывать коннекшены по ключу, а перед каждым доустпом к коннекшену лочить этот ключ. Но так вы добьетесь только лишь непротиворечивости, истинной параллельности вам не получить.
...
Рейтинг: 0 / 0
29.11.2012, 18:08:52
    #38058665
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?
...
Рейтинг: 0 / 0
29.11.2012, 18:13:28
    #38058678
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
А можно в каждом новом треде создавать новый "конекшен"

Очепятка
...
Рейтинг: 0 / 0
29.11.2012, 18:16:53
    #38058685
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?Нет.
Несколько транзакций могут разделять одно подключение, а вот наоборот - никогда.

P.S. Задача-то какая?
...
Рейтинг: 0 / 0
29.11.2012, 18:18:30
    #38058692
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?
Может проще версии использовать?
...
Рейтинг: 0 / 0
29.11.2012, 18:20:36
    #38058697
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Версии чего ?
...
Рейтинг: 0 / 0
29.11.2012, 18:24:20
    #38058705
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01Версии чего ?
Версии записей в базе хранить и использовать.
...
Рейтинг: 0 / 0
29.11.2012, 18:25:07
    #38058707
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Blazkowicz,

Не так не получится

мы заранее не знаем схему БД

наша задача - движок между тредами
...
Рейтинг: 0 / 0
29.11.2012, 18:25:52
    #38058711
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?
Может всем Dirty Read разрешить и всё. 8)))
...
Рейтинг: 0 / 0
29.11.2012, 18:28:10
    #38058712
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01А можно в каждом новом треде создавать новый тред и между коннекшенами пробрасывать уровень изоляции такой чтоб были выидны не закомиченные изменения другого конекшена ?
Объясни лучше почему Connection только один. 8)
...
Рейтинг: 0 / 0
29.11.2012, 18:28:14
    #38058713
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01наша задача - движок между тредамиУ движка-то какая задача?
Сейчас вы пытаетесь достать левое ухо, вывернув правую руку за спину - утомительно и вредно.
...
Рейтинг: 0 / 0
29.11.2012, 18:29:07
    #38058717
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Basil A. SidorovСейчас вы пытаетесь достать левое ухо, вывернув правую руку за спину - утомительно и вредно.
Заметь, это нужно сделать "грамотно".
...
Рейтинг: 0 / 0
29.11.2012, 18:29:46
    #38058720
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Blazkowicz,

Транзакция одна

если можно сделать такое многими конекшенами почему бы и нет
...
Рейтинг: 0 / 0
29.11.2012, 18:32:03
    #38058726
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
BlazkowiczМожет всем Dirty Read разрешить и всё. 8)))"Да за это убивать надо" (ц) старый анекдот.
Даже там, где "вроде бы" есть.
...
Рейтинг: 0 / 0
29.11.2012, 18:32:59
    #38058731
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01, невозможно т.к. один сеанс БД полностью синхронный.
Ты толкаешь запрос. И ждёшь и получаешь ответ. Если у тебя много
потоков ждут освобождения 1 коннекшена то это попытка использовать
это соединение как пул где MAX_CONN=1.

Почему-бы тебе не взять готовый пул и не мучиться?
...
Рейтинг: 0 / 0
29.11.2012, 18:34:33
    #38058740
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
maytonПочему-бы тебе не взять готовый пул и не мучиться?Он хочет, что всё "это" происходило в одной транзакции.
...
Рейтинг: 0 / 0
29.11.2012, 18:36:00
    #38058744
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01Транзакция одна

Вооот ключевой момент.
Т.е. много потоков шарят одну транзакцию и ты предполагаешь что RDBMS должна реализовывать конкурентный доступ к данным внутри одной транзакции? Эдак весь ACID на хрен сведётся.
...
Рейтинг: 0 / 0
29.11.2012, 18:43:12
    #38058766
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01Транзакция одна
если можно сделать такое многими конекшенами почему бы и нет
Можно. Но обращения всё равно придётся сериализовать (выстраивать в очередь). Достаточно странно, если одна транзакция понадобиться параллельным потокам. Скорее всего в системе одновременно транзакцию будет использовать один поток.
Ваш же движок будет перебрасывать connection между потоками. Но одновременно с ним будет работать только один. Поэтому достаточно себя обезопасить через lock или очередь.
...
Рейтинг: 0 / 0
29.11.2012, 18:46:08
    #38058769
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
...
Рейтинг: 0 / 0
29.11.2012, 18:52:34
    #38058783
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
buldozer01 http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_xa.htm#BABBDDFC
Вот интересный тынц в тему
Да, пожалуйста. Только заметь что там подразумевается работа с многими XA ресурсами. У тебя один XA ресурс. Конкурентный доступ к нему в одной транзакции никто не обещал.
И вообще не стоит путать глобальную XA транзакцию и локальную транзакцию отдельного ресурса (DB Connection).
...
Рейтинг: 0 / 0
29.11.2012, 18:57:30
    #38058791
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
А потом окажется что "это был теоретический вопрос(с)". Я даже и придумать то не могу зачем такая шляпа может понадобиться.
...
Рейтинг: 0 / 0
29.11.2012, 23:32:04
    #38059021
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
забыл никА потом окажется что "это был теоретический вопрос(с)". Я даже и придумать то не могу зачем такая шляпа может понадобиться.
Зришь в корень
http://www.sql.ru/forum/actualsearch.aspx?a=buldozer01&ma=0
...
Рейтинг: 0 / 0
01.12.2012, 00:24:57
    #38060742
buldozer01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection between threads
Blazkowicz,

Да нет это реальная задача как и остальные линки которые ты не поленился поискать непонятно только зачем.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Connection between threads / 25 сообщений из 67, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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