Java Dergisi 2. Sayısı…
Posted by mehmetgursul in Java on August 27th, 2010
Java Dergisi’nin 2. sayısı 1 Eylül 2010 tarihinde çıkacak.
Ana temanın Java Persistence olduğu bu sayıda meslektaşım Kadir Teke ile birlikte yazmış olduğumuz “DAO Tasarım Şablonu” adlı yazımızı okuyabilirsiniz.
Dergi ile ilgili bilgiye www.javadergisi.com adresinden erişebilirsiniz.
JAZOON 2010 İzlenimleri…
Posted by mehmetgursul in Konferans on June 27th, 2010

İsviçre’nin Zürih kentinde 1-3 Haziranda gerçekleşen JAZOON 2010 Java teknolojileri konferansına bu sene katılma fırsatım oldu. Sunum yeri olarak Zürih Sihlcity deki Arena FilmCity salonları ayrılmıştı. Sabah ilk sunum 1 tane keynote olarak yapılıp sonra aynı anda 4 ayrı salonda 4 farklı sunum yapıldı.
Konferansda genel olarak 2 yöne eğilimli sunumlar vardı. Bunlardan birincisi Java Persistence, ikincisi ise Java FX teknolojisi hakkındaki sunumlar idi. Ayrıca OSGi, Spring framework, Java EE6 , software testing gibi sunumlar da vardı.
JavaFX teknolojisi ile ilgili önceden bilgim olmadığı için bu teknolojiyi merak edip daha çok bu konudaki sunumlara katıldım. JavaFX teknolojisini kısaca; Zengin Internet Uygulamaları (RIA) geliştirmek için çıkan bir teknoloji olarak tanımlayabiliriz. Java FX 1.0, 1.1, 1.2 sürümlerinden sonra daha çok bileşen içeren , daha performanslı sürümü 1.3 ile birlikte kullanılabilir yapıya kavuştuğu söylendi. Sürümler sık değiştiği için bir dinleyici “başlamak için 1.4 sürümünü bekleyelim mi yoksa 1.3 yeterli mi” şeklinde sorunca 1.3 den önce pek de iyi olmadığı ama 1.3 ile birlikte iyi duruma geldiği belirtildi. Ayrıca bir başka sunumda Photoshop’da JavaFX exportu alan bir plugin uygulamalı olarak gösterildi. Bu uygulamada bir kişi Photoshopda design yaptı diğer kişi de JavaFX de kod yazarak iki farklı yetenek isteyen işin ayrıştırılarak farklı kişiler tarafından yapılabileceği gösterildi. Ayrıca 1.3 sürümü ile birlikte eklenen xTableView ile birlikte 16 milyon kaydın bulunduğu bir tabloda scroll işleminin çok hızlı yapılabildiğini gördüm. Bir başka sunumda ise JavaFX, Adobe Air ile karşılaştırıldı. Java entegrasyonunun olmaması ve öğrenme eğrisinin daha zor olması Adobe Air e göre JavaFX i önde gösterirken, olgunlaşma ve daha çok kullanıcısının olması Adobe Air i önde gösterdi. Ayrıca JavaFX de uygulama geliştirmenin Java2D ye göre çok kolay olduğu belirtildi.
OSGi konusunda ise Costin Leau’nun “Blueprint Container- Modern Dependency Injection for OSGi” adlı sunumuna katıldım. Blueprint Container’ın özellikle OSGi bundle oluşturmak için bir DI (Dependency Injection) framework olduğunu , Spring DM tabanlı Eclipse Gemini ile Apache Aries olmak üzere iki farklı implementation nın bulunduğunu söyledi. OSGi bundle oluşturmayı, deklaratif yolla, daha kolay hale getirip ayrıca bundle lar arası servis referanslarını yönetmeyi de bu container ın sağladığını belirtti. Sonuç olarak, Blueprint Container ile OSGi bundle yazarken daha az kod yazabilmemizi sağladığını ve kurumsal programlama modeline benzer bir modeli OSGi’ a getirdiğini söyledi.
Danny Coward ise “Java SE ve JavaFx” adlı genel bir sunum yaptı. Sunum başlamadan önce sunum yapacakları çağıran kişi şöyle bir soru sordu Danny Coward’a : “Sun ın Oracle tarafından satın alınması sonrası çalışma yerinde ne gibi değişiklikler oldu?”. Danny Coward da çok sakin bir biçimde “evde çalıştığım için Sun dan Oracle geçişte çalışma yerim değişmedi” diyerek soru soranı zor durumda bıraktı
Sunumda ise, Java’nın 15 yaşına girdiğini, 1995 de JDK 1.0 ile başlayarak birçok sürümünün ve çeşidinin çıktığını belirtti. JDK 7 deki yeniliklerden bahsetti. Modülerliğin sağlanacağını söyledi. Ayrıca dildeki bazı geliştirmelerden bahsetti. Örneğin;
kodunun JDK 7 ile birlikte;
şekline geldiğini belirtti.
Exception Handling de de aşağıdaki gibi değişikliğin olduğunu söyledi.
|
try {
doWork(file); }catch (Except1 e1){ logger.log(e1); throw e1; }catch (Except2 e2) { logger.log(e2); throw e2; } |
try {
doWork(file); }catch (final Except1 | Except2 ex){ logger.log(ex); throw ex; } |
Jazoon konferansının artıları:
- Çok sayıda ve içeriği ortalama üstü, yeterli sunumlar.
- Konferans salonlarının konforlu oluşu
- Zürih de herhangi bir otelden konferans yerine alternatifli ve kolay ulaşım olanağı
- Çok çeşitli yiyecek ve içecek
Jazoon konferansının eksileri:
- 3 günlük katılım ücreti olarak 1500€ (erken kayıtta 1200€) gibi denk konferanslara göre yüksek katılım ücreti (Devoxx=~400€).
- Standlarda çok sayıda firmanın olmaması (Örneğin Google, IBM yoktu.)
- Java dünyasının bazı gurularının olmaması (James Gostling, Joshua Bloch, Bruce Eckel yoktu.)
Jazoon ve Zürih’den bazı kareler…
![]() |
![]() |
![]() |
![]() |
Java Dergisi Yayın Hayatına Başlıyor…
Posted by mehmetgursul in Java on May 9th, 2010
Java Dergisi 1 Haziran 2010 tarihi ile birlikte yayın hayatına başlayacak.
Ülkemizde java teknolojileri ile ilgili Türkçe kaynak sıkıntısına da cevap verecek olan dergi 2 ayda bir yayımlanacak.
İlk sayı olan Haziran-Temmuz sayısında benim de yazdığım “Java’da Sınıf Yükleme Mekanizması” adlı yazımı okuyabilirsiniz.
Dergi ile ilgili bilgiye www.javadergisi.com adresinden erişebilirsiniz.
Akademik Bilişim’10 Ardından…
Posted by mehmetgursul in Konferans on February 15th, 2010
Akademik Bilişim’10 konferansı 10-12 Şubat tarihleri arasında Muğla Üniversitesinde gerçekleşti.
Bu konferansda verdiğim OSGi (Java İçin Dinamik Modül Sistemi) semineriyle ilgili hazırlamış olduğum dökümanları buraya tıklayarak indirebilirsiniz.
Akademik Bilişim ‘10 Muğla Üniversitesi’nde…
Posted by mehmetgursul in Konferans on February 3rd, 2010

Her yıl farklı bir ildeki üniversitede düzenlenen Akademik Bilişim Konferansı, bu sene 10-12 Şubat 2010 da Muğla Üniversitesi‘nde düzenlenenecek.
Benim de göndermiş olduğum “OSGi (Java İçin Dinamik Modül Sistemi)” adlı eğitim semineri önerim kabul oldu. Bu eğitim seminerini 10 Şubat 2010 tarihinde 11:30 - 13:00 saatleri arasında “G” salonunda yapacağım.
Konferans ile ilgili bilgiyi http://ab2010.mu.edu.tr/ ya da http://ab.org.tr/ab10/ adreslerinden öğrenebilirsiniz.
Etkinlikte buluşmak üzre…
Apache Web Server + MySQL + PHP + Perl -> hepsi bir arada
Posted by mehmetgursul in Web Development on December 6th, 2009
Apache Web Server ı kurmak sonra MySQL, PHP ve Perl’ ü entegre etmek birçok yazılım geliştiricisinin zorlandığı bir kurulum sürecini beraberinde getirmektedir. İşte bu soruna çözüm olarak, Apache hepsi bir arada bir kurulum sunmakta : XAMPP .
XAMPP (eXtended Apache MySQL PHP Perl) kelimesi içerdiği teknolojilerin baş harflerinden oluşmakta. XAMPP yi kurduğunuzda ek olarak MySQL veri tabanını yönetmek için çok güzel bir araç olan phpMyAdmin de kurulmakta.
Linux, Windows, Mac OS X ve Solaris işletim sistemlerinde kurulmak üzere 4 ayrı sürümü bulunan XAMPP yi indirmek ve kurmak için http://www.apachefriends.org/en/xampp.html adresine bakabilirsiniz.
Hastane Bilgi Sistemlerinde OSGi Teknolojisinin Dinamikliğinin Kullanılması
Posted by mehmetgursul in OSGi on December 6th, 2009
Türkiye Bilişim Derneği (TBD)’nin çıkardığı Bilişim Dergisi’nin 2009 Aralık sayısı çıktı. Bu sayıda Hakan Faruk Safi Bey ile birlikte hazırladığımız “Hastane Bilgi Sistemlerinde OSGi Teknolojisinin Dinamikliğinin Kullanılması” adlı makale yayımlandı.
Bu makalede; modülerlik, Java daki JAR dosyaları ve problemleri ile OSGi teknolojisinin getirdiği çözümlere değinerek, OSGi teknolojisinin dinamikliğinin Hastane Bilgi Sistemi yazılımlarında kullanılmasının getireceği faydalardan bahsettik.
Makaleye erişmek için Bilişim Dergisi arşivinden 2009 Aralık sayısına tıklayarak 124-129 arasındaki sayfalara bakabilirsiniz.
Yazılım Test Mühendisliği Eğitimi ve Sertifikası
Posted by mehmetgursul in Software Testing on November 14th, 2009
Yazılım test mühendisliği üzerine 3 günlük eğitim aldıktan sonra ISTQB’nin (International Software Testing Qualifications Board) yaptığı uluslararası yazılım test uzmanı sınavına girerek sertifikayı almayı başardık.
Bu eğitimde yazılım testinin,
aşamalarından oluşan bir proje yönetimi olduğunu detaylı bir biçimde öğrendik.
Ayrıca CMMI gibi TMMI (Test Maturity Model integrated) ile şirketlerin test açısından seviyelendirildiği hakkında bilgi aldık. Bazı pratik çalışmalarla öğrendiklerimizi pekiştirerek 3 gün boyunca Koray Yitmen Bey’den sıkılmadan gayet yararlı bir eğitim aldık ve eğitim sonunda da sertifika sınavına girdik.
Eğitim ve sınav ile ilgili kısa bilgi:
JRE update i yaparken karşılaşılabilen bir bug ve çözümü…
Posted by mehmetgursul in Java on August 18th, 2009
Microsoft Vista işletim sistemi kullanırken, JRE 1.6 nın 11 nolu versiyonundan 16 nolu versiyonuna update i sırasında aşağıdaki sorunla karşılaştım.
“ERROR 1723: There is a problem with this Windows Installer Package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.”
Program/ekle kaldırdan eski JRE yi uninstall etmeye çalıştığımda da yine yukarıdaki hatayı verdi. Yani tam bir kısır döngüye girdim ne JRE yi install edebildim ne de uninstall.
Araştırdığımda bunun bir bug olduğunu gördüm. Ve kaldırmak için de önerilerden biri “Windows Installer Clean Up” programıyla sistemdeki yüklü JRE yi silip yeniden kurmaktı. Bunu denediğimde mutlu sona ulaştım…
Java Teknolojileri Günü - İstanbul ardından…
Posted by mehmetgursul in Konferans on July 7th, 2009
CETURK tarafından IBM in İstanbul Levent deki binasında 4 Temmuz 2009 tarihinde gerçekleştirilen Java Teknolojileri Günü’nü geride bıraktık. 13 Haziranda ODTÜ de yapılan etkinliğin tekrarı olan bu etkinlik ile, İstanbuldaki meslektaşlarımızla birlikte olma fırsatımız oldu.
![]() |
![]() |
Bu etkinlikte OSGi (Java İçin Dinamik Modül Sistemi) adlı sunumu yaptım . Bu sunumda;
- Modülerlik kavramı ve kazançları
- Java daki classpath problemleri ile JAR dosyaları ve problemleri
- OSGi teknolojisi ve getirdiği çözümleri
- OSGi gerçekleştirimleri
- OSGi a alternatif olarak gösterilen fakat gerçekte alternatif olmayan teknolojiler
hakkında bilgi vermeye çalıştım. Sunumla ilgili dokümanlara buraya tıklayarak erişebilirsiniz.
Etkinlik ile ilgili bilgiye ve fotoğraflara ise buraya tıklayarak erişebilirsiniz.
Bu etkinliği düzenleyen CETURK e, sponsoru olan IBM Türkiye ve i-con a , konuşmacılara ve bizleri dinlemeye gelen teknoloji meraklısı dinleyicilere teşekkür ederim.
IBM İstanbul’da Java Teknolojileri Gününde Buluşmak Üzre…
Posted by mehmetgursul in Konferans on July 2nd, 2009

13 Haziran 2009 da ODTÜ Kültür Kongre Merkezinde gerçekleşen ve büyük ilgi gören “Java Teknolojileri Günü” etkinliğinin tekrarı, gelen yoğun istek üzerine CETURK tarafından IBM İstanbul’un Levent deki binasında 4 Temmuz 2009 Cumartesi günü bir kez daha yapılacak.
Bu etkinlikte yapacağım “OSGi (The Dynamic Module System for Java)” adlı sunumumla İstanbul’daki meslektaşlarımla buluşma fırsatını yakalayacağım.
Etkinlikte buluşmak üzre…
Equinox Framework de Kullanılan Bazı Komutlar
Posted by mehmetgursul in OSGi on June 29th, 2009
Bir OSGi gerçekleştirimi olan Equinox da kullanabileceğimiz bazı komutlar ve açıklamaları aşağıdaki gibi :
- help – Tüm komutları listeler
- ss – Yüklenen bundle ları listeler.
- start <Bundle ID> – Verilen ID li bundle ı başlatır. (start 1 gibi)
- stop <Bundle ID> – Verilen ID li bundle ı durdurur. (stop 1 gibi)
- install <url> – Sisteme bundle ı ekler.
- uninstall <Bundle ID> – Verilen ID li bundle ı sistemden çıkarır.
- diag <Bundle ID> – Verilen ID li bundle ın sağlanamayan kısıtlamalarını (constraint) gösterir.
- status – Yüklenen bundle ları ve kayıtlı oldukları servisleri gösterir.
- shutdown – Tüm bundle ları durdurur.
- exit – Bundle ları durdurmadan OSGi framework ü (Equinox) kapatır.
- close – shutdown ve exit komutlarının birleşimidir.
OSGi da Bundle’lar Arası Bağımlılık
Posted by mehmetgursul in OSGi on June 24th, 2009
OSGi da bildiğimiz gibi modüllere “bundle” denilmektedir. Bundle lar birbirlerine ihtiyaç duymakta dolayısı ile bağımlı olmaktadırlar. Klasik JAR dosyalarında bu bağımlılıklar tam olarak belirtilememektedir. OSGi bu probleme güzel bir çözüm sunmaktadır. Bunun nasıl olduğunu 2 tane bundle oluşturup, birini diğerine bağımlı yaparak sizlere göstermeye çalışacağım.
Aşağıdaki gibi bir Film sınıfımız olsun.
public class Film {
private final String adi;
private final String yonetmen;
public Film(String adi, String yonetmen) {
this.adi = adi; this.yonetmen = yonetmen;
}
public String getAdi() { return adi; }
public String getYonetmen() { return yonetmen; }
}
Yine aynı pakette aşağıdaki gibi bir arayüz tanımlayalım.
public interface FilmBulan {
Film[] tumFilmleriBul();
}
Şimdi bu iki sınıfı içeren bundle ımızı oluşturmadan önce aşağıdaki gibi FilmManifest.mf dosyamızı oluşturalım. Unutmayalım son satırda boş bir satır olmalı.
Bundle-ManifestVersion: 2
Bundle-Name: Film Arayuzu
Bundle-SymbolicName: FilmArayuzu
Bundle-Version: 1.0.0
Export-Package: osgi.dersler;version=”1.0.0″
Bu dosyada önceki derslerimizde görmediğimiz yeni bir satır geldi dikkat ederseniz : Export-Package. Bu satır bundle dan dışarıya açık olan yani başka bundle lar tarafından erişilebilecek paketleri göstermektedir.
Eskiden JAR dosyamız içerisindeki tüm paketler dışarıya açık hale gelmekteydi. Bazı paketlerimiz sadece JAR içindeki paketler tarafından kullanılsın ama bu paketler dışarıdan erişilmesin diyebileceğimiz durumlar olabilmektedir. OSGi bu duruma çözüm bulmaktadır. Export-Package satırında belirtilmeyen tüm paketler sadece kendi bundle ı içindeki paketler tarafından erişilebilmektedir.
Ayrıca dikkat ettiyseniz pakete versiyon numarasıda verdik. Biraz sonra bu versiyonun öneminden bahsedeceğim. Versiyon numarası verme zorunluluğumuz yok aslında. Vermediğimiz zaman OSGi otomatik olarak “0.0.0″ olarak versiyon numarası atamaktadır.
Aşağıdaki komutları çalıştırarak bundle ımızı oluşturabiliriz.
> jar -cfm FilmArayuzu.jar FilmManifest.mf osgi/dersler/*.class
Şimdi de bu bundle a bağlı olan başka bir bundle oluşturalım. FilmBulan sınıfımızı implement eden FilmBulanImpl.java sınıfımızı yazalım.
import osgi.dersler.*;
public class FilmBulanImpl implements FilmBulan {
private static final Film[] FILMLER = new Film[] {
new Film(”Lost”, “ABC”),
new Film(”House”, “DEF”)
};
public Film[] tumFilmleriBul() { return FILMLER; }
}
Sonra aşağıdaki gibi FilmBulanManifest.mf dosyamızı oluşturalım. Unutmayalım son satırda boş bir satır olmalı.
Bundle-ManifestVersion: 2
Bundle-Name: Film Bulan
Bundle-SymbolicName: FilmBulan
Bundle-Version: 1.0.0
Import-Package: osgi.dersler;version=”[1.0.0,2.0.0)"
Dikkat ettiyseniz osgi.dersler paketini import ettik. Bu paket diğer bundle tarafından export edilmişti. Ayrıca versiyon aralığı ekledik paketin sonuna.
OSGi framework çalışma zamanında import edilen versiyon numarasına uygun paketi diğer bundle daki export satırında bulmaya çalışacaktır. Versiyon aralığı matematikteki gibidir. Yani "[" ve "]” dahil, “(” ve “)” ise hariç anlamına gelmektedir. “[1.0.0,2.0.0)” -> 1 ile başlayan (1.x) tüm versiyonlar bu paket tarafından kullanılabilir anlamına gelmektedir.
Import-Package da versiyon aralığı verilebilmesine karşın Export-Package satırında sadece versiyon numarası verilebilmektedir yani Export-Package da versiyon aralığı verilememektedir. Bu arada Import-Package da da aynen Export-Package da olduğu gibi versiyon numarası verme zorunluluğu yoktur. Ama verilmesi güzel bir alışkanlıktır.
Şimdi ikinci bundle ımızı aşağıdaki komutları çalıştırarak oluşturalım.
> jar -cfm FilmBulan.jar FilmBulanManifest.mf osgi/dersler/impl/*.class
Bir OSGi framework olan Equinox da bu bundle larımızı çalıştırmayı deneyelim. Aşağıdaki komut ile framework ü çalıştıralım.
java -jar equinox.jar -console
Sonra aşağıdaki komutla ikinci oluşturduğumuz FilmBulan bundle ımızı yükleyelim.
Son duruma bakalım.
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 INSTALLED FilmBulan_1.0.0
Henüz bundle ımız resolved değil , installed durumunda. Yani framework bundle a sahip ama bağımlılıkları henüz çözümlenmemiş. Bu nedenle FilmBulan bundle ımızı start 1 ile aktif hale getirmeye çalıştığımızda aşağıdaki gibi hata alırız.
org.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Import-Package: osgi.dersler; version=”[1.0.0,2.0.0)”
Çünkü osgi.dersler paketini export eden çözümlenmiş bir bundle a sahip değiliz. Şimdi osgi.dersler paketini export eden bundle ımız olan FilmArayuzu bundle ımızı aşağıdaki komutla yükleyelim.
son duruma tekrar bakalım.
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 INSTALLED FilmBulan_1.0.0
2 INSTALLED FilmArayuzu_1.0.0
Şimdi tekrar FilmBulan bundle ımızı start 1 ile aktif hale getirmeye çalışalım.
Süper! Artık çalışıyor. Son duruma bakalım.
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 ACTIVE FilmBulan_1.0.0
2 RESOLVED FilmArayuzu_1.0.0
Bu yazımdaki örnek kodları buraya tıklayarak indirebilirsiniz.
Kaynak : Dependencies between Bundles - Neil Bartlett
ODTÜ Java Teknolojileri Günü İzlenimleri…
Posted by mehmetgursul in Konferans on June 16th, 2009
ODTÜ Kültür ve Kongre Merkezinde 13 Haziran 2009 tarihinde gerçekleştirilen “Java Teknolojileri Günü” verimli ve keyifli geçen bir seminer oldu.
Seminerde Hasan Türksoy GWT (Google Web Toolkit) , Ümit Vardar EJB 3.1, Mustafa Demir ve Mustafa Daşgın Spring Web Servis Framework , Kenan Sevindik Spring AOP ve Hibernate ile Servis Düzeyinde Audit Loglaması ve ben de OSGi (Java için dinamik Modül Sistemi) konularında sunumlarımızı yaptık. Sunumum ile ilgili dokumanları buradan indirebilirsiniz. Ya da buraya tıklayarak zihin haritası (mind map) sunum formatına erişebilirsiniz.
Organizasyonda emeği geçen CETURK e ve yöneticisi Mehmet Aca’ya, sponsor firmalara (İnnova Bilişim Çözümleri A.Ş ve i-Con) , hem sunum yaparak hem de organizasyonda bulunarak büyük emek harcayan Kenan Sevindik e, ayrıca bizleri dinlemeye gelen teknoloji meraklısı dinleyicilere teşekkür ederim.
Etkinlikden bazı kareler…
![]() |
![]() |
![]() |
![]() |
Yazılımda Modül Kavramı…
Posted by mehmetgursul in OSGi on June 14th, 2009
Yazılımda modül neye benzer olmalıdır? Aşağıdaki özelliklere sahip olmalıdır.
Self-Contained : Modül bir bütün olarak mantıksaldır. Tek bağımsız bir birim halinde install, uninstall edilebilir. Atom değildir yani daha küçük parçalardan oluşmuştur, fakat bu parçalar kendi başlarına olamazlar. Eğer herhangi bir parçası kaldırılırsa da modülün işlevselliği sona erebilir.
Highly-Cohesive : Cohesion, modülün sorumlulukları ile ne kadar ilgili ya da odaklandığı ile ölçülür. Modül ilgisiz şeyler yapmamalıdır. Bir tane mantıksak amaca bağlı kalmalı ve bu amacı tam olarak yapmaya odaklanmalıdır.
Loosely Coupled : Modül etkileşimde olduğu diğer modüllerin gerçekleştirim (implementation) detaylarına bağımlı olmamalıdır. Loose Coupling bizlere şu imkanı vermektedir: Bir modülün gerçekleştirimini değiştiririz. Fakat bunu yaparken bu modülü kullanan diğer modüllerde herhangi bir güncelleme gereksinimine ihtiyaç duymayız.
Bu üç özelliği de modülde sağlamak için modülün çok iyi tanımlanmış arayüzlere ihtiyacı vardır.
Kararlı arayüzler;
- Modüller arasında mantıksal sınırlamaları sağlamakta
- İç gerçekleştirim detaylarına erişimi engellemektedir.
İdeal olarak arayüzler;
- Her bir modülün diğer modüllere neleri sunduğunu ,
- Ve her bir modülün de diğer modüllerden nelere gereksinimi olduğunu belirtir biçimde olmalıdır.
Kaynak : OSGi In Practice - Neil Bartlett









