2012-04-25 119 views
1

我已经尽可能多地搜索了我的问题的解决方案。 我的应用程序在Glassfish v3上运行。此应用程序向Glassfish JMS队列发送消息,并且此消息应该由同一主机上的独立客户端读取,但在Glassfish JVM外部。如何接收来自Glassfish的消息(v3)JMS队列

我已经编写了独立的客户端java代码 - 包含Glassfish安装目录中的appserv-rt.jar和gf-client.jar。

该客户端代码无法接收到消息。系统输出语句直到“获得消费者”才打印出来。之后没有任何反应。

如果我更改队列的名称 - 我得到一个错误,说队列没有找到。所以它似乎客户端代码能够找到队列,但它没有收到任何消息。我需要包括在我的客户端代码?

这里是我的Java类: -

import java.util.Enumeration; 
import java.util.Hashtable; 
import java.util.Properties; 

import javax.annotation.Resource; 
import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.JMSException; 
import javax.jms.MapMessage; 
import javax.jms.Message; 
import javax.jms.MessageConsumer; 
import javax.jms.MessageListener; 
import javax.jms.MessageProducer; 
import javax.jms.ObjectMessage; 
import javax.jms.Session; 
import javax.jms.Queue; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

import org.apache.log4j.Category; 

import domain.RedirectFile; 

public class ZblBulkUploadThread implements Runnable,MessageListener{ 

private static final Category log = Category.getInstance(ZblBulkUploadThread.class) ; 



    private Queue queue; 

public void run() 
{ 
    try 
    { 

     System.out.println(" inside try") ; 
     InitialContext jndiContext = null; 

     MessageConsumer messageConsumer=null; 


     jndiContext = new InitialContext(); 

     System.out.println(" got context ") ; 

     ConnectionFactory connectionFactory = (ConnectionFactory)jndiContext. 
       lookup("jms/SimpleConnectionFactory"); 



     System.out.println("got connectionfactory") ; 

    Connection connection = connectionFactory.createConnection(); 

    System.out.println("got connection") ; 
    Session session = connection.createSession(false, 
      Session.AUTO_ACKNOWLEDGE); 

    queue = (Queue)jndiContext.lookup("jms/SimpleQueue") ; 

    System.out.println("got queue"+queue.getQueueName()) ; 

    messageConsumer = session.createConsumer(queue); 

    System.out.println(" selector "+messageConsumer.getMessageSelector()) ; 

    System.out.println("got consumer") ; 

    Message message = messageConsumer.receive() ; 

    System.out.println("Message is "+message) ; 

    System.out.println("destination is "+message.getJMSDestination()) ; 

    ObjectMessage om = ((ObjectMessage)message) ; 
    try 
    { 

    RedirectFile file = (RedirectFile)om.getObject() ; 

    log.debug("filePath "+file.getFilePath()) ; 
    log.debug(" userName "+file.getUserName()) ; 
    log.debug(" mode is "+file.getMode()) ; 

    System.out.println("filePath "+file.getFilePath()) ; 
    System.out.println(" userName "+file.getUserName()) ; 
    System.out.println(" mode is "+file.getMode()) ; 
    } 
    catch(Exception ex) 
    { 
     log.error("ERROR "+ex.getMessage()) ; 
     ex.printStackTrace() ; 
    } 

    log.debug("session created") ; 

    } 
    catch(Exception ex) 
    { 

     ex.printStackTrace() ; 
     log.error("Error "+ex.getMessage()) ; 
    } 
} 


public void onMessage(Message message) 
{ 
    System.out.println("Message received "+message) ; 
} 

public static void main(String[] args) 
{ 
    ZblBulkUploadThread zbut = new ZblBulkUploadThread() ; 
    new Thread(zbut).start() ; 
} 

}

回答

0

尝试:connection.start();接收呼叫之前的某个地方。

+0

感谢 - 这工作。但现在我面临的问题,使这个运行在Linux env.have在这里发布了一个单独的问题:-http://stackoverflow.com/questions/10343355/cannot-instantiate-initialcontext – 2012-04-27 00:53:12

+0

大。如果您认为它解决了问题,请接受此答案。 :) – 2012-04-27 08:36:00

相关问题