2012-10-23 4 views
0

설명서에 따르면 ValidatorFactory는 스레드로부터 안전하지만 아래에 표시된 것처럼 주석 서비스 "InvService"를 클래스 속성으로 사용하는 것에 대한 우려가 있습니다.JSR-303 - 내 접근 방식은 스레드로부터 안전한가요?

이 방법이 스레드로부터 안전한지 궁금합니다. 기본적으로 제약 조건 위반을 기반으로 데이터베이스 조회를 수행해야합니다. 이다 InvService 스레드 안전 ... 따라

@Service 
public class InvServiceImpl implements InvService { 

    @Autowired 
    private InvDAO InvDAO; 
    private final Logger log = LoggerFactory.getLogger(this.getClass()); 


    @Override 
    public <T extends InvContent> getProduct(String InvKey) { 
     return InvDAO.getInvContent(InvKey, TYPEPROD, Product.class); 
    } 
} 

답변

0

:

public class MyValidator { 

    @Autowired 
    InvService invService;      // ?????? 
    private final ValidatorFactory factory; 


    public MyValidator() { 
     factory = Validation.buildDefaultValidatorFactory(); 
    } 


    public <T> void validate(final T instance) { 
     final Validator validator = factory.getValidator(); 


     final Set<ConstraintViolation< T>> violations = validator.validate(instance, Default.class); 

     if (!violations.isEmpty()) { 
      final Set<ConstraintViolation<?>> constraints = new HashSet<ConstraintViolation<?>>(violations.size()); 

      for (final ConstraintViolation<?> violation : violations) { 
       constraints.add(violation); 
      } 
      getDBRecords(constraints); 
      throw new ConstraintViolationException(constraints); 
     } 
    } 

    private getDBRecords(Set<ConstraintViolation<?>> constraints) { 
     invService.get(....); 
    } 
} 

이 서비스 클래스의 모습인가? 맞다면 OK입니다. 스레드 안전 클래스는 다른 스레드 안전 클래스의 인스턴스를 특성으로 참조하고 스레드 안전을 유지할 수 있습니다. 그러나 참조하는 객체가 스레드로부터 안전한지 확인해야합니다. 클래스를 개발하지 않았다면 명시 적으로 스레드로부터 안전하다고 말하는 설명서를보고 싶습니다.

+0

위의 InvService를 추가했습니다. – EdgeCase

+1

이제는 흔적을 따라야합니다 ... InvDAO 스레드로부터 안전합니까? – jalynn2

관련 문제