OSGi ile Modüler Java Programlama - 1



Merhabalar, bu blogda ilk önce İngilizce olarak yazılar yazmaya başlamıştım. Genelde İngilizce olarak çok fazla alıştırması olan konulara değinmekti amacım, ancak görünen o ki bizim ülkemizdeki programcıların ve/veya programcı adaylarının İngilizce'lerinin yeterli olmaması bu tür kaynakları takip etmelerini zorlaştırıyor. Bu sebeple bundan sonra Türkçe olarak bloglamaya devam ediyorum...

Gelelim bu yazının konusuna, OSGi (oscii diye değil hecelenerek okunuyor)... Her ne kadar Java EE dağıtık uygulamalar geliştirmeyi yıllar önce vaadetmiş olsa da bunu başarabildiğini söylemek zor. Classpath'lerin ağaç şeklinde yukarıya doğru delegasyon yoluyla çalışması ve üst kattaki sınıfların aynı isimdeki alt kattakileri saklaması gibi sorunlar, uygulamalar büyüdükçe onları bir bakım cehennemine çevirebiliyordu. Daha da kötüsü, modüler sistemlerin çoğu dinamik değildi yani JVM'nin yeniden başlatılmasını gerektiriyordu. Bu konular aslında başlı başına birkaç yazıyı kaplayabilir ancak kısa ve öz olarak olaylar böyle gelişti. OSGi hakkında daha detaylı kaynak için Neil Bartlett'in blogunu ziyaret edebilir ve kendi çabalarıyla yazdığı e-kitabını ücretsiz indirebilirsiniz:
http://neilbartlett.name/blog/osgi-articles

Yakın zamanda kendi geliştirdiğim SCORE isimli sunucu sistemini modüler hale getirmek için çalışmalara başlamıştım. Daha önce OSGi'ye göz gezdirmiştim. Aslında istediğim modülarizasyon çok basitti ancak birkaç yabancı programcının önerisiyle OSGi'ye tekrar bir şans vermeye karar verdim. Ve tada!.. Tam aradığım şeydi: dinamikti, tüm modüller kapanmadan modülleri açıp kapayabiliyor ya da silebiyordu. SCORE her ne kadar bir merkezi sunucu sistemi sunuyorduysa da farklı amaçlar için farklı sunucular şeklinde bir uygulamayı planlıyordum. Yani mesela sık kullanılan grafik dosyalarının disk yerine ram'de depolanması veya başka resim işlemleri için bir grafik işleme sunucusu gibi. Ancak OSGi ile bu sunucuları servis modülleri olarak uygulamak birçok sorunumu çözecek gibi. Başta modüller arası iletişim olmak üzere birçok sorunumu çözdü. Ben Java komünitesinin bir sürü kriptografik isimli framework'ler ve API'leri kullanmasını çok yanlış buluyorum. Bağımsızlık adına benzer yapılar farklı şekillerde farklı kütüphanelerde bulunabiliyor, çünkü bu kütüphaneler tek bir kurum tarafından değil kolektif bir şekilde komünite tarafından yazılıyor. Sonuç olarak da .NET Framework gibi kendi içinde tutarlılığı yok. Ancak OSGi öyle birşey ki başlı başına çoğu şeyin çözümü olacak gibi. Her ne kadar yeni bir teknoloji olsa da geleceğinin parlak olduğunu söylemek için kahin olmaya gerek yok. Neyse bu kadar OSGi çığırtkanlığı yeter, işe koyulalım...

İlk iş olarak bir OSGi implementasyonu indirmeliyiz. Bu konuda seçeneğimiz çok sayılır. Her ne kadar kesin kurallar olmasa da her implementasyonun kendi avantajları var. Ben yazılarımda Eclipse'in implementasyonu olan Equinox'u kullanacağım. Apache Felix, Knopflerfish ve Concierge (sınırlı kaynağı olan ortamlar için) gibi diğer implementasyonlar da mevcut. Ancak bu yazı serisinde gösterdiklerim OSGi R4 uyumlu olacak, Concierge R3 kullanıyor bu sebeple Concierge kullanmanızı tavsiye etmiyorum. Equinox JBoss, WebSphere gibi sistemlerde kullanılıyor ve aynı zamanda Eclipse'in modüler yapısını sağlıyor. Belki de bu sebeple olsa gerek aynı zamanda en popüler OSGi implemenyasyonu. Equinox'u buradan indirebilirsiniz. Bu yazıyı yazarken kullandığım versiyonu 3.5.1 sürümü. Eğer benim gibi bir IDE kullanıyorsanız ZIP formatlı dosyayı indirmeniz daha faydalı olacaktır.

Kurulum

Eğer zip dosyasını indirdiyseniz içindekileri bir klasöre açın ve plugins altklasöründe org.eclipse.osgi_3.5.1... ile başlayan JAR uzantılı dosyayı bulun. Eğer standalone versiyonunu indirdiyseniz bu zaten indirdiğiniz jar dosyasının ta kendisidir. Bu dosyanın bulunduğu klasörde bir komut satırı açın (Windows'da Shift + Sağ Tık yapınca açılan listede yer alıyor) ve yönetici yetkiniz olduğundan emin olun. Sonrasında aşağıdaki komutu yazın:
java -jar org.eclipse.osgi_3.5.1*.jar -console
Benim kullandığım versiyon 3.5.1 ancak siz kullandığınız versiyonla değiştirebilirsiniz komutun o bölümünü. Dosyanın tam adı karışık olduğu için versiyondan sonra * ekleyerek işimizi kolaylaştırdık. Eğer bu komuttan sonra karşınıza aşağıdaki gibi boş bir OSGi komut satırı geldiyse OSGi'yi başarıyla başlattık demektir:
osgi>

İlk komutumuz

OSGi'nin bir güzel yanı da hem programatik olarak implementasyonu kolay hem de komut satırından 5 tane komutla işlerinizin çoğunu halledebiliyorsunuz. Basit ama etkili yani, EJB'lerden sonra su serpiliyor insanın içine. OSGi'de modüllere modül yerine "bundle" deniyor yani Türkçe olarak basitçe paket diyebiliriz. Ancak genel konsepti iyice netleştirmek için ben "bundle"lara modül demeye devam edeceğim, kafalar karışmasın. OSGi komut satırı önümüzde olduğuna göre OSGi ortamından bir durum özeti raporu alalım, bu iş için komutumuz "ss" yani "summary status"ün baş harfleri:
osgi> ss
Karşınıza sadece 1 tane modül gelmesi lazım o da zaten OSGi çalışma ortamı. "State" alanının yani durumunun "active" olduğuna dikkat edin. Sonraki yazılarımda bu durumların ne demek olduğunu anlatacağım. Şimdilik bu kadar, kolay gelsin...

Comments

Popular Posts