2013-02-18 120 views
1

我想運行下面的程序。我使用glassfish server 3.1.2來啓用這個MDB運行。然後我無法運行它。運行一個簡單的MDB應用程序時出錯

package com.mdb; 

import javax.jms.ConnectionFactory; 
import javax.jms.Queue; 
import javax.jms.Connection; 
import javax.jms.Session; 
import javax.jms.QueueBrowser; 
import javax.jms.Message; 
import javax.jms.JMSException; 
import javax.annotation.Resource; 
import java.util.Enumeration; 

import javax.ejb.Stateless; 
/** 
* The MessageBrowser class inspects a queue and displays the messages it 
* holds. 
*/ 
@Stateless 
public class MessageClient { 
    @Resource(mappedName = "jms/ConnectionFactory") 
    private static ConnectionFactory connectionFactory; 
    @Resource(mappedName = "jms/Queue") 
    private static Queue queue; 

    /** 
    * Main method. 
    * 
    * @param args  the queue used by the example 
    */ 
    public static void main(String[] args) { 
     Connection connection = null; 

     try { 
      System.out.println("1"); 
      connection = connectionFactory.createConnection(); 
      System.out.println("2"); 
      Session session = connection.createSession(
         false, 
         Session.AUTO_ACKNOWLEDGE); 
      QueueBrowser browser = session.createBrowser(queue); 
      Enumeration msgs = browser.getEnumeration(); 

      if (!msgs.hasMoreElements()) { 
       System.out.println("No messages in queue"); 
      } else { 
       while (msgs.hasMoreElements()) { 
        Message tempMsg = (Message) msgs.nextElement(); 
        System.out.println("Message: " + tempMsg); 
       } 
      } 
     } catch (JMSException e) { 
      System.err.println("Exception occurred: " + e.toString()); 
     } finally { 
      if (connection != null) { 
       try { 
        connection.close(); 
       } catch (JMSException e) { 
       } 
      } 
     } 
    } 
} 

問題是我在運行它時遇到了下面的錯誤。

Exception in thread "main" java.lang.NullPointerException 
    at com.mdb.MessageClient.main(MessageClient.java:35) 

這裏可能是什麼問題?

+0

你的connectionFactory可能是NULL – 2013-02-18 08:41:51

回答

1

你有什麼建立不是一個MDB。這是一個瀏覽隊列的無狀態會話bean。

MDB具有@MessageDriven註釋。每當有消息進來時都會調用它。

除此之外,您可能希望使用「lookup」屬性而不是「mappedName」屬性。後者來自古代,當人們還不確定任何事情時,需要臨時破解才能使事情變得神奇。

在無狀態bean中使用靜態字段和靜態主方法根本沒有意義。如果你通過這個主要方法訪問你的bean,那麼你根本沒有使用這個bean,而只是調用一個孤立的全局類方法。如果有的話,這可能是你的NPE的來源。

修復不是很簡單。 Java EE和Java SE之間,以及實例和靜態方法之間看似完全混淆。

相關問題