Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
Доброго всем. WebSphere App Server v 7.0 Создаю очередь, создаю activation spec. Деплою MDB, попутно в настройках указывая activation spec, которая смотрит на очередь. MDB успешно стартует, в логе появляются записи вида INSTANCE CREATED. Но, когда начинаю кидать в очередь сообщения, MDB никак на них не реагирует :( В SystemOut.log никакого намёка на то, из-за чего это может происходить. Судя по состоянию, сообщения в очереди постоянно лочатся/анлочатся. Никакие другие MDB не используют эту очередь, в настройках очереди разрешены чтение/запись. MDB имеет следующий вид (транзакционность CMP): Код: 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. Мб кто сталкивался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2012, 16:04 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
z0z0iberg, 1. Что прописано в Activation Spec ? Фильтр на выборку присутствует? 2. Проверить какой фикс установлен на сервер приложений. По возможности обновить до актуального фикса. Для выдачи версии используется команда versionInfo (<Корневая папка профиля>\bin\versionInfo.bat (или sh, смотря какая платформа)) Recommended fixes for WebSphere Application Server 3. Какая система сообщений используется? SIB или WebSphere MQ или что-то еще? Если WebSphere MQ, то какой версии и с каким фиксом? 4. mappedName = "jms/TestMDB-TestQueue" - нежелательно в коде приложения прописывать привязку (binding). Рекомендую этот параметр убрать и сделать привязку стандартно (т.е. либо во время Deploy, либо через файл META-INF\ibm-ejb-jar-bnd.xml) 5. По логгеру. В случае SLF4J вместо log.info("ON MESSAGE (" + this + ") = " + message); правильнее так: log.info("ON MESSAGE {} = {}",this,message); В руководстве по SLF4J описано почему именно так. Это одна из фич, которая уменьшает задержки, если вывод записи в лог подавляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 09:52 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаровz0z0iberg, 1. Что прописано в Activation Spec ? Фильтр на выборку присутствует? 2. Проверить какой фикс установлен на сервер приложений. По возможности обновить до актуального фикса. Для выдачи версии используется команда versionInfo (<Корневая папка профиля>\bin\versionInfo.bat (или sh, смотря какая платформа)) Recommended fixes for WebSphere Application Server 3. Какая система сообщений используется? SIB или WebSphere MQ или что-то еще? Если WebSphere MQ, то какой версии и с каким фиксом? 4. mappedName = "jms/TestMDB-TestQueue" - нежелательно в коде приложения прописывать привязку (binding). Рекомендую этот параметр убрать и сделать привязку стандартно (т.е. либо во время Deploy, либо через файл META-INF\ibm-ejb-jar-bnd.xml) 5. По логгеру. В случае SLF4J вместо log.info("ON MESSAGE (" + this + ") = " + message); правильнее так: log.info("ON MESSAGE {} = {}",this,message); В руководстве по SLF4J описано почему именно так. Это одна из фич, которая уменьшает задержки, если вывод записи в лог подавляется. Спасибо за ответ. По пунктам: 1. Administration: Name: TestMDB AS JNDI name: jms/TestMDB-TestQueueActivationSpec Destination: Destination type: Queue Destination JNDI name: jms/TestMDB-TestQueue Message selector: пусто, пробовал JMSType='ObjectMessage' - не помогло Bus name: SCA.APPLICATION.TestCell.Bus Acknowledge mode: Auto-acknowledge Target: пусто Target type: Bus member name Target significance: Preferred Target inbound transport chain: пусто Provider endpoints: пусто Additional: Maximum batch size: 1 Maximum concurrent MDB invocations per endpoint: 10 Automatically stop endpoints on repeated message failure: disabled Subscription Durability: Subscription durability: nondurable Subscription name: пусто Client identifier: пусто Durable subscription home: testcluster.000-SCA.APPLICATION.TestCell.Bus Pass message payload by reference: "Applications using this Activation Specification to receive messages: - do not modify the data Object obtained from a JMS Object Message. The data Object is treated as read only. Read the help before selecting this option.": отмечен влажком Advanced: Share durable subscriptions: in cluster Share data source with CMP: отмечен флажком Read ahead: default Always activate MDBs in all servers: отмечен флажком Retry interval: 30 sec Security settings: Authentication alias: пробовал none, пробовал дефолтный SCA_Auth_Alias, без разницы 2. фиксы вроде все стоят. 3. SIB, Default message provider 4. спорно, переносимость кода теряется 5. спасибо, учту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 12:23 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
z0z0iberg, 1. Bus Security на самом SIB включено или нет? Пустой Message Selector - это нормально, я спрашивал про него на случай, если там стоит фильтр, т.к. сообщение может не выбираться из за фильтра. 2. Что все таки выдает versionInfo для сервера приложений? 4. В смысле теряется переносимость кода? Кто-то из J2EE-серверов не позволяет выполнять binding во время Deploy приложения? И, судя по официальной документации, это свойство серверы приложений могут игнорировать, т.е. это свойство само не является портабельным. Annotation Type MessageDriven Цитатаpublic abstract java.lang.String mappedName A product specific name(e.g. global JNDI name of a queue) that this message-driven bean should be mapped to. Application servers are not required to support any particular form or type of mapped name, nor the ability to use mapped names. The mapped name is product-dependent and often installation-dependent. No use of a mapped name is portable. Из минусов: а) Приложение напрямую ссылается на ресурс из глобального каталога сервера. Я, как администратор сервера, могу называть ресурсы в глобальном дереве так, как считаю нужным (в соответствии с выбранной политикой именования). Поэтому прописанная в приложении ссылка на глобальное имя обычно добавляет проблем, а не решает их. б) Имя очереди прописывается в Activation Spec-е на сервере приложений (В WAS, про другие J2EE-сервера не скажу), и собственно само приложение достаточно привязать к спеку, задавать имя очереди в самом приложении в этом случае избыточно. Во вложении архив тестового приложения. Рекомендую установить и проверить будут ли читаться сообщения. Сделана настройка чтобы "прицепиться" к Activation Spec с именем jms/TestMDB-TestQueueActivationSpec Существующие приложения, использующее этот же Activation Spec нужно остановить. Вот что у меня выдается в лог, после установки и помещения в очередь сообщения: WAS_Log[7/26/12 14:35:09:769 MSD] 0000000d ApplicationMg A CWWSR0200I: Starting application: MDBTest [7/26/12 14:35:09:769 MSD] 0000000d ApplicationMg A CWWSR0204I: Application: MDBTest Application build level: Unknown [7/26/12 14:35:09:832 MSD] 0000000d EJBContainerI I CWWSR0037I: Starting EJB jar: MDBTest_EJB.jar [7/26/12 14:35:09:848 MSD] 0000000d TestMDB I ru.ts.ehabarov.j2ee.TestMDB <init> Initialized [7/26/12 14:35:09:957 MSD] 0000000d SibMessage I [:] CWSIV0777I: A connection to messaging engine WAS01Node01.WAS01Srv01-BUS01 for destination queue1 on bus BUS01 has been successfully created. [7/26/12 14:35:09:957 MSD] 0000000d ActivationSpe I CWWJC0523I: The Message Endpoint for ActivationSpec jms/TestMDB-TestQueueActivationSpec (com.ibm.ws.sib.api.jmsra.impl.JmsJcaActivationSpecImpl) and MDB Application MDBTest#MDBTest_EJB.jar#TestMDB is activated. [7/26/12 14:35:09:957 MSD] 0000000d EJBContainerI I CWWSR0057I: EJB jar started: MDBTest_EJB.jar [7/26/12 14:35:09:957 MSD] 0000000d ApplicationMg A CWWSR0221I: Application started: MDBTest [7/26/12 14:35:09:957 MSD] 0000000d CompositionUn A CWWSR0191I: Composition unit WebSphere:cuname=MDBTest in BLA WebSphere:blaname=MDBTest started. [7/26/12 15:35:46:707 MSD] 0000040c TestMDB I ru.ts.ehabarov.j2ee.TestMDB <init> Initialized [7/26/12 15:35:46:754 MSD] 0000040c TestMDB I ru.ts.ehabarov.j2ee.TestMDB onMessage onMessage() [7/26/12 15:35:46:754 MSD] 0000040c TestMDB I ru.ts.ehabarov.j2ee.TestMDB onMessage Message type is null [7/26/12 15:35:46:754 MSD] 0000040c TestMDB I ru.ts.ehabarov.j2ee.TestMDB onMessage Message ID is ID:aa340b0b7b6c5da5827e4f53110a134f0000000000000001 Версия сервера: versionInfoWVER0010I: Copyright (c) IBM Corporation 2002, 2005, 2008; All rights reserved. WVER0012I: VersionInfo reporter version 1.15.5.1, dated 6/15/11 -------------------------------------------------------------------------------- IBM WebSphere Application Server Product Installation Status Report -------------------------------------------------------------------------------- Report at date and time July 26, 2012 3:41:46 PM MSD Installation -------------------------------------------------------------------------------- Product Directory C:\IBM\WebSphere\AppServer Version Directory C:\IBM\WebSphere\AppServer\properties\version DTD Directory C:\IBM\WebSphere\AppServer\properties\version\dtd Log Directory C:\IBM\WebSphere\AppServer\logs Backup Directory C:\IBM\WebSphere\AppServer\properties\version\nif\backup TMP Directory C:\DOCUME~1\db2admin\LOCALS~1\Temp Product List -------------------------------------------------------------------------------- ND installed Installed Product -------------------------------------------------------------------------------- Name IBM WebSphere Application Server - ND Version 7.0.0.19 ID ND Build Level cf191132.09 Build Date 8/13/11 Architecture AMD (64 bit) -------------------------------------------------------------------------------- End Installation Status Report -------------------------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2012, 15:45 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаров, IBM WebSphere Application Server - ND Version 7.0.0.24 Удалил все приложения, очередь, фабрику и спецификацию активации. Посмотрел по трассировке, проскакивал постоянный откат транзакции после попытки получения сообщения, причём на уровне контейнера. До метода onMessage дело не доходило. Создал всё по новой, но в названиях убрал символ '-' и MDB работает... Истинная причина так и осталась покрыта мраком. По поводу activation spec и аннтотаций, смотря какой сервер приложений. С точки зрения разработки мне для GlassFish и для WebSphere удобней всё описывать в аннотациях, поскольку я сразу вижу с какой очередью/фабрикой соединений идёт работа. Для того они и были введены в EJB 3.0. Переопределить параметры описанные в аннотациях можно всегда с помощью файла дескриптора, это указано в спецификации (если есть дескриптор, то аннотации игнорируются). Теперь столкнулся с другой проблемой - MDB не откатывает транзакцию после RuntimeException. Код: 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. Rollback test не проходит, сообщение не возвращается обратно в очередь. В логе дважды появляются записи вида: [7/27/12 11:39:46:980 MSK] 0000004d TestMDB I ru.test.TestMDB onMessage [TestMDB] rollback test [7/27/12 11:39:46:986 MSK] 0000004d LocalExceptio E CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "onMessage" on bean "BeanId(TestEAR#TestMDB.jar#TestMDB, null)". Exception data: java.lang.RuntimeException: rollback test at ru.test.TestMDB.onMessage(TestMDB.java:42) at com.ibm.ejs.container.MessageEndpointHandler.invokeMdbMethod(MessageEndpointHandler.java:1093) at com.ibm.ejs.container.MessageEndpointHandler.invoke(MessageEndpointHandler.java:778) at $Proxy68.onMessage(Unknown Source) at com.ibm.ws.sib.api.jmsra.impl.JmsJcaEndpointInvokerImpl.invokeEndpoint(JmsJcaEndpointInvokerImpl.java:233) at com.ibm.ws.sib.ra.inbound.impl.SibRaDispatcher.dispatch(SibRaDispatcher.java:900) at com.ibm.ws.sib.ra.inbound.impl.SibRaSingleProcessListener$SibRaWork.run(SibRaSingleProcessListener.java:552) at com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:399) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1604) MDB дважды пытается обработать это сообщение и успокаивается. В настройках Activation Spec опция "Automatically stop endpoints on repeated message failure" отключена. По идее он должен постоянно откатывать транзакцию MDB, потому что метод onMessage не был выполнен до конца, попутно возвращая сообщение в очереди и затем выполнять re-delivery. Но этого не происходит и сообщение больше не появляется в очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 12:08 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
Швыряние EJBException тоже не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 14:39 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
Как оказалось, сообщение падало в SYSTEM.Exception.Destination. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 14:42 |
|
||
|
WAS 7, не работает MDB
|
|||
|---|---|---|---|
|
#18+
z0z0iberg, 1. Очень нехорошо, если MDB выкидывает Exception. Если нужно откатить транзакцию, то это делается через MessageDrivenContext, а Exception в MDB - это сигнал к останову обработчика, т.к. говорит о том, что случилось нечто "непредсказуемое", т.е. непредусмотренное логикой обработки MDB. 2. С учетом того, что в Activation Spec останов MDB заблокирован, то количество повторных "прокатов" сообщения зависит от настроек Destination в SIB. Там есть параметр "Maximum failed deliveries per message". По умолчанию выполняется 5 попыток. Куда именно попадет такое сообщение зависит от другой настройки в разделе "Exception destination", по умолчанию "System". Вот пример кода для выполнения Rollback Код: 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. 56. 57. 58. 59. 60. 61. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=37895745&tid=1601773]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 312ms |
| total: | 469ms |

| 0 / 0 |
