2011-12-18 3 views
1

나는 스프링 저지를 사용하여 휴식 서비스를 제공합니다. 내 web.xml은 다음과 같습니다 :스프링 - 저지 한 가지 이상의 상황에서 서비스를 노출하는 방법

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

표준이라고 말하십시오. 많은 패키지로 많은 휴식 서비스를 제공하고 있으며 "기본"및 "고급"서비스라고하는 두 가지 맥락에서 이들을 goup해야합니다. 또한 url-pattern에 "rest"접두어를 제거해야합니다. 그래서 나는 두 개의 패키지로 그룹을 생각하고있는 web.xml com.sun.jersey.config.property.packages의 초기화 PARAM 두 저지 서블릿 정의 :

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.example.app.rest.base</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/base/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>Another Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.example.app.rest.advanced</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Another Jersey REST Service</servlet-name> 
    <url-pattern>/advanced/*</url-pattern> 
</servlet-mapping> 

불행하게도 인해의 ApplicationContext의 구성 요소 스캔 세트를. XML

<context:component-scan base-package="com.example.app" /> 

속성 com.sun.jersey.config.property.packages (모든 나머지 서비스는 각각의 컨텍스트에서 액세스 할 수 있습니다) 무시되고 그것은 그런 식으로 처리 할 수 ​​없습니다.

다른 방법으로 어떻게 처리 할 수 ​​있을지 궁금합니다. 내가하고 싶지 않은 유일한 일은 설정하는 것입니다.

<url-pattern>/*</url-pattern> 

모든 것을 잡는 것입니다.

답변

1

여러 패키지를 지정할 수 있습니다. 쉼표로 구분하십시오.

<context:component-scan base-package="com.example.app,com.sun.jersey" /> 

또한 두 개의 구성 요소 검사 항목을 정의 할 수도 있으며, 마찬가지로 올바르게 작동해야합니다.

패키지 차별화 도움이되지 않을 경우

filter를 사용합니다.

<context:component-scan base-package="org.example"> 
     <context:include-filter type="regex" expression=".*Repository"/> 
    </context:component-scan> 

그리고, 단지 각 서비스에 대한 별도의 ApplicationContext을하지만,는 contextConfigLocation의 초기화-PARAM하고 응용 프로그램 컨텍스트의 위치/이름의 초기화 값을 사용합니다. 따라서 특정 서비스 컨텍스트를 각 서비스에 대해로드하도록하면 구성 요소 검색 필터링은 하나의 서비스에 필요한 모든 것을로드하고 다른 서비스는 제외합니다. 각에 대해 별도의 XML 파일을 만들 경우

<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>WEB-INF/rest-service1.xml</param-value> 
</init-paraam> 

사실, 당신은 단지 그 시점에서 다른 패키지를 사용으로 돌아갈 수, 저는 믿습니다.

+0

참고 : http://stackoverflow.com/questions/5269450/multiple-packages-in-contextcomponent-scan-spring-config – AHungerArtist

+0

문제는 기본 패키지가 모든 나머지 서비스를 사용할 수 있도록 설정된다는 것입니다. 두 문맥 모두에서. – Espeen

+0

필터를 사용해 볼 수 있습니다. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-scanning-filters – AHungerArtist

관련 문제