2012-04-24 6 views
2

다음 코드는 작동하는데, 내가 알아야 할 것은 @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; 
    } 
} 

작동 할 때?

답변

0

상자에서 작동하지는 않지만 쉽게 Hibernate Bean 유효성 검사를 CDI에 구매할 수 있습니다.

거의 동일한 질문으로 that answer을 확인하십시오.

0

아이디어는 사용자 정의 (주사 사용) 다음 ConstraintValidator 인스턴스에 주사를 처리 ConstraintValidatorFactory을 작성하는 것입니다. 위에서 언급 한 대답 에서처럼 Seam-Validation module은 어떻게 수행되는지 볼 수있는 좋은 장소입니다.

Bean 유효성 검사 1.1 컨테이너 (CDI) 통합은 사양의 일부입니다. http://beanvalidation.org/proposals/BVAL-238/

을 참조하십시오.
관련 문제