OSGi ne çözüyor?


279

Wikipedia ve OSGi ile ilgili diğer sitelerde okudum , ancak büyük resmi gerçekten göremiyorum. Bileşen tabanlı bir platform olduğunu ve modülleri çalışma zamanında yeniden yükleyebileceğinizi söylüyor. Ayrıca her yerde verilen "pratik örnek" Eclipse Plugin Framework'tür.

Sorularım:

  1. OSGi'nin açık ve basit tanımı nedir?

  2. Hangi ortak sorunları çözüyor?

"Yaygın sorunlar" derken, "OSGi işimizi daha verimli / eğlenceli / basit hale getirmek için ne yapabilir?"

Yanıtlar:


95

OSGi'nin bileşen sistemi size ne gibi faydalar sağlar?
İşte oldukça bir liste:

Azaltılmış Karmaşıklık - OSGi teknolojisi ile geliştirme, paket geliştirme anlamına gelir: OSGi bileşenleri. Paketler modüllerdir. İç kısımlarını diğer paketlerden gizler ve iyi tanımlanmış hizmetler yoluyla iletişim kurarlar. İçerileri gizlemek, daha sonra değiştirmek için daha fazla özgürlük anlamına gelir. Bu, yalnızca hata sayısını azaltmakla kalmaz, aynı zamanda demetlerin geliştirilmesini de kolaylaştırır, çünkü doğru boyutta demetler iyi tanımlanmış arabirimler aracılığıyla bir parça işlevsellik uygular. OSGi teknolojisinin geliştirme süreçleri için neler yaptığını açıklayan ilginç bir blog var.

Yeniden Kullan - OSGi bileşen modeli, bir uygulamada birçok üçüncü taraf bileşeninin kullanımını çok kolaylaştırır. Artan sayıda açık kaynaklı proje JAR'larına OSGi için hazır hale getirmektedir. Bununla birlikte, ticari kütüphaneler de hazır demetler olarak sunuluyor.

Gerçek dünya -OSGi çerçevesi dinamiktir. Paketleri anında güncelleyebilir ve hizmetler gelip gidebilir. Daha geleneksel Java için kullanılan geliştiriciler bunu çok sorunlu bir özellik olarak görüyor ve avantajı göremiyorlar. Ancak, gerçek dünyanın son derece dinamik olduğu ve gelip gidebilecek dinamik hizmetlere sahip olduğu, hizmetleri birçok gerçek dünya senaryosu için mükemmel bir eşleşme haline getiriyor. Örneğin, bir hizmet ağdaki bir aygıtı modelleyebilir. Aygıt algılanırsa, hizmet kaydedilir. Cihaz kaybolursa, hizmet kaydı silinir. Bu dinamik hizmet modeliyle eşleşen şaşırtıcı sayıda gerçek dünya senaryosu var. Bu nedenle uygulamalar, hizmet kayıt defterinin güçlü ilkellerini (kayıt, alma, etkileyici bir filtre dili ile listeleme ve hizmetlerin görünmesini ve yok olmasını beklemeyi) kendi alanlarında yeniden kullanabilir. Bu sadece kod yazmadan tasarruf etmekle kalmaz, aynı zamanda özel bir çözüm için uygulayacağınızdan daha fazla global görünürlük, hata ayıklama araçları ve daha fazla işlevsellik sağlar. Böyle dinamik bir ortamda kod yazmak bir kabusa benziyor, ancak neyse ki, hepsinden olmasa da, acıdan en fazlasını alan destek sınıfları ve çerçeveleri var.

Kolay Kurulum - OSGi teknolojisi sadece bileşenler için bir standart değildir. Ayrıca bileşenlerin nasıl kurulacağını ve yönetileceğini de belirtir. Bu API, bir yönetim aracısı sağlamak için birçok paket tarafından kullanılmıştır. Bu yönetim aracı, komut kabuğu, TR-69 yönetim protokolü sürücüsü, OMA DM protokol sürücüsü, Amazon'un EC2'si için bir bulut bilgi işlem arayüzü veya bir IBM Tivoli yönetim sistemi kadar basit olabilir. Standart yönetim API'si, OSGi teknolojisini mevcut ve gelecekteki sistemlere entegre etmeyi çok kolaylaştırır.

Dinamik Güncellemeler - OSGi bileşen modeli dinamik bir modeldir. Paketler tüm sistemi düşürmeden kurulabilir, başlatılabilir, durdurulabilir, güncellenebilir ve kaldırılabilir. Birçok Java geliştiricisi bunun güvenilir bir şekilde yapılabileceğine inanmaz ve bu nedenle başlangıçta bunu üretimde kullanmaz. Ancak, bunu bir süre geliştirmede kullandıktan sonra, çoğu aslında çalıştığını ve dağıtım sürelerini önemli ölçüde azalttığını fark etmeye başlar.

Uyarlanabilir - OSGi bileşen modeli, bileşenlerin karıştırılması ve eşleştirilmesi için sıfırdan tasarlanmıştır. Bu, bileşenlerin bağımlılıklarının belirtilmesini ve bileşenlerin isteğe bağlı bağımlılıklarının her zaman mevcut olmadığı bir ortamda yaşamasını gerektirir. OSGi hizmet kaydı, paketlerin hizmetleri kaydedebileceği, alabileceği ve dinleyebileceği dinamik bir kayıttır. Bu dinamik hizmet modeli, paketlerin sistemde hangi yeteneklerin mevcut olduğunu bulmalarını ve sağlayabilecekleri işlevleri uyarlamalarını sağlar. Bu, kodu daha esnek ve değişikliklere karşı dayanıklı hale getirir.

Şeffaflık - Paketler ve hizmetler OSGi ortamında birinci sınıf vatandaşlardır. Yönetim API'sı, bir paketin dahili durumuna ve diğer paketlere nasıl bağlandığına erişim sağlar. Örneğin, çoğu çerçeve bu iç durumu gösteren bir komut kabuğu sağlar. Belirli bir sorunu ayıklamak için uygulamaların bazı bölümleri durdurulabilir veya tanılama paketleri getirilebilir. Milyonlarca günlük çıkış çıkışına ve uzun yeniden başlatma sürelerine bakmak yerine, OSGi uygulamaları genellikle canlı bir komut kabuğu ile hata ayıklanabilir.

Sürüm oluşturma - OSGi teknolojisi JAR cehennemini çözer. JAR cehennem, A kütüphanesinin B kütüphanesi ile çalıştığı problemdir; sürüm = 2, ancak C kütüphanesi sadece B; sürüm = 3 ile çalışabilir. Standart Java'da şansınız kalmadı. OSGi ortamında, tüm paketler dikkatli bir şekilde sürümlendirilir ve yalnızca işbirliği yapabilen paketler aynı sınıf alanında birbirine bağlanır. Bu, hem A hem de C paketinin kendi kitaplıklarıyla çalışmasını sağlar. Bu sürüm oluşturma sorunu olan sistemlerin tasarlanması tavsiye edilmese de, bazı durumlarda hayat kurtarıcı olabilir.

Basit - OSGi API'sı şaşırtıcı derecede basittir. Çekirdek API yalnızca bir paket ve 30'dan az sınıf / arabirimdir. Bu temel API, paketleri yazmak, yüklemek, başlatmak, durdurmak, güncellemek ve kaldırmak için yeterlidir ve tüm dinleyici ve güvenlik sınıflarını içerir. Çok az API için çok fazla işlevsellik sağlayan çok az API vardır.

Küçük - OSGi Sürüm 4 Çerçevesi yaklaşık 300 KB'lık bir JAR dosyasında uygulanabilir. Bu, OSGi dahil edilerek bir uygulamaya eklenen işlevsellik miktarı için küçük bir ek yüktür. Bu nedenle OSGi, çok küçükten küçükten ana karelere kadar çok çeşitli cihazlarda çalışır. Yalnızca minimum bir Java VM'nin çalışmasını ister ve üzerine çok az şey ekler.

Hızlı - OSGi çerçevesinin temel sorumluluklarından biri, sınıfları paketlerden yüklemek. Geleneksel Java'da JAR'lar tamamen görünür ve doğrusal bir listeye yerleştirilir. Bir sınıfta arama yapmak için bu listeyi aramak gerekir (genellikle çok uzun, 150 nadir değildir). Aksine, OSGi paketleri hazırlar ve her bir paket için tam olarak hangi paketin sınıfı sağladığını bilir. Bu arama eksikliği başlangıçta önemli bir hız faktörüdür.

Tembel - Yazılımdaki tembel iyidir ve OSGi teknolojisi, işleri gerçekten ihtiyaç duyulduğunda yapmak için birçok mekanizmaya sahiptir. Örneğin, demetler istekli bir şekilde başlatılabilir, ancak yalnızca diğer demetler bunları kullanırken başlatılacak şekilde de yapılandırılabilir. Hizmetler kaydedilebilir, ancak yalnızca kullanıldıklarında oluşturulabilir. Spesifikasyonlar, muazzam çalışma zamanı maliyetlerinden tasarruf edebilen bu tür tembel senaryolara izin vermek için birkaç kez optimize edildi.

Güvenli - Java'nın alt kısmında çok güçlü bir ince taneli güvenlik modeli vardır, ancak uygulamada yapılandırılması çok zor olduğu ortaya çıktı. Sonuç, çoğu güvenli Java uygulamasının ikili bir seçenekle çalışmasıdır: güvenlik yok veya çok sınırlı yetenekler. OSGi güvenlik modeli, ince taneli güvenlik modelinden yararlanır, ancak paket operatörünün istenen güvenlik ayrıntılarını kolayca denetlenen bir formda belirtmesini sağlayarak kullanılabilirliği artırır (orijinal modeli sertleştirir). Genel olarak, OSGi muhtemelen hala donanım korumalı bilgi işlem platformlarından kısa olan en güvenli uygulama ortamlarından birini sunmaktadır.

Müdahaleci Olmayan - Bir OSGi ortamındaki uygulamalar (paketler) kendi başlarına bırakılır. OSGi'yi kısıtlamadan sanal makinenin neredeyse tüm tesislerini kullanabilirler. OSGi'deki en iyi uygulama, Düz Eski Java Nesneleri yazmaktır ve bu nedenle, OSGi hizmetleri için özel bir arabirim gerekmez, hatta bir Java String nesnesi bir OSGi hizmeti olarak işlev görebilir. Bu strateji, uygulama kodunun başka bir ortama taşınmasını kolaylaştırır.

Her Yerde Çalışıyor - Buna bağlı. Java'nın asıl amacı herhangi bir yerde çalıştırmaktı. Açıkçası, Java VM'lerinin yetenekleri farklı olduğu için tüm kodları her yerde çalıştırmak mümkün değildir. Cep telefonundaki bir VM, bankacılık uygulaması çalıştıran bir IBM ana bilgisayarıyla aynı kütüphaneleri desteklemeyecektir. Dikkat edilmesi gereken iki konu var. İlk olarak, OSGi API'leri tüm ortamlarda bulunmayan sınıfları kullanmamalıdır. İkinci olarak, yürütme ortamında bulunmayan bir kod içeriyorsa, bir paket başlatılmamalıdır. Bu sorunların her ikisi de OSGi spesifikasyonlarında ele alınmıştır.

Kaynak: www.osgi.org/Technology/WhyOSGi


2
Bana sadece bir SOA (vatansız / durum bilgisi) kullanarak bu faydaları en azından bazı elde edebileceği gibi görünüyor. Bir bileşenin yamalı / güncelleştirilmiş sürümünü farklı (sürüm) bir bitiş noktasına dağıtırken, bağımlı bileşene sahip olabilirim, yamalı hizmeti yeni bitiş noktasında değiştirebilir ve kullanabilirim. Hem eski sürümü hem de yeni sürümü aynı anda dağıtıp çalıştırabildiğim için, bağımlı bileşenin gerektiğinde hem eski sürümün hem de yeni sürümün farklı bölümlerini kullanmasını sağlayabilirim.
MikeM

1
Görünüşe göre insanlar mikro hizmetler yapmak için çok fazla sorun yaşıyorlar ve SOA (umarım) OSGi'den% 20 daha fazla işlevsellik elde etmek için. Şirketler, OSGi'nin bu kadar az ekstra iş için ne kadar verdiğini iki kez düşünmelidir. Aynı JVM'deki tüm hizmetler, birden çok hizmetin çevrimdışı alınabileceği veya gerektiğinde yükseltilebileceği tek bir işlemde.
Teddy

OSGi paketleri, insanların uzun zamandır aradığı zor 'bileşen' için en yakın soyutlama olabilir!
Teddy

SOA ve mikro hizmetler, bazı avantajları sağlayabilir, ancak çok daha yüksek bir maliyetle. Her iki durumda da tüm iletişim, yerel aramalara kıyasla çok pahalı olan şebeke üzerinden gerçekleşir. SOA ve mikro hizmetlerde sürümleri yönetmek de oldukça kabus. Buna karşılık bir OSGi hizmetini aramak, herhangi bir java yöntemi çağrısı kadar ucuzdur.
Christian Schneider

90

OSGi'den aşağıdaki faydaları buldum:

  • Her eklenti, kendi sınıf yükleyicisine sahip sürümlü bir eserdir.
  • Her eklenti, hem içerdiği belirli kavanozlara hem de diğer belirli sürümlü eklentilere bağlıdır.
  • Versiyonlama ve izole sınıf yükleyiciler nedeniyle, aynı eserin farklı versiyonları aynı anda yüklenebilir. Uygulamanızın bir bileşeni eklentinin bir sürümüne, diğeri başka bir sürüme bağlıysa, her ikisi de aynı anda yüklenebilir.

Bununla, uygulamanızı isteğe bağlı olarak yüklenen bir dizi eklenti eseri olarak yapılandırabilirsiniz. Her eklenti bağımsız bir bileşendir. Nasıl Maven, yapınızı yapılandırmanıza yardımcı olur, böylece tekrar tarafından oluşturulabilir ve oluşturduğu belirli bir dizi yapay sürüm tarafından tanımlanır, OSGi bunu çalışma zamanında yapmanıza yardımcı olur.


14
Bu güçlü sürüm oluşturma mekanizmasının en büyük avantajlarından biri, dağıtım sırasında bağımlılıkların doğrulanmasıdır, yani dağıtım zamanında çalışma zamanında NoClassDefFoundErrors yerine çözümlenmemiş bağımlılık hataları alırsınız. Modül sisteminin yanı sıra, OSGi hizmet katmanı da söz edilmeyi hak ediyor. Başlamak o kadar kolay değil çünkü mimarinizi etkiliyor (ve onu kullanmak her zaman uygun değil), ancak onu kabul ettikten sonra çok güçlü bir sistem.
Barend

58

OSGi modüllerinin çalışırken takılabilirliği konusunda çok fazla umursamıyorum (en azından şu anda). Daha çok zorlanan modülerlik. Sınıf yolunda herhangi bir zamanda milyonlarca "herkese açık" sınıfın bulunmaması, dairesel bağımlılıklardan iyi korunmaktadır: Sadece java dil kurgusu için değil, aynı zamanda kütüphaneniz açısından da genel arayüzlerinizi gerçekten düşünmelisiniz. / module: Başkaları için kullanılabilir olmasını istediğiniz bileşenler (tam olarak) nedir? İşlevselliğinizi uygulamak için gerçekten ihtiyacınız olan arayüzler (diğer modüllerin) tam olarak nedir?

Güzel, hotplug bununla birlikte geliyor, ancak tüm hotplugability kombinasyonlarını test etmekten ziyade her zamanki uygulamalarımı yeniden başlatmayı tercih ederim ...


9
Aynı şeyi Guice ve paketleri kullanarak, sadece arayüzleri ve Modülleri dışa aktararak ve diğer her şeyi pakete özel olarak işaretleyerek elde edebilirsiniz
Pablo Fernandez

20
  • Analog olarak, arabanızın motorunu kapatmadan değiştirebilirsiniz.
  • Müşteriler için karmaşık sistemleri özelleştirebilirsiniz. Eclipse'in gücüne bakın.
  • Tüm bileşenleri yeniden kullanabilirsiniz. Sadece nesnelerden daha iyi.
  • Bileşen tabanlı Uygulamalar geliştirmek için kararlı bir platform kullanırsınız. Bunun faydaları çok büyük.
  • Kara kutu konseptiyle Bileşenler oluşturabilirsiniz. Diğer bileşenlerin gizli arayüzler hakkında bilgi sahibi olmaları gerekmez, sadece yayınlanan arayüzleri görürler.
  • Aynı sistemde, uygulamadan ödün vermeden birkaç eşit bileşen, ancak farklı sürümlerde kullanabilirsiniz. OSGi, Jar Hell problemini çözer.
  • OSGi ile CBD ile mimar sistemlerini düşünmeyi geliştirirsiniz

Java kullanan herkes için mevcut birçok fayda var (sadece bunları hatırlattım).


15

anlaşılır olması için düzenlenmiştir. OSGi sayfası benimkinden daha basit bir cevap verdi

Basit bir cevap: OSGi Servis Platformu, ağa bağlı servisler için standartlaştırılmış, bileşen odaklı bir bilgi işlem ortamı sağlar. Bu mimari, uygulama oluşturma, bakımını yapma ve uygulamaların genel karmaşıklığını önemli ölçüde azaltır. OSGi Servis Platformu, yeniden başlatmaya gerek kalmadan kompozisyonu çeşitli ağların cihazında dinamik olarak değiştirme işlevleri sağlar.

Eclipse IDE gibi tek bir uygulama yapısında, yeni bir eklenti yüklediğinizde yeniden başlatmak önemli değildir. OSGi uygulamasını tamamen kullanarak, çalışma zamanında eklentiler ekleyebilmeli, yeni işlevselliği alabilmelisiniz, ancak tutulmayı hiç yeniden başlatmanız gerekmez.

Yine, her gün için büyük bir anlaşma, küçük uygulama kullanımı.

Ancak, çok bilgisayarlı, dağıtılmış uygulama çerçevelerine bakmaya başladığınızda, ilginç olmaya başlıyor. Kritik sistemler için% 100 çalışma süresi olması gerektiğinde, bileşenleri çalışırken değiştirme veya çalışma zamanında yeni işlevsellik ekleme özelliği yararlıdır. Kabul edelim, bunu çoğunlukla yapmak için yetenekler var, ancak OSGi her şeyi ortak arayüzlerle güzel bir çerçeve içine toplamaya çalışıyor.

OSGi ortak sorunları çözüyor mu, bundan emin değilim. Yani, olabilir, ancak daha basit problemler için ek yük buna değmeyebilir. Ancak daha büyük, ağa bağlı uygulamalarla uğraşmaya başladığınızda düşünmeniz gereken bir şey.


OSGi'nin dağıtılmış bir ortamda hizmet keşfi için bir JVM mekanizması sağladığını mı söylüyorsunuz? Kendi sorum ( stackoverflow.com/questions/375725/… ), OSGi tek VM gibi yanıtlandı
oxbow_lakes

"Çeşitli ağların aygıtındaki kompozisyonu dinamik olarak değiştirme" içindeki "ağlar" ile ne demek istersiniz?
Thilo

Mikro hizmetler benzer sorunları çözmüyor mu?
Vibha

12

OSGi'de beni deli eden birkaç şey:

1) İmplentasyonların ve içerik yükleyicilerinin kendilerine çok fazla tuhaflıkları var ve biraz async olabilir (Birleşmenin içinde felix kullanıyoruz). [Main] 'nin hemen hemen her şey senkronizasyonundan geçtiği saf bir yayla (DM yok) karşılaştırıldığında.

2) Sınıflar sıcak yükten sonra eşit değildir. Örneğin, hazırda bekletme modunda bir tangosol önbellek katmanınız olduğunu varsayalım. OSGi kapsamı dışında Fork.class ile doldurulur. Yeni bir kavanoz dolduruyorsunuz ve Çatal değişmedi. Sınıf [Çatal]! = Sınıf [Çatal]. Aynı zamanda altta yatan nedenler için serileştirme sırasında da ortaya çıkar.

3) kümeleme.

Bu şeyler üzerinde çalışabilirsiniz, ancak büyük bir büyük acıdır ve mimarinizin kusurlu görünmesini sağlar.

Ve hotplugging reklam sizin için .. OSGi # 1 Müşteri? Eclipse. Eclipse paketi yükledikten sonra ne yapar?

Yeniden başlar.


OSGi bağımlılık grafiği bu yeni paket tarafından kırıldığı için Eclipse'in önyükleme yapmayacağını bile unutmayın.
Martin Vysny

6

OSGi kodunuzu attırır NoClassDefFoundErrorve ClassNotFoundExceptionbelirgin bir nedenden ötürü (büyük olasılıkla OSGi yapılandırma dosyasında bir paketi dışa aktarmayı unuttuğunuz için); o classloaders vardır çünkü sınıf yapabilir com.example.Foodönüştürülmeyecektir başarısız com.example.Fooaslında iki farklı classloaders tarafından yüklenen iki farklı sınıflar beri. Eclipse eklentisini yükledikten sonra Eclipse önyüklemenizi OSGi konsoluna yapabilir.

Benim için OSGi sadece karmaşıklığı ekledi (çünkü benim için grok'a bir zihinsel model daha ekledi), istisnalar nedeniyle sıkıntılar ekledi; Asla "sunduğu" dinamikliğe gerçekten ihtiyacım olmadı. Tüm modüller için OSGi paket yapılandırması gerektirdiği için müdahaleci idi; (daha büyük bir projede) kesinlikle basit değildi.

Kötü deneyimlerimden dolayı, o canavardan uzak durma eğilimindeyim, çok teşekkür ederim. Kavanoz bağımlılığı cehenneminden muzdarip olmayı tercih ederim, çünkü bu OSGi'nin sınıf yükleyici cehenneminden daha kolay anlaşılabilir.


5

Henüz OSGi'nin "hayranı" olamam ...

Fortune 100 şirketlerinde bir kurumsal uygulama ile çalışıyorum. Son zamanlarda, kullandığımız ürün OSGi uygulamasına "yükseltildi".

yerel cba dağıtımına başlanıyor ... [2/18/14 8: 47: 23: 727 EST] 00000347 CheckForOasis

nihayet konuşlandırıldı ve "aşağıdaki paketler sessiz ve sonra yeniden başlatılacak" [2/18/14 9: 38: 33: 108 EST] 00000143 AriesApplicat I CWSAI0054I: Uygulama için güncelleme işleminin bir parçası olarak

51 dakika ... kod her değiştiğinde ... Önceki sürüm (OSGi olmayan) eski geliştirme makinelerinde 5 dakikadan daha kısa sürede devreye girer.

gig ram ve 40 boş gig diski ve Intel i5-3437U 1.9 GHz CPU'lu bir makinede

Bu yükseltmenin "faydası" iyileştirme (üretim) dağıtımları olarak satıldı - yılda yaklaşık 4 kez yaptığımız bir etkinlik, belki de yılda 2-4 küçük düzeltme dağıtımıyla. 15 kişiye (KG ve geliştiriciler) günde 45 dakika ekleyerek, haklı olduğunu hayal bile edemiyorum. Büyük kurumsal uygulamalarda, uygulamanız temel bir uygulama ise, o zaman bunu değiştirmek, haklı olarak (küçük değişikliklerin uzaktaki etkiler için potansiyele sahiptir - işletmenin her tarafındaki tüketicilerle iletilmesi ve planlanması gerekir), anıtsal bir etkinlik - yanlış mimari OSGi. Uygulamanız kurumsal bir uygulama değilse, yani her tüketici kendi silo'd veritabanında kendi veri silosuna vurabilecek ve birçok uygulamayı barındıran bir sunucuda çalışan kendi özel modülüne sahip olabilir, o zaman belki OSGi'ye bakın. En azından,


4
OSGi, neredeyse hiç ek yükü olmadığı için dağıtımın 5 ila 51 dakika sürmesine neden olamaz. Başlatma süresindeki bu artış, başka bir şeyden veya aktivatörlerin senkronize olarak başlatılmasıyla başlatmanın serileştirilmesinden kaynaklanmalıdır. OSGi'nin hatası değildir, çünkü genel olarak insanlar daha düşük başlangıç ​​zamanı alırlar.
Peter Kriens

İlginç cevap. Sadece OSGi'yi okuyorum ... evet geç gel. Ancak endişem kurumsal bağlamdaki verilerle ilgili. Benzer hizmetler mikro hizmetler ile de var.
Bill Rosmus

4

Java tabanlı bir uygulama, JVM'yi kapatmadan modül ekleme veya çıkarma (uygulamanın temel işlevlerini genişletme) gerektiriyorsa, OSGI kullanılabilir. Genellikle JVM'yi kapatma maliyeti daha fazlaysa, sadece güncellemek veya işlevselliği arttırmak için.

Örnekler :

  1. Eclipse : Eklentilerin yüklenmesi, kaldırılması, güncellenmesi ve birbirine bağımlı olması için platform sağlar.
  2. AEM : WCM uygulaması, işlevsellik değişikliğinin iş odaklı olacağı, bakım için bekleme sürelerini karşılayamayacak.

Not : Yay çerçevesi, işlem tabanlı uygulamalar veya bu satırlardaki bir nokta için gereksiz karmaşıklık olarak kabul ederek OSGI bahar paketlerini desteklemeyi durdurdu. Bir platform oluşturmak gibi büyük bir şeyde kesinlikle gerekli olmadıkça kişisel olarak OSGI'yı düşünmüyorum.


3

Neredeyse 8 yıldır OSGi ile çalışıyorum ve OSGi'yi yalnızca bir bileşeni çalışma zamanında güncellemek, kaldırmak, yüklemek veya değiştirmek için bir işiniz varsa düşünmeniz gerektiğini söylemeliyim. Bu aynı zamanda modüler bir zihniyete sahip olmanız ve modülerliğin ne anlama geldiğini anlamanız gerektiği anlamına gelir. OSGi'nin hafif olduğu konusunda bazı argümanlar var - evet, bu doğru, ancak hafif ve bakımı ve geliştirilmesi daha kolay başka çerçeveler de var. Aynı şey java blah blah için de geçerlidir.

OSGi, doğru bir şekilde kullanılması için sağlam bir mimariye ihtiyaç duyar ve herhangi bir OSGi olmadan bağımsız olarak çalıştırılabilen bir kavanoz olabilen OSGi sistemini yapmak oldukça kolaydır.


2

OSGi aşağıdaki faydaları sağlar:

■ Java tabanlı taşınabilir ve güvenli bir yürütme ortamı

■ Servisleri paketler arasında kaydetmek ve paylaşmak ve servis sağlayıcıları servis tüketicilerinden ayırmak için kullanılabilen bir servis yönetim sistemi

■ OSGi'nin paketleri çağırdığı Java modüllerini dinamik olarak yüklemek ve kaldırmak için kullanılabilen dinamik bir modül sistemi

■ Hafif ve ölçeklenebilir bir çözüm


1

Ayrıca, mobil cihazlarda ara katman yazılımı ve uygulamaların ek taşınabilirliğini sağlamak için de kullanılmaktadır. Mobil taraf, örneğin WinMo, Symbian, Android için kullanılabilir. Cihaz özellikleriyle entegrasyon gerçekleşir kesilmez parçalanabilir.


1

En azından, OSGi modülerlik, kodun yeniden kullanımı, versiyonlama ve genel olarak bir projenin su tesisatı hakkında DÜŞÜNÜYOR.


Bunu düşünmenize neden olmaz, sadece sizi şaşırtabilir, tüm bu problemleri çözdüğü bir yalan (sadece bunları çözebilirsiniz), projeniz ~ 50 eklentiden daha büyük olduğunda bağımlılık cehennemi getirir ve genellikle çok sayıda classloader hilesi yapmanız gerekiyor. Bu yüzden kodunuz çok daha dağınık, çünkü bazı osgi saldırıları yapmanız gerekiyor ve ekibinizdeki tüm geliştiricilerin kodu anlamak için bu saldırıları anlaması gerekiyor. Bu etki o kadar büyük ki, mimarinizi kodunuza çok kötü şeyler yapacak şekilde etkiler, Cehennemdir.
Krzysztof Cichocki

1

Diğerleri faydaları ayrıntılı olarak açıkladı, burada OSGi'yi gördüğüm veya kullandığım pratik kullanımları açıklıyorum.

  1. Uygulamamızdan birinde, olaya dayalı akışımız var ve akış OSGi platformuna dayalı eklentilerde tanımlanıyor, bu yüzden yarın bazı istemciler farklı / ek akış istiyorsa, sadece bir eklenti daha dağıtmalı, konsolumuzdan yapılandırmalı ve bitti .
  2. Farklı Mağaza bağlayıcılarını dağıtmak için kullanılır, örneğin, zaten Oracle DB bağlayıcısına sahip olduğumuzu ve yarın mongodb'un bağlanması gerektiğini, ardından yeni bir bağlayıcı yazıp dağıtacağınızı ve ayrıntıları konsoldan yapılandırdığınızı varsayalım ve yine de işiniz bitti. konektörlerin kurulumu OSGi eklenti çerçevesi tarafından gerçekleştirilir.

1

Resmi sitesinde zaten oldukça ikna edici bir ifade var,

OSGi teknolojisinin bu kadar başarılı olmasının temel nedeni, şaşırtıcı sayıda ortamda çalışan çok olgun bir bileşen sistemi sağlamasıdır . OSGi bileşen sistemi aslında IDE'ler (Eclipse), uygulama sunucuları (GlassFish, IBM Websphere, Oracle / BEA Weblogic, Jonas, JBoss), uygulama çerçeveleri (Bahar, Guice), endüstriyel otomasyon, konut ağ geçitleri, telefonlar ve çok daha fazlası.

Geliştiricinin faydalarına gelince?

GELİŞTİRİCİLER: OSGi, günümüzün büyük ölçekli dağıtılmış sistemleri ve küçük, gömülü uygulamalar için modüler bir mimari sağlayarak karmaşıklığı azaltır. Şirket içi ve hazır modüllerden yapılan bina sistemleri karmaşıklığı ve dolayısıyla geliştirme ve bakım giderlerini önemli ölçüde azaltır. OSGi programlama modeli, bileşen tabanlı sistemlerin vaadini gerçekleştirir.

Lütfen OSGi Kullanmanın Yararları bölümündeki ayrıntıları kontrol edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.