2010-04-02 12 views
27

Tüm Java ve OSGi dünyasında oldukça yeni ve bir OSGi web uygulamasının eko sistemini anlamakta zorlanıyorum.Tüm OSGi web eko sistemini anlamakta sorun yok

Ben eko sisteminin tüm parçaları birbiriyle ilişkilidir nasıl anlamaya çalışan Şu anda olduğum daha kesin olmak gerekirse:

  • OSGi Framework (örneğin Apache Felix Equinox, Knoplerfish)
  • OSGi Süre (örn Bahar DM Sunucusu, Pax Runner Apache Karaf)
  • Web genişletme (örn Pax Web genişletme, Bahar Web genişletme)
  • Web Konteyner (örn Apache Tomcat, İskele)

Bu resmi kontrol onların ilişkisinin benim gerçek anlayış görsel temsilini vermek için:

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

Bildiğim kadarıyla OSGi Çerçeve OSGi şartnamenin bir uygulamasıdır bildiği gibi. Çalışma zamanı, örneğin günlüğe kaydetme gibi OSGi belirtiminin üstünde ek işlevler ekleyen bir dağıtımdır. OSGi'nin sınıf yolu mekanizmasında ve Tomcat gibi web kaplarında bazı farklılıklar olduğu için bir tür çevirmene ihtiyacınız var. Bu bölüm "Web Extender" tarafından ele alınmıştır.

Bu şeyi benim için açıklığa kavuşturur musunuz? Ben herşeyi doğru mu anladım?

cevap

24

OSGi, etkileşimli yazılım modülleri için API ve paketleme açısından bir standarttır. Bu, JPA veya Java EE gibi diğer API standartlarına benzer.

Bir OSGi çalışma zamanı OSGi standardını izleyen bir sunucu, bu standardın bir uygulama olmasıdır. Bazı ortak olanlardan bahsediyorsunuz: Knopflerfish, Eqinox. Bunlar OSGi gruplarını çalıştırmanıza izin verir.

Bir web konteyner genellikle Java EE (servlet'ler) web özgü parçaların bir uygulama anlamına gelir. Servlet standardı aynı zamanda sadece farklı OSGi gibi bir API ve paketleme tanımlar.

Java EE web uygulamalarınızı çalıştırmak için bir sunucuya ihtiyacınız vardır. Uygulamanızı bir Java Web Arşivi (WAR) olarak paketleyin ve uygulama sunucunuzun başlatmasını isteyin. Bahsettiğiniz gibi Tomcat, Jetty gibi birçok sunucu var, ama aynı zamanda Glassfish ve JBoss gibi Java EE standardının daha büyük bölümlerini kapsayan daha büyük sunucular var. Bir web genişleticisi, OSGi ile sunucu standardını birleştirmeye çalışır. Zaten paketlenmiş WAR'nize bazı OSGi'ye özgü veriler ekleyerek, WAR otomatik olarak OSGi çalışma zamanınız tarafından ayrıştırılıp başlatılacaktır. WAR sunucularınız web genişleticisi tarafından OSGi http servisine yayınlanacaktır. Bir web genişleticisi ile, hem standart OSGi uygulamalarının yanı sıra, yalnızca bir OSGi çalışma zamanı kullanarak, Tomcat gibi bir Java EE uyumlu sunucuya gerek duymadan, WARs çalıştırabilirsiniz.

+4

Hızlı yanıtınız için teşekkür ederiz. Eğer sizi doğru anlarsam, web genişleticisi normalde tomcat gibi bir web konteynerine dağıtılacak olan WAR dosyalarını alır ve onları OSGi çalışma zamanında çalıştırır. OSGi HttpService daha sonra bunları HTTP Protokolü aracılığıyla "web üzerinde" kullanılabilir hale getirecekti. Doğru? Sonuç olarak: Tomcat gibi bir Web Konteynerine ihtiyacım olmaz mı? – Jens

+2

Evet, birbirine nasıl uyduğu konusunda tam olarak doğru. Hizmetleriniz OSGi http servisi aracılığıyla sağlanacaktır. Bununla birlikte, uygulamada, web genişleticisi, yine de, WAR'yi dağıtmak için bir web konteyneri kullanır. Aldığınız fayda, SAVAŞ'ın OSGi çerçevesinin normal başlangıç ​​betikleriyle başlatılabileceğidir ve SAVAŞLAR OSGi çerçevesinin normal bağımlılık yönetimine katılabilir (örn. WAR: s ve WAR: s'ye güvenebilirsiniz). diğer OSGi paketlerine bağlı olabilir). –

+1

Ve tüm servletler OSGi http servisine kaydedilecek. –

3

Jens,

Ben OSGi ile bazı deneyime sahip olarak

, gerçekten değil düz OSGi ile başlamak öneririz olacaktır.

Bunun yerine Eclipse RCP (Rich Client Platform) ile başlayın.

Sen sadece bir OSGi çalışma zamanını, ancak tam özellikli entegre IDE eğer download Eclipse IDE for RCP and RAP Developers edition here olsun.Hepimiz için

Şanslı, Son zamanlarda sadece birkaç ay önce piyasaya ve Eclipse RCP güncellenen bilgi/rehber içerir edildi kitabı Eclipse Rich Client Platform (2nd Edition) alabilirsiniz.

OSGi başına Eclipse RCP Ancak OSGi temel yapı taşları olan karmaşık ve (en azından başlayanlar) sıkıcı. Eclipse RCP'de hız yapmak çok daha kolay ve zevklidir, saatlerce işlevsel bir “do-şeyler” uygulaması oluşturabilirsiniz. İlk birkaç gün içinde ClassNotFound istisnalar kurtulmak eğer düz OSGi ile

, zaten şanslı olurdu.

Eclipse RCP ile Bir süre sonra bir Java servlet konteyner üzerinde bir web uygulaması olarak çalıştırmak için Eclipse RAP uygulamanızı "dönüştürmek". Eğer olmasa bile, hoşuna giderse bu zamana kadar zaten sahip OSGi kavramların yelken "düz OSGi" sıfırdan başlamış olsaydı daha biraz daha yumuşak olur üzere & uygulamaları kavradı ki ... Bkz.

İyi şanslar Jens!

P.S. Her zaman özellikle OSGi'de olmasa da, my Java EE blog numaralı telefondan bu konu hakkında yazıyorum.

+0

Hey Hendy, Cevabınız için teşekkür ederim. Normal OSGi'nin o kadar da kötü olmadığını düşündüğümden beri sıradan kodlayıcı değilim. Eğitim projelerimin çoğunu yalnızca terminalimi/konsolumu ve basit bir metin düzenleyicisi kullanarak yaptım;) İşleri basit tutmayı seviyorum. Ancak tüm Eclipse ortamı elbette ya da daha büyük projeler için gitmenin yolu değildir. Tüm OSGi kodlayıcısının neden OSGi'den utanmış olduğunu anlamıyorum. Gözlerimden Java'yı tekrar ilginç hale getirdi. – Jens

+0

Sadece 2 sentümü buraya eklemek istedim. Düzgün OSGi'ye bakmama ya da bakmama konusunda Hendy'nin tavsiyesine katılmıyorum. Basit OSGi'nin veya bazı OSGi bileşenlerinin RCP'den çok daha iyi bir seçenek olduğu birçok durum vardır. Kesinlikle RCP'nin kullanımları var, ama gümüş mermi değil. –

+1

@Marcel teşekkür ederim, "RCP'nin kullanımları var, ama gümüş mermi değil." Demek istediğim, Eclipse RCP'nin OSGi ile başlatmanın (yani ** öğrenme aşaması **) daha kolay bir yoludur. Birkaç gün içinde, bir programcı düz OSGi'den çok daha kolay bir şey yapabilecek, o zaman OSGi'nin ne olduğu için bir “hissetme” alacaktır. Düz OSGi'den başlayarak boş bir programcı ilk birkaç gün içinde çok fazla hata yakalayabilir ve kolayca karışabilir. İlk eğri geçtikten sonra, RCP veya düz OSGi'nin projelerinde daha iyi olup olmadığı geliştiricinin tercihi. –