2012-11-06 20 views
5

Skonfigurowałem kolejkę JMS działającą w JBoss AS 7.1.1.FINAL, używając standalone-full.xml jako profilu konfiguracyjnego.Nie można utworzyć połączenia JMS z autonomicznej aplikacji Java do kolejki JBoss AS 7

Następnie napisałem program w języku Java samodzielny, aby połączyć się z kolejką i wysłać wiadomość, na podstawie przykładowego kodu JBoss.

public class RemoteProducer { 

    private static final Logger log = Logger.getLogger(RemoteProducer.class.getName()); 

    // Set up all the default values 
    private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; 
    private static final String DEFAULT_DESTINATION = "jms/queue/test"; 
    private static final String DEFAULT_USERNAME = "jmstest"; 
    private static final String DEFAULT_PASSWORD = "fluppy"; 
    private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
    private static final String PROVIDER_URL = "remote://localhost:4447"; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     ConnectionFactory connectionFactory = null; 
     Connection connection = null; 
     Session session = null; 
     MessageProducer producer = null; 
     Destination destination = 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)); 
      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); 
      log.info("Found connection factory \"" + connectionFactoryString + "\" in JNDI"); 

      String destinationString = System.getProperty("destination", DEFAULT_DESTINATION); 
      log.info("Attempting to acquire destination \"" + destinationString + "\""); 
      destination = (Destination) context.lookup(destinationString); 
      log.info("Found destination \"" + destinationString + "\" in JNDI"); 

      // 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); 
      connection.start(); 

      // TODO send messages 

     } catch (NamingException e) { 
      e.printStackTrace(); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Niestety, wezwanie do connectionFactory.createConnection nie z wyjątkiem JMS (HornetQException[errorCode=3 message=Timed out waiting to receive cluster topology. Group:null):

Log:

Nov 06, 2012 3:37:42 PM de.test.jms.RemoteProducer main 
INFO: Attempting to acquire connection factory "jms/RemoteConnectionFactory" 
Nov 06, 2012 3:37:42 PM de.test.jms.RemoteProducer main 
INFO: Found connection factory "jms/RemoteConnectionFactory" in JNDI 
Nov 06, 2012 3:37:42 PM de.test.jms.RemoteProducer main 
INFO: Attempting to acquire destination "jms/queue/test" 
Nov 06, 2012 3:37:42 PM de.test.jms.RemoteProducer main 
INFO: Found destination "jms/queue/test" in JNDI 
javax.jms.JMSException: Failed to create session factory 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:605) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:119) 
    at de.test.jms.RemoteProducer.main(RemoteProducer.java:60) 
Caused by: HornetQException[errorCode=3 message=Timed out waiting to receive cluster topology. Group:null] 
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:804) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:601) 
    ... 2 more 

Pytanie: Nie ma klastra zaangażowany, oba programy działają na tej samej maszyny, nie skonfigurowałem żadnych adresów IP. Czy ktoś ma pomysł, czego może mi brakować w konfiguracji JBoss?

Wszelkie wskazówki mile widziane :-)

Odpowiedz

6

I rozwiązać problem ze sprawdzania i zmiany zależnościami Maven mojego projektu.

Dzięki tej Maven Zależność program działa zgodnie z oczekiwaniami:

<dependency> 
    <groupId>org.jboss.as</groupId> 
    <artifactId>jboss-as-jms-client-bom</artifactId> 
    <version>7.1.1.Final</version> 
    <type>pom</type> 
</dependency> 
+0

@skowski .... Awesome man.Saved cały dzień. – SRy

0

miałem ten sam problem, ale z różnymi wersjami produktu. W szczególności próbowałem pobrać aplikację Spring Boot (wersja 1.4.1), aby wysłać wiadomość do serwera HornetQ Server w wersji 2.3.25.SP13 (osadzonego na serwerze JBoss EAP 6.4.10). Rozwiązaniem było dodanie następującej zależności do mojej aplikacji Spring Boot:

<dependency> 
     <groupId>org.hornetq</groupId> 
     <artifactId>hornetq-jms-client</artifactId> 
     <version>2.3.22.Final</version> 
    </dependency> 
Powiązane problemy