Servlet spesifikasyonunda yer alan Filter ve Listener nelerdir?

Servlet Spesifikasyonu servletler dıişında iki bileşeni daha tanımlar. Bunlar filters (filitreler) ve listeners (dinleyiciler)'dir.
Filtreler (Filters)

Bir filter bir servlet'e, JSP'ye veya statik bir sayfaya istek (request) gönderilirken veya cevap (response) döndürülmeden önce araya girebilen(intercept) bir bileşendir. Bu merkezi görevlerin tüm isteklerden önce ve cevaplardan önce kolayca uygulanmasını sağlar. Bu merkezi görevler kontrol, loglama gibi işlemler olabilir. Filtreler request veya respnse nesnesinin body'sine ve header'ına tam erişim yetkisi vardır, bu şekilde çeşitli transformasyonlar yapabilirler.
Mesela request nesnesinin header'inde istemcinin compressed response kabul ettiğini kontrol ederek response'ın gövdesini compress (sıkıştırma) edebilir.
Bir filtre spesifik bir servlete uygulanabileceği gibi, isteklerin geldiği URL şablonuna uyan elementlere uygulanabilir. Bu şablonlar aynı path'le başlayan elementler olabildiği gibi aynı uzantılara sahip elementler de olabilir. Jason Hunter'ın filtrelerle ilgili makalesine buradan ulaşabilirsiniz. Bu makale çeşitli tiplerdeki filtrelerin nasıl geliştirilebeleceği, işlem zamanını ölçmede filtrelerin kullanımı, click and clickstreams izleme, response compression ve dosya yükleme gibi örenklerle açıklıyor.
Dinleyiciler (Listeners)
Dinleyeciler (Listeners) uygulmanızın belirli olaylara (event) nasıl tepki vereceğine karar veren yapılardır. Servlet spesifikasyonunun 2.3 versiyonu ile beraber servlet context için çeşitli listener tipleri tanımlanmıştır. Session ve request lifecycle eventleri("created" ve "destroyed" eventleri), session attribute eventleri ("added" ve "removed" eventleri), aynı zamanda session aktivasyonu ve pasifizasyonu eventleri(container tarafından kullanılan geçici olarak kaydedilen session durumu veya başka bir sunucuya session'un aktarılması).
Bütün bu listener çeşitleri Java event modelini kullanır. Başka bir ifadeyle bir listener bir veya daha fazla listener interface'ini implemente eden bir sınıftır. Interface eventlere göre metotları tarif eder. Listener sınıfı uygulama başladığında containere kayıt olur ve container event metodlarını eventler oluşunca çalıştırır.
Listener'ler için daha fazla detaya ve örneklere buradan ulaşabilirsiniz.

Milyoner adaylarının 20 alışkanlığı

1. Hayır demeyi bilin
Hayır demeyi öğrendiğinizde okuma,öğrenme,uyuma,arkadaşlarla buluşma gibi aktivitelere ve hayatı sevmeye daha fazla zamanınız kalmış olur.
2. Aşk
Aşk yeryüzündeki tek inançtır. Aşk etrafında toplanılmaya değer tek şeydir. Aşk fikir kaslarınız için ana yakıttır.
3. Hata Yapın
Hatalar başarı kitabının heceleridir. Hataları öğrenmek için sıkı çalışın. Onların sihrini öğrenin. Kaslar yırtıldığında eskisinden daha kuvvetli bir biçimde yenilenilirler.
4. Tohumlar ekin
Temel bahçe matematiği :Tohumların sadece yüzde biri çiçeklere dönüşür. Birçok tohum ekin.
5. Size karşı nazik olan ve sizi seven insanların yanında bulunun
Diğer insanlar sizi mutsuz, sert ve başarısız yapacaktır.
6. Odanın en zeki insanının hemen yanında olun
Harold Raims bunu yaptı. (Bill Murray)

Steve Jobs bunu yaptı. (Steve Wozniok)
Craig Silverstone bunu yaptı. (Kim mi? Larry Page)
Kanye West bunu yaptı.(Jay-Z)
7. Bahane üretmeyin
Suçlamak sizi tüketir. Şikayet etmek sizi tüketir. Sürekli açıklama yapma isteği sizi tüketir. Bu kadar tüketici şey için gerekli iç tesisatımız yoktur.
8. Başarı için acele etmeyin
Uzun vadeli başarıya (20 yıl) giden yolda pek çok küçük başarı elde edersiniz.
9. Şükür sorununuzu çözün
Eğer çamurda elmas bulabilirseniz, hayatta birçok elmasınız olur. Şükretmeyi ve iyi yönlerden bakmayı bilin.
10. Warren Buffet'ın 5/25 kuralı
Hayatta yapmak istediğiniz 25 şeyi sıralayıp yazın. Daha sonra bu listeden en çok istediğiniz 5 taneyi seçin ve uygulamaya başlayın. Diğer 20 şeyi aklınızdan çıkarın, eğer çıkarmazsanız seçtiğiniz 5 şeyi yapmaya gerekli zamanınız ve konsantrasyonunuz kalmaz.
11. Günde bir yere 10 fikir yazın
Görüceksiniz ki bu süper bir güce dönüşecek. Bu işlemi 6 ay boyunca yapın ve ne olduğunu görün.
12. Peşini bırakmayın
Ertesi gün bir yeni bir adım olarak yeni bir fikirle email atın.
13. Sorular sorun
Sorular cevaplardan daha fazladır. Fırsatlar sorularda gizlidir. Gerçekler dış kaynaklı olabilir.
14. Günde %1
Neyde daha iyi olmak istiyorsanız ona günde %1 daha fazla zaman ayırın. Günde %1 bir yılda kümilatif olarak %3800'e tekabül edecektir. Bu şekilde kazanacaksınızdır.
15. Sadece şimdi
Pişmanlık bugünün zamanını dün için boşa harcamaktır. Ve kaygı gelecekten enerji çalmaktır. Şu ana odaklanın.
16. Uyuyun
Uyku, beyin hücrelerini yeniler vücudu iyileşir, endişeyi azaltır. Ve beynin sadece 2-5 saat aktiftir. Tatlı Rüyalar.
17. Her gün ölümden kaçın
Hastane yatağında zengin olamazsınız. Veya bir mezarda. Hergün hareket edin, iyi uyuyun, ve sağlıklı beslenin.
18. Her gün yaparken çocuk gibi sevindiğiniz bir şeyi yapın
Bu genellikle yaşamınız için güç olabilecek bir yakıttır.
Hey bir dakika, 20 alışkanlık demiştiniz.
Başarının anahtarı = Kendinize zaman zaman hata yapma hakkı tanıyın.

Facade (Cephe) Design Pattern

TDK'ya göre cephe : Bir şeyin veya yapının ön tarafta bulunan bölümü Facade design pattern alt sistemlerden oluşmuş bir sistemde kullanıcının (client)'ın bu alt sistemleri bilmeden herbirini yalnız başına veya ortak olarak kullanabileceği arayüzü sağlar. Bir örnekle açıklayalım. Bir bilgisayar ram, hdd, cpu gibi alt sistemlerden oluşur. Bir bilgisayarı başlattığımız zaman bu alt sistemleri harekete geçirirp belli işlemleri yerine getirmesini bekleriz. Fakat kullanıcı bu alt sistemleri tek tek harekete geçirmek yerine kasada var olan start tuşuyla bu alt sistemlerin sırasıyla hepsinin harekete geçmesini bekler. Client bunların sırasını ve neler yaptığını pek bilmek istemez. Burada kasa'ya facade sınıfı diyebiliriz. Kod olarak gösterecek olursak.




/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}
Alt sistemler kendi başlarına sırayla çalışabildiği gibi, birbirleri ile etkileşim halinde olup belli işleri yerine de getirebilirler.

Java 8 Functional Interfaces ve Lambda Kullanımı

Java 8'de tek metoda sahip interface'lere functional interfaceler denir. Bunlar Runable interface'i gibi built in interfaceler olabildiği gibi kendi yazdığımız interface'ler de olabilir.




Java 8 ve öncesinde bir interface'i implemente etmek için bir class yazıp metodlarını override ediyorduk.
public interface SimpleInterface {
     public void doSomething();
}
public class SimpleClass implements SimpleInterface{
     
     @Override
     public void doSomething(){
        System.out.println("doing something");
    }

}
public class Test {
    
    public static void main(String[] args) {
        SimpleClass sipmle=new SimpleClass();
        simple.doSomething()
    }

}
Görüldüğü gibi interface'i implemente eden bir sınıf yazdık ve metodunu kullandık. Eğer inner class kullansaydık :
public class Test {
    
      public static void main(String[] args) {
          SimpleInterface simple= new SimpleInterface(){
          
             @Override
             public void doSomething(){
                 System.out.println("doing something");
             }

          }
         simple.doSomething();
    }

}
şeklinde Class yazmamıza gerek kalmadan interface'i direkt kullanadabilirdik. Java 8'de lamda ile bu daha da kolaylaşıyor. Eğer interface functional interface ise yani tek abstract metoda sahipse : Görüldüğü gibi tek abstract metodlu bir interface. @FunctionalInterface anatosyonu yazma zorunluluğumuz yoktur isteğe bağlıdır.
@FunctionalInterface
public interface SimpleInterface {
    public void doSomething();

}
public class Test {

    public static void main(String[] args) {
        SimpleInterface simple=()->System.out.println("doing something");
        simple.doSomething();    
    }

}
Burada "()" interface'in sahip olduğu tek methodu belirtir. -> ise implementasyonuna işaret eder. Burada implementasyon System.out.println("doing something"); şeklindedir. Bu şekilde functional interface'i class ile implemente etmeye gerek kalmadan metdounu istediğimiz yerde farklı implemnte ederek kullanabiliriz. Aynı durum tek metoda sahip built-in interfacelerde de geçerlidir. Örneğin Runable interface'i :
public class UseRunnable {

    public static void main(String[] args) {

        Runnable r1 = () -> { 
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Running Thread 1");
        };
        Runnable r2 = () -> System.out.println("Running Thread 2");

        new Thread(r1).start();
        new Thread(r2).start();

    }

}

Microservice mimarsi nedir? Avantajları nelerdir?

Merhaba, bu yazımda sizlere yazılım dünyasında yeni bir trend olan ve benim de yeni olduğum microservice mimarisini anlatmaya çalışacağım. Fırsat buldukça farklı kaynaklardan yararlanarak güncelleiyeceğim makalemein geniş kapsamlı olmasını umuyorum.
Mayıs 2011'de Venedik yakınlarında düzenlenen yazılım mimarları çalıştayında katılımcıları çoğu yakın zamanda keşfetikleri ortak mimari tarzı olarak gördükleri mimariyi anlatırken 'microservice' ismini kullandılar.Mayıs 2012'de aynı grup en uygun isim olarak 'microservices' adına karar verdi. Aynı zamanlarda Fred George'ın yaptığı gibi, Ames Lewis Microservices-Java, Unix Way adı altında Mart 2012'de bir vaka çalışması olarak Kraków'da bu fikirlerin bazılarını sundu. Netflix'den Adrian Cockcroft web tarafında tanımlamalar yaparak yaklaşımı ince tanecikli SOA (fine grained SOA) olarak çevirebileceğimiz bir tanım yaptı.
Microservice'ler, bilinen bir diğer adıyla microservice mimariler gevşek bağımlı servislerin bir araya geldiği yazılım mimarisi stilidir.Microservices mimarisi felsefesi 'bir şeyi yapın ve bunu iyi yapın' Unix felsefesine eşittir.

Microservice mimarisinde, servislerin belli sınırlar içinde fonksiyonu belli, ve protokolleri hafif siklet olmalıdır.
Bir uygulamayı farklı küçük servislere bölmek modülariteyi arttırır ve uygulamanın anlaşılmasını kolaylaştırıp, uygulamaının geliştirilmesi ve test edilmesini kolaylaştırır. Bir uygulamayı aynı anda parelel olarak farklı servisler üzerinde farklı küçük takımların geliştirme yapmasına olanak sağlarken, uygulama yükleme (deploy) ve genişletilebilirlik (scale) işlemlerinde bu takımların bağımsız olmalarını da olanak sağlamaktadır. Mimari takımlara ayrıca refactoring'i sürekli halde yapmalarına olanak sağlarken , continuous delivery ve continuous deployment'a da imkan verir.



Microservice mimarinin yeni bir yapı olması nedniyle henüz yazılım dünyasında ortak bir tanımı bulunmamakla beraber, resmi bir tanımı da mevcut değildir. Sıklıkla bahsedilen tanımlamaları sıralayacak olursak :
Micrsoervice mimarisindeki (MSA-Microservice architecture) servisler HTTP gibi teknoloji bağımsız protokoller kullanarak bir ağ üzerinde birbiriyle haberleşen belli işleri yapan işlemler (process) lerdir.
MSA'da servisler birbirinden bağımsız ortama yüklenebilmelidirler (deploy).
Servisler birbirinin yerine kolayca geçebilmelidirler.(replace)
Servisler yeteneklerine göre organize edilebilimelidirler. (Kullanıcı arayüzü, tavsiye, lojistik, faturalandırma gibi)
Servisler ihtiyaçlarına göre farklı programlama dilleri kullanılarak kodlanabilir,farklı databaseleri kullanabilir ve farklı donanım ve yazılım çevrelerini kullanabilirler.
Servisler boyutları küçük, mesajlaşma etkin, bağlamlarda bazında sınırlandırılmış, otonom geliştirilen, bağımsız yüklenebilir, merkezi olmayan ve otomatize edilmiş süreçlerle build ve release edilen şekildedir.
Microservice Mimari :
Doğal olarak modülerdir.
Sürekli dağıtım yazılım geliştirme işlemleri destekler.Uygulamanın küçük parçasında yapılan değişiklik sadece bir servisin yeniden build edilmesi ve yeniden dağıtılmasını gerektirir.
Birçok yazılım prensibinin birleşimidir. Bunlar fine-grained interfaces (bağımsız deploy edilebilien servisler), Bussiness Driven Development (domain-driven desgin gibi),IDEAL bulut aplikasyon mimarileri, çok dilli programlama ve devamlılık, hafif siklet konteyner geliştirimi (lightweight container deployment), merkezi olmayan dağıtım (decentralized continuous delivery), ve DEVOps ile bütünsel hizmet gözetimi.



Kaynak:https://en.wikipedia.org/wiki/Microservices

Bonus :


Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo