Вопрос или проблема
Это продолжение моего предыдущего вопроса: https://stackoverflow.com/staging-ground/79353883. Я обновил версию Wildfly до 26 и перенес весь код и библиотеки для работы с Jakarta. Когда я попытался запустить сервер Wildfly, появилось сообщение об ошибке: service jboss.ejb.default-resource-adapter-name-service не найден. Я попытался сделать то, что описано здесь: org.jboss.msc.service.ServiceNotFoundException: Service service jboss.ejb.default-resource-adapter-name-service не найдено, но это вызвало другую ошибку. Я понял, что мне нужно добавить подсистему messaging-activemq в мой standalone.xml для указания имени адаптера. Однако появляется ошибка: WFLYCTL0362: Необходимые возможности для ресурса ‘/subsystem=messaging-activemq/server=default’ недоступны.
Вот код подсистемы activemq:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:5.0">
<server name="default">
<security-setting name="#">
<role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
</security-setting>
<address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="http-connector">
<credential-reference store="applicationKS" alias="localhost"/>
</pooled-connection-factory>
</server>
А вот мой standalone.xml для справки: (я удалил теги extensions и management, чтобы влезть в пределы допустимого количества символов)
<?xml version="1.0"?>
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
h2
sa
sa
org.h2.jdbcx.JdbcDataSource
false
${jboss.bind.address:127.0.0.1}
<subsystem xmlns="urn:jboss:domain:weld:4.0"/>
</profile>
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
</outbound-socket-binding>
</socket-binding-group>
Я пытался удалить все экземпляры “других” доменов безопасности в standalone, но ошибка оставалась прежней. Возможно, используются конфликтующие библиотеки, и даже несмотря на то, что я проверил возможности и удалил устаревшие библиотеки, эта проблема все еще может быть непредсказуемой. Спасибо за вашу помощь!
Либо вы включаете безопасность и вам нужно определить elytron security domain 1 для использования, либо вам нужно отключить безопасность 2 на подсистеме обмена сообщениями
.
Ответ или решение
При работе с сервером приложений WildFly 26 и при переходе на стек Jakarta, вы столкнулись с ошибкой, связанной с отсутствием ресурса jboss.ejb.default-resource-adapter-name-service
. Эта ошибка часто возникает из-за неправильно настроенного или отсутствующего адаптера ресурсов, необходимого для работы модулей EJB или JMS. Рассмотрим причины этой ошибки и возможные пути решения с акцентом на конкретных примерах и применением полученных знаний.
Теория
WildFly — это мощный и универсальный сервер приложений, который поддерживает множество стандартов Java EE и Jakarta EE, включая EJB и JMS. Для обеспечения работы JMS требуется подходящий адаптер ресурсов, который определяет взаимодействие с брокерами сообщений, такими как ActiveMQ. В вашем случае, ошибка org.jboss.msc.service.ServiceNotFoundException: Service service jboss.ejb.default-resource-adapter-name-service not found
указывает на то, что система не может найти требуемую службу адаптера ресурсов.
Эта проблема, как правило, связана с конфигурацией подсистемы messaging-activemq
, которая управляет поддержкой JMS в WildFly. Именно эта подсистема отвечает за настройку брокера сообщений, средств безопасности и адаптеров ресурсов.
Пример
В предоставленном вами фрагменте конфигурации присутствуют ключевые элементы настройки подсистемы messaging-activemq
. Однако важный аспект — это правильная настройка домена безопасности Elytron или отключение безопасности, если она не требуется.
<subsystem xmlns="urn:jboss:domain:messaging-activemq:5.0">
<server name="default">
<!-- Настройки безопасности -->
<security-setting name="#">
<role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
</security-setting>
<address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="http-connector">
<credential-reference store="applicationKS" alias="localhost"/>
</pooled-connection-factory>
</server>
</subsystem>
В данном примере подсистема настроена со стандартными для WildFly элементами, такими как очереди JMS и фабрики соединений.
Применение
Чтобы решить проблему, попробуйте следующие шаги:
-
Проверка и добавление секции безопасности Elytron: Если система требует настройки безопасности, убедитесь, что вы добавили Elytron security domain в конфигурацию подсистемы. Это возможно через добавление соответствующих настроек
<elytron-domain>
. -
Отключение безопасности: Если безопасность в данной тестовой среде не требует обеспечения, можно попробовать отключить её в конфигурации подсистемы. Измените атрибут
security-enabled
наfalse
:<subsystem xmlns="urn:jboss:domain:messaging-activemq:5.0"> <server name="default" security-enabled="false"> ... </server> </subsystem>
-
Проверка модуляции зависимости: Убедитесь, что все используемые библиотеки и модули совместимы с новой версией WildFly. Некоторые устаревшие библиотеки могут конфликтовать с новой архитектурой серверного приложения.
-
Обновление и проверка конфигурации: Проверьте другие части вашего
standalone.xml
, в частности, правильность настройки и совместимость используемых модулей и расширений с текущей версией WildFly. -
Тестирование и мониторинг журнала: После внесения изменений перезапустите сервер и проверьте журналы на наличие новых ошибок или подтверждения устранения возникшей проблемы.
Таким образом, следуя этим рекомендациям, вы сможете решить возникшую проблему и настроить ваш WildFly сервер для правильной работы с необходимыми адаптерами ресурсов в среде Jakarta EE. Следуйте детальным инструкциям, и ваша система заработает стабильно и эффективно.