복붙노트

[SPRING] CDI가 비활성화 된 @ PostConstruct에 대한 Glassfish 4 검사

SPRING

CDI가 비활성화 된 @ PostConstruct에 대한 Glassfish 4 검사

Spring 어플의 집합을 위해 글래스 피쉬 3.1.2.2에서 글래스 피시 4.1로 업그레이드하고 있습니다. @Inject 어노테이션을 처리하기 위해 Spring을 사용하기 때문에 다음 명령을 사용하여 Glassfish의 CDI를 비활성화했습니다.

asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false

그래도 응용 프로그램 중 하나를 배포하면 다음과 같은 오류 메시지가 나타납니다.

The lifecycle method [something] must not throw a checked exception.
Related annotation information: annotation [@javax.annotation.PostConstruct()] 
on annotated element [public void com.something.MyClass.something() throws 
java.io.IOException] of type [METHOD]. Please see server.log for more details.

문제의 클래스는 구현하려고하는 애플리케이 션의 구현이없는 추상 클래스이며 클래스 경로에있는 것입니다.

글래스 피시가 왜 CDI를 비활성화했을 때 @PostConstruct를 확인합니까? 왜 GlassFish는 @PostConstruct를 bean이 될 수없는 것으로 검증하고 있습니까? 글래스 피시가 내가 Spring을 사용하고있는 것에 방해를하지 않게하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.Annotation @PostConstruct는 모든 의존성 주입 메커니즘에서 사용되는 일반적인 주석이다. Javadoc은 인터셉터 내에서 사용되지 않는 한 반환 유형이 void이고 검사 예외를 throw하지 않는 메소드에 넣어야한다고 명시 적으로 명시합니다.

    Annotation @PostConstruct는 모든 의존성 주입 메커니즘에서 사용되는 일반적인 주석이다. Javadoc은 인터셉터 내에서 사용되지 않는 한 반환 유형이 void이고 검사 예외를 throw하지 않는 메소드에 넣어야한다고 명시 적으로 명시합니다.

    Spring은 post-construct 메소드에 대한 체크 예외를 처리 할 수있는 방법이 없으므로 이상하게 여겨진다. 그러나이 요구 사항은 검증 일 뿐이고 무시 될 수 있으므로 Spring은 검사 된 예외를 무시하고 Glassfish는 예외 일 수 없습니다. CDI 또는 다른 메커니즘 (EJB, ...)에서 사용되지 않더라도 모든 클래스를 검사하고 유효성을 검사하는 불필요한 Glassfish 기능이있을 수 있습니다.

    가장 좋은 방법은 확인 된 예외를 제거하여 코드를 문서와 정렬하고 이식성있게 만드는 것입니다.

  2. ==============================

    2.metadata-complete = "true"와 함께 web.xml을 추가하여이 문제를 먼저 해결할 수 있습니다. 다음으로 컨텍스트가 웹 루트 디렉토리 / WEB-INF /에 있는지 확인해야합니다.

    metadata-complete = "true"와 함께 web.xml을 추가하여이 문제를 먼저 해결할 수 있습니다. 다음으로 컨텍스트가 웹 루트 디렉토리 / WEB-INF /에 있는지 확인해야합니다.

    이 glassfish로 모든 @PostConstructSpring 종속성을로드 할 수 있습니다.

    내 의견으로는 해결할 것이 많습니다.

  3. from https://stackoverflow.com/questions/35411854/glassfish-4-scans-for-postconstruct-with-cdi-disabled by cc-by-sa and MIT license