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

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

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

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

Любые идеи?

15.12.2008 13:26:24
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

1
15.12.2008 15:44:42
Спасибо за Ваш ответ. Я попробую поискать документы в JBoss. В противном случае я бы согласился с вами, что «волшебные» данные не годятся. Но в текущей ситуации передача данных контекста явно только отвлекает от реальной бизнес-логики.
begray 15.12.2008 16:06:57

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

0
18.12.2008 03:37:12

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

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

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

0
2.02.2009 21:26:59

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

0
5.02.2009 20:51:49

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

Подскажите, пожалуйста, как использовать контекст Call в JAX WS?

0
30.04.2009 06:57:38