0

我正在尝试实现一个管理数据库属性的单例类。但是,当我尝试注入我的数据库 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) 时,我没有收到任何错误。我究竟做错了什么?

4

1 回答 1

0

不管您面临什么有关 bean 注入的问题,我想澄清一下,至少以您尝试的方式来实现带有 EJB 的 Singleton 是不可能的。

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

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

于 2013-07-16T20:36:10.627 回答