2012-04-20 18 views
7

Potrzebuję ponownie użyć kodu pierwotnie opracowanego dla aplikacji Eclipse RCP (tj. W pudełku jako wtyczkę Eclipse/pakiet OSGi) w serwlecie.Aby osadzić OSGi w kontenerze serwletu lub kontenerze serwletów w OSGi?

Po przeczytaniu wielu blogach, artykułach, wiki itd skończyło się w momencie, gdy wiem, że:

  1. OSGi framework (Equinox w moim przypadku) mogą być osadzone w serwletu kontener (Tomcat 7 w moim przypadku)
  2. lub Tomcat może być osadzony w strukturze OSGi.

zaleca drugą opcję jako łatwiejszą. Ale do produkcji polecają 1. Nie jestem pewien dlaczego. Co jest w tym przypadku naprawdę lepsze i dlaczego?

Jestem dość doświadczonym użytkownikiem Tomcata, czy osadzenie Tomcata w równaniu Equinox zmieni się w niego mocno? lub innymi słowy, co będzie inne w Tomcat osadzonym w Equinox?

Odpowiedz

5

Po pierwsze, czy kod ma jakieś zależności OSGi/Equinox oprócz manifestu? Jeśli nie, to powinien działać dobrze w zwykłym Tomcat.

Rozumiem, że osadzanie Tomcata w Equinox zmieni jego administrację. Twój układ folderów, w tym server.xml i catalina.sh, zniknie. Zamiast tego będziesz zarządzać aplikacją Equinox prawdopodobnie przez administratora konfiguracji.

Po drugie, istnieją dwa modele programowania i wdrażania serwletów dla OSGi. Pierwszym z nich jest HttpService, w którym programowo rejestrujesz swoje serwlety i zasoby (możesz to zrobić również poprzez punkt rozszerzenia). W tym przypadku twoja aplikacja to tylko zbiór pakietów. Jednak nie możesz używać filtrów. Drugi to pakiet aplikacji WWW (WAB), który jest OSGified WAR.

+2

Całkowicie zapomniałem, że jeśli szukasz systemu Tomcat w systemie Equinox, prawdopodobnie będziesz chciał rzucić okiem na [Eclipse Virgo] (http://www.eclipse.org/virgo/) zamiast budować go samemu . –

4

Apache Sling może maven-launchpad-plugin wytworzyć plik wojenny, który osadza frameworki OSGi (standardowo Apache Felix, nie wiem, czy inne są obsługiwane) i zestaw zdefiniowanych pakietów. Może być używany do uruchamiania aplikacji OSGi w Tomcat.

5

Przeprowadzamy migrację dość złożonej aplikacji internetowej, która korzysta z Jetty z systemów innych niż OSGi do OSGi na platformie Equinox. Dowiedziałem się o kilku rzeczach, które zdecydowanie mogą wpłynąć na Twoją decyzję w taki czy inny sposób: - Jeśli zdecydujesz się użyć OSGi jako platformy do uruchomienia aplikacji i np. opcja nr 2, wszystko, co zużyje Twoja aplikacja, będzie musiało być pakietami OSGi. Każda zewnętrzna lub zewnętrzna strona komercyjnych bibliotek. Jeśli korzystasz z wielu otwartych źródeł, łatwo jest znaleźć pakiety. Lub, jeśli nie możesz znaleźć pakietów, zawsze możesz je spakietować samodzielnie za pomocą BNDTools. Mimo to takie podejście może być czasochłonne, aby znaleźć wszystkie właściwe zależności, a możliwe problemy z ładowaniem klas wymagają hackowania wokół OSGi - podejścia polegającego na osadzaniu OSGi w Tomcat, co może wydawać się bezpieczniejszym i łatwiejszym podejściem na powierzchni. Chociaż nie jestem pewien, czy w tym przypadku skorzystasz z usług WAB.

Przy okazji jedną z interesujących zalet WAB jest to, że można łatwo udostępniać kod między WebApps, ponieważ są one wdrażane jako pakiety i można po prostu eksportować/importować pakiety w ich obrębie. Coś, co nie jest obecnie możliwe przy wdrożeniach innych niż OSGi.