OSGi Geliştirme Ortamı

Uzun bir aradan sonra (yazmaya pek vakit bulamadım) OSGi'ye kaldığımız devam ediyoruz. Önceki yazımda OSGi'yi kısaca anlatmış ve popüler OSGi framework'lerinden Equinox'u kurmuştuk. Bu geçen zamanda OSGi gelişmeye devam etti. Hem dökümantasyon bulmak kolaylaştı hem de OSGi'nin etrafında istekli bir komunite oluştu. Bu arada OSGi'nin yapabilecekleri konusunda heyecanım(ız) arttı. Hatta OSGi'nin Java dünyasında birçok şeyi kökten değiştirebileceğine inanıyorum diyebilirim. OSGi yazılarımı, internette OSGi hakkında fazlasıyla İngilizce kaynak bulunduğu için Türkçe yazmaya devam ediyorum. Aslında OSGi ile ilgili yazılacak çok yazı var ama herşeyden önce kendimize rahat bir IDE ortamı hazırlarsak zamanımızı daha verimli kullanırız (ant ve Maven fanatikleri kızacaktır ancak ilkel araçlarla yazılım geliştirmenin pek etkili olduğunu düşünmüyorum). PAX, bnd, Netbeans gibi bir çok geliştirme aracı aslında işimize yarayabilir; ancak her ne kadar pek Eclipse fanatiği olmasam da, konu OSGi olunca Eclipse oldukça iyi bir geliştirme ortamı sunuyor. Bu sebeple bu yazının konusu OSGi geliştirme için gereken Eclipse ortamını kurmak ve "Bundle" kavramı olacak.
İlk işimiz http://www.eclipse.org/downloads/ adresine girerek gerekli Eclipse paketini indirmek olacak. Aslında önce bir Java geliştirme paketi indirip daha sonra pluginler aracılığıyla PDE özelliklerini ekleyebiliriz ama bildiğim kadarıyla PDE zaten Java geliştirme ortamıyla birlikte geliyor o sebeple PDE versiyonunu seçip indirelim.

İndirilen sıkıştırılmış dosyayı bir klasöre açtıktan sonra eclipse.exe dosyasına çift tıklayalım. Eclipse, bizden bir çalışma ortamı (workspace) belirlememizi isteyecek, istediğiniz yeri seçip onaylayın. Karşınızda Eclipse'in boş bir ekranı görünecektir. Eclipse'in en güzel yanı, OSGi'yi doğal olarak desteklemesi; yani, aslında Eclipse plugin'lerinin çoğu birer OSGi modülüdür. Aslında, OSGi dilinde modülün karşılığı "bundle", ancak Eclipse içinde "plugin" olarak geçiyor. Şimdi yeni proje açalım, açılan ekranda Plug-in Development seçeneğini seçince karşımıza birkaç tane seçenek çıkacak; burada Plug-in Project'i seçmeliyiz. Seçip onayladıktan sonra, yeni ekranda bizden bir proje ismi yazmamızı isteyecek; bir sonraki yazıda kolaylık olması için burada "HelloWorld" yazın. Burada önemli olan nokta, aşağıdaki hedef platform kısmı; "an OSGi framework"ün seçili olduğundan ve yanındaki listede "standard"ın seçili olduğundan emin olun. Burada aslında, geliştirdiğimiz plugin'in bir OSGi framework'ünde çalıştırılmak üzere yapılandırılacağını ve belli bir hedef framework'ten ziyade standard OSGi spesifikasyonlarına uygun olması gerektiğini belirttik. Böylece belli bir framework'e has gereksiz bilgileri modülümüzde görmeyeceğiz.

Bunu da onayladıktan sonra, bizden plugin'le ilgili metaverisi (veri hakkında veri) isteyecek.Burada sadece aşağıdaki "Generate an activator, ...." seçeneğini kaldırıyoruz ve "Bitiş"e tıklıyoruz. İşte bir OSGi bundle'ını, Eclipse ile oluşturmak bu kadar kolay. Ama bundan sonrasını bir sonraki yazımızda pratik olarak inceleyelim.
Şimdi ise biraz teori vakti...

Bundle mı, yoksa modül mü?
İlk önce kafamıza şunu yerleştirmeliyiz: bundle, plugin ve modül; bu yazı dizisinde hep aynı anlama geliyor. Orijinal OSGi spesifikasyonları; bir modülü "bundle" olarak tanımlıyor, Eclipse ise buna "plugin" diyor. Ancak ikisi de sonuç olarak bir modülü ifade etmek için kullanılıyor. Bundle'lar, işin özünde ekstra metaveri içeren standard JAR dosyaları. Onları farklı kılan ise içindeki metaveri (manifest.mf dosyası). Yani aslında var olan bir JAR dosyasını da, daha sonra göreceğimiz gibi içine metaveri ekleyerek bir OSGi bundle'ı haline getirebiliyoruz. Bir sonraki yazıda ilk bundle'ımızı yazacağız, ama bu yazıyı bitirmeden önce; OSGi bundle'ları geliştirirken de temel prensibimiz olan birkaç kural vermek istiyorum. Bu kurallara göre, bir yazılım modülü aşağıdaki özelliklere sahip olmalıdır:
  • Kendi içinde bir bütün: Bir modül atomik bir parça değildir, içinde birçok sınıf, kaynak vs. olabilir. Ancak bir modül, kendi içinde mantıksal olarak bir bütündür.
  • Son derece konsantre: Bir modül, birçok alakasız işi birlikte yapmamalıdır. Sadece tek bir mantıksal amaca odaklanmalı ve bu amacı doğru şekilde gerçekleştirmelidir.
  • Zayıf bir şekilde bağlı: Bir modül diğer modüller tarafından kullanılırken kendi iç detaylarından bağımsız olarak kullanılmalıdır. Yani bir modül, diğer modülleri değiştirmeden kendi iç çalışma prensibini değiştirebilmeli ve diğerleri bundan etkilenmemelidir. Kısaca, bir modül mümkün olduğu kadar bağımsız olmalıdır.
Bu saydıklarımızı gerçekleştirmek için, geliştirdiğimiz modüllerin ustaca tasarlanmış arayüzler aracılığıyla kullanılmasını sağlamalıyız. Sonraki yazılarda da görebileceğimiz gibi, OSGi sayesinde bir API'yi, implementasyon detaylarını bilmeden tamamen arayüzü aracılığıyla kullanabiliyoruz. OSGi'de bunu gerçekleştirmemizi sağlayan Servis Katmanı'nı, büyük ihtimalle 1-2 yazı sonra sizlere anlatacağım. Bu arada son olarak OSGi için yapılan bir benzetmeyi aktarayım; VM içi SOA sistemi... Görüşmek üzere!

Comments

Popular Posts