вторник, 30 июня 2015 г.

Ошибка при запуске NodeAgent'а: A conflicting IP address and port, хотя все проверено, конфликтов нет

При запуске агента узла (nodeagent) сервера приложений WebSphere Application Server возможна следующая ошибка, приводящая к аварийному останову данного компонента:


Trace: 2015/07/01 10:01:46.318 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.hamanager.coordinator.dcs.CoreStackMembershipManager
ExtendedMessage: BBOO0220E: HMGR0031E: A conflicting IP address and port has been detected for the DCS_UNICAST_ADDRESS end point.
czcell\cznoded\nodeagent, czcell\cznodeb\nodeagent members are configured to use the IP address and port combination of IP::PORT.


Далее могут находиться следующие записи:


Trace: 2015/07/01 13:26:56.778 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl
ExtendedMessage: BBOO0222I: HMGR0228I: The Coordinator is not an Active Coordinator for core group DefaultCoreGroup. The active coordinator set is

... trace skipped

Trace: 2015/07/01 13:26:56.973 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.ws.runtime.WsServerImpl
ExtendedMessage: BBOO0220E: WSVR0009E: Error occurred during startup
com.ibm.ws.exception.RuntimeError: Unable to start the CoordinatorComponentImpl

... trace skipped

Trace: 2015/07/01 10:01:46.524 02 t=8E5E88 c=UNK key=S2 tag= (13007004)
SourceId: com.ibm.wsspi.runtime.component.WsComponentImpl
ExtendedMessage: BBOO0222I: WSVR0401W: Unable to deregister the MBean


В FFDC при этом могут быть следующие записи:


[7/1/15 10:01:46:348 GMT] FFDC Exception:com.ibm.wsspi.hamanager.HAException SourceId:com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl ProbeId:255
Reporter:com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl@b220dd73
com.ibm.wsspi.hamanager.HAException: This process has conflicting ip:port configuration with another member. See previous messages for more info.
at com.ibm.ws.hamanager.coordinator.dcs.CoreStackMembershipManager.(CoreStackMembershipManager.java:147)
at com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl.(DCSPluginImpl.java:231)
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:349)

...

[7/1/15 10:01:46:430 GMT] FFDC Exception:com.ibm.wsspi.hamanager.datastack.DataStackException SourceId:
com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl ProbeId:288 Reporter:com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl@f036c22f
com.ibm.wsspi.hamanager.datastack.DataStackException: Failure creating core stack
at com.ibm.ws.hamanager.coordinator.impl.DCSPluginImpl.(DCSPluginImpl.java:263)
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:349)

...

[7/1/15 10:01:46:445 GMT] FFDC Exception:com.ibm.wsspi.hamanager.HAInternalStateException SourceId:
com.ibm.ws.hamanager.runtime.CoordinatorComponentImpl ProbeId:234 Reporter:com.ibm.ws.hamanager.runtime.CoordinatorComponentImpl@331d9876
com.ibm.wsspi.hamanager.HAInternalStateException: failure creating the Coordinator
at com.ibm.ws.hamanager.coordinator.impl.CoordinatorImpl.(CoordinatorImpl.java:356)
at com.ibm.ws.hamanager.coordinator.corestack.CoreStackFactoryImpl.createDefaultCoreStack(CoreStackFactoryImpl.java:88)


Т.е. нам говорят, что невозможно запустить требуемый nodeagent, потому что другой nodeagent имеет пересекающийся по значениям набор портов, однако это - не так!. Т.е. возможно когда-то по ошибке или специально было создано две node с пересекающимся набором портов у соответствующих nodeagent'ов, но эта ситуация давно исправлена, почему же компонент продолжает аварийно завершаться при запуске?

Все дело в файле PROFILEDIR_A/config/cells/CELL/nodes/NODE_B/serverindex.xml. Так как nodeagent аварийно завершает свою работу до запуска синхронизации конфигурации, то у него в данном каталоге остается старый конфигурационный файл serverindex.xml, соответственно компонент продолжает считать, что есть пересечение по значениям ip:port, этакая фантомная боль. Важно обратить внимание, что профиль в данном случае относится к запускаемой node, а в каталоге с профилем нужно найти подкаталог, относящийся к конфликтующей node, там будут два файла: node-metadata.properties и serverindex.xml. Необходимо вручную заменить файл serverindex.xml для соответствующей node, взяв его из профиля с менеджером развертывания (DMGR): .../DeploymentManager/profiles/default/config/cells/CELL/nodes/NODE_B/serverindex.xml.

P.S. Хотел спросить читателей, будет ли им полезна серия заметок по решению вопросов с замечательным сервером приложений IBM WebSphere Application Server? Какие еще компоненты стека нашей корпорации вам были бы интересны: Process Server, Business Process Manager (BPM), Portal, Lombardi или что-нибудь еще? Пожалуйста, ответьте в комментариях. Спасибо.

Понравилось сообщение - подпишитесь на блог

четверг, 25 июня 2015 г.

Ошибка com.ibm.websphere.ssl.SSLException: Cannot get security object from WCCM при запуске WebSphere Application Server

Начну новую серию зарисовок - коротких сообщений, описывающих достаточно стандартные проблемы, с которыми мне пришлось столкнуться, и методы их решения. Может быть буду делиться какими-то лучшими практиками. Начну с проблемы, которая может возникнуть при запуске сервера приложений WebSphere Application Server:


Caused by: com.ibm.websphere.ssl.SSLException: Cannot get security object from WCCM.
at com.ibm.ws.ssl.config.SSLConfigManager.initializeServerSSL(SSLConfigManager.java:212)
at com.ibm.ws.ssl.core.SSLComponentImpl.initialize(SSLComponentImpl.java:145)
... 31 more


Данная проблема возникает из-за того, что файл ...\profiles\PROFILEDIR\config\cells\CELL\security.xml испорчен. Решить проблему можно либо восстановлением данного файла из резервной копии (рекомендуемый вариант), либо копированием его из другого профиля, входящего в данную ячейку: ...\profiles\APPSRV_PROFILEDIR\config\cells\CELL\security.xml.

Понравилось сообщение - подпишитесь на блог

среда, 10 июня 2015 г.

Как может выглядеть JMS 2.1

Интересно, как много коллег, читающих мой блог, помнят, сколько времени жила и безраздельно властвовала спецификация JMS 1.1, предлагающая разработчикам для отправки или приема сообщения написать довольно громоздкий блок кода, больше напоминающий известную притчу о том, что Авраам родил Исаака, Исаак - Иакова, Иаков - Иуду, а потом у них что-то случилось и рожать стали женщины?

Появившаяся в составе Java EE 7 спецификация JMS 2.0 существенно улучшила ситуацию, особенно в части, отвечающей за корректное закрытие ресурсов. Однако нет предела совершенству и сейчас сообщество активно работает над новой версией спецификации - JSR 368 - JMS 2.1. Код подписчика на топик/очередь сообщений, написанный в соответствии с новой спецификацией, может выглядеть следующим образом:



Видно, что развитие спецификации идет по пути упрощения кодирования. Теперь управляемый сообщениями компонент (Message-Driven Bean) не обязан реализовывать интерфейс MessageListener, а метод, в котором реализуется обработка сообщений, не обязан называться onMessage. "Реагировать" на сообщение может любой метод, аннотированный как @JMSListener. Другое интересное новшество - произвольный набор параметров у метода, аннотированного как @JMSListener: разработчик избавлен от необходимости разбирать сообщение внутри данного метода-слушателя вручную (особенное счастье - отсутсвие тягомотины вида TextMessage textMessage = (TextMessage) message;), достаточно лишь объявить произвольный набор формальных параметров метода, аннотировав каждый из них должным образом. Мне лично это напоминает реализацию JAX-WS веб-сервиса: разработчик избавлен от необходимости работать в своем коде с неким SOAPEnvelope и вручную перемещаться по его вложенным элементам с целью найти значения входных параметров. Эту однообразную работу берет на себя среда исполнения, достаточно просто сказать ей какие параметры нас интересуют и как они называются в SOAP-сообщении, используя аннотацию @WebParam. Теперь подобное будет реализовано и в JMS, что лично меня сильно радует, я выступаю за однообразие при решении типовых проблем. В конце-концов парсить сообщения - это не работа для человека, а как говорят в IBM: "Человек должен думать, а компьютер работать".

Исходный код интерфейсов и аннотаций, составляющих спецификацию, доступен на сайте java.net.

Понравилось сообщение - подпишитесь на блог