在JBoss中注入EJB时出现NullPointerException

时间:2013-07-16 15:57:59

标签: java java-ee jboss ejb javabeans

我正在尝试实现一个管理数据库属性的单例类。但是,当我尝试注入我的数据库bean时,我得到一个nullPointerException。这是我的代码:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;
..

@Stateless
public class Properties {

    public static volatile Properties instance;
    private static Map<String, String> properties = new HashMap<String, String>();

    @EJB(WHAT_TO_DO_HERE)
    private DatabasePersisterLocal databasePersister;

    public static Properties getInstance() {
        if (instance == null) {
            synchronized (Properties.class) {
                if (instance == null) {
                    instance = new Properties();
                }
            }
        }

        return instance;
    }

    private Properties() {
        System.out.println("starting");
        System.out.println(databasePersister); //null

        //initializing
    }
}

我将我的项目导出为jar,稍后,当我尝试获取Properties的实例时,我会打印starting,然后打印nullPointerException。当我尝试从我的其他项目中注入相同的EJB(DatabasePersisterLocal)时,我没有收到任何错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

无论您面临的bean注入问题如何,我想澄清一下,使用EJB实现Singleton是不可行的,至少就像您尝试这样做一样。

原因是ejb实例由容器处理。 EJB的线程模型指定每个请求都将由可用的EJB实例管理,该实例先前已实例化并分配给ejb列表(池)。

但是,如果您使用的是EJB 3.1,则可以使用注释@Singleton来指示必须只创建一个EJB实例的容器。