EJB

EJB 4 – Persistence

Merhaba arkadaşlar. Bu yazımızın konusu EJB’nin bir diğer alanı olan Persistence konusu olacak.

Persistence konusu aslında oldukça geniş bir konu. Bu konuda yazılmış bazı çatılar bulunmakta ve işlemler kolaylaştırılmaya çalışılmaktadır. JPA ve Hibernate bu ORM çatılarının en meşhurlarıdır. Bu yazı içinde bir EJB sınıfı ile JPA çatısı kullanarak veritabanına bağlantı sağlayacağız. Bu bağlantı sağlama işlemini EJB üzerinde çalıştığımız için @PersistenceContext notasyonu kullanılarak yapacağız. Notasyon kullanmadan EntityManagerFactory ile EntityManager nesnesi eldesi işleminde EJB container’a sahip sunucuya ihtiyaç olmadığından o durum konumuzun dışında. Persistence konusu hakkında daha fazla bilgi için kod5.org/jpa-00-0-ormjpa-nedir-giris-ve-netbeans-ortaminda-kurulum yazısını okumanızı tavsiye ederim. Bu yazı EJB ve JPA’nın birlikte kullanımına örnek teşkil eden bir yazı olacak.

Benim MySql veritabanım içinde JSFDersleri diye bir veritabanım var ve içinde Person adında bir tablom var. İçinde barındırdığı kayıtlar da şu şekilde:

Screen Shot 2015-09-12 at 17.42.28

 

Şimdi biz bu kayıtları EJB sınıfımızdan veritabanına bağlanarak alıcaz. İlk olarak yapmamız gereken localhost:4848‘e gidip veritabanımızı Glassfish sunucumuza tanıtmamız gerekiyor. Şu adımları uygulayarak veritabanını tanıtalım:

  1. Soldaki menüden JDBC altından JDBC Connection Pools’a tıklayın.
  2. New butonuna tıklayın, bir Pool Name girin, Resource Type’dan DataSource’u seçin, Database Driver Vendor’dan MySql’i seçin. Next butonuna tıklayın.
  3. Sayfayı aşağı kaydırın, Additional Properties kısmından URL,Password ve User kısımlarını doldurun.  Ctrl + F yapıp ararsanız daha kolay bulabilirsiniz.
  4. Finish deyip bu aşamayı tamamlayın.
  5. JDBC altından  JDBC Resources’a tıklayın. New butonuna tıklayın.  JNDI Name istediğiniz bir şeyi atayın. JNDI Name bize lazım olacak. Pool Name kısmında az önce Connection Pools içinde tanımladığınız Pool Name’i atayın.
  6. OK butonuna tıklayıp işlemi bitirin.

Şimdi sıra projeye Persistence Unit desteği eklemeye geldi. Nasıl Persistence Unit ekleneceğini bazı yazılarda anlatmıştım. Şu yazılardan IDE’nize uygun yazıyı okuyup desteği ekleyebilirsiniz.

Persistence desteği ekledikten sonra bu tablonun Java projesine haritalanması gerekiyor. Yukarıdaki yazılardan uygun olanı okuduğunuzda onu da yapabiliyor olacaksınız. 🙂 EJB teknolojisi içinde bu işlemde oldukça kolaylaştırılmış ve persistence mekanizması ile Entity sınıflarının basit POJO’lar olması sağlanmış. Bendeki haritalanmış sınıf şöyle:

Person.java

Sınıfı haritalama işlemini yaptıktan sonra şimdi persistence.xml dosyanızı açın. Persistence Unit’in transaction-type özelliğini kontrol edin. Eğer yoksa <persistence-unit> etiketinde bu özelliği tanımlayın ve JTA ataması yapın. Akabinde persistence-unit etiketinin içinde bir de <jta-data-source> etiketi açın ve parametre olarak az önce Glassfish’e veritabanını tanıtırken verdiğiniz JNDI Name’i verin. Benim persistence.xml’im şöyle:

Şimdi artık herşeyimiz hazır, kodumuzu yazabiliriz.

EJBInterface.java

EJB Interface’imiz içinde Person tipinde bir listeyi sonuç olarak döndürecek metot tanımladık.

EJBClass.java

EJB sınıfımız içinde ilk sınıfımızı @Stateless notasyonu ile işaretleyip istemciye özel olmadığını ve bir nevi herkese hizmet veren Session Bean olacağını tanımladık. Akabinde sınıfımızı an önce hazırladığımız Interface’den Implement ettik. Sınıfımızın hemen içinde @PersistenceContext notasyonu ile işaretlenmiş bir EntityManager nesnesi [email protected] notasyonu EntityManager nesnesinin yönetimini sunucuya bırakır ve bizi bir yükten daha kurtarır. Bu notasyona parametre olarak verdiğimiz unitName özelliği persistence.xml içinde tanımlanmış persistence-unit’in ismidir.

Kodumuza Interface içindeki metodu Override ederek devam ediyoruz ve veritabanından veri getirecek kodları yazıyoruz. createQuery metodu ile JPQL ifadesini yazıyoruz ve hangi Entity sınıfının kullanılacağını söylüyoruz. createQuery metodundan dönen sonucu da kendi tanımladığımız TypedQuery nesnesine atıyoruz. personQuery.getResultList diyerek JPQL kodunu çalıştırıyoruz ve veritabanından dönen sonucu liste halinde alıyoruz. Dönen sonucu  da kendi tanımladığımız listeye atıyoruz. Listeyi return ederek metotdan çıkıyoruz.

BeanClass.java

Managed Bean kodumuz içinde EJB sınıfındaki metodu return ifadesi ile çağırıyoruz. Böylece listeyi direk elde edip döndürmüş oluyoruz.

index.xhtml

Index kodumuz içinde de DataTable ile verileri alıp ekrana yazdırıyoruz.

Ekran Çktısı

Screen Shot 2015-09-12 at 18.33.51

Veritabanındaki kayıtlar başarılı bir şekilde alındı.

Bu yazıda da bu kadar arkadaşlar. Basit bir kullanımla EJB, JPA ve JSF teknolojilerini birlikte kullandık. Sormak istedikleriniz olursa [email protected] adresinden ya da yorum kısmından sorabilirsiniz. Gelecek yazıda görüşmek üzere sağlıcakla kalın.