2013-02-18 113 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之间,以及实例和静态方法之间看似完全混淆。

相关问题