2014-12-15 2 views
4

잠시 동안 검색했지만 내 문제에 대한 적절한 해결책을 찾을 수 없습니다.스프링 웹 앱. 하나의 전쟁 다중 응용 프로그램 컨텍스트

하나의 WAR 웹 응용 프로그램이 있고 웹 응용 프로그램 용으로 2 개의 스프링 응용 프로그램을 실행하고 싶습니다. 하나는 예약 된 작업을 실행하는 응용 프로그램입니다. 두 응용 프로그램은 많은 빈을 공유하므로이 두 응용 프로그램이 일부 빈 인스턴스를 공유하고 싶습니다.

내가 내 컨텍스트를 분할하고 싶습니다

:
-shared-context.xml에
-web-context.xml에
-task-context.xml에

웹 컨텍스트 및 작업 컨텍스트해야 고립되어 서로를 보지 못한다. 그들은 동일하지만 구성이 다른 몇 개의 빈을 생성해야합니다.

이것이 가능합니까? 어떻게해야합니까?

는 둘 다 웹 환경 및 작업 환경에서 <import resource="classpath:shared-context.xml" />을 넣어 및

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>web-context.xml task-context.xml</param-value> 
</context-param> 

로 내 web.xml 파일을 구성하는 첫번째 시도했지만 문제는 웹과 작업 사이에 분리가 없다는 것입니다. 그들은 모두 주 모든 콩도 웹의 context.xml 및 작업-context.xml에 정의 된 하나의 정보에 대한

여기 내 web.xml 파일입니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/web-context.xml /WEB-INF/task-context.xml</param-value> 
    </context-param> 

    <!-- Listeners --> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.gwtrpcspring.RemoteServiceDispatcher</servlet-class> 
    </servlet> 

    <servlet> 
     <servlet-name>contentDownloadServlet</servlet-name> 
     <servlet-class>ch.olator.servlet.MyContentDownloadServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.rpc</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>contentDownloadServlet</servlet-name> 
     <url-pattern>/download</url-pattern> 
    </servlet-mapping> 

    ... some irrelevant filters ... 

</web-app> 

업데이트
- 상황을 더 명확하게하기 위해 웹 컨텍스트에 있지만 다르게 정의 된 빈을 정의하기 위해 예약 된 작업을 실행하는 데 사용되는 작업 컨텍스트가 있기 때문에 작업과 웹 사이의 격리가 필요합니다. 예 : 웹 컨텍스트에있는 범위가 지정된 세션 bean이 있지만 스케줄 된 태스크가 범위 세션 bean을 사용할 수 없으므로 태스크에 대해 다르게 정의해야합니다.

+0

당신에서 누락 된 부분은 무엇을 web.xml에있다? 또한 하나의 응용 프로그램, 몇 개의 XML 파일 또는 컨텍스트가 중요하지 않은지 여전히 파악할 수 있습니다. 일반적으로 당신은 이미 'ContextLoaderListener'와 'DispatcherServlet'의 두 컨텍스트를 가져야합니다. 'ContextLoaderListener'는 'DispathcerServlet'의 부모 역할을합니다. 게시 된 web.xml에는 'ContextLoaderListener'의 컨텍스트 하나만 있습니다. 가지고있는 XML 파일의 수는 중요하지 않습니다. –

+0

누락 된 일부는 무의미한 서블릿 필터입니다. 나는 같은 웹 context.xml에 모든 것을 넣는 데 사용한 다른 컨텍스트 파일이 없습니다. (아마도 적절한 방법이 아닙니다) Dispatcher 서블릿과 contentDownloadServlet이 모든 빈을 공유하기를 원합니다. Dispatcher 서블릿과 contentDownloadServlet간에 서로 다른 컨텍스트를 분리하고 싶지 않습니다. –

+0

Ok. 그러나 얼마나 많은 XML 파일을 가지고 있더라도 하나의 컨텍스트 만 가질 수 있습니다. 그래서 당신이 원하는 것은 이미 그랬을 것입니다 ... 당신의 파일은 두 번로드되지 않습니다, 두 번 파싱 될지도 모르지만 그것은 다른 것입니다. 콩은 동일합니다. –

답변

0

당신은 웹의 context.xml에서 가져 오기 태그

를 사용할 수 있습니다

<import resource="classpath:shared-context.xml" /> 
<import resource="classpath:task-context.xml" /> 
+0

아니요 그 웹과 작업을 분리 된 응용 프로그램으로 만들고 싶습니다. 웹 컨텍스트에서 정의 된 bean을보기 위해 작업 컨텍스트가 아닌 작업 컨텍스트에서 정의 된 bean을 볼 웹 컨텍스트를 원하지 않습니다. –