2012-11-06 29 views
5

Tôi đã định cấu hình hàng đợi JMS chạy trên JBoss AS 7.1.1.FINAL, sử dụng cấu hình cấu hình standalone-full.xml.Không thể tạo kết nối JMS từ ứng dụng Java độc lập tới hàng đợi thông báo JBoss AS 7

Sau đó tôi đã viết một chương trình Java độc lập để kết nối với hàng đợi và gửi thư, dựa trên mã mẫu 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(); 
     } 
    } 
} 

Thật không may, cuộc gọi đến connectionFactory.createConnection không thành công với một ngoại lệ 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 

Câu hỏi: Không có cụm tham gia, cả hai chương trình chạy trên cùng một máy, tôi không cấu hình bất kỳ địa chỉ IP nào. Có ai có một ý tưởng những gì tôi có thể bị mất tích trong cấu hình JBoss?

Bất kỳ gợi ý nào chào mừng :-)

Trả lời

6

Tôi đã giải quyết vấn đề với việc kiểm tra và thay đổi phụ thuộc Maven của dự án của tôi.

Với Maven này sự phụ thuộc chương trình làm việc như mong đợi:

<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 .... tạo ảnh vui nhộn man.Saved cả ngày của tôi. – SRy

0

tôi đã cùng một vấn đề nhưng với các phiên bản sản phẩm khác nhau. Cụ thể, tôi đã cố gắng để có được một ứng dụng Spring Boot (phiên bản 1.4.1) để gửi một tin nhắn đến HornetQ Server phiên bản 2.3.25.SP13 (được nhúng trên một máy chủ JBoss EAP 6.4.10). Giải pháp là để thêm phụ thuộc sau đây để ứng dụng Boot mùa xuân của tôi:

<dependency> 
     <groupId>org.hornetq</groupId> 
     <artifactId>hornetq-jms-client</artifactId> 
     <version>2.3.22.Final</version> 
    </dependency> 
Các vấn đề liên quan