2016-02-25 9 views
8

Der Versuch, einen Nicht-XML-JMS-Listener mit Spring 4 und ActiveMQ zu implementieren. Mein Problem ist, dass ich die folgenden Fehler mit meinem Klienten erhalte:Authentifizierung für @ JmsListener mit Spring 4.2-Anmerkungen und ActiveMQ

Setup of JMS message listener invoker failed for destination 'topic.FromJndiProperties' [...] 
Cause: The JMS connection has failed: Force close due to SecurityException on connect. 
Cause: User name [null] or password is invalid. 

So ist die Verbindung zum Ziel mit Benutzername und Passwort null gemacht wird. Ich denke, dass ich das ZielResolver nicht korrekt eingerichtet habe, aber ich bin dabei, herauszufinden, wie ich das beheben kann. Kann mir jemand helfen, das zu beheben?

Mein AppConfig:

@Autowired 
private Environment env; 

@Autowired 
private BeanFactory springContextBeanFactory; 

@Bean 
public DefaultJmsListenerContainerFactory myListenerContainerFactory() throws NamingException { 

    Properties props = new Properties(); 
    props.setProperty(Context.INITIAL_CONTEXT_FACTORY, env.getProperty("java.naming.factory.initial")); 
    props.setProperty(Context.PROVIDER_URL, env.getProperty("java.naming.provider.url")); 
    props.setProperty(Context.SECURITY_PRINCIPAL, env.getProperty("java.naming.security.principal")); 
    props.setProperty(Context.SECURITY_CREDENTIALS, env.getProperty("java.naming.security.credentials")); 

    Context jndiContext = new InitialContext(props);; 
    ConnectionFactory connectionFactory = (ConnectionFactory) jndiContext.lookup("ConnectionFactory"); 

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); 
    factory.setConnectionFactory(connectionFactory); 
    factory.setDestinationResolver(new BeanFactoryDestinationResolver(springContextBeanFactory)); 
    factory.setPubSubDomain(true); 
    factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE); 

    return factory; 
} 

Der Zuhörer:

@JmsListener(containerFactory = "myListenerContainerFactory", destination = "topic.FromJndiProperties") 
public void receiveMessage(String message) { 
    try { 
     System.out.println("Received <" + message + ">"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Antwort

1

Wenn Sie keine Features auf dem Broker Ende geändert haben, versuchen Sie die folgenden

props.setProperty(Context.SECURITY_PRINCIPAL,"admin" 
props.setProperty(Context.SECURITY_CREDENTIALS, "admin"); 

auch in Ihrem jndi .properties können Sie stattdessen die Eigenschaften userName = admin und password = admin hinzufügen

+0

Hallo Sundar. Danke für den Hinweis. Diese Werte werden jedoch bereits eingestellt. Ich denke, es ist etwas seltsam, wie das Ziel/die Session erstellt wird. – Dan

Verwandte Themen