복붙노트

[SPRING] 두 WAR 사이의 응용 프로그램 컨텍스트 공유?

SPRING

두 WAR 사이의 응용 프로그램 컨텍스트 공유?

전개 된 두 전쟁 사이에서 앱 컨텍스트를 공유 할 수있는 방법이 있습니까? 하나의 전쟁은 다른 사람의 서비스에 연결해야하며, 어디에서 시작해야할지 모르겠습니다.

해결법

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

    1.Tomcat과 같은 웹 응용 프로그램 컨테이너의 일반적인 목적은 각 응용 프로그램을 독립적으로 실행할 수 있다는 것입니다 (다른 응용 프로그램에 영향을주지 않으면 서 개별 응용 프로그램을 중지하고 시작할 수 있음). 즉, 개발에 많은 노력을 기울여야 할 것입니다. 그렇게하지 못하게하십시오. 그래서 당신이 허점을 찾았다 고하더라도 나는 권장하지 않거나 적어도 디자이너가 허락하지 않는 한 그것을 사용하지 말 것을 제안합니다.

    Tomcat과 같은 웹 응용 프로그램 컨테이너의 일반적인 목적은 각 응용 프로그램을 독립적으로 실행할 수 있다는 것입니다 (다른 응용 프로그램에 영향을주지 않으면 서 개별 응용 프로그램을 중지하고 시작할 수 있음). 즉, 개발에 많은 노력을 기울여야 할 것입니다. 그렇게하지 못하게하십시오. 그래서 당신이 허점을 찾았다 고하더라도 나는 권장하지 않거나 적어도 디자이너가 허락하지 않는 한 그것을 사용하지 말 것을 제안합니다.

    다른 솔루션을 찾기 시작하는 것이 좋습니다. 예 :

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

    2.우리 팀은 Tom Bean의 여러 WAR 사이에서 스프링 빈을 공유하기 위해 똑같은 요구 사항을 가지고 있습니다. 솔직히 "하지 마라."와 같은 대답은 도움이되지 않습니다.

    우리 팀은 Tom Bean의 여러 WAR 사이에서 스프링 빈을 공유하기 위해 똑같은 요구 사항을 가지고 있습니다. 솔직히 "하지 마라."와 같은 대답은 도움이되지 않습니다.

    요구 사항은 우리가 Tomcat에서 실행되는 다중 WAR 응용 프로그램을 가지고 있으며 모든 WAR가 정보를 유지하기 위해 동일한 RDBMS에 액세스해야한다는 사실에서 비롯됩니다. 우리는 RDBM에 접근하기 위해 Spring과 Hibernate를 사용하고 있으며, 모든 WAR는 동일한 스키마를 공유하며 이상적으로 동일한 Hibernate SessionFactory와 Spring 트랜잭션 관리자를 사용할 수있다.

    그것을하는 방법에 대한 답변은 여기에 게시되었습니다 :

    StackOverflow : EAR 내에서 ApplicationContext 공유하기

    요약하면 web.xml에서 다음을 수행합니다.

    <context-param>
      <param-name>parentContextKey</param-name>
      <param-value>sharedContext</param-value>
    </context-param>
    <context-param>
      <param-name>locatorFactorySelector</param-name>
      <param-value>classpath:beanRefContext.xml</param-value>
    </context-param>
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:yourWarSpecificAppContext.xml</param-value>
    </context-param>
    
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    

    여기서 beanRefContext.xml에는 다음이 포함됩니다.

    <beans>
      <bean id="sharedContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
          <list>
            <value>classpath:yourSharedAppContext.xml</value>
          </list>
        </constructor-arg>
      </bean>
    </beans>
    

    이는 Spring ContextSingletonBeanFactoryLocator를 사용하여 부모 컨텍스트 (이 경우 "sharedContext"이름 사용)를 노출하고 공유합니다. 첫 번째 WAR가 참조 할 때 공유 컨텍스트가 지연로드됩니다.

    공유 컨텍스트에서 참조하는 모든 bean은 모든 WAR에서 액세스 할 수 있어야합니다. 즉, 특정 WAR 내에서 WEB-INF / classes 또는 WEB-INF / lib에서로드 할 수 없습니다. 그것들은 EAR 파일을 사용하거나 우리 팀이 수행 한 Tomcat 공유 "lib"폴더 ($ CATALINA_HOME / lib)에 bean (및 의존성)을 포함하는 jar를 넣음으로써 공유되어야합니다.

    공정한 경고는이 접근법을 사용하면 대부분의 JAR 파일이 개별 웹 응용 프로그램이 아닌 공유 lib 폴더에있을 가능성이 높습니다. 우리 프로젝트에서는 대부분의 웹 응용 프로그램이 동일한 백엔드 서비스를 공유하고 액세스하기 때문에 이러한 의미가 있습니다.

    하드 코어 Tomcat 개발자는 Tomcat 공유 lib 디렉토리에 많은 코드를 넣는 것에 반대 할 것이기 때문에 다른 제안 된 대답이 효과가 없을 수있는 몇 가지 이유를 열거합니다.

  3. ==============================

    3.체크 아웃해야한다고 생각하는 유익한 블로그 게시물이 있습니다 : 다중 war Spring 애플리케이션에서 공유 부모 애플리케이션 컨텍스트 사용하기

    체크 아웃해야한다고 생각하는 유익한 블로그 게시물이 있습니다 : 다중 war Spring 애플리케이션에서 공유 부모 애플리케이션 컨텍스트 사용하기

  4. ==============================

    4.내장 된 부두 서버를 시작하고 부두 서버를 시작하고 구성하는 클래스의 두 웹 응용 프로그램에 모두 액세스하는 방법이있을 수 있습니다.

    내장 된 부두 서버를 시작하고 부두 서버를 시작하고 구성하는 클래스의 두 웹 응용 프로그램에 모두 액세스하는 방법이있을 수 있습니다.

    만나다:

    부두 임명

  5. ==============================

    5.런타임 컨텍스트를 공유해야합니까, 아니면 두 응용 프로그램에서 Bean 정의를 재사용하고 싶습니까?

    런타임 컨텍스트를 공유해야합니까, 아니면 두 응용 프로그램에서 Bean 정의를 재사용하고 싶습니까?

    단지 후자의 경우, 일반적인 Spring 컨텍스트 XML 파일을 일부 공유 종속성으로 쉽게 추출 할 수 있으며 두 웹 애플리케이션에서 JAR을 재사용 할 수 있습니다. 그러나 각 응용 프로그램에서 콩 / 서비스가 필요하면 서로 다른 옵션이 필요합니다.

  6. ==============================

    6.존재하지 않을 경우 JNDI에 컨텍스트를 바인딩 할 수 있습니다.

    존재하지 않을 경우 JNDI에 컨텍스트를 바인딩 할 수 있습니다.

    이 가격은 각 웹 응용 프로그램의 컨텍스트가 기본 웹 서비스가 아닐 수도 있다는 것을 알고 있어야한다는 것입니다.

    또한 경쟁 조건에 대해 신중히 고려해야합니다.

  7. ==============================

    7.@ 리차드 스미스 (ReichardSmith)와 동의 한 대답은 받아 들여지지 않았습니다. 리처드의 대답이 올바른 방향으로 나를 가리키는 데 도움이되었지만 EAR을 사용할 수 없도록 방파제를 사용하고 있습니다. 나는 서버 컨텍스트를 사용하여 전쟁 사이의 객체를 공유했다. 핫 - (재) 배치 된 웹 애플리케이션에서도 작동한다.

    @ 리차드 스미스 (ReichardSmith)와 동의 한 대답은 받아 들여지지 않았습니다. 리처드의 대답이 올바른 방향으로 나를 가리키는 데 도움이되었지만 EAR을 사용할 수 없도록 방파제를 사용하고 있습니다. 나는 서버 컨텍스트를 사용하여 전쟁 사이의 객체를 공유했다. 핫 - (재) 배치 된 웹 애플리케이션에서도 작동한다.

    https://stackoverflow.com/a/46968645/1287091

    아마 Tomcat에도이 방법을 적용 할 수있을 것입니다.

  8. from https://stackoverflow.com/questions/5394781/sharing-an-application-context-between-two-wars by cc-by-sa and MIT license