2011-10-19 18 views
6

Próbuję bezpośrednio utworzyć instancję zasobów JMS bez użycia JNDI do REMOTE HORNETQ.Wyjątek JMSException HornetQ: Nie powiodło się utworzenie fabryki sesji

Używam mojego kodu testowego w Eclipse IDE. Skonfiguruj moją ścieżkę klas, aby korzystać z bibliotek HornetQ 2.2.5.

Docelowy HornetQ to wersja 2.1.2. Ostatecznie, doszedłem do wniosku, że powinny one być kompatybilne wstecz, może źle?

Okej, więc przeczytałem dokumentację online i poszedłem za przykładami dotyczącymi połączenia ze zdalnym serwerem JMS bez korzystania z JNDI. Ciągle otrzymuję następujący wyjątek. Nie jestem pewien, co Im brakuje, ale uważam, że wszystko poprawnie ustawione. Czy ktoś mógłby wskazać, czego tu brakuje? Z góry dziękuję.

JMSException: Nie udało się utworzyć fabrykę sesji

złącza na hornetq-configuration.xml jest:

<connector name="netty"> 
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
      <param key="host" value="${10.100.111.222}"/> 
      <param key="port" value="${hornetq.remoting.netty.port:5445}"/> 
    </connector> 

Akceptor jest:

<acceptor name="netty"> 
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> 
     <param key="host" value="${10.100.111.222}"/> 
    <param key="port" value="${hornetq.remoting.netty.port:5445}"/> 
    </acceptor> 

Mój kod testowy jest: Połączenie connection = null;

try 
    { 
    Queue queue = HornetQJMSClient.createQueue("TESTQ"); 

    Map<String, Object> connectionParams = new HashMap<String, Object>(); 
    connectionParams.put(TransportConstants.PORT_PROP_NAME, 5445); 
    connectionParams.put(TransportConstants.HOST_PROP_NAME, "10.100.111.222");   

    TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName(), 
                       connectionParams); 
    ConnectionFactory factory = (ConnectionFactory) HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration); 
    System.out.println("debug: " + factory.getClass()); 

    connection = factory.createConnection(); 

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

    MessageProducer producer = session.createProducer(queue); 

    TextMessage message = session.createTextMessage("This is a test message"); 
    System.out.println("Sent message: " + message.getText()); 

    producer.send(message); 

    } 
     finally 
     { 
     if (connection != null) 
     { 
      try { 
       connection.close(); 
      } catch (JMSException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     } 

otrzymuję następujący wyjątek

SEVERE: Failed to create netty connection 
java.net.SocketTimeoutException: connect timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.connect(OioClientSocketPipelineSink.java:114) 
    at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.eventSunk(OioClientSocketPipelineSink.java:74) 
    at org.jboss.netty.channel.Channels.connect(Channels.java:541) 
    at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:218) 
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:227) 
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:188) 
    at org.hornetq.core.remoting.impl.netty.NettyConnector.createConnection(NettyConnector.java:450) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnection(ClientSessionFactoryImpl.java:1016) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnectionWithRetry(ClientSessionFactoryImpl.java:897) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.connect(ClientSessionFactoryImpl.java:212) 
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:602) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:611) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116) 
    at com.ws.proto.ManualJMS.main(ManualJMS.java:39) 
Oct 19, 2011 1:18:50 PM org.hornetq.core.logging.impl.JULLogDelegate warn 
WARNING: Tried 1 times to connect. Now giving up on reconnecting it. 
Exception in thread "main" javax.jms.JMSException: Failed to create session factory 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:615) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116) 
    at com.ws.proto.ManualJMS.main(ManualJMS.java:39) 
Caused by: HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.] 
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:619) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:611) 
    ... 3 more 

Odpowiedz

8

dotyczące zgodności: Nie mieliśmy kompatybilność klienta aż 2.2.5+. Jeśli wypróbujesz klienta w wersji 2.2.2 i na serwerze w wersji 2.2.5, prawdopodobnie otrzymasz wyjątek niezgodności wersji.

Dążymy, aby zawsze być zgodne z 2.2.5+

I masz literówkę w config:

<connector name="netty"> 
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
      <param key="host" value="10.100.111.222"/> 
      <param key="port" value="${hornetq.remoting.netty.port:5445}"/> 
    </connector> 

Używamy składni właściwości i wartości domyślnych. Można na przykład zdefiniować zmienną MY_IP i używać go jako:

"$ {MY_IP: 10.100.111.222}"

Jeśli MY_IP jest null, co można uzyskać 10.100.111.222

ale „$ { 10.100.111.222} "nic nie znaczy.

+0

Nie zapomnij przyjąć odpowiedzi, jeśli to rozwiąże Twój problem! :) Próbuję zbierać punkty na SOF (dla zabawy tylko prawdopodobnie :)) –

+0

Poprawiłem błąd składniowy po twoim przykładzie i zobacz w boot.log, że wiąże się poprawnie.Ale nadal otrzymuję ten sam błąd Ponieważ klient używa wersji 2.2.5, zgodność nie powinna stanowić problemu, prawda? – Byron

+0

Dlaczego nie zaktualizować configi –