2009-12-02 5 views
14

나는 다른 Spring 기반 Struts 2 응용 프로그램에서 일부 웹 자원 (jsp, html, js, images, css 등)을 공유해야하는 요구 사항이있다. 그리고 이것을 달성하기 위해 OSGi처럼 사용할 수 있습니까?OSGi -이 기술은 얼마나 성숙합니까?

  • OSGi으로이를 달성하는 방법에 대한 몇 가지 지침이 있습니까?
  • 그리고 두 번째로 알고 싶습니다 OSGi 프로덕션 응용 프로그램에서 사용할 수있을 정도로 성숙한가요?

미리 감사드립니다.

는 편집 : 나는 this 게시물을 통해 가서 사람들이 웹 응용 프로그램에서 웹 번들을 공유 할 수있는 것 같다. 유일한 차이점은 Spring MVC를 사용했다는 것입니다. Struts2 응용 프로그램에서도이 작업을 수행 할 수 있는지 알고 싶습니다.

편집 2 : 나는 다음에 대해 기본적으로 약간 불분명입니다 :

  • 은 '공유 - 번들'(웹 자원을 포함하는 공유 할) 윌 .WAR이 포장합니다. 그렇다면이 번들이 다시 메인 웹 애플리케이션과 공유되기 때문에 최종 웹 컨텍스트가 어디에서 형성 될 것입니까? 최종 공유 웹 컨텍스트가 '공유 가능 번들'과 '기본'웹 애플리케이션의 병합으로 구성 될 것으로 기대됩니다. 그것은 자동적으로 일어날 것인가? 어떤 아이디어?

답변

7

OSGI가 해결책 일 수 있지만 약간 과장 될 수 있습니다 (Bozho가 지적했듯이 OSGI 가능 컨테이너가 필요함).어쩌면 다른 옵션에 대한 How to share resources across projects in Maven 살펴 있습니다

  • 잘라 내기 및 붙여 넣습니다.
  • 사용 AssemblyDependency 플러그인
  • 를 사용하여 내 의견으로는 이후 두 번째 옵션을 수행하는 방법을 보여 드리겠습니다이 블로그에서 maven-remote-resources-plugin

, 그것은 은 현재 가장 안정적이고 유연하다. 앞으로는 maven-remote-resources-plugin과 튜토리얼을 작성해 보겠습니다.

편집 : OP의 의견에 답하기. , 공유 할 수있는 웹 리소스의 어셈블리를 만들고 maven-dependency-plugin을 사용하여 "리소스 소비자"프로젝트에서 어셈블리를 가져오고 압축을 푸는 것이 좋습니다. 이 모든 것은 위에서 언급 한 블로그 게시물에서 설명하고 자세히 설명합니다. 아무 것도 명확하지 않으면 알려주세요.

+0

내가 올바르게 이해한다면 공유 가능한 웹 리소스를 (메이븐으로) 조합하여 제안 하시겠습니까? 그렇다면이 공유 가능한 리소스를 사용해야하는 애플리케이션과 어떻게 병합 될까요? 좀 더 설명해주세요 ... 감사합니다. – peakit

+0

나는 이것을 다루었습니다. 자세한 내용을 원하면 알려주십시오. –

+0

고마워요 파스칼! 나는 메이븐 "어셈블리"와 "의존성"루트를 통해 갈 것이고, 뭔가 명확하지 않은지 물어볼 것입니다.이 멋진 아이디어를 나눠 주신 것에 감사드립니다. – peakit

6

OSGi는 성숙한 소프트웨어 제품인 Eclipse, GlassFish, ServiceMix (및 기타)에서도 사용됩니다. 그러나 그것들은 본질적으로 매우 구체적이며, 개인적 견해는 OSGi가 일반 유형 프로젝트에 적합하지 않다는 것입니다. 내가 아는 한 (누군가이 부분에 뉴스가 있다면 나를 정정 해 준다.) 웹 애플리케이션에서 OSGi를 사용하려면 OSGi 번들 서블릿 컨테이너가 필요하다. 또한 리소스 (html, js, images)를 OSGi 번들에 저장하는 것은 번거로울 수 있습니다.

+0

Bozho, OSGi 번들에 리소스를 넣음으로써 어떤 유형의 문제가 발생하는지 알 수 있습니까? http://stackoverflow.com/questions/126073/modular-web-apps 읽기가 가능한 것 같지만 Struts2 앱으로 확인하고 싶습니다. – peakit

+0

프레임 워크와 상관없이 리소스에 관한 것이므로 붙여 넣은 스레드의 첫 번째 대답은 사례와도 관련이 있습니다. – Bozho

+0

그들은 Spring MVC를 사용하고 있습니다. Spring MVC에 대해서는 잘 모르기 때문에 Struts2 앱과 동일한 수준의 공유가 이루어 지는지 확인하고 있습니다. – peakit

3

OSGi는 매우 성숙한 기술입니다. 이것이 모든 Eclipse 플러그인의 구조입니다. 그러나 기술을 지원하는 서블릿 컨테이너가 거의 없기 때문에이 기술은 웹 응용 프로그램 공간에서 아직 주목받지 못하고 있습니다.

당신이 그것을 읽고 싶다면, Craig Wells가 Modular Java을 체크 아웃해야한다. 스프링 프레임 워크와 관련하여 OSGi에 관한 좋은 배경을 제공한다.

리소스 공유와 관련하여 EAR 패키지를 살펴볼 수 있습니다. 필자는이를 사용하여 공통된 자원 세트 (예 : 압축 된 Dojo 버전)로 여러 WAR 파일을 배포했습니다. 또한 이전에 유래 포스트에서 스레드 .war vs .ear file에 읽을 할 수 있습니다

ear-file/proj1 
ear-file/proj2 
ear-file/config 
ear-file/lib 
ear-file/resources 
ear-file/META-INF 
ear-file/APP-INF 

: 같은

예를 들어, EAR을 볼 수있다.

1

저는 Struts (또는 Spring MVC)에 익숙하지 않지만 SpringSource dm Server을 볼 수 있습니다. 이것은 Equinox, Eclipse에서 사용되는 OSGi 컨테이너 및 번들로 구성된 Apache Tomcat (Spring 프레임 워크와 마찬가지로)을 기반으로합니다.

SpringSource 서버를 사용하면 각 war 파일은 다소간 전통적으로 배포되지만 일반적인 OSGi 메커니즘을 통해 리소스 (클래스, 서비스 등)에 액세스 할 수 있습니다. 이러한 메커니즘은 OSGi 번들의 클래스 로더를 기반으로하며 jsp, html, css 등과 같은 파일 리소스 공유에 문제가 될 수 있습니다. 파일 시스템이 아닌 클래스 로더에서 물건을 렌더링 한 DefaultServlet과 유사한 것이 있다면 작동 할 수 있습니다. (아니면, 내가 필요로하는 것보다 더 복잡하게 만들 수도 있습니다.)

한편, 모든 것을 독립적 인 웹 응용 프로그램으로 배포하고 클라이언트 측에서 모두 스티치 할 수 있습니다.

the modular web apps 질문에 대한 첫 번째 대답은 OSSi HttpService를 제공하지 않기 때문에 SpringSource 서버에 직접 적용 할 수는 없지만 실제로 흥미 롭습니다. 최근의 OSGi 4.2 엔터프라이즈 스펙 작업은 SpringSource 서버의 OSGi 번들 접근 방식으로 전개하는쪽으로 나아가고 있다고 생각합니다. 당신의 EDIT 2 질문에 대한 대답에서

, 내가 제대로 이해한다면, 그 answer에서 "웹 컨텍스트는"

  1. 에 방법을 제공하는 인터페이스 인 HttpService를를 사용하여 동적으로 구축 할 것

    URL 아래에 서블릿을 등록하고

  2. URL 아래의 자원 (파일 등)을 등록하십시오.

이러한 작업은 동적으로 처리되므로 웹 컨텍스트 비트를 명시 적으로 병합 할 필요가 없습니다.

+0

고마워요. 실제로 OSGi에서 제공하는 "HTTPService를 사용하여 리소스 등록"을 탐색해야합니다. 또한 나는 일들이 똑바로되지 않으며 해킹 또는 두 가지를 포함 할 수 있다고 생각합니다. 나는 클래스 로더를 가지고 놀지 않고 Maven 어셈블리와 의존성 플러그인을 사용하여이 모든 것을 성취하려고 노력할 것이다. 너 무슨 소리 야? – peakit

관련 문제