2011-05-27 45 views
0

我試圖從非託管的應用程序(控制檯應用程序)在「太陽報應用服務器」創建一個JMS隊列讀取消息,但我得到了以下錯誤:如何從非託管的Java應用程序讀取jms隊列?

NoInitialContextException 
Cannot instantiate class: javax.jms.TopicConnectionFactory 

與此代碼:

Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "javax.jms.TopicConnectionFactory"); 
InitialContext jndi = new InitialContext(env); 

我引用了包含該類的j2ee.jar庫,但肯定該類是一個接口。

我可以從非託管應用程序訪問隊列嗎?

回答

1

Aitor;

當你說「Sun App Server」時,我不確定這是什麼意思,但我會認爲它是Glassfish。

有兩個單獨的步驟來獲取遠程JMS資源。

  1. 您需要創建一個遠程JNDI連接,它需要一個有效的InitialContextFactory類名。
  2. 一旦你有了連接,你可以查找TopicConnectionFactory。

對於第1項,this link演示瞭如何建立遠程JNDI連接。 對於項目#2,一旦你有一個JNDI上下文,你還需要知道TopicConnectionFactory的,這將是這個樣子的JNDI名稱:

TopicConnectionFactory tcf = (TopicConnectionFactory) jndi.lookup("jms/TopicConnectionFactory"); 

一個方面,你需要記住的是,j2ee.jar庫包含用於JMS類的通用Java EE 接口,但是您還需要類路徑中包含JMS實現具體類的庫。這也適用於JNDI連接。這tutorial提供了一個簡潔的名單爲:

ApplicationServer的JNDI查找

  • /lib/appserv-rt.jar
  • /lib/appserv-admin.jar
  • /lib目錄/ JavaEE的。罐子/lib/j2ee.jar

客戶端庫

  • /imq/lib/jms.jar
  • /imq/lib/imq.jar
  • /imq/lib/imqutil.jar
  • /lib/install/applications/jmsra/jmsra.jar
相關問題