Akademik Bilişim ‘10 Muğla Üniversitesi’nde…

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…

No Comments

Apache Web Server + MySQL + PHP + Perl -> hepsi bir arada

    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.

No Comments

Hastane Bilgi Sistemlerinde OSGi Teknolojisinin Dinamikliğinin Kullanılması

    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.

No Comments

Yazılım Test Mühendisliği Eğitimi ve Sertifikası

    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,

  • Planlama ve Kontrol
  • Analiz ve tasarım
  • Testin Uygulanması
  • Testin Sonlandırılması ve Raporlandırılması
  • Testin Kapatılması
  • 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:

  • Eğitim Adı : ISTQB Certified Tester Foundation Level Eğitimi
  • Eğitim Ücreti : 950$ + KDV
  • Eğitim Süresi : 3 gün
  • Eğitim İçeriği: http://www.keytorc.com/web/st_coursedetail101.html
  • Sertifika Adı : ISTQB Foundation Level Certificate
  • Sertifika Ücreti: 200$ + KDV
  • Sertifika İçin Gerekli Doğru Sayısı : 26/40 (%65)
  • No Comments

    JRE update i yaparken karşılaşılabilen bir bug ve çözümü…

    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…

    No Comments

    Java Teknolojileri Günü - İstanbul ardından…

         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.

    No Comments

    IBM İstanbul’da Java Teknolojileri Gününde Buluşmak Üzre…

         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…

    No Comments

    Equinox Framework de Kullanılan Bazı Komutlar

    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.
    • closeshutdown ve exit komutlarının birleşimidir.

    No Comments

    OSGi da Bundle’lar Arası Bağımlılık

         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.

    package osgi.dersler;
    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.

    package osgi.dersler;
    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ı.

    Manifest-Version: 1.0
    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.

    > javac osgi/dersler/Film.java osgi/dersler/FilmBulan.java
    > 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.

    package osgi.dersler.impl;
    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ı.

    Manifest-Version: 1.0
    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.

    > javac -classpath FilmBulan.jar;. osgi/dersler/impl/FilmBulanImpl.java
    > 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.

    osgi>install file:FilmBulan.jar

    Son duruma bakalım.

    osgi> ss
    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.

    osgi>install file:FilmArayuzu.jar

    son duruma tekrar bakalım.

    osgi> ss
    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.

    osgi> ss
    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

    No Comments

    ODTÜ Java Teknolojileri Günü İzlenimleri…

      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…

    No Comments

    Java EE Sınıf Yükleme Mekanizması ve Sorunları

     

    Java EE specification; dağıtık ve çok katmanlı bir platform tanımlamaktadır. Java EE mimarisinin nin merkezi özelliği bir çok uygulama bileşenini yöneten ve bu bileşenlere transaction,security gibi kurumsal servisler sunan “uygulama sunucusu” bölümüdür.

     

    Uygulama sunucuları ayrıca; server ı restart etmeden ve diğer uygulamaları etkilemeden uygulamaları deploy etmek, un-deploy etmek için bir deployment-sistemine ihtiyaç duymaktadırlar.

     

    Bu ihtiyacı karşılamak için Java EE uygulama sunucuları her bir deploy edilen uygulama için biraz daha karmaşık, aşağıdakine benzer bir class-loading yapısı kullanmaktadırlar.

     

     

    • Java EE uygulamaları  EAR dosyaları halinde deploy edilirler. Bu EAR dosyaları aşağıdakileri (ilki ve diğerlerinden bir ya da birkaçını) içeren zip dosyalarıdır;
      • Metadata dosyası, application.xml;
      • Düz Java dosyalarını içeren Jar dosyası
      • EJB uygulamalarını içeren Jar dosyaları (EJB-JARs)
      • Web işlevlerini yerine getiren sınıfları, Servlet-JSP gibi, içeren Web Archive dosyası (WAR)

     

    • Düz Java dosyalarını içeren Jar dosyaları; EAR içindeki tüm EJB-JAR ları ve WARları tarafından erişilmesi düşünülen sınıfları içermektedirler. Bu nedenle EAR Class Loader tarafından bu sınıflar yüklenmektedir.
      • Önceden anlattığımız class loading mekanizmasını bir daha hatırlayacak olursak. Bir class loader sadece, kendisi ya da atası tarafından  tanımlanmış  sınıfları yükleyebilmektedir. Yani ek olarak kardeşlerini (siblinglerini) yükleyememektedir. Bu nedenle EJB ve WAR tarafından paylaşılan ya da kullanılan sınıflar EAR Class Loader a konulması gerekmektedir.
      • Ayrıca eğer deploy edilen birçok uygulama tarafından bir sınıf kullanılacaksa bu sınıfın system application loader seviyesine konulması gerekmektedir. Bu da application server ın restart edilmesine ve JAR dosyasının global classpath e eklenmesine neden olmaktadır.
      • system application loader seviyesine çıkarılan libraryler;
        •  kullanabilmek için restart gerekli
        • Biz sadece deploy edilen bir kaç uygulamanın kullanmasını diğerlerinin kullanmamasını istediğimiz halde, deploy edilen tüm uygulamalar için kullanılabilir hale gelecektir.
        • Sınıf çakışmalarına (Class conflict) neden olacaktır.
          • Üst seviyede bunulan sınıflar daima alt tarafta bulunan aynı sınıflara göre öncelikliği olduğundan alttaki sınıflar ezilecektir.
          • Serverda bulunan tüm uygulamalar üstte bulunan kütüphanenin aynı versiyonunu kullanmak zorunda kalacaktır.

     

    Bu nedenlerden dolayı Java EE geliştiricileri farklı uygulamalar tarafından kullanılan ortak sınıflar tanımlamaktan uzak durmaya çalışmaktadırlar. Birden fazla uygulama tarafından ortak kullanılacak bir kütüphane olduğunda da bu kütüphane herbir EAR içine ayrı ayrı  konularak çoğaltılmaktadır. Sonuç olarak “boru” şeklinde düşey olarak etkileşim kurmakta yatayda etkileşim kuramamaktadırlar.

    Kaynak : OSGi In Practice - Neil Bartlett

    No Comments

    Java da Sınıf Yükleme ve Global Classpath

    • “classpath”
      • “java” komutuna parametre olarak geçmektedir.
      • JAR dosyalarının listesini ve derlenmiş java dosyalarının dizinini belirtmektedir.
      • Örneğin aşağıdaki komut java uygulamasını classpath inde log4j.jar ve classes dizinini içerecek biçimde başlatmaktadır. Son parametre çalıştırılacak main metodu bulunan java sınıfıdır. classes dizini içerisinde org/example/ alt dizininde HelloWorld.class şeklinde içerisinde yer almaktadır.

     

    java -classpath log4j.jar:classes org.example.HelloWorld

    Not: UNIX için parametre ayrımı “:” ile Windows için “;” iledir.

     

    • JVM bir şekilde .class uzantısındaki dosyaları fiziksel diskte bulup Class objesine çevirdikten sonra belleğe yükleyip static main metodunu çalıştırması gerekiyor. Bu standart JRE de nasıl oluyor ona bakalım :
    • Java da sınıfları yükleyen sınıf java.lang.ClassLoader sınıfıdır ve 2 tane sorumluluğu vardır.
      • Mantıksal isimden .class dosyasının fiziksel ortamda bulunması
      • Fiziksel ortamdaki bu byteların Class nesnesine bellekte çevrilmesi.

     

    • ClassLoader sınıfını ektend edip kendi gerçekleştirimimizi de yapabiliriz ayrıca. Böylece sınıfları bir network ten ya da dosya tabanlı olmayan bir sistemden bulup yükleyebiliriz. Ama ikinci kısım olan sınıftaki fiziksel byteların Class nesnesine çevrim işi ClassLoader daki native ve final olan yani yeniden implement edilemeyen (not overriden) bir method olan defineClass() ile olmaktadır.
    •  java -classpath log4j.jar:classes org.example.HelloWorld

    bu komutu çalıştırdığımızda JRE org.example.HelloWorld sınıfını yüklemesi gerektiğini anlar. Özel bir ClassLoader olan Application Class Loader a yüklemesini söyler. Application Class Loader da bir üst sınıf olan Extension ClassLoader a,  o da bir üst sınıfı olana Bootstrap ClassLoader söyler.  Default olarak her classloader ilk önce bir üst sınıfına sorar. Eğer üst sınıfı bulmaz ise kendi arayıp yüklemeye çalışır. 

     

    HelloWorld örneğimize dönecek olursak;

    JRE base de ve extension library de bulunmadığını kabul ediyoruz. Bundan dolayı bootstrap ve extension class loader lar tarafından bulunamayacaktır ve application class loader bulmaya çalışacaktır. Bunu yaparken

    ·         Classpath deki sırasıyla herbir entry de bakacak ve bulur bulmaz da aramayı durduracaktır.

    ·         Classpath deki herbir entriye bakıp bulamazsa tanıdık bir exception olan ClassNotFoundException ı verecektir.

    Özet olarak;

    1.    JRE Application ClassLoaderdan sınıfı yüklemesini ister

    2.    Application ClassLoader , Extension ClassLoader dan sınıfı yüklemesini ister

    3.    Extension ClassLoader, Bootstrap ClassLoader dan sınıfın yüklenmesini ister

    4.    Bootstrap ClassLoader sınıfı bulamaz, Extension Class Loader bulmaya çalışır

    5.    Extension ClassLoader sınıfı bulamaz, Application ClassLoader classpath deki log4j.jar dan aramaya başlar

    6.    Sınıf log4j.jar da bulunamayınca classes dizininde aranmaya başlar

    7.    HelloWorld sınıfı bulunur ve yüklenir.

    Her bir sınıf istemi için tekrar 1. Adımdan başlayarak arama yapılır.

     

     

    Kaynak : OSGi In Practice - Neil Bartlett

    No Comments

    Yazılımda Modül Kavramı…

    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

    No Comments

    Java Teknolojileri Gününde Buluşmak Üzre…

    CETURK (Computer Engineering TURK),  “Java Teknolojileri Günü” adıyla, Ankaradaki 2.  seminerini 13 Haziran 2009 da ODTÜ de düzenleyecek. 

     ODTÜ Kültür ve Kongre Merkezi A Salonunda tam gün gerçekleşecek bu etkinlikte 5 farklı konuda sunumlar olacak. Ben de  ”OSGi (The Dynamic Module System For Java)” adlı sunumu yapacağım. Seminerde buluşmak üzre…

    Etkinliğin programı aşağıdaki gibi:

    13 Haziran Cumartesi ( 10.00-18.30)

    • 10:10 - 11:30 : Hasan Türksoy - GWT İle Web Uygulamaları Geliştirmek
    • 11:45 - 13:00 : Ümit Vardar - EJB 3.1
    • 14:00 - 15:15 : Mustafa Demir & Mustafa Daşgın - Spring Web Servis Frameworkü
    • 15:30 - 16:45 : Mehmet Gursul - OSGi (The Dynamic Module System For Java)
    • 17:00 - 18:15 : Kenan Sevindik - Spring AOP ve Hibernate ile Servis Düzeyinde Audit Loglaması

    No Comments

    OSGi Türkçe bilgi paylaşım grubu…

    OSGi (Open Services Gateway initiative) hakkında Türkçe bilgi paylaşımı yapabileceğimiz bir grup kurdum. Grubun ileti adresi osgi_tr@googlegroups.com .

    Üye olmak isteyenler mehmetgursul@gmail.com a mail atabilirler.

    No Comments