JSF

JSF Dersleri-CDI Bean Kullanımı

Merhabalar arkadaşlar. Bu dersimizde JSF projemiz içinde Managed Bean yerine kullanabileceğimiz bir başka bean çeşidi olan CDI Bean kullanımını öğreneceğiz.

CDI Bean Nedir?

Açılımı Context And Dependency Injection Bean olan CDI Bean Managed Bean’e göre daha fazla özellik ve esneklik barındıran bean türüdür.  Java EE 6 ile birlikte bean yönetimi ve bağımlılık enjeksiyonu işlemleri için getirilmiştir. Managed Bean’lerin tüm özelliklerini kapsamakla beraber ondan daha gelişmiştir ve esnek özelliklere sahiptir.

CDI Bean’i kullanabilmek için mutlaka bir uygulama sunucusuna ihtiyacınız vardır. Örneğin NetBeans IDE’nin içinde gelen Glassfish bir uygulama sunucusudur fakat yine NetBeans’in içinde gelen Apache Tomcat bir uygulama sunucu değildir, bu nedenle CDI Bean’i Tomcat üzerinde koşturamayız. Diğer yandan EJB kısmına girildiğinde bağımlılık enjektesi için Managed Bean’ler yetersiz kalmakta ve CDI Bean kullanımına yönelmek durumundayız.

CDI Bean’in bazı özellikleri şöyledir:

  1. Tip Güvenliği (Type Safety): CDI Bean nesne enjeksiyonu sırasında enjekte etmek istenilen nesnenin adı ile değil de Java Type’ı kullanır ve bu da tip güvenliğini sağlar. Java type Java’da tüm tiplerin interface’i konumundadır. Eğer bağımlılık enjektesi sırasında Type yeterli olmazsa @Qualifier notasyonunu kullanabiliriz. Bu notasyon hataların daha kolay çözümünde yardımcı olur.
  2. Esneklik: Tüm CDI container’lar fonksiyonelliklerini taşınabilir uzantılar ile arttırabilir,iyileştirebilirler. Burada taşınabilirlik özelliği de uzantıların Java EE 6 ile birlikte tüm CDI Container’lar üzerinde çalışabilmesidir.
  3. Interceptors: Interceptor’dan kasıt Java’da birbiri ile kesişen ilgiler arasında bağ kurulmasıdır arkadaşlar. CDI Bean’ler ile bağ kurulması, implement edilmesi oldukça kolaylaşmıştır.
  4. Events: CDI  Bean’ler tip güvenliği meknizması ile olayları daha sağlam bir şekilde ele alınmasını sağlarlar ve daha düşük bağımlılık seviyesinde yaparlar (loose coupling).

Bu 4 madde ben de dahil olmak üzere bizim için biraz ağır olabilir çünkü Java EE’nin çok derinlerindeki konulardan bahsediliyor.   Şimdi basitçe CDI Bean’i JSF projemizde nasıl kullanabileceğimize bakalım.

Buradan CDI Bean için gerekli olan API Jar’ını indirin ve projenizin kütüphanesine ekleyin arkadaşlar. Şimdi kodlarımıza bakalım.

CDIBean.java Kodu

Bir Java sınıfının CDI Bean olabilmesi için onun @Named notasyonu ile işaretlenmiş olması gerekmektedir ve bunun yanında javax.enterprise.context paketi altındaki scope’lardan biri ile işaretlenmiş olmalıdır. Bu örneği yazarken kendim de denedim, javax.faces.bean altındaki scope’ların kullanılması durumunda proje çalışmamaktadır. Ayrıca herhangi bir scope verilmediğinde yine çalışmamaktadır.

CDIBean sınıfımız içinde kullanıcıdan adını aldığımız bir isim değişkeni var. Bir de kullanıcıyı selamlayacak selam değişkeni var. Kodumuz içinde gördüğünüz üzere bir @Inject notasyonu var. Bu notasyon bize başka bir CDI bean’ı kendi CDI Bean’imize enjekte etme imkanı sağlar. getSelam metodu içinde xhtml sayfası selamı talep ettiğinde yani get metodunu çağırdığında önce Selamla CDI Bean’inin içindeki metot çağırılıyor ve sonra dönen sonuç selam değişkenimize atanıyor.

Selamla.java Kodu

Selamla CDI Bean’imiz bize girilen isimle birlikte bir selamla döndürüyor.

index.xhtml Kodu

Index sayfamız içinde de bir isim giriliyor ve butona tıklanıyor akabinde selam veriliyor.

Ekran Çıktısı

Screen Shot 2015-08-21 at 15.38.10

İsmimi Girin Gönder Butonuna Tıklıyorum

Kod Düzgün Bir Şekilde Çalıştı

Kod Düzgün Bir Şekilde Çalıştı

Bu dersimizde de bu kadar arkadaşlar. Gelecek yazıda görüşmek üzere sağlıcakla kalın.