2013-03-08 5 views
2

REST 요청에 응답하는 클래스의 예상 수명주기 작동을 알고 싶습니다.Apache Wink resource lifecycle

요청에 응답하기 위해 다른 클래스를 식별하는 javax.ws.rs.core.Application에서 파생 된 클래스가 있습니다.

다른 클래스에는 @Path ("foo") 주석이 달리고이 클래스 내의 메소드에는 @Path ("bar")가 주석으로 지정됩니다. foo/bar에 요청하면 생성자가 실행 된 것을 볼 수 있습니다. 그런 다음 PostConstruct 메서드가 제대로 호출됩니다. 이 메서드가 클라이언트에 응답을 반환하면 PreDestroy가 호출 된 다음 클래스가 부숴지는 것을 볼 수 있습니다. 다음 요청에서 프로세스가 반복됩니다.

올바른 동작입니까? 아니면 요청이있을 때마다 생성자와 PostConstruct를 거칠 필요가 없도록이 클래스를 메모리에 유지할 수있는 방법이 있습니까? 이 메서드는 JAXB 마샬링과 다양한 XSL 변환에 의존합니다. 컴파일 된 XSLT 변환 개체와 일부 변환 결과를 캐시하고 싶지만 클래스를 호출 할 때마다 인스턴스가 다시 인스턴스화되면 로컬 캐싱을 수행 할 수 없습니다.

이것은 Java 7, Wink 및 Tomcat 7에서 실행됩니다. 예상되는 동작인지 누군가에게 알려 주시겠습니까? 아니면이 클래스를 활성 상태로 유지할 수있는 것이 누락 되었습니까?

감사합니다.

답변

1

JAX-RS 사양에 따라 요청 당 리소스 (@Path로 주석 된 클래스)가 생성됩니다.

이 동작을 재정의하는 방법은 여러 가지가 있습니다.

JAX-RS 사양에 따라 사용할 수있는 가장 간단한 방법은 리소스 인스턴스를 직접 작성하는 것입니다 (이 경우 PostConstruct를 호출 할시기와 방법은 확실하지 않음) 사용 중 javax.ws.rs.core.Application.getSingletons()

또는 @org.apache.wink.common.annotations.Scope(ScopeType.SINGLETON) 주석을 사용자 자원에 넣을 수 있습니다.

스프링을 사용하면 윙크는 깔끔한 스프링 통합 모듈을 가지고 있으므로 스프링의 수명주기가 사용됩니다. http://incubator.apache.org/wink/1.0/html/5.5%20Spring%20Integration.html

을 참조하십시오.