Java 在JBoss中注入EJB时出现NullPointerException

Java 在JBoss中注入EJB时出现NullPointerException,java,jakarta-ee,jboss,ejb,javabeans,Java,Jakarta 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 { publ

我试图实现一个单例类,该类管理数据库中的属性。然而,当我尝试注入我的数据库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
    }
}
import java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入javax.ejb.ejb;
导入javax.ejb.Stateless;
..
@无国籍
公共类属性{
公共静态易失性实例;
私有静态映射属性=new HashMap();
@EJB(这里做什么)
专用数据库持久器本地数据库持久器;
公共静态属性getInstance(){
if(实例==null){
已同步(Properties.class){
if(实例==null){
实例=新属性();
}
}
}
返回实例;
}
私人物业(){
System.out.println(“启动”);
System.out.println(databasePersister);//null
//初始化
}
}

我将项目导出为jar,稍后,当我尝试获取
属性
的实例时,我得到一个
开始
打印,然后是
nullPointerException
。当我尝试从我的另一个项目中注入相同的EJB(DatabasePersisterLocal)时,没有得到任何错误。我做错了什么?

不管您面临的是关于bean注入的问题,我想澄清的是,使用EJB实现单例是不可能的,至少以您尝试的方式是不可能的

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


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

您需要命名要插入的EJB
此处的WHAT_to_DO\u
,用名称命名目标bean,但我只使用了
@EJB
注释就成功地将
数据库PersisterLocal
注入到了我的项目中?它也依赖于实现,dude,有时在某些环境中需要命名:)