【发布时间】:2011-08-27 19:42:06
【问题描述】:
我从未使用过 JavaEE 6 的 @Singleton 新功能,我想尝试一下。
我正在考虑创建 s Singleton 以仅保存一个密码,该密码将允许应用程序管理员(知道密码的人)访问应用程序的某些内容。
我尝试按照tutorial 实现它,但它不起作用。 这就是我所做的:
我创建了单例 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 未找到
我不明白为什么它不起作用,这就是我注入其他不是 Singletones 但使用 @Singleton 它不起作用的 EJB 的方式。
-我该如何解决?
-我也很想知道您对为此目的使用单音有何看法,您认为这是一个好且安全的想法吗?
【问题讨论】:
标签: java jsf jakarta-ee ejb-3.0 java-ee-6