我从来没有使用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