[英]NullPointerException when injecting EJB in JBoss
我正在嘗試實現一個單例類,該類可以管理數據庫中的屬性。 但是,當我嘗試注入數據庫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)時,沒有任何錯誤。 我究竟做錯了什么?
不管您面對的是關於bean注入的問題,我都想澄清一下,至少在您嘗試使用EJB的情況下,用EJB實現Singleton是不可能的。
原因是ejb實例由容器處理。 EJB的線程模型指定每個請求將由可用的EJB實例管理,該實例先前已實例化並分配給ejb列表(池)。
但是,如果您使用的是EJB 3.1,則可以使用@Singleton批注,該批注指示僅創建一個EJB實例的容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.