2016-02-25 15 views
8

Spring 4とActiveMQを使用して非XML JMSリスナーを実装しようとしています。Spring 4.2アノテーションとActiveMQを使用した@JmsListenerの認証

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. 

だから、宛先への接続は、ユーザ名とパスワードのヌルで作られている:私の問題は、私は私のクライアントで、次のエラーを取得しておくことです。私はdestinationResolverを正しく設定していないかもしれないと思うが、これを解決する仕組みが残っている。誰でもこの問題を解決する手助けができますか?

私の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; 
} 

リスナー:

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

答えて

1

あなたはブローカー側のすべての機能を変更していない場合は、お使いのJNDIでも

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

の下を試してみてください.propertiesでは、プロパティuserName = adminとpassword = adminを追加できます

+0

こんにちはサンダー。アドバイスをいただきありがとうございます。これらの値はすでに設定されています。私は宛先/セッションがどのように作成されているかに奇妙なことがあると思います。 – Dan

関連する問題