Связать произвольные данные с контекстом вызова ejb - PullRequest
0 голосов
/ 15 декабря 2008

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

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

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

Есть идеи?

Ответы [ 5 ]

1 голос
/ 15 декабря 2008

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

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

0 голосов
/ 30 апреля 2009

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

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

0 голосов
/ 05 февраля 2009

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

0 голосов
/ 03 февраля 2009

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

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

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

0 голосов
/ 18 декабря 2008

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

...