Как подключить существующую JMS, настроенную как JNDI, в JBOSS EAP 7 из приложения весенней загрузки? - PullRequest
1 голос
/ 25 января 2020

У меня есть приложение весенней загрузки, которое должно подключиться к существующему JMS, настроенному как JNDI в JBOSS eap 7. Вот мой код:

private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
private static final String CONNECTION_FACTORY = "jms/RemoteConnectionFactory";


@Bean
public ConnectionFactory connectionFactory() {
    try {
        System.out.println("Retrieving JMS queue with JNDI name: " + CONNECTION_FACTORY);
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName(CONNECTION_FACTORY);
        jndiObjectFactoryBean.setJndiEnvironment(getEnvProperties());
        jndiObjectFactoryBean.afterPropertiesSet();

        return (QueueConnectionFactory) jndiObjectFactoryBean.getObject();

    } catch (NamingException e) {
        System.out.println("Error while retrieving JMS queue with JNDI name: [" + CONNECTION_FACTORY + "]");
        e.printStackTrace();
    } catch (Exception ex) {
        System.out.println("Error");
        ex.printStackTrace();
    }
    return null;
}

Properties getEnvProperties() {
    Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
    env.put(Context.PROVIDER_URL, "http-remoting://<<servername>>:8080");
    env.put(Context.SECURITY_PRINCIPAL, "user");
    env.put(Context.SECURITY_CREDENTIALS, "password");
    return env;
}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    JndiDestinationResolver jndiDestinationResolver = new JndiDestinationResolver();
    jndiDestinationResolver.setJndiEnvironment(getEnvProperties());
    factory.setDestinationResolver(jndiDestinationResolver);
    return factory;
}

Я получаю следующую ошибку:

"javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [http-remoting://<<servername>>:8080 (java.net.ConnectException: Connection refused: no further information)]"

1 Ответ

1 голос
/ 27 января 2020

Вам не нужно создавать конфигурацию вручную.

Spring Boot поддерживает JNDI.

Вы можете использовать ConnectionFactory следующим образом:

spring.jms.jndi-name=java:/jms/RemoteConnectionFactory

Пожалуйста, также взгляните на документацию:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot -features-jms-jndi

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