EJB

EJB 8 – Interceptors

Ekran Resmi 2015-09-30 22.06.02

Merhabalar arkadaşlar. EJB Timer Service 1 ve Timer Service 2 yazılarının ardından bu yazıda EJB ile doğrudan alakası olmayan fakat Java EE mekanizması içerisinde yer aldığı için bu yazıda anlatmak istediğim Interceptor kullanımını öğreneceğiz. Interceptor bir metodun tetiklenmesi ile aynı anda başka metodu otomatik olarak çağırmak ve çalıştırmak istediğimizde bu işi yerine getiren mekanizmadır.  Şöyle düşünelim ki birkaç  metot tetiklendiğinde aynı işi yapan bazı blokları olacak. Biz aynı kısımları bir metoda toplayıp Interceptor ile metotlar tetiklendiğinde gerekli işlemleri yine yaptırabiliriz, böylece kod kalabalığından kurtuluruz ve bakımı da kolaylaştırılmış olur. Şimdi örnek kod ile kullanımını öğrenelim. Örneğimiz basit JSF kodları ile entegredir.

index.xhtml Kodu

Xhtml sayfamız içinde EJB sınıfımız içindeki metotları çağıracak 2 metodumuz yer alıyor.

JsfManagedBean.java

JSF Managed Bean sınıfımız içinde önceki derslerden hayırlayacağımız üzere @EJB notasyonu ile bağımlılık enjektesi yapıyoruz ve EJB sınıf içindeki metotları çağıracak 2 metot yazıyoruz.

InterceptorEJBBean.java

InterceptorEJBBean sınıfımızı InterceptorBeanLocal interface’inden implement ettik ve içinde yazılı 2 metodu Override ettik. Burada bu dersi ilgilendiren ve dikkat etmemiz gereken nokta @Interceptors notasyonu. Bu notasyon ile biz bu EJB Bean içinde bir metodun tetiklenmesi ile beraber başka bir sınıf içinde yer alan metodun tetiklenmesini sağlayabiliriz. @Interceptors notasyonu parametre olarak hangi sınıfı bu EJB sınıfı ile parelel koşturacaksak o sınıfı parametre olarak alır. Burada tabii rastgele bir sınıf kullanılamaz. Onun da bir notasyon ile işaretlenmesi lazım.

InterceptorBeanLocal.java

InterceptorClass.java

InterceptorClass içinde bu sınıfı ilişkilendirdiğimiz EJB sınıfı içinde metot tetiklendiğinde onunla beraber çalışacak metot hangisi ise onu @AroundInvoke notasyonu ile işaretliyoruz.  Bu notasyon sayesinde farklı metotların yapacağı aynı işler bir araya toplanır ve kod kalabalığı ortadan kalkar. interceptorMethod metodu parametre olarak bir adet InvocationContext nesnesi alıyor. Bu nesne @Interceptors ile işaretlenmiş sınıfdan bir takım bilgileri bu metoda taşır. Dönüş tipi olarak da Object kullanır bu metot.

Ekran Çıktıları

Screen Shot 2015-11-28 at 20.07.50

Proje çalıştığında gelen ekran çıktısı. Şimdi EJB Metod 1 butonuna tıklıyorum.

Screen Shot 2015-11-28 at 20.10.43

Çıktıdan görebildiğimiz gibi EJB sınıfımız içinde metot 1 çağırılma işlemi gerçekleştildiği anda @AroundInvoke notasyonu ile işaretlenmiş metot tetiklendi ve hangi metodun tetiklendiği yazıldı. Şimdi Metot 2 butonuna tıklıyorum.

Screen Shot 2015-11-28 at 20.16.58

Yine aynı şekilde metot devreye girdi ve çağırılan metodun adını verdi.

Bu yazıda Java EE içindeki mekanizmalardan biri olan Interceptor kullanımını öğrenmiş olduk arkadaşlar. Gelecek yazıda görüşmek üzere sağlıcakla kalın arkadaşlar.