JPA JSF MySQL PrimeFaces Spring

JSF Projesi-Hastane Randevu Alma Otomasyonu

Merhaba arkadaşlar. Bu yazıda sizlere JSF ve ilave bazı teknolojilerle geliştirilmiş bir bir proje hakkında bilgi vermek istiyorum.

Üniversite dersleri arasında bu dönem almış olduğumuz YazılımMühendisliği dersi kapsamında bir proje kodlamamız gerekiyordu  Grup arkadaşları ile istişare sonucunda projeyi Java ile kodlamaya karar verdik. Akabinde ne projesi yapacağımızı tartıştık ve bir hastane randevu alma otomasyonu yazmaya karar verdik.

Proje ekibimizde yer alan isimler şu şekilde idi:

  • İlknur Özgen
  • Kübranur Öztürk
  • Arif Cemal Özcan
  • Batuhan Apaydın
  • Tolga Durak
  • İlkay Günel

Proje ekibinde yer alan tüm arkadaşlarıma gösterdikleri gayretten ötürü teşekkür ederim.

Bu proje kapsamında kullandığımız teknolojiler şunlar:

  • Maven
  • JSF
  • PrimeFaces
  • JPA
  • Spring
  • Spring Security

Projenin bağımlılıklarının kolay yönetilebilmesi ve kod yazan arkadaşların IDE’ler arası  sorun yaşamaması için Maven ile projeyi geliştirdik.

Okulda daha önce JSF dersi aldığımız ve bir proje de orada kodladığımız için bir tecrübemiz vardı. Bu tecrübeyi de kullanalım dedik ve JSF çatısı altında projeyi kodladık.

Görünüm tarafında işleri oldukça kolaylaştıran ve bizi büyük ölçüde JavaScript kodları ile uğraşmaktan kurtaran, bir JSF çatısı olan PrimeFaces’ı da projemizde kullandık. Projenin çoğunluğuna PrimeFaces hakim.

Bu proje ile beraber ben bir ORM çatısı tecrübe etmek istedim ve JPA üzerinde karar kıldım. Projemizde de veri tabanı ile ilişkiler JPA çatısının sağladığı avantajlar kullanılarak yapıldı.  ORM nedir derseniz buradaki yazım sizin için bir cevap taşıyor.

Yine JPA ile beraber ben Spring çatısını da tecrübe etmek istedim ancak projede Spring çok temel seviyede kaldı. Spring hakkındaki bilgimin de kısıtlı seviyede olmasından dolayı sadece temel seviyede nesne yönetimi için kullandım Spring’i. Spring’i öğrendikçe bu projeye uygulayacağım ve sizleri de yazılarımda haberdar edeceğim.

Proje için bir yetkilendirme mekanizması gerekli idi. İki seçeneğimiz vardı. Ya Apache Shiro ya da Spring Security kullanacaktık. Spring Security kullanarak onu da tecrübe etmek istedim.  Apache Shiro’ya göre ben biraz daha sevdim Spring Security yapısını fakat kullanım kolaylığı bakımından Apache Shiro biraz daha iyi gibi.

Projeniz kaynak kodları hepinizin kullanımına açıktır. Kodlara http://github.com/ilkgunel/HospitalAutomationWithJavaEE linkinden erişebilirsiniz arkadaşlar.

Projenin şu hali ile yapılabilen işlemler şunlardır arkadaşlar:

  • Yeni Üye Kaydı (Parola MD5 İle Şifrelenerek Veri Tabanına Kayıt Edilir)
  • Spring Security İle Giriş Yapılması (Captcha İle Destekli)
  • Seçilen Kriterlere Göre Randevu Arama
  • Doktorları Ve Saatleri Listeleme (Alınmış Saatler Siliktir)
  • Alınan Randevuları Görünteleme (Tarihi Geçmiş Randevular Geçmiş Olarak Gösterilir)
  • Hesap Bilgilerini Güncelleme

Fırsat buldukça yeni öğrendiğim şeyleri projeye katacağım ve biraz daha geliştirmeye çalışacağım.

Proje için bazı ekran çıktılarına da bir bakalım şimdi.

Screen Shot 2015-06-27 at 20.16.41

Proje çalıştığında ana sayfa olarak giriş sayfası bizi karşılıyor.

 

Veri tabanında kayıtlı 11111111111 kimlik numarası ve 12345 şifresi ile giriş yapıyorum.

Veri tabanında kayıtlı 11111111111 kimlik numarası ve 12345 şifresi ile giriş yapıyorum.

Screen Shot 2015-06-27 at 20.29.50

Giriş yaptıktan sonra bizi karşılayan ekran.

Gerekli bilgileri seçip randevu ara butonuna tıklıyorum ve doktor ismi geliyor. Doktor ismine tıklayarak saatleri getiriyorum.

Gerekli bilgileri seçip randevu ara butonuna tıklıyorum ve doktor ismi geliyor.
Doktor ismine tıklayarak saatleri getiriyorum.Alınmış saatler silik olarak görünüyor.

Randevularım'a tıkladığımda aldığım randevular geliyor. Tarihi geride kaldı ise Geçmiş olduğu bildiriliyor.

Randevularım’a tıkladığımda aldığım randevular geliyor. Tarihi geride kaldı ise Geçmiş olduğu bildiriliyor.

Hesap Bilgileri'ne tıkladığımda bilgilerimi güncelleyebileceğim bir ekran açılıyor. Bu ekranda değişiklik yapıp hemen veri tabanına kaydedebilirim.

Hesap Bilgileri’ne tıkladığımda bilgilerimi güncelleyebileceğim bir ekran açılıyor. Bu ekranda değişiklik yapıp hemen veri tabanına kaydedebilirim.

Proje hakkında şu da olsa iyi olur ya da şunu nasıl yaparız dediğiniz şeyler,başka fikirleriniz ve düşünceleriniz için ve projeye github’ta katkı yapmak isterseniz bana [email protected] üzerinden yazabilirsiniz arkadaşlar. Projemizin herkes için bir nebze de olsa faydalı olmasını dilerim. Herkese kolay gelsin. Görüşmek üzere sağlıcakla kalın.

GÜNCELLEME

Yazıyı yazdığım Haziran 2015’den sonra da bu proje üzerinde testler ve eklemeler yapmaya devam ettim. Projede meydana gelen bir takım gelişmeler şu şekilde:

  • Hasta kaydı JPA’ya daha uygun hale getirildi. Kayıt Managed Bean içindeki değişkenin field’larına set yöntemi ile değiştirildi.
  • Sunucu olarak tecrübe ve test etmek için WildFly Java EE Server kullanımına geçildi.
  • @PersistenceContext notasyonu ile EntityManager yönetimi sunucuya bırakıldı. Projede Spring de olduğu için Spring config dosyası içinde düzenlemeler yapıldı.
  • Sınıflar arası nesne enjeksiyonunda kullanılan @ManagedProperty yetersiz kalması ve sorun çıkartması nedeni ile tüm sınıflardan temizlendi ve Spring @AutoWired ile nesne enjeksiyonuna geçildi.
  • Entity’lerdeki Date alanları LocalDate ile değiştirildi. JPA üzerinde LocalDate kullanımı için Converter kullanıldı.
  • PrimeFaces versiyonu 5.3’e güncellendi. Bu nedenle oturum açma ekranındaki Captcha da daha yeni, güzel ve güçlü haline güncellendi.
  • Spring versiyonu 4.2.4’e, Spring Security versiyonu 4.0.3’e güncellendi.
  • Serkan

    Merhabalar,
    Benim merak ettiğim bir nokta var çok aradım bulamadım henüz,bu jsf veya jsp ile yaptığımız dosyaları gerçek hosta nasıl yükleyeceğiz. Özellikle java destekli hostlar pahalı bulut sunucu kiralayıp tomcat kurmak mümkün ben öyle kullanıyorum diyenler var ama henüz nasıl olabildiğini bulamadım yardım ederseniz sevinirim.