2009-11-20 4 views
4

나는 다중 모듈 메이븐 프로젝트를 가지고 있습니다. 모듈 중 하나는 스프링 빈이있는 util 계층입니다. 나는 같은 봄 콩을 다른 모듈에 공유하고 싶다.다른 웹 응용 프로그램 간의 스프링 공유 웹 응용 프로그램 컨텍스트

다른 모듈은 웹 응용 프로그램이 아닌 웹 응용 프로그램으로 배포되므로 이상적으로는 내 util beans가 싱글 톤이되고 모든 웹 응용 프로그램에서이 싱글 톤에 대한 참조 만있을 것입니다.

스프링 웹 응용 프로그램 컨텍스트를 공유하기위한 링크를 찾았지만 동일한 .ear 내에서 작동하지만 내 웹 응용 프로그램이 다릅니다.

이 방법이 있습니까?

답변

4

쉽지 않습니다. 응용 프로그램 서버는 응용 프로그램마다 하나의 클래스 로더를 사용합니다. 즉, 빈을 작성한 참조에서 다른 참조로 참조를 전달하는 경우에도 ClassCastException을 얻게됩니다.

필요한 것은 응용 프로그램 서버가 시작될 때 bean을 정의하는 것입니다. 빈에 대한 코드를 응용 프로그램 서버의 클래스 경로에 넣고 설명서에서 JNDI 컨텍스트를 설정하는 방법을 확인하십시오. JNDI 컨텍스트를 사용하면 DB 연결과 같은 전역 리소스를 공유 할 수 있습니다.

+0

"응용 프로그램 서버는 응용 프로그램 당 하나의 클래스 로더를 사용합니다"... 반드시 그런 것은 아닙니다. JavaEE는이를 요구하지만 일부 애플리케이션 서버 (예 : JBoss)에서는 EAR 당 하나의 클래스 로더를 가질 수 있으므로 작업이 크게 단순 해집니다. – skaffman

+0

나는 JNDI 기술을 시도해야 할 것이다. –

0

응용 프로그램 서버/서블릿 컨테이너에 따라 웹 응용 프로그램간에 ServletContext를 공유하는 기술에 대해 google을 사용할 수 있습니다. WebApplicationContext는 ServletContext에 저장되어 있으므로 답변을 얻을 수 있습니다.

2

this과 같은 기술을 말하는 것으로 가정합니다. 내가 아는 한 그것은 EAR 외부에서 가능해야합니다. 그러나 공식 표준은 없습니다. 실제로 Spring JAR 파일이 서블릿 컨테이너의 공유 컨텍스트 로더에로드되고 이 아닌 개별 애플리케이션의 컨텍스트에이로드되어 있는지 확인해야합니다. XML 파일도 부모 컨텍스트의 클래스 경로에 있어야한다고 생각합니다.

+0

예, 그 기술에 대해 이야기하고 있지만, 제대로 작동하지는 않습니다 ... –

관련 문제