Свяжите произвольные данные с контекстом вызова ejb

У меня есть куча bean-компонентов ejb 3.0 без сохранения состояния, вызывающих друг друга по цепочке. Рассмотрим, BeanA.do (сообщение) -> BeanB.do () -> BeanC.do () -> BeanD.do (). Теперь я хотел бы получить доступ к данным сообщения из BeanD.do (). Очевидное решение - передать сообщение в качестве параметра для всех вызовов do () (на самом деле, как это работает сейчас), но мне нужно какое-то более приятное решение.

Есть ли какой-то контекст вызова? И можно ли связать с ним произвольные данные?

Что я хотел бы сделать, это просто поместить сообщение в BeanA.do (message) в какое-то локальное хранилище, связанное с вызовом функции bean-компонента, и получить его в BeanD.do ().

Любые идеи?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
679
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я не верю, что в спецификации EJB есть что-то, что обеспечивает эту функциональность. Если вы находитесь на определенном сервере приложений, вы можете использовать специфические для этого сервера приложения (я думаю, что JBoss позволяет добавлять элементы в контекст вызова). вы также можете подделать что-то с помощью JNDI.

лично мне это кажется плохим дизайном. я мог бы увидеть это, если бы у вас был какой-то код посередине, который вы не могли контролировать, но зачем это делать в противном случае? вы усложняете выполнение своей логики кода, потому что у вас есть куча «волшебных» данных, которые просто появляются в вашей функции.

Спасибо за Ваш ответ. Я попробую поискать в документации JBoss. В противном случае я бы согласился с вами, что «волшебные» данные не годятся. Но в текущей ситуации явная передача контекстных данных только отвлекает от реальной бизнес-логики.

begray 15.12.2008 19:06

У вас может быть класс со статическими методами получения / установки, которые обращаются к статическому полю ThreadLocal. Однако я бы прислушался к совету Джеймса и очень внимательно подумал, хотите ли вы связать свои EJB с этим другим классом. Определенно дважды проверьте документы сервера приложений, поскольку я не уверен, поддерживается ли использование ThreadLocals в среде EJB.

У меня точно такая же проблема. Ирония в том, что это легко сделать с помощью SOAP в jax-ws или jax-rpc, но сложно сделать с EJB.

Я обсуждаю, стоит ли отказываться от использования локального или удаленного интерфейса EJB и вместо этого передавать сообщения через JMS, что также упрощает эту задачу.

Есть законные случаи, когда это необходимо, и это не является недостатком дизайна.

Это то, что предлагает Шов. Немного неудобно работать с чистыми веб-сервисами (т.е. без интерфейса веб-интерфейса). Однако мне это удалось, и это прекрасно работает.

Мне нужно использовать контекст вызова в JAX WS. Брент говорит «Ирония заключается в том, что это легко сделать с помощью SOAP в jax-ws или jax-rpc, но сложно сделать с EJB».

Не могли бы вы сообщить мне, как использовать контекст вызова в JAX WS?

Другие вопросы по теме