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

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

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

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

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

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

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

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

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

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

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

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

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

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


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