EJB

EJB 9 -Embeddable Objects

Merhabalar arkadaşlar. Bu yazıda EJB mekanizması içindeki Embeddable Objects konusunu öğreneceğiz.

Embeddable Object Java sınıfına haritalanmış bir tablo içindeki bazı kolonların bir değişken ile yönetilebilmesidir. Yani kolonlar Entity sınıfı içersinde değil de yazılmış olan bir başka POJO vasıtası ile yönetilebilinir hale getiriliyor. Burada amaç benim anladığım kadarı ile kodun daha anlaşılır hale getirebilmesinin hedeflenmesidir.

Şimdi örnek uygulama ile nasıl yapıldığına bakalım ve konuyu daha iyi anlayalım. Bu uygulamayı Apache TomEE sunucusu kullanarak yaptım. Siz eğer GlassFish kullanıyorsanız @PersistenceContext kullanımı için şuradaki yazımdaki işlemleri tekrarlamanız gerekebilir. TomEE için o işlemler gerekmiyor ve direk kullanabiliyoruz.

Öncelikle size Java sınıfına haritalanacak tabloyu göstereyim.

Screen Shot 2015-12-05 at 19.06.55

Biz  bu tablo içindeki adres ve telephone alanlarını sınıfa doğrudan haritalayıp kullanmak yerine Accessing adındaki bir POJO ile yönetip kullanacağız.

index.xhtml

Index kodumuz içinde projenin web sayfasını yazıyoruz.

EmbeddableJSFBean.java

JSF Managed Bean’i içerisinde EJB metodumuzu çağırabilmek için @EJB notasyonu ile bir arabirim nesnesini gömüyoruz.  Akabinde Java sınıfına haritaladığımız tablomuz için bir Embdeddabletable nesnesi ve Embeddable olarak kullanacağımız POJO olan Accessing sınıfından bir nesne oluşturuyoruz. Bunun dışındakiler bildiğimiz şeyler.

Accessing.java

Accessing sınıfı bizim tablomuzdaki adres ve telephone kısımlarını yönetmek için yazdığımız bir POJO. Eğer bizler EJB’nin Persistence mekanizması içersinde bir POJO vasıtası ile alanları yönetme işine girişecek isek bu sınıfı @Embeddable notasyonu ile işaretlememiz gerekir. Bunun dışında yapılması gereken özel bir işlem yoktur.

Embdeddabletable.java

Tablonun Java sınıfına haritalanmış hali. Dikkat eder isek adres ve telephone kısımları Entity sınıfı içinde yok. Bu alanlar Accessing nesnesi ile yönetilecek. Accessing nesnesi ile yönetebilmek için de  oluşturulan Accessing nesnesinin iki notasyon ile işaretlenmesi gerekir. Birincisi @Embeddable notasyonudur. Bu notasyon @Embedded notasyonu işaretlenmiş sınıftan oluşturulmuş nesneyi kullanmak için gereklidir. İkinci notasyon ise @AttributeOverrides notasyonudur. @AttributeOverrides notasyonunun içinde @Embeddable notasyonu ile işaretlediğimiz sınıf içindeki alanları parametre olarak geçiriyoruz. Bu geçirme işlemini de @AttributeOverride notasyonu ile yapıyoruz. @AttributeOverride notasyonuna da parametre olarak name ve column veriyoruz. name POJO içinde tanımlanmış olan kolona karşılık gelen değişkenin adı, column da kolonun adıdır. @Embedded ve @AttributeOverrides notasyonu ile işretlenmiş olan Accessing değişkenin get&set metotlarını da yazıp işlemi tamamlıyoruz.

EmbeddableEJBBeanLocal.java

EJB sınıfı için yazılar interface. Bildiğimiz gibi EJB’lere direk erişim tavsiye edilen,doğru birşey değil. Bunun için bir arabirim (interface) yazıp EJB sınıfını ondan implement ediyoruz.

EmbeddableEJBBean.java

İnceleyeceğimiz son kodumuz da EJB Bean’imiz. EJB sınıfımız içinde persist işlemi gerçekleştiriliyor. Orada dikkatinizi çekerim persist işlemi sırasında bizim açıp kapattığımız bir Transaction mekanizması yok. Burada @PersistenceContext notasyonu ile Transaction mekanizmasının yönetimi sunucuya bırakılıyor ve bizler açıkçası benim dertli gördüğüm noktalardan birinden daha kurtulmuş oluyoruz.

Ekran Çıktıları

Proje çalıştığında gelen ekranı şu şekilde dolduruyorum.

Screen Shot 2015-12-05 at 20.50.41

KAYDET butonuna tıkladığımda bana kayıt ile ilgili mesaj döndürülüyor. Kayıt başarı ile yapıldı.

Screen Shot 2015-12-05 at 20.52.49

MySQL veri tabanına gidip verinin düzgün kaydedilip edilmediğine bakalım. Veri karakter kodlaması da dahil düzgün bir şekilde veri tabanına kaydedilmiş. Id noktasına aklı takılan olursa o yazıyı yazmadan önce test amaçlı eklediğim ilk kayıttan dolayı 2. 🙂

Screen Shot 2015-12-05 at 20.54.36

Bu yazıda da bu kadar arkadaşlar. Embeddable Object’in ne olduğunu ve nasıl kullanıldığını öğrenmiş olduk. Gelecek yazıda görüşmek üzere sağlıcakla kalın arkadaşlar.