@Singleton JavaEE 6의 새 기능을 사용한 적이 한번도 없었습니다.싱글 톤을 사용하여 기본 관리 계정 만들기
저는 앱 독주인 (암호를 아는 사람)이 앱의 일부 콘텐츠에 액세스 할 수있게 해주는 암호를 보유하기 위해 S Singleton을 만들려고했습니다.
나는 이것을 tutorial 다음에 구현하려고 시도했지만 작동하지 않습니다.
내가 싱글 톤 bean을 생성 : 이 내가 무슨 짓을 내가 @EJB 를 사용하여 관리 빈에서 싱글을 주입하려고public interface IAdminAcountEJB {
public abstract String getPassword();
}
그런 인터페이스를 추출
@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;
}
}
@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 .AdminAcountEJB 찾을 수 없습니다.
왜 작동하지 않는지,이 방법은 내가 다른 싱글 톤이 아닌 EJB를 주사하지만 @ 싱글 톤과 함께 작동하지 않습니다.
- 어떻게 해결할 수 있습니까?
- 나는 또한이 목적을 위해 singletone을 사용하는 것에 대해 어떻게 생각하는지 알고 싶습니다. 좋은 생각입니까?
"# {managementEJB.seeWhatsUp}"는 싱글 톤을 사용하는 백킹 빈의 메소드이지만 직접 호출하지는 않습니다. EL 구문에서 싱글 톤을 참조하지 않습니다. 또한 싱글 톤에서'@ Named' 주석을 사용하는 방법에 혼란 스럽습니다. 어떻게 호출해야합니까? 그건 그렇고 +1 데이터베이스 아이디어를 사용하여 시작시 읽기 (흥미로운 소리) – sfrj
죄송합니다, 난 그냥 실수를 발견, 나는 EJB를 대신 페이지에서 콩을 EJB를 호출했다. 주의가 필요하다면 :) – sfrj