2010-04-02 2 views
27

저는 전체 Java 및 OSGi 세계에 새로운 경험이 있으며 OSGi 웹 애플리케이션의 환경 시스템을 이해하는 데 어려움이 있습니다.OSGi 웹 에코 시스템 전체를 이해하는 데 문제가 있습니다.

나는 에코 시스템의 모든 부분이 서로 관련되는 방법을 이해하려고 노력 순간에 나는 더 정확하게하려면

  • OSGi 프레임 워크 (예를 들어, 아파치 펠릭스, 춘분, Knoplerfish)
  • 은 OSGi 런타임 (예를 들어 스프링 DM 서버, 팍스 러너, 아파치 Karaf)
  • 웹 익스텐더 (예 : 팍스 웹 익스텐더, 봄 웹 익스텐더)
  • 웹 컨테이너 (예 : 아파치 톰캣, 부두)

이 이미지를 확인 당신에게 그들의 관계 내 실제 이해의 시각적 표현을 제공합니다 :

alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png

를 지금까지 내가 OSGi 프레임 워크는 OSGi 프레임 사양의 구현입니다 알고. 런타임은 예를 들어 로깅과 같은 OSGi 사양 위에 추가 기능을 추가하는 배포판입니다. Tomcat과 같은 OSGi와 웹 컨테이너의 클래스 패스 메커니즘에는 약간의 차이가 있기 때문에 번역기가 필요합니다. 이 부분은 "Web Extender"에 의해 처리됩니다.

제게이 모든 것을 분명히 설명해 주시겠습니까? 나는 모든 것이 정확하다는 것을 알고 있습니까?

답변

24

OSGi는 상호 작용하는 소프트웨어 모듈을위한 API 및 패키지 측면에서 표준입니다. 이는 JPA 또는 Java EE와 같은 다른 API 표준과 유사합니다.

OSGi 런타임은 OSGi 표준을 따르는 서버로, 표준을 구현 한 것입니다. 당신은 몇 가지 일반적인 것들을 언급 : Knopflerfish, Eqinox. OSGi 번들을 실행할 수있게 해줍니다.

웹 컨테이너는 일반적으로 Java EE (웹 서블릿)의 웹 관련 부분의 구현을 나타냅니다. 서블릿 표준은 또한 OSGi와 마찬가지로 API와 패키징을 정의합니다.

Java EE 웹 앱을 실행하려면 서버가 필요합니다. 응용 프로그램을 Java 웹 아카이브 (WAR)로 패키지하고 응용 프로그램 서버에 시작하도록 요청하십시오. Tomcat, Jetty와 같은 여러 서버가 있지만 Glassfish 및 JBoss와 같은 Java EE 표준의 더 큰 부분을 차지하는 더 큰 서버도 있습니다.

웹 익스텐더는 서블릿 표준을 OSGi와 통합하려고 시도합니다. 이미 패키지화 된 WAR에 OSGi 관련 데이터를 추가하면 WAR가 자동으로 파싱되어 OSGi 런타임에 의해 시작됩니다. WAR 서블릿은 웹 익스텐더를 통해 OSGi http 서비스에 게시됩니다. 웹 익스텐더를 사용하면 Tomcat과 같은 Java EE 호환 서버없이 OSGi 런타임 만 사용하여 WAR뿐만 아니라 표준 OSGi 애플리케이션을 모두 실행할 수 있습니다.

+4

빠른 응답을 부탁드립니다. 정상적으로 이해한다면 웹 익스텐더는 일반적으로 tomcat과 같은 웹 컨테이너에 배포되는 WAR 파일을 받아 OSGi 런타임에서 실행하게됩니다. 그런 다음 OSGi HttpService는 HTTP 프로토콜을 통해 "웹에서"사용할 수있게합니다. 옳은? 결론 : Tomcat과 같은 웹 컨테이너가 필요하지 않습니까? – Jens

+2

네, 어떻게 맞는지 정확히 맞습니다. You'r 서비스는 OSGi http 서비스를 통해 제공됩니다. 그러나 실제로 웹 익스텐더는 웹 컨테이너를 사용하여 어쨌든 WAR를 배포합니다. 당신이 얻을 수있는 이점은 WAR가 OSGi 프레임 워크의 일반적인 시작 스크립트로 시작될 수 있으며, WAR는 OSGi 프레임 워크의 일반적인 종속성 관리에 참여할 수 있다는 것입니다 (예 : WAR : s 및 WAR : s에 의존 할 수 있음). 다른 OSGi 번들에 의존 할 수 있음). –

+1

그리고 모든 서블릿은 OSGi http 서비스에 등록됩니다. –

3

옌스는

난은 OSGi 약간의 경험을 가지고

, 정말 하지는 일반은 OSGi와 함께 시작하는 것이 좋습니다 것입니다.

대신 Eclipse RCP (Rich Client Platform)으로 시작하십시오.

download Eclipse IDE for RCP and RAP Developers edition here 인 경우 OSGi 런타임뿐만 아니라 모든 기능을 갖춘 통합 IDE를 사용할 수 있습니다.

우리 모두를 위해서 행운 인 최근에 릴리스 된 Eclipse Rich Client Platform (2nd Edition) 책을 구할 수 있으며 Eclipse RCP에 대한 최신 정보/가이드가 포함되어 있습니다.

OSGi는 Eclipse RCP의 기본 빌딩 블록이지만 OSGi는 그 자체로 혼란스럽고 지루합니다. Eclipse RCP의 속도를 높이는 것이 훨씬 쉽고 즐겁습니다. 몇 시간 안에 기능적인 "do-something"앱을 만들 수 있습니다.

일반 OSGi를 사용하면 며칠 이내에 ClassNotFound 예외를 제거 할 수 있다면 이미 운이 좋을 것입니다.

Eclipse RCP를 사용하다가 앱을 Eclipse RAP으로 "변환"하여 Java 서블릿 컨테이너에서 웹 응용 프로그램으로 실행하십시오. 비록 당신이 그것을 좋아하지 않는다고해도 ... 당신이 이미 OSGi의 개념을 파악했을 때, "평범한 OSGi"에 대한 당신의 항해가 당신이 처음부터 시작한 것보다 다소 부드럽게 진행될 것이라는 점을 & 연습.

행운을 빌어 요!

P. 나는 또한 OSGi에 대해 항상 구체적이지는 않지만 my Java EE blog에이 내용을 쓴다.

+0

안녕하세요. Hendy, 답장을 보내 주셔서 감사합니다. 나는 평범한 OSGi가 그렇게 나쁘지 않다고 생각한 이후 나는 평범한 코더가 아닌 것 같다. 그리고 저는 대부분의 교육 프로젝트를 터미널/콘솔과 간단한 텍스트 편집기를 사용해서 만 만들었습니다;) 나는 물건을 간단하게 유지하려고합니다. 그러나 전체 Eclipse 환경은 물론 나쁘지도 않고 큰 프로젝트의 경우 갈 길이 멀지 않습니다. 왜 모든 OSGi 코더가 일반 OSGi를 그렇게 부끄러워하는지 모르겠습니다. 내 눈에는 자바가 다시 흥미로웠다. – Jens

+0

여기에 2 센트를 추가하고 싶습니다. 나는 일반 OSGi를 보지 않거나 사용하지 않는다는 Hendy의 조언에 동의하지 않습니다. 일반 OSGi 나 다른 OSGi 구성 요소가 RCP보다 훨씬 더 나은 경우가 많이 있습니다. 분명히 RCP는 그 용도를 가지고 있지만 그것은은 총알이 아닙니다. –

+1

@ 마르셀 감사합니다. "RCP가 그 용도를 가졌지 만 그것은은 총알이 아닙니다." 내가 말한 것은 이클립스 RCP가 OSGi로 시작하는 쉬운 방법 (예 : ** 학습 단계 **)이라는 것입니다. 며칠 이내에 프로그래머는 평범한 OSGi보다 많은 일을 상대적으로 쉽게 할 수있을 것이며 OSGi가 무엇인지에 대한 "느낌"을 얻을 수있을 것입니다. 일반 OSGi에서 시작하는 빈 프로그래머는 처음 며칠 동안 너무 많은 오류를 잡아 내고 쉽게 혼란 스러울 것입니다. 초기 커브가 전달 된 후 RCP 또는 일반 OSGi가 프로젝트에 적합한 지 개발자가 선택합니다. –

관련 문제