|
|
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
Собственно при традиционном чтении сообщения в сервлете boolean goodByeReceiver = false; mSc = getServletContext(); JMSContext jmsContext = connectionFactory.createContext(); JMSConsumer jmsConsumer = jmsContext.createConsumer(queue); message = jmsConsumer.receiveBody(String.class); mSc.log("receiver message from queue: " + message); возникает неприятный эффект что если очередь пуста, то сервлет зависает. При использовании слушателя столкнулся с проблемой получая 500 ошибку с сообщением в логах что метод слушателя нельзя использовать в This method may not be called in a Java EE web or EJB container Сам код у меня (который не работает) такой: JMSContext jmsContext = connectionFactory.createContext(); JMSConsumer jmsConsumer = jmsContext.createConsumer(queue); AsynchMessageListener aml = new AsynchMessageListener(mSc); jmsConsumer.setMessageListener(aml); mSc.log("into servlet :" + aml.getStrMessage()); Код слушателя такой: @Override public void onMessage(Message message) { // TODO Auto-generated method stub TextMessage textMessage = (TextMessage) message; strMessage = ""; try { strMessage = textMessage.getText(); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); strMessage = "exception detected"; } mSc.log("into listener" + strMessage); } Вопрос, куда копать или смотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 17:08 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
Слушать в EJB-синглтон + его инжект в сервлет (или JNDI lookup) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 17:27 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
no56892Слушать в EJB-синглтон + его инжект в сервлет (или JNDI lookup) Кхм. Спасибо попробую! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 17:29 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
Oleg_SP1975возникает неприятный эффект что если очередь пуста, то сервлет зависает. JavaDoc не пробовали читать? https://docs.oracle.com/javaee/7/api/javax/jms/JMSConsumer.html Oleg_SP1975Вопрос, куда копать или смотреть? В целом, сама затея на каждый реквест выгребать сообщение очень дурно попахивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 17:30 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
Вернее так: В сервлет инжектим синглтон. В мессандждривен инжектим тот же синглтон. Сообщение приходит, вызывается мессадж дривет, меняем синглтон... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 17:30 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
BlazkowiczOleg_SP1975возникает неприятный эффект что если очередь пуста, то сервлет зависает. JavaDoc не пробовали читать? https://docs.oracle.com/javaee/7/api/javax/jms/JMSConsumer.html Oleg_SP1975Вопрос, куда копать или смотреть? В целом, сама затея на каждый реквест выгребать сообщение очень дурно попахивает. а как сделать правильно при последующей постановке задачи: есть один сервер который находится в не trust сети, на нем крутится первый сервер приложений. Есть второй сервер с сервером приложений который находится уже в trust сети. По соображениям безопасности запрос с начало приходит на внешний сервер, который затем перебрасывает его на внутренней сервер и тот запускает некие бизнес процессы и затем генерит ответ. Так я сделал сейчас и это прекрасно работает. (Запрос на внешний сервер приходит с определенного айпи и с сертификатом. Дальше по https передается внутрь) Посоветовавшись с товарищами из смежных областей те указали на потенциальную дырку, что внешний сервер имеет доступ к внутренний сети. Правильнее что бы внутренний сервер сам был инициатором соединения с внешним и выгребал все данные оттуда а также давал ответына предыдущие ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 21:04 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
no56892Вернее так: В сервлет инжектим синглтон. В мессандждривен инжектим тот же синглтон. Сообщение приходит, вызывается мессадж дривет, меняем синглтон... понял завтра с утра так и сделаю сегодня уже не успел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2016, 21:08 |
|
||
|
Как из Servlet'а прочитать асинхронно сообщение из JMS
|
|||
|---|---|---|---|
|
#18+
Вот что у меня получилось сам сервлет (для краткости привожу только метод GET) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Синглетон выглядит так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Сама модель так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Листенер выглядит тка Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. в результате запуска сервлета он долго долго долго думает и валится вот с такой ошибкой Код: plaintext куда копать дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 22:54 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=87&tid=2123695]: |
0ms |
get settings: |
15ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 372ms |

| 0 / 0 |
