powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронный вызов через JMS
18 сообщений из 43, страница 2 из 2
Синхронный вызов через JMS
    #37772599
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, забыл ник!

> Что-то вы не договариваете, вы же выложили код и слушателя и
> отправителя, и из этого можно сделать вывод, что вы можете править код и
> там и там, так почему не заменить JMS на Stateless EJB?

Значит плохо объяснял. Попробую ещё раз.

Есть JBoss и в нём приложение.
Отдельно живёт java-прослойка к оракловой БД. Точнее их там пачка живёт.
Надо из жбосса выполнить синхронный запрос с БД.

Я посылаю сообщение в очередь нужной мне прослойки с просьбой выдать
данные. Она делает запрос и выдаёт ответ в другую очередь. Из этой
очереди MDB получает ответ, находит листинер отправителя и вызывает его,
передавая ответ. Поток отправителя просыпается и работает дальше.

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

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772601
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> new AsyncApiListener()
>
> - это создание нового потока в ЕЖБ бине,

Здесь нет создания потока!
Листинер существует в контексте потока ЕЖБ-бина!

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772660
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, vas0!

> Если с точки зрения клиента идет синхронный вызов, то встраивание где то
> посередине асинхронной отправки и приема сообщений выглядит ни к месту.
> Почему бы просто не заменить MDB на Stateless bean и не мучатся?

Потому что через MDB идёт отсылка сообщения в другое приложение.
Оно слушает очередь и выдаёт ответ.
Как сделать прямой вызов из EJB я не понимаю :)

--
Алексей
JID: alxt@ya.ru
Примерно такой же задачей в одном проекте занимался, правда давным давно. С точки зрения клиента работа была синхронной, а посередине использовался асинхронный обмен сообщениями. Завели две очереди, в ту и другую сторону, динамически добавлялись слушатели, у слушателей ответов задавался селектор на основе correlationID. Ну и всякая "магия" с приостановкой потоков. На такой схеме настоял архитектор, так как единственно правильное решение для интеграции это "Messaging". Пока делал, все время плевался, почему бы не сделать простой RPC вызов Session bean-а.
GKS_SamaraКак сделать прямой вызов из EJB я не понимаю сейчас это бы выглядело так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Stateless
public class MyEJB {
    @EJB
    private RemoteExternalEJB external;

    public String doSomething() {
        return external.doSomething();
    }
}
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772675
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!

> new AsyncApiListener()
>
> - это создание нового потока в ЕЖБ бине,

Здесь нет создания потока!
Листинер существует в контексте потока ЕЖБ-бина!

--
Алексей
JID: alxt@ya.ru


Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы говорите, или может ссылка на доки есть?
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772680
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы
> говорите, или может ссылка на доки есть?

Простой интерфейс и класс его реализующий. К потокам отношения не имеет.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772682
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, vas0!

>> Как сделать прямой вызов из EJB я не понимаю
> сейчас это бы выглядело так:
> @EJB
> private RemoteExternalEJB external;

А как это сделать, при том, что реализация должна находится в отдельных
приложениях. И в каком конкретно- ясно из содержания запроса.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772703
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!

> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы
> говорите, или может ссылка на доки есть?

Простой интерфейс и класс его реализующий. К потокам отношения не имеет.

--
Алексей
JID: alxt@ya.ru


И как же вы тогда сможете установить done.set(true); если не в отдельном потоке ??
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772780
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!
>>> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы
>>> говорите, или может ссылка на доки есть?
>
>> Простой интерфейс и класс его реализующий. К потокам отношения не имеет.
> И как же вы тогда сможете установить done.set(true); если не в отдельном
> потоке ??

Это отдельный поток, но он создаётся сервером для получения сообщения в MDB.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772819
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!
>>> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы
>>> говорите, или может ссылка на доки есть?
>
>> Простой интерфейс и класс его реализующий. К потокам отношения не имеет.
> И как же вы тогда сможете установить done.set(true); если не в отдельном
> потоке ??

Это отдельный поток, но он создаётся сервером для получения сообщения в MDB.

--
Алексей
JID: alxt@ya.ru


Если вы говорите про EJB 3.x то MDB это :

Код: java
1.
2.
3.
4.
5.
@MessageDriven(mappedName = ....)

public class MDBNAME implements MessageListener {
    public void onMessage(Message message) {
....



Если вы говорите про некий поток который создается неким сервером внутри метода onMessage, то это прямое нарушение рестрикшенов на MDB
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772854
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> Если вы говорите про некий поток который создается неким сервером внутри
> метода onMessage, то это прямое нарушение рестрикшенов на MDB

Да нет же! onMessage выполняется в потоке, созданным сервером.
Вот логи ("%d %-5p [%c] (%t) %s%E%n", вывод я немного сократил).
WorkerThread#1[132.147.128.203:35713] - поток, в котором выполняется
Session-bean

Thread-23 (group:HornetQ-client-global-threads-24396471) - поток, в
котором выполняется MDB.

Оба

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Вот первый поток отсылает вообщение
[SimpleQueueSender] (WorkerThread#1[132.147.128.203:35713]) send to
'/queue/IP-Billing-sync.cmd'...

И засыпает...
[AsyncApiBL] (WorkerThread#1[132.147.128.203:35713]) waiting...

Листинер был вызван из MDB. В потоке MDB, естественно
[AsyncApiBL] (Thread-23 (group:HornetQ-client-global-threads-24396471))
onReply XML: <OmApi.result msgId =
"ee96de94-0b6b-4a0e-8f75-e4854be1edb8" result = "Работа"></OmApi.result>

Проснулся первый поток и сейчас отдаст результат
[AsyncApiBL] (WorkerThread#1[132.147.128.203:35713]) onReply XML:
<OmApi.result msgId = "ee96de94-0b6b-4a0e-8f75-e4854be1edb8" result =
"Работа"></OmApi.result>




--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37772918
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,

>> Да нет же! onMessage выполняется в потоке, созданным сервером.

это называется месадж драйвен бин выполняеться в EJB контейнере. При этом контейнер сам менеджит все потоки выполнения которые он создает.

Все равно в вашей схеме без запуска потока который слушает респонс не обойтись (на стороне МДБ или стэтлес бина)
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37773377
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> Все равно в вашей схеме без запуска потока который слушает респонс не
> обойтись (на стороне МДБ или стэтлес бина)

Я же логи привёл :)

Работают два потока- первый создан для обработки внешнего вызова
stateless-бином (он отсылает начальное сообщение и его я
приостанавливаю), второй - для обработки ответного JMS-сообщения с
помощью MDB (он разбудит первый поток).

НУ НЕТУ у меня в коде new Thread() как класса :)

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37773380
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Blazkowicz!

> Стремное у вас какое-то решение с этим sleep()

Кстати да, только дошло - надо будет на Semaphore перевести- в первом
потоке занимать и снова занимать, во втором освобождать.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37774103
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!

> Все равно в вашей схеме без запуска потока который слушает респонс не
> обойтись (на стороне МДБ или стэтлес бина)

Я же логи привёл :)

Работают два потока- первый создан для обработки внешнего вызова
stateless-бином (он отсылает начальное сообщение и его я
приостанавливаю), второй - для обработки ответного JMS-сообщения с
помощью MDB (он разбудит первый поток).

НУ НЕТУ у меня в коде new Thread() как класса :)

--
Алексей
JID: alxt@ya.ru


это не меняет того что вы вмешиваетесь в работу контейнера, управляете потоками, а этого делать в ежб нельзя
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37774120
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!

> Все равно в вашей схеме без запуска потока который слушает респонс не
> обойтись (на стороне МДБ или стэтлес бина)

Я же логи привёл :)

Работают два потока- первый создан для обработки внешнего вызова
stateless-бином (он отсылает начальное сообщение и его я
приостанавливаю), второй - для обработки ответного JMS-сообщения с
помощью MDB (он разбудит первый поток).

НУ НЕТУ у меня в коде new Thread() как класса :)

--
Алексей
JID: alxt@ya.ru


а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37774221
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanGKS_SamaraДобрый день, OOsalivan!

> Все равно в вашей схеме без запуска потока который слушает респонс не
> обойтись (на стороне МДБ или стэтлес бина)

Я же логи привёл :)

Работают два потока- первый создан для обработки внешнего вызова
stateless-бином (он отсылает начальное сообщение и его я
приостанавливаю), второй - для обработки ответного JMS-сообщения с
помощью MDB (он разбудит первый поток).

НУ НЕТУ у меня в коде new Thread() как класса :)

--
Алексей
JID: alxt@ya.ru


а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди

Ну как бы разве не об этом я все время говорил:) И вы же правильно описали одно из ограничений - транзакции
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37774232
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при
> отсылки сообщения в проперти реплайту задать очередь для ответа, а после
> отсылки заблокироваться на ресив из заданной очереди

Как это сделать из EJB компонента динамические? Насколько я понимаю
JavaEE - никак, и никто пока это не опроверг (даже не сказал, что можно).

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронный вызов через JMS
    #37776023
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никOOsalivanпропущено...


а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди

Ну как бы разве не об этом я все время говорил:) И вы же правильно описали одно из ограничений - транзакции

Ну так отправку от блокировки на прием разделить на два бизнес метода - притом который на отправку с атрибутом транзакции - рекваед нью. А в методе где мы блокируемся на приеме нужно через jndi забиндиться на временную очеред
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронный вызов через JMS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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