|
|
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, забыл ник! > Что-то вы не договариваете, вы же выложили код и слушателя и > отправителя, и из этого можно сделать вывод, что вы можете править код и > там и там, так почему не заменить JMS на Stateless EJB? Значит плохо объяснял. Попробую ещё раз. Есть JBoss и в нём приложение. Отдельно живёт java-прослойка к оракловой БД. Точнее их там пачка живёт. Надо из жбосса выполнить синхронный запрос с БД. Я посылаю сообщение в очередь нужной мне прослойки с просьбой выдать данные. Она делает запрос и выдаёт ответ в другую очередь. Из этой очереди MDB получает ответ, находит листинер отправителя и вызывает его, передавая ответ. Поток отправителя просыпается и работает дальше. Вообще можно сильно всё переделать, т.к. пока все вызовы идут только с толстого клиента (но это счастье может и прекратится)- тогда можно и очереди создавать. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 15:51:09 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > new AsyncApiListener() > > - это создание нового потока в ЕЖБ бине, Здесь нет создания потока! Листинер существует в контексте потока ЕЖБ-бина! -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 15:51:47 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 16:13:01 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! > new AsyncApiListener() > > - это создание нового потока в ЕЖБ бине, Здесь нет создания потока! Листинер существует в контексте потока ЕЖБ-бина! -- Алексей JID: alxt@ya.ru Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы говорите, или может ссылка на доки есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 16:18:22 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы > говорите, или может ссылка на доки есть? Простой интерфейс и класс его реализующий. К потокам отношения не имеет. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 16:20:10 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, vas0! >> Как сделать прямой вызов из EJB я не понимаю > сейчас это бы выглядело так: > @EJB > private RemoteExternalEJB external; А как это сделать, при том, что реализация должна находится в отдельных приложениях. И в каком конкретно- ясно из содержания запроса. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 16:21:23 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! > Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы > говорите, или может ссылка на доки есть? Простой интерфейс и класс его реализующий. К потокам отношения не имеет. -- Алексей JID: alxt@ya.ru И как же вы тогда сможете установить done.set(true); если не в отдельном потоке ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 16:31:09 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! >>> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы >>> говорите, или может ссылка на доки есть? > >> Простой интерфейс и класс его реализующий. К потокам отношения не имеет. > И как же вы тогда сможете установить done.set(true); если не в отдельном > потоке ?? Это отдельный поток, но он создаётся сервером для получения сообщения в MDB. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 17:07:36 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! >>> Просветите о каком таком листнере в контексте потока ЕЖБ-бина вы >>> говорите, или может ссылка на доки есть? > >> Простой интерфейс и класс его реализующий. К потокам отношения не имеет. > И как же вы тогда сможете установить done.set(true); если не в отдельном > потоке ?? Это отдельный поток, но он создаётся сервером для получения сообщения в MDB. -- Алексей JID: alxt@ya.ru Если вы говорите про EJB 3.x то MDB это : Код: java 1. 2. 3. 4. 5. Если вы говорите про некий поток который создается неким сервером внутри метода onMessage, то это прямое нарушение рестрикшенов на MDB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 17:23:43 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, 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. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 17:38:15 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, >> Да нет же! onMessage выполняется в потоке, созданным сервером. это называется месадж драйвен бин выполняеться в EJB контейнере. При этом контейнер сам менеджит все потоки выполнения которые он создает. Все равно в вашей схеме без запуска потока который слушает респонс не обойтись (на стороне МДБ или стэтлес бина) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2012, 18:22:08 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > Все равно в вашей схеме без запуска потока который слушает респонс не > обойтись (на стороне МДБ или стэтлес бина) Я же логи привёл :) Работают два потока- первый создан для обработки внешнего вызова stateless-бином (он отсылает начальное сообщение и его я приостанавливаю), второй - для обработки ответного JMS-сообщения с помощью MDB (он разбудит первый поток). НУ НЕТУ у меня в коде new Thread() как класса :) -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 09:12:49 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, Blazkowicz! > Стремное у вас какое-то решение с этим sleep() Кстати да, только дошло - надо будет на Semaphore перевести- в первом потоке занимать и снова занимать, во втором освобождать. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 09:14:15 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! > Все равно в вашей схеме без запуска потока который слушает респонс не > обойтись (на стороне МДБ или стэтлес бина) Я же логи привёл :) Работают два потока- первый создан для обработки внешнего вызова stateless-бином (он отсылает начальное сообщение и его я приостанавливаю), второй - для обработки ответного JMS-сообщения с помощью MDB (он разбудит первый поток). НУ НЕТУ у меня в коде new Thread() как класса :) -- Алексей JID: alxt@ya.ru это не меняет того что вы вмешиваетесь в работу контейнера, управляете потоками, а этого делать в ежб нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 13:29:17 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! > Все равно в вашей схеме без запуска потока который слушает респонс не > обойтись (на стороне МДБ или стэтлес бина) Я же логи привёл :) Работают два потока- первый создан для обработки внешнего вызова stateless-бином (он отсылает начальное сообщение и его я приостанавливаю), второй - для обработки ответного JMS-сообщения с помощью MDB (он разбудит первый поток). НУ НЕТУ у меня в коде new Thread() как класса :) -- Алексей JID: alxt@ya.ru а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 13:35:58 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
OOsalivanGKS_SamaraДобрый день, OOsalivan! > Все равно в вашей схеме без запуска потока который слушает респонс не > обойтись (на стороне МДБ или стэтлес бина) Я же логи привёл :) Работают два потока- первый создан для обработки внешнего вызова stateless-бином (он отсылает начальное сообщение и его я приостанавливаю), второй - для обработки ответного JMS-сообщения с помощью MDB (он разбудит первый поток). НУ НЕТУ у меня в коде new Thread() как класса :) -- Алексей JID: alxt@ya.ru а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди Ну как бы разве не об этом я все время говорил:) И вы же правильно описали одно из ограничений - транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 14:09:10 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при > отсылки сообщения в проперти реплайту задать очередь для ответа, а после > отсылки заблокироваться на ресив из заданной очереди Как это сделать из EJB компонента динамические? Насколько я понимаю JavaEE - никак, и никто пока это не опроверг (даже не сказал, что можно). -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2012, 14:12:28 |
|
||
|
Синхронный вызов через JMS
|
|||
|---|---|---|---|
|
#18+
забыл никOOsalivanпропущено... а xто мешеает в стэйтлес бине использовать патерн синхронного jms, при отсылки сообщения в проперти реплайту задать очередь для ответа, а после отсылки заблокироваться на ресив из заданной очереди Ну как бы разве не об этом я все время говорил:) И вы же правильно описали одно из ограничений - транзакции Ну так отправку от блокировки на прием разделить на два бизнес метода - притом который на отправку с атрибутом транзакции - рекваед нью. А в методе где мы блокируемся на приеме нужно через jndi забиндиться на временную очеред ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2012, 14:58:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37773377&tid=2131896]: |
0ms |
get settings: |
10ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 324ms |
| total: | 473ms |

| 0 / 0 |
