2016-02-25 17 views
8

Spring 4 ve ActiveMQ kullanarak XML olmayan bir JMS dinleyicisini uygulamaya çalışın.Spring 4.2 ek açıklamaları ve ActiveMQ kullanılarak @JmsListener kimlik doğrulaması ve 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. 

Yani hedefe bağlantı kullanıcı adı ve şifre Boş ile yapılıyor: Sorunum müvekkilimle aşağıdaki hatayı almaya devam olmasıdır. DestinationResolver'ı doğru şekilde ayarlamamış olabilirim ama bunu nasıl çözeceğimi düşünerek takılıyorum. Bunu düzeltmeme yardım eden var mı?

Benim 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; 
} 

dinleyici: Eğer komisyoncu ucunda herhangi bir özelliği değiştirmediyseniz

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

cevap

1

, sizin JNDI da

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

altında deneyin .properties özelliklerini ekleyebilirsiniz userName = admin ve password = admin yerine

+0

Merhaba Sundar. Tavsiye için teşekkürler. Bu değerler zaten ayarlanmış durumda. Hedef/oturumun nasıl yaratıldığına dair garip bir şey olduğunu düşünüyorum. – Dan

İlgili konular