2014-09-09 6 views
3

JBoss AS 7.1.1에 샘플 JMS 소비자, 제작자 예제를 작성 중입니다. 나는 신중하게 튜토리얼을 따라 다음과 같이 수행 - 독립 - full.xml 파일에 존재JBoss JMS : ERROR : JBREM000200 : 원격 연결 실패 : javax.security.sasl.SaslException : 인증 실패 : 서버가

<security-settings> 
     <security-setting match="#"> 
      <permission type="send" roles="testrole guest" /> 
      <permission type="consume" roles="testrole guest" /> 
     </security-setting> 
    </security-settings> 

나는 기본 ConnectionFactory에와 대상을 사용하고

사용자 testuser를/testPassword를가 testrole 및 testrole로 만들어집니다 독립-full.xml 파일에서 언급 한 바와 같이 -

<dependency> 
     <groupId>org.hornetq</groupId> 
     <artifactId>hornetq-core</artifactId> 
     <version>2.0.0.GA</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hornetq</groupId> 
     <artifactId>hornetq-jms</artifactId> 
     <version>2.0.0.GA</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hornetq</groupId> 
     <artifactId>hornetq-transports</artifactId> 
     <version>2.0.0.GA</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.netty</groupId> 
     <artifactId>netty</artifactId> 
     <version>3.1.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.javaee</groupId> 
     <artifactId>jboss-jms-api</artifactId> 
     <version>1.1.0.GA</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss</groupId> 
     <artifactId>jboss-ejb-client</artifactId> 
     <version>2.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss</groupId> 
     <artifactId>jboss-remote-naming</artifactId> 
     <version>2.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.xnio</groupId> 
     <artifactId>xnio-api</artifactId> 
     <version>3.2.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.xnio</groupId> 
     <artifactId>xnio-nio</artifactId> 
     <version>3.2.3.Final</version> 
    </dependency> 
- 여기
<connection-factory name="InVmConnectionFactory"> 
     <connectors> 
      <connector-ref connector-name="in-vm" /> 
     </connectors> 
     <entries> 
      <entry name="java:/ConnectionFactory" /> 
     </entries> 
    </connection-factory> 
    <connection-factory name="RemoteConnectionFactory"> 
     <connectors> 
      <connector-ref connector-name="netty" /> 
     </connectors> 
     <entries> 
      <entry name="RemoteConnectionFactory" /> 
      <entry name="java:jboss/exported/jms/RemoteConnectionFactory" /> 
     </entries> 
    </connection-factory> 

    <jms-queue name="testQueue"> 
     <entry name="queue/test" /> 
     <entry name="java:jboss/exported/testQueue" /> 
    </jms-queue> 

는 POM 파일입니다

package com.howtodoinjava; 

import java.util.logging.Logger; 
import java.util.Properties; 

import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.MessageConsumer; 
import javax.jms.MessageProducer; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

public class HelloWorldJMS { 
    private static final Logger log = Logger.getLogger(HelloWorldJMS.class.getName()); 

    // Set up all the default values 
    private static final String DEFAULT_MESSAGE = "Hello, World!"; 
    private static final String DEFAULT_CONNECTION_FACTORY = "RemoteConnectionFactory"; 
    private static final String DEFAULT_DESTINATION = "testQueue"; 
    private static final String DEFAULT_MESSAGE_COUNT = "1"; 
    private static final String DEFAULT_USERNAME = "testuser"; 
    private static final String DEFAULT_PASSWORD = "testpassword"; 
    private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
    private static final String PROVIDER_URL = "remote://localhost:4447"; 

    public static void main(String[] args) throws Exception { 

     ConnectionFactory connectionFactory = null; 
     Connection connection = null; 
     Session session = null; 
     MessageProducer producer = null; 
     MessageConsumer consumer = null; 
     Destination destination = null; 
     TextMessage message = null; 
     Context context = null; 

     try { 
      // Set up the context for the JNDI lookup 
      final Properties env = new Properties(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
      env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL)); 
      env.put(Context.SECURITY_PRINCIPAL, System.getProperty("username", DEFAULT_USERNAME)); 
      env.put(Context.SECURITY_CREDENTIALS, System.getProperty("password", DEFAULT_PASSWORD)); 
      env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); 
      context = new InitialContext(env); 

      // Perform the JNDI lookups 
      String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY); 
      log.info("Attempting to acquire connection factory \"" + connectionFactoryString + "\""); 
      connectionFactory = (ConnectionFactory) context.lookup(connectionFactoryString); 

      String destinationString = System.getProperty("destination", DEFAULT_DESTINATION); 
      destination = (Destination) context.lookup(destinationString); 

      // Create the JMS connection, session, producer, and consumer 
      connection = connectionFactory.createConnection(System.getProperty("username", DEFAULT_USERNAME), System.getProperty("password", DEFAULT_PASSWORD)); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      producer = session.createProducer(destination); 
      consumer = session.createConsumer(destination); 
      connection.start(); 

      int count = Integer.parseInt(System.getProperty("message.count", DEFAULT_MESSAGE_COUNT)); 
      String content = System.getProperty("message.content", DEFAULT_MESSAGE); 

      log.info("Sending " + count + " messages with content: " + content); 

      // Send the specified number of messages 
      for (int i = 0; i < count; i++) { 
       message = session.createTextMessage(content); 
       producer.send(message); 
      } 

      // Then receive the same number of messages that were sent 
      for (int i = 0; i < count; i++) { 
       message = (TextMessage) consumer.receive(5000); 
       log.info("Received message with content " + message.getText()); 
      } 
     } catch (Exception e) { 
      log.severe(e.getMessage()); 
      throw e; 
     } finally { 
      if (context != null) { 
       context.close(); 
      } 

      // closing the connection takes care of the session, producer, and consumer 
      if (connection != null) { 
       connection.close(); 
      } 
     } 
    } 
} 

내 보스 AS 나는이 응용 프로그램을 실행하고 곳에서 동일한 시스템에서 실행되는 것을 알하시기 바랍니다 - - 그게 내가 원격 서버로 로컬 호스트를 사용하고있다

여기 내 예제 코드입니다.

standalone-full.xml로 서버를 시작했습니다. 나는 응용 프로그램을 실행하면

, 그것은 다음과 같은 오류를주고있다 -하지만 도움 -

Sep 9, 2014 12:11:53 PM org.xnio.Xnio <clinit> 
INFO: XNIO version 3.2.3.Final 
Sep 9, 2014 12:11:53 PM org.xnio.nio.NioXnio <clinit> 
INFO: XNIO NIO Implementation Version 3.2.3.Final 
Sep 9, 2014 12:11:53 PM org.jboss.remoting3.EndpointImpl <clinit> 
INFO: JBoss Remoting version 4.0.0.Final 
Sep 9, 2014 12:11:53 PM com.howtodoinjava.HelloWorldJMS main 
INFO: Attempting to acquire connection factory "RemoteConnectionFactory" 
Sep 9, 2014 12:11:53 PM org.jboss.remoting3.remote.RemoteConnection handleException 
ERROR: JBREM000200: Remote connection failed: javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms 
Sep 9, 2014 12:11:53 PM com.howtodoinjava.HelloWorldJMS main 
SEVERE: Failed to connect to any server. Servers tried: [remote://localhost:4447 (Authentication failed: the server presented no authentication mechanisms)] 
Exception in thread "main" javax.naming.AuthenticationException: Failed to connect to any server. Servers tried: [remote:// localhost:4447 (Authentication failed: the server presented no authentication mechanisms)] [Root exception is javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms] 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.failOverSequence(HaRemoteNamingStore.java:238) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.namingStore(HaRemoteNamingStore.java:149) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:130) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:272) 
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:87) 
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:129) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at com.howtodoinjava.HelloWorldJMS.main(HelloWorldJMS.java:69) 
Caused by: javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms 

나는 -b 0.0.0.0으로 서버를 시작하려면이 JMS message to remote server 제안을 따랐다.

브라우저에서 URL localhost : 4447을 열면 "다운로드"라는 파일 하나가 다운로드됩니다. 따라서 서버가 해당 포트에서 수신 대기 중입니다. XML 파일에 언급 된

나는 다른 ConnectionFactory와 함께 시도 - 내가 프로토콜로 "HTTP-원격"로 시도

의 도움없이, 그러나 나는 오류 - XNIO000812 : 연결이 예기치 않게

답변

2

이 폐쇄 답장이 늦을 수는 있지만 참조 용으로이 문제를 어떻게 해결했는지 추가하고 있습니다. 독립-full.xml에 내가 장애인 보안이 false로 설정되어 있지만, 그것은 단지 보안을 건너 뛸 코드 env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");에서

<subsystem xmlns="urn:jboss:domain:messaging:1.4"> 
    <hornetq-server> 
     <security-enabled>false</security-enabled> 
     ..... 
    </hornetq-server> 
     .... 
</subsystem> 

을 다음과 같이. 희망이 도움이 누군가.

+0

동일한 문제가 있지만 보안을 유지하고 싶습니다. 어떻게해야합니까? –