Java 在JBoss中注入EJB时出现NullPointerException
我试图实现一个单例类,该类管理数据库中的属性。然而,当我尝试注入我的数据库bean时,我得到了一个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
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,有时在某些环境中需要命名:)