2012-04-25 118 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

相關問題