2017-04-25 9 views
0

Jersey 기반 응용 프로그램에서 사용할 수있는 서비스 (즉, 등록 정보 파일 또는 배포 설명자를 통해) 중에 런타임에 구성 할 방법을 찾고 있습니다. 컨테이너 수준에서 관리자가 활성화 또는 비활성화 할 수 있습니다.런타임 중에 서비스를 활성화 또는 비활성화하는 Jersey2 기술이 필요합니다.

Google의 앱은 현재 15 개의 다른 종단점을 제공합니다. @ApplicationPath 주석이 달린 1 개의 애플리케이션과 @Path로 주석 된 3 개의 클래스가 있으며이 3 개의 클래스에는 일반적인 @Path/@/@ Produces로 주석 된 15 가지 메소드가 있습니다. 내 앱에는 런타임 구성을 읽는 몇 가지 기술이 있습니다. 데이터베이스 자원에 연결하는 설정, 변경 사항에 대한 등록 정보 파일보기 등 관리자가 3 레벨 또는 해당 저널 레벨의 개별 엔드 포인트를 저널 레벨에서 사용 가능/사용 불가능하게 할 수 있도록 일부 구성 값을 추가합니다. 누군가이 일을하는 가장 좋은 방법을 제안 할 수 있습니까? 이 단계를 더 진행하면 런타임에이 구성을 제어하려고하므로 구성이 변경되면 컨테이너 (이 경우 Tomcat)를 다시 시작하지 않고도 변경된 서비스를 활성화/비활성화하도록 저지 구성을 업데이트 할 수 있습니다. . 감사합니다. 감사!

답변

2

이 뉴저지에 기본적으로 가능한 경우 나도 몰라,하지만 한 가지가 바로 엔드 포인트를 사용할 수 있는지 확인하기 위해 뉴저지 prematching 필터를 사용하는 것입니다. 리스너 역할을 할 수있는 서비스를 사용하여 사용 불가능한 엔드 포인트를 적절하게 갱신 할 수 있습니다. 엔드 포인트가 사용 중지 된 경우 404를 반환하십시오.

@Provider 
@PreMatching 
public class DisabledEndpointsFilter implements ContainerRequestFilter { 

    @Inject 
    private ConfigurationService configuration; 


    @Override 
    public void filter(ContainerRequestContext request) throws IOException { 
     final List<String> disabledEndpoints = this.configuration.getDisabledEndpoints(); 
     final String path = stripLeadingSlash(request.getUriInfo().getPath()); 

     for (String endpoint: disabledEndpoints) { 
      endpoint = stripLeadingSlash(endpoint); 
      if (path.startsWith(endpoint)) { 
       request.abortWith(Response.status(404).build()); 
       return; 
      } 
     } 
    } 
} 

이 작업을 수행하고 작업 POC를 작성했습니다. Github Repo을 체크 아웃 할 수 있습니다.

+0

나는 그것을 좋아한다! 간단하고 해킹되지 않습니다. 나는 저지의이 능력을 탐구하지 않았다, 도와 줘서 고마워! –

0

이렇게하려면 apache camel을 사용하는 것이 좋습니다. 낙타를 사용하면 임베디드 jetty 서버와 결합 된 http 요청을 프록시로 제어 할 수 있습니다. 내가 생각할 수있는

http://camel.apache.org/jetty.html