jboss.ejb.default-resource-adapter-name-service wildfly 26

Вопрос или проблема

Это продолжение моего предыдущего вопроса: 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 и фабрики соединений.

Применение

Чтобы решить проблему, попробуйте следующие шаги:

  1. Проверка и добавление секции безопасности Elytron: Если система требует настройки безопасности, убедитесь, что вы добавили Elytron security domain в конфигурацию подсистемы. Это возможно через добавление соответствующих настроек <elytron-domain>.

  2. Отключение безопасности: Если безопасность в данной тестовой среде не требует обеспечения, можно попробовать отключить её в конфигурации подсистемы. Измените атрибут security-enabled на false:

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:5.0">
        <server name="default" security-enabled="false">
            ...
        </server>
    </subsystem>
  3. Проверка модуляции зависимости: Убедитесь, что все используемые библиотеки и модули совместимы с новой версией WildFly. Некоторые устаревшие библиотеки могут конфликтовать с новой архитектурой серверного приложения.

  4. Обновление и проверка конфигурации: Проверьте другие части вашего standalone.xml, в частности, правильность настройки и совместимость используемых модулей и расширений с текущей версией WildFly.

  5. Тестирование и мониторинг журнала: После внесения изменений перезапустите сервер и проверьте журналы на наличие новых ошибок или подтверждения устранения возникшей проблемы.

Таким образом, следуя этим рекомендациям, вы сможете решить возникшую проблему и настроить ваш WildFly сервер для правильной работы с необходимыми адаптерами ресурсов в среде Jakarta EE. Следуйте детальным инструкциям, и ваша система заработает стабильно и эффективно.

Оцените материал
Добавить комментарий

Капча загружается...