OSGi, Java Modularity ve Jigsaw


95

Yani dün sabah itibariyle OSGi'nin ne olduğu konusunda hiçbir fikrim yoktu. OSGi , sürekli kırpıldığını gördüğüm bir moda kelimeydi ve bu yüzden sonunda onu tazelemek için biraz zaman ayırdım.

Aslında oldukça havalı bir şey gibi görünüyor, bu yüzden (kayıt için) hiçbir bakımdan OSGi karşıtı olmadığımı ve bunun bir "OSGi-dayak" sorusu olmadığını belirterek başlamak istiyorum.

Günün sonunda, OSGi'nin - esasen - Java Modularity üzerine JSR 277'yi ele aldığı görülüyor; bu, JARdosya spesifikasyonunda bazı köşe durumlarda ad alanı çözümlemesi ve sınıf yükleme sorunlarına yol açabilecek eksiklikler olduğunu fark etti . OSGi aynı zamanda başka pek çok harika şey de yapıyor, ancak anlayabildiğim kadarıyla, bu onun en büyük çekiciliği (veya onlardan biri).

Bana göre - oldukça yeni (birkaç yıldır) bir Java EE geliştiricisi olarak, 2011 yılında olmamız ve şu anda Java 7 çağında yaşıyor olmamız ve bu sınıf yükleme sorunlarının hala mevcut olması kesinlikle akıllara durgunluk veriyor; özellikle bir uygulama sunucusunun üzerinde yüzlerce JAR bulunabileceği kurumsal ortamlarda, bunların çoğu birbirinin farklı sürümlerine bağlıdır ve tümü aynı anda (az ya da çok) çalışır.

Benim sorum:

OSGi ile ilgilendiğim kadar ve projelerim için nerede / işe yarayıp yaramayacağını görmek için onu öğrenmeye başlamak istediğim kadar, oturup bu kadar büyük bir şey öğrenmek için zamanım yok. En azından şimdi.

Peki, OSGi olmayan geliştiriciler bu sorunlar ortaya çıktığında ne yapmalı? Varsa, şu anda hangi Java (Oracle / Sun / JCP) çözümleri mevcuttur? Jigsaw neden J7'den kesildi? Jigsaw'un gelecek yıl J8'de uygulanacağı topluluk ne kadar emin? Henüz Java platformunun bir parçası olmamasına rağmen projeniz için Jigsaw almanız mümkün mü?

Sanırım burada sorduğum şey panik, entrika ve facepalm kombinasyonu. Artık OSGi'nin ne olduğunu nihayet anladığıma göre, Jigsaw gibi bir şeyin nasıl sonuç vermesinin 20 yıldan fazla sürdüğünü ve daha sonra bunun bir sürümden nasıl korunabileceğini "anlamıyorum". Sadece temel görünüyor.

Ve bir geliştirici olarak, çözümlerimin ne olduğunu da merak ediyorum, sans OSGi.

Ayrıca, Not : Bunun " saf programlama " tipi bir soru olmadığını biliyorum , ancak bazılarınız burunlarınızı şekilden kurtarmadan önce, bu soruyu kasıtlı olarak sorduğumu belirtmek istedim (yine kayıt için) YANİ. Bunun nedeni, SO'lu arkadaşlarıma en büyük saygımdan başka hiçbir şeyim olmadığı ve her gün burada gizlendiğini gördüğüm bazı "BT Tanrıları" ndan mimari düzeyde bir cevap arıyorum.

Ancak, bir SO sorusunun bazı kod bölümleriyle desteklenmesinde kesinlikle ısrar edenler için :

int x = 9;

(Bu OSGi / Jigsaw / classloader / namespace / JAR cehennem şeylerine ağırlık verebilecek herkese teşekkürler!)


Java 9, Jigsaw ile dün itibariyle burada. Okumak güzel: En İyi 10 Jigsaw ve Java 9 Yanılgısı Debunked
David Tonhofer

Yanıtlar:


100

Öncelikle, Jigsaw'un birincil kullanım durumunun JRE'nin kendisini modüler hale getirmek olduğunu anlayın. İkincil bir amaç olarak, diğer Java kitaplıkları ve uygulamaları tarafından kullanılabilecek bir modül sistemi sunacaktır.

Benim görüşüm, Jigsaw gibi bir şeyin muhtemelen yalnızca JRE için gerekli olduğu, ancak diğer Java kitaplıkları veya uygulamaları tarafından kullanıldığında çözüldüğünü iddia ettiğinden çok daha fazla sorun yaratacağı yönünde.

JRE çok zor ve özel bir durumdur. 12 yaşın üzerinde ve bağımlılık döngüleri ve anlamsız bağımlılıklarla dolu korkunç bir karmaşa. Aynı zamanda yaklaşık 9 milyon geliştirici ve muhtemelen milyarlarca çalışan sistem tarafından kullanılmaktadır. Bu nedenle, bu yeniden düzenleme önemli değişiklikler yaratıyorsa, JRE'yi kesinlikle yeniden düzenleyemezsiniz.

OSGi, modüler bir yazılım oluşturmanıza yardımcı olan (hatta sizi buna zorlayan ) bir modül sistemidir . Mevcut modüler olmayan bir kod tabanının üzerine modülerliği basitçe serpemezsiniz. Modüler olmayan bir kod tabanını modüler bir kod tabanına dönüştürmek, kaçınılmaz olarak bazı yeniden düzenleme gerektirir: sınıfları doğru pakete taşımak, doğrudan başlatmayı, ayrıştırılmış hizmetlerin kullanımıyla değiştirmek, vb.

Bu, OSGi'yi doğrudan JRE kod tabanına uygulamayı zorlaştırır, ancak yine de JRE'yi ayrı parçalara veya "modüllere" bölme zorunluluğumuz vardır, böylece JRE'nin azaltılmış sürümleri teslim edilebilir.

Bu nedenle Jigsaw'u , JRE kodunu bölerken canlı tutmak için bir tür " aşırı önlem " olarak görüyorum . It does not daha modüler hale yardım kodunu ve bunu aslında kullandığı bunu herhangi kitaplık veya uygulamayı gelişmeye gerekli bakım artacağına inanıyoruz ediyorum.

Son olarak: OSGi var, oysa Jigsaw henüz mevcut değil ve asla var olmayabilir. OSGi topluluğu, modüler uygulamalar geliştirme konusunda 12 yıllık deneyime sahiptir. Modüler uygulamalar geliştirmekle ciddi olarak ilgileniyorsanız, OSGi şehirdeki tek oyundur.


Bu da sen misin? slideshare.net/mfrancis/… neredeyse aynı içerik.
Jin Kwon

Ayrıca JBoss Modülleri de vardır: docs.jboss.org/author/display/MODULES/Introduction Aynı zamanda Ceylon (ceylonlang.org) tarafından da kullanılmaktadır. Bu konuya Ceylon kullanıcı forumunda bakın: groups.google.com/forum/?hl=de#!topic/ceylon-users/RmDskLDNkug
OlliP

Son ifade: "Modüler uygulamalar geliştirmekle ciddi bir şekilde ilgileniyorsanız, OSGi şehirdeki tek oyundur" hala geçerli mi?
Adam Arold

1
@AdamArold Öyle olduğuna inanıyorum. Jigsaw hala yayınlanmış herhangi bir Java sürümünde bulunmamaktadır. JSR 376 (Java Platform Module System) hala uzman grubunu oluşturuyor ve henüz ilk taslağa bile başlamadı. Java 9, bir yıldan fazla bir süredir sunulmamaktadır ve piyasaya sürüldüğünde bile modülerliğe sahip olacağı garanti edilmemektedir (Java 7'den, sonra Java 8'den kaymıştır ve kolayca tekrar kayabilir). Son olarak, JSR376 için yayınlanan gereksinimler , OSGi birlikte çalışmasının gerekli olduğunu belirtir ... bu nedenle OSGi'yi benimsemek güvenli bir seçim olmaya devam ediyor ve bugün tek pratik seçenek.
Neil Bartlett

2
@AdamArold Tamam, bu biraz farklı bir soru! OSGi'nin bir mikro hizmet mimarisi olduğunu söyleyebilirsin, ama ne dediğini biliyorum. Benim için her hizmeti bir süreç olarak modelleme fikri, yönetim ve güvenlik ve iletişim ek yükü açısından çok daha karmaşık bir sorundur. OSGi daha basit ve daha hızlıdır. Bununla birlikte, hizmetleri süreç engelinin içine ve dışına taşımak için OSGi Uzaktan Hizmetlerini kullanmanın çok kolay olduğunu söylemiştim, bu nedenle mikro hizmetler için bir uygulama teknolojisi için iyi bir seçim olduğuna inanıyorum.
Neil Bartlett

21

Çok basit, bugün Java'da gerçek bileşen tabanlı geliştirme yapmak istiyorsanız OSGi şehirdeki tek oyundur.

Bana göre Jigsaw, JDK'da yapılabilecekler ile SUN ve OSGi adamları arasındaki önceki kötü ilişkinin bir kombinasyonudur. Belki Java 8 ile gönderilecektir, ancak bekleyip görmemiz gerekiyor.

Tipik bir kurumsal ortamda çalışıyorsanız OSGi her derde deva değildir ve bir dizi tanınmış kütüphane (size bakarak, Hazırda Bekletme) artık geçerli olmayan sınıf görünürlüğü hakkında varsayımlar yaptığından, sınıf yüklemenin nasıl çalıştığına aşina olmanız gerekecektir. OSGi içinde.

OSGi'yi seviyorum, ancak onu mevcut bir sisteme eklemeye çalışmam. Ayrıca yeşil alan geliştirme açısından artıları ve eksileri tartardım - OSGi için hayatı kolaylaştıran ve hepsini kendi başınıza yapmayan Apache veya Eclipse ürünlerine bakmanızı öneririm.

OSGi yapmıyorsanız, aynı kitaplığın farklı sürümlerine bağımlılıkları olan bir sistemle karşılaşırsanız şansınız kalmaz - tek yapabileceğiniz denemek ve sorunu önlemektir, ancak birden çok sürümüne ihtiyaç duymanıza rağmen kütüphane bana mimari bir 'koku' gibi geliyor.


Evet, Sun ve OSGi Alliance arasında çok fazla "kötü kan" olduğunu düşündüm. Yine de Oracle'ın her şeyin kontrolünden çıkmasına izin vereceğini hayal edemiyorum. Gerçekten bana bu JAR cehennemini yakın zamanda gerçekten düzeltmek (hacklememek) için bir planın olmadığını mı söylüyorsun? Bu aklımı başımdan alıyor!
IAmYourFaja

6
@Mara Kötü kan olduğunu söylemek pek adil değil. Sonuçta Sun, yaklaşık 12 yıl önce OSGi'nin ortak yaratıcılarından biriydi (JSR 8). Sun ayrıca, Oracle'ın satın alınmasından yaklaşık bir yıl önce OSGi Alliance'a tam üye olarak yeniden katıldı. Ayrıca Oracle öncesi OSGi üzerine oldukça fazla yazılım geliştirdiler. En bariz örnek Glassfish'tir. Ancak Sun / Oracle ve OSGi'deki bazı kişiler arasında sürtüşme olduğunu söylemek doğru olur.
Neil Bartlett

15

Mevcut durumu tarif etmek için "köşe vakaları" ifadesini kullanmanıza bayılıyorum.

JAR dosyası spesifikasyonunda, belirli köşe durumlarda ad alanı çözümlemesine ve sınıf yükleme sorunlarına yol açabilecek eksiklikler var

Her neyse, uzun yıllardan beri, onlarsız sonuç olabilecek olandan daha temiz, daha bağımsız, daha tutarlı ve daha sürdürülebilir olan kodların yaratılmasını destekleyen ve daha da iyisi uygulayan araçlar ve tekniklerle ilgileniyorum. Test Driven Design ve Junit böyle bir kombinasyondu.

Kod tabanımızın önemli bir bölümünü OSGi'ye taşımak için birkaç ay harcadıktan sonra, OSGi'nin bu konuda daha da iyi bir araç olduğunu söyleyebilirim. Ve bu gerçekten OSGi'ye geçmek için yeterli bir sebep. Uzun vadede size çok para kazandıracak.

Ve bir bonus olarak, size birçok harika şey yapma şansı verecektir. Bir demo sırasında, OAuth'u desteklemek için kimlik doğrulama modülünü trafik kaybı olmadan sorunsuz bir şekilde yükselttiğinizi hayal edin ... Bir şeyler yaratmak birdenbire bir zevk haline geldi!

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.