Для меня работали следующие подходы:
- Решение с помощью 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 и фабрик соединений.Например:
- Очередь JMS: до
queue/MySuperJMSQueue
, после: java:/jms/queue/MySuperJMSQueue
- Фабрика соединений 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