我從來沒有使用JavaEE 6的@Singleton新功能,我想試試看。使用Singleton創建默認管理帳戶
我正在考慮創建s Singleton來保存允許應用程序adiministrator(知道密碼的人)訪問應用程序的某些內容的密碼。
我試圖按照tutorial執行它,但它不起作用。 這是我做過什麼:
我創建了一個singleton bean:
@Singleton
@Startup
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class AdminAcountEJB implements IAdminAcountEJB {
private String password;
@PostConstruct
public void init() {
password = "password";
}
@Lock(LockType.READ)
public String getPassword() {
return password;
}
}
我提取的接口
public interface IAdminAcountEJB {
public abstract String getPassword();
}
然後我嘗試使用@EJB
注入單在託管bean@Named("managementBB")
@SessionScoped
public class ManagementBB implements Serializable{
@EJB
private IAdminAcountEJB managementEJB;
private String input;
private boolean authorized;
public String seeWhatsUp() {
if(input.equals(managementEJB.getPassword())) {
authorized = true;
return "manage?faces-redirect=true;";
}
return "index?faces-redirect=true;";
}
//Get set methods...
}
我做的最後一件事就是創建一些顯示的標記情況輸入正確的密碼:
<h:form rendered="#{managementBB.authorized == false}">
<h:inputSecret value="#{managementEJB.input}"/>
<h:commandButton value="..." action="#{managementEJB.seeWhatsUp}"/>
</h:form>
<h:form rendered="#{managementBB.authorized}">
CORRECT PASSWORD!!
</h:form>
這一切似乎確定我,但是當我訪問該頁面時,控制檯說:
javax.naming.NameNotFoundException: ejbinterfaces.IAdminAcountEJB#ejbinterfaces .IAdminAcountEJB找不到
我不明白爲什麼它不起作用,這是我如何注入其他EJB不是單例,但與@Singleton它不起作用。
- 我該如何解決?
- 我也很想知道你對於使用單片機達到這個目的有什麼看法,你認爲這是一個好的和安全的想法?
我不是從EL語法中引用singleton,請參閱'#{managementEJB.seeWhatsUp}「'是一個使用singletone的支持bean中的方法,但我不直接調用它。另外我對如何在單例中使用'@ Named'註解感到困惑,應該如何調用它?順便說一句,使用數據庫的想法,並在啓動時讀取它(聽起來很有趣) – sfrj
對不起,我剛剛發現了錯誤,我在調用EJB而不是頁面中的支持bean。它讓我想起了一段時間:)謝謝 – sfrj