Конфигурация Wildfly JMS - PullRequest
       42

Конфигурация Wildfly JMS

0 голосов
/ 14 декабря 2018

У меня проблемы с миграцией со старого JBoss на Wildfly 14 (или какую-либо другую последнюю версию).
В настоящее время я застрял в конфигурации JMS.
Вот конфигурация:

  • В <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> Я добавил два определения очереди со следующим кодом
    <jms-queue name="MyQueue" entries="java:/jms/queue/MyQueue"/> <jms-queue name="OtherQueue" entries="java:/jms/queue/OtherQueue"/>
  • В упомянутом выше определении подсистемы I 'Мы добавили следующее определение фабрики соединений <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm" />
  • В коде инициализации моего приложения у меня есть код, который создает экземпляры этих очередей jms.

В моем классе у меня есть следующие поля

private static final String JMS_CONNECTION_FACTORY_JNDI_NAME = "java:/ConnectionFactory";
@Resource(mappedName=JMS_CONNECTION_FACTORY_JNDI_NAME)
ConnectionFactory factory;

и в этом классе у меня есть следующий метод:

public void openJmsSession() {
    try {
        connection = factory.createConnection();
        Context jndiContext = getInitialContext();
        queue =(Queue) jndiContext.lookup(JMS_MAIL_QUEUE_NAME);
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    } catch (NamingException e) {
        logger.error("Naming exception during opening JMS session", e);
    } catch (JMSException e) {
        logger.error("JMS exception during opening JMS session", e);
    }
}

Строка connection = factory.createConnection(); выбрасывает NPE, потому что factory is null.

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Если вам просто необходим доступ к очереди JMS, возможно, есть более короткий способ сделать это (используя упрощенный API JMS 2.0):

Config:

<jms-queue name="esb.inbound.test" entries="java:/jms/queue/esb.inbound.test"/>

Код:

@Resource(mappedName="java:/jms/queue/esb.inbound.test")
private Queue inboundQueue;
0 голосов
/ 27 февраля 2019

Для меня работали следующие подходы:

  • Решение с помощью EJB
    Чтобы сделать это с помощью EJB, вы должны пометить ваш бин @Stateless и @LocalBean аннотаций.После добавления этого ваш бин станет объектом, управляемым контейнером, и вы можете на него положиться.Также при создании исходного контекста не следует указывать какие-либо свойства.Начальное создание контекста должно выглядеть следующим образом:
    private static Context getInitialContext() throws NamingException { return new InitialContext(); }
  • Решение без EJB или другой магии

Добавитьwildfly-ejb-client-bom, wildfly-jms-client-bom, wildfly-naming для ваших зависимостей maven.В вашем клиентском коде используйте полные JNDI-имена очередей JMS и фабрик соединений.Например:

  1. Очередь JMS: до queue/MySuperJMSQueue, после: java:/jms/queue/MySuperJMSQueue
  2. Фабрика соединений JMS: до ConnectionFactory, после: java:/ConnectionFactory

Измените файл конфигурации (в моем случае это standalone-full.xml), добавив новую очередь JMS через следующую строку:

<jms-queue name="MySuperJMSQueue" entries="java:/jms/queue/MySuperJMSQueue"/>

Измените параметры, которые использовались для первоначальной реализации контекста:

private static Context getInitialContext() throws NamingException {
    Properties props = new Properties();
    props.put( Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
    props.put( Context.URL_PKG_PREFIXES, "org.jboss.as.naming.interfaces:org.jboss.ejb.client.naming");
    return new InitialContext(props);
}

После этой манипуляции вы можете выполнять работу с JMS.Просто пример открытия сеанса JMS:

        Context jndiContext = getInitialContext();
        ConnectionFactory factory = (ConnectionFactory) jndiContext.lookup(JMS_CONNECTION_FACTORY_JNDI_NAME);
        connection = factory.createConnection();
        queue =(Queue) jndiContext.lookup(JMS_QUEUE_NAME);
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Для более подробной информации проверьте документ, который находится по следующему пути: <WildFly 14 home folder>\bin\client\README-EJB-JMS.txt

0 голосов
/ 14 декабря 2018

Имея следующую конфигурацию:

<connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>

Я использую этот код:

@Resource(mappedName = "java:/ConnectionFactory")
private static ConnectionFactory connectionFactory;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...