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() ;
}
}
感謝 - 這工作。但現在我面臨的問題,使這個運行在Linux env.have在這裏發佈了一個單獨的問題:-http://stackoverflow.com/questions/10343355/cannot-instantiate-initialcontext – 2012-04-27 00:53:12
大。如果您認爲它解決了問題,請接受此答案。 :) – 2012-04-27 08:36:00