Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Service + Oracle RDBMS + транзакция / 18 сообщений из 18, страница 1 из 1
16.02.2018, 15:08
    #39603037
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Всем привет.

Нуждаюсь в советах.

В общем задача такая:

Есть очередь сообщений, получатель посредством Веб-сервисов (моего) дергает веб-метод (допустим getMessages) и получает эти сообщения.
После обработки их в своей системе он должен вызвать веб-метод (confirmMessages) подтверждения получения этих сообщений.

В getMessages я попросту делаю запрос в БД, например:

Код: plsql
1.
2.
select t.id, t.message from messages t
for update skip locked



Далее id сообщений перегоняю в таблицу с каким-либо суррогатным GROUP_ID для группировки этих данных.
Этот GROUP_ID я возвращаю получателю. Commit;

В confirmMessages я ожидаю этот GROUP_ID и помечаю сообщения как отправленные.

Но это велосипед. Если вдумываться, то нужно будет решать кучу проблем, например таймауты подтверждения, повторное подтверждение, область видимости неподтвержденных данных в getMessages и т.д.

Может уже есть готовые решения (например в JavaEE) для решения этой задачи?
т.е. мне нужно какое-то подобие транзакций более высокого уровня чем EJB на уровне WS.

Спасибо!
...
Рейтинг: 0 / 0
16.02.2018, 15:17
    #39603057
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Во-первых select for update можно выполнять только в том случае если у вас транзакция кратковременная (и речь не только о БД). В вашем случае это пуля в лоб системе.
Во-вторых не понятно какая цель у этих блокировок? Обычно, в подобных системах от пессимистических блокировок отказываются в принципе. Или у вас клиенты постоянно будут бороться за данные?
...
Рейтинг: 0 / 0
16.02.2018, 15:25
    #39603071
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2транзакций более высокого уровняназываются Распределенные.
Уверен что нужно?
...
Рейтинг: 0 / 0
16.02.2018, 15:29
    #39603079
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2,
Тебе по ws прислали УдалитьПетрова и потом спрашивают подверждения или отката?
...
Рейтинг: 0 / 0
16.02.2018, 15:50
    #39603120
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Petro123EDUARD_2,
Тебе по ws прислали УдалитьПетрова и потом спрашивают подверждения или отката?

Мне присылают - "отдай мои сообщения", а потом присылают "подтверждаю, что забрал свои сообщения, не присылай мне их больше".

BlazkowiczВо-первых select for update можно выполнять только в том случае если у вас транзакция кратковременная (и речь не только о БД). В вашем случае это пуля в лоб системе.

каждый потребитель забирает только свои данные, в данном select есть ограничение по наименованию потребителя и не более 200 строк, например.

Если я не буду лочить эти записи, то при вставке в таблицу для группировки эти данных - попадутся дубликаты, да и потребитель больше 1 раза их обработает.
...
Рейтинг: 0 / 0
16.02.2018, 15:53
    #39603126
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2Если я не буду лочить эти записи, то при вставке в таблицу для группировки эти данных - попадутся дубликаты
Мне не понять что под этим подразумевается. Но если это единственная причина, то, уверен, что есть решение получше
...
Рейтинг: 0 / 0
16.02.2018, 15:55
    #39603131
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2,
В общем случае ws не помнит никого и что кому отсылал.
...
Рейтинг: 0 / 0
16.02.2018, 15:57
    #39603132
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2каждый потребитель забирает только свои данные,ID потребителя при запросе?
...
Рейтинг: 0 / 0
16.02.2018, 16:01
    #39603137
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Blazkowiczто, уверен, что есть решение получше

за этим я и пришел сюда =)
...
Рейтинг: 0 / 0
16.02.2018, 16:02
    #39603139
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Petro123ID потребителя при запросе?

да
...
Рейтинг: 0 / 0
16.02.2018, 16:07
    #39603147
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2Petro123ID потребителя при запросе?

да
Договорись, что факт отправки при запросе с id и является "больше не присылать".
Самому ставить галку в бд.
Все.
...
Рейтинг: 0 / 0
16.02.2018, 16:11
    #39603152
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2...
Если я не буду лочить эти записи, то при вставке в таблицу для группировки эти данных - попадутся дубликаты, да и потребитель больше 1 раза их обработает.

А ты уверен, что сейчас они лочатся как задумано?
...
Рейтинг: 0 / 0
16.02.2018, 16:21
    #39603164
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
По-моему нужно любую очередь сообщений взять (MQ) и завернуть в (SOAP). Там и транзакции и подтверждения есть. В некоторых даже SOAP интерфейс
...
Рейтинг: 0 / 0
16.02.2018, 16:23
    #39603168
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Petro123Самому ставить галку в бд.

А если связь между потребителем и веб-сервисом пропала? у него экзепшин транспортного уровня, а у меня фиксация транзакции?)
...
Рейтинг: 0 / 0
16.02.2018, 16:27
    #39603175
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2Petro123Самому ставить галку в бд.

А если связь между потребителем и веб-сервисом пропала? у него экзепшин транспортного уровня, а у меня фиксация транзакции?)
Try
Ws.send();
Db.update галка что отправили

Проверил?
...
Рейтинг: 0 / 0
16.02.2018, 16:28
    #39603177
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
Leonid KudryavtsevА ты уверен, что сейчас они лочатся как задумано?

уверен, в запросе выборки сообщений из бд, есть условие not in\exists к этой самой групповой таблице.

если кто-то залочил записи из таблицы сообщений, то он их должен положить в таблицу с группированными данными, пока он их не положил, они не доступны другим, после того как положит, селект их уже не вернет, а если не положит, то разлочит записи.
...
Рейтинг: 0 / 0
16.02.2018, 16:29
    #39603178
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
А где прочитать про транзакции в SOAP сообщениях?
...
Рейтинг: 0 / 0
16.02.2018, 16:33
    #39603185
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web Service + Oracle RDBMS + транзакция
EDUARD_2,
Кто сейчас вообще лочит?
Поставь число 1 - кем то взято на отправку.
Хотя код выше и так должен работать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Service + Oracle RDBMS + транзакция / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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