다음 코드는 작동하는데, 내가 알아야 할 것은 @EJB, @Inject, @Inject와 같은 주석을 사용하여 EJB (또는 ManagedBean) 자원)Bean 유효성 검사 : 데이터베이스에 대한 사용자 정의 유효성 검사
public class UniqueUsernameConstraintValidator implements ConstraintValidator<UniqueUsername, String> {
//TODO research on how to inject an EJB/BusinessObject (@EJB does not work)
private JournalBean bean;
@Override
public void initialize(UniqueUsername annotation) {
//This is a fall back there must be a better way
try {
javax.naming.Context context = new InitialContext();
bean = (JournalBean)context.lookup("java:global/Journal2/JournalBean");
} catch (NamingException e) {
logger.info("NamingException: " + e.getMessage());
}
}
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
if (null == bean.getUserByUsername(value)) {
return true;
}
return false;
}
}
다음 코드는 (가변 논리가 초기화되지 않습니다 작동하지 않습니다이 - 널 (null))를, 나는 WEB-INF 디렉토리에 빈 beans.xml 환경 파일이 없습니다. 나는 ManagedBean은, 서블릿의에서 @Inject를 사용하거나 EJB 직접 다음은이 작품을 만들 수있는 방법이 있나요
public class UniqueUsernameConstraintValidator implements ConstraintValidator<UniqueUsername, String> {
@Inject
private Journal logic;
@Override
public void initialize(UniqueUsername annotation) {
logger.info("initialize("+annotation+")");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
logger.warning("TODO: IMPLEMENT VALIDATION");
try {
if (null != logic.getUserByUsername(value)) { //Null
return true;
}
} catch (EntityAccessorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
작동 할 때?