ANKARA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. Java Teknolojileri Kullanılarak. Kan Bağış Web Uygulamasının Tasarlanması



Benzer belgeler
Üst Düzey Programlama

Android e Giriş. Öğr.Gör. Utku SOBUTAY

JAVA RMI ve Hibernate teknolojileri kullanılarak çok amaçlı bir yazılım altyapısı hazırlanması

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

Java EE 5 Teknolojileri Jboss Seam

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

ÖZGÜR YAZILIMLAR İLE J2EE

.com. Özcan Acar 2009 Kurumsal Java.com

Spring Ekosisteminde Kurumsal Yazılım Geliştirme. Kenan Sevindik Harezmi Bilişim Çözümleri A.Ş.


Mobil Cihazlardan Web Servis Sunumu

Özgür Yazılımlarla Web Programlama. Özlem Özgöbek

6 Ocak İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. İlgili Modül/ler : E-Fatura

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4

JBoss Seam Next Generation Integration Framework

İnternet Programcılığı

Üst Düzey Programlama

İçindekiler Tablosu Talep Destek Yönetim Sistemi Programı...3

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Süreç Yönetimi. Logo

TÜİK e-vt Teknik Kılavuz

Tüm personel kendi KEP hesapları üzerinden mevcut ve önceki maaş bordrolarını görüntüleyebilecektir.

1 Temel Kavramlar. Veritabanı 1

Sade ve tam ekran masaüstü kullanımının temel çıkış noktası, aranılan özelliğe çabuk erişimi sağlayan yenilikçi kullanıcı deneyimidir.

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

PROGRAMLAMA DERSİ 1. İNTERNET

Üst Düzey Programlama

MOODLE UZAKTAN ÖĞRETİM SİSTEMİ

Intercepting Filter Tasarım Şablonu KurumsalJava.com

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

MyFaces Özgür JSF Uyarlaması. Bora Güngören Portakal Teknoloji

MOBIL UYGULAMA GELIŞTIRME

Web Uygulamaları Mimarileri ve Güvenliği

JAVA API v2.0 Belge sürümü: 2.0.2

Programlama Yazılımı ile Web Sitesi Oluşturma

YZM 3215 İleri Web Programlama

Client Server Database

Spring Security Framework Harezmi Bilişim Çözümleri

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

TCMB Deneyim Raporu. Kurumsal Java Uygulama Platformu. Sacit Uluırmak. Türkiye Cumhuriyet Merkez Bankası Sistem Araştırma ve Planlama Müdürlüğü

2 Temel Kavramlar (Devam) Veritabanı 1

HSE RADAR. İş Sağlığı ve Güvenliği Yönetimi Uygulama, Denetim, Eğitim ve Takip HSE GLOBAL YAZILIM A.Ş. 11 Mart 2016

Swing ve JDBC ile Database Erişimi

Veritabanı Uygulamaları Tasarımı

LOGO İş Zekası çözümü ile kurumsal raporlama ve analizler. Cem Yılmaz Genel Müdür LOGOBI Yazılım

Türkiye Barolar Birliği internet sitesi

ICATT ÇEVİRİ UYGULAMASI SİSTEM MİMARİSİ VE VERİTABANI TASARIMI

ANKARA ÜNİVERSİTESİ ELMADAĞ MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI PROGRAMI DERS İÇERİKLERİ

Öğr. Gör. Serkan AKSU 1

İSTANBUL TEKNİK ÜNİVERSİTESİ ELEKTRİK-ELEKTRONİK FAKÜLTESİ. AKILLI FİYAT ARAMA MOTORU TiLQi.NET

Kullanım Kılavuzu Milli Eğitim Bakanlığı 2010

EGE ÜNĐVERSĐTESĐ BĐLGĐSAYAR MÜHENDĐSLĐĞĐ SUNUCU YAZILIM TEKNOLOJĐLERĐ LABORATUAR PROJESĐ

DÖNER KANAT TEKNOLOJİ MERKEZİ (DKTM) PROJE SİSTEMİ

Metin Editörleri YRD. DOÇ. DR. ENGİN CEMAL MENGÜÇ. ALINTI:

FIRAT ÜNİVERSİTESİ DİNAMİK WEB SAYFASI

Java. Hakkımızda. Java Eğitimi

Kurumsal Grup E-Posta Eğitim Dokümanı

BSOFTefat E-FATURA ÇÖZÜMÜ

PHP ile İnternet Programlama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

VERİTABANI Veritabanı Yönetimi

İLİŞKİSEL VERİTABANLARI

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

1. Admin kullanıcı ile sisteme giriş yapınız. Ekranın sağ üstünde yer alan defter yaprakları ikonuna tıklayınız.

COĞRAFİ BİLGİ SİSTEMLERİ SERVER MİMARİSİ SERVER UYGULAMA GELİŞTİRME EĞİTİMİ

Outlook ta Mail Arama

VERİ KAYNAKLARI. Bilgi sisteminin öğelerinden biride veri

Veritabanı Yönetimi Bilgisayarların. Keşfi Hedefler. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

AKILLI TATIL PLANLAMA SISTEMI

Fırat Üniversitesi Hastanesi Dinamik Web Sayfası

Zirve e-fatura Portal Paketi V. 1.0.xx

Yrd. Doç. Dr. Gökçe BECİT İŞÇİTÜRK. Gökçe BECİT İŞÇİTÜRK 1

Koşuyolu, Asmadalı Sk No:29 Kadıköy Tel : Faks: (216)

SDD Dökümantasyonu Versࠀyon 1.0. Movࠀe Predࠀctࠀon Orhan Özgün Ergen Ahmet Saday Berkay Erken

Avlanmaya Açık ve Kapalı Alanlara İlişkin Coğrafi Bilgi Sistemi Projesi

C# ile e-posta Göndermek

MOBİL UYGULAMA GELİŞTİRME

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

MOBİL UYGULAMA GELİŞTİRME

IdeaSoft E-Ticaret ile LOGO Ticari Yazılım Entegrasyon Kullanım Kılavuzu

Kural Motoru.

UZAKTAN EĞİTİM MERKEZİ

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri

Özgür Yazılımlar ile VoIP Denetimi. Fatih Özavcı Bilgi Güvenliği Danışmanı

1. VERİ TABANI KAVRAMLARI VE VERİ TABANI OLUŞTUMA

19 Şubat 2016 Cuma

Kullanım Kılavuzu Ekim 2017

INTERRA KONSIYAJ SERVER KULLANIM KLAVUZU

Makonet BlueCRS. Sistem Özellikleri ve Ekran Görüntüleri Makonet Bilgisayar Ltd. Şti.

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

Yaşanmış Tecrübe Paylaşımı Önce Test Et Sonra Kodla XP Pratiği

Sisteme giriş yapıldığında ana sayfa üzerinde işlem menüleri, Hızlı erişim butonları ve mail gönderim istatistikleri yer alır.

POWER BI. Power BI Bileşenleri: Power BI'daki İş Akışı

Transkript:

ANKARA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BLM 492 BİTİRME PROJESİ ROPORU Java Teknolojileri Kullanılarak Kan Bağış Web Uygulamasının Tasarlanması Teslim Eden: Ferid Mövsümov, 07290411 Proje Danışmanı: Prof. Dr. İman Askerzade Mayıs, 2012

Özet Bu proje kanın acil bir ihtiyaç olmaktan çıkıp, sürekli bir ihtiyaç haline geldiği dünyamızda kan bağışıyla ilgili işlemleri elektronik ortama taşıyarak insan hayatlarını kurtarmak amacıyla geliştirilmiştir. Sistem kan isteği bulunan kişiler ile kan bağışında bulunmak isteyen kişiler arasında bir köprü vazifesi görmektedir. Bu köprü fonksiyonu gerçekleştirilirken kan isteği bulunan kişiler ile kan bağışçıları arasında ev verimli şekilde bağlantı kurulması amaçlanmaktadır. Bu amaçla istekte bulunan kişinin semt bilgisi çok önemlidir çünkü bağışçılar öncelikle bu semtten olan kullanıcılar arasından seçileceklerdir. İlgili semtte uygun bağışçı bulunamadığı durumda daha yakın semtlerde bağışçı arama işlemi sürdürülecektir. Sistemde üç tip kullanıcı bulunmaktadır. Kullanıcı tiplerini yetkilerine göre sıralarsak, bunlar sistem yöneticisi, doktorlar ve kullanıcılardır. Sistemin amaçları arasında kullanıcıları kan bağış süreci ile ilgili olarak bilgilendirmek de vardır. Bu amaçla sitede kan bağışı, kanın yapısı, sıkça sorulan sorular başlıkları altında bölümler oluşturulmuştur.

İçindekiler 1. Giriş... 4 2. Kullanılan Teknolojiler ve Geliştirme Araçları... 5 2.1 Kullanılan Teknolojiler... 5 2.1.1 Spring Çatısı (Framework)... 5 2.1.2 ExtJs Javascript Kütüphanesi... 5 2.1.3 Hibernate... 6 2.2 Geliştirme Araçları... 7 3. Sistemin İşleyişi... 8 3.1 Kullanım senaryosu modeline ilişkin açıklama... 8 4. Veritabanı Tasarımı... 10 4.1 Veritabanı Tasarlanırken Dikkat Edilen Hususlar... 12 5. Projede kullanılan Tasarım Şablonu... 14 5.1 Spring MVC... 14 6. Proje Yapısı... 17 6.1 Java Dosyaları... 21 7. Sonuç... 25 8. Referanslar... 26 9. Ekler... 27 3

1. Giriş Bu belge projeyi okura çeşitli bölümler halinde anlatmayı amaçlamaktadır. Proje tasarımına veritabanıyla başlanmıştır. Gerekli tablolar sistem analizler sonucu belirlenmiş ve oluşturulmuştur. Veritabanında oluşturulmuş olan tabloların her biri ayrı ayrı ele alınarak okura aktarılmaya çalışılmıştır. Kan Bağış web uygulamasında kullanılan teknolojiler Java tabanlı teknolojilerdir. Bunlar spring çatısı, hibernate teknolojileridir. Projenin arayüzü ise ExtJs javascript kütüphanesi kullanılarak tasarlanmıştır. Bütün bu teknolojilerin tercih sebebleri, projenin hangi kısımlarında kullandıkları gibi bilgiler ayrıntılı olarak anlatılmıştır. Projenin, benzer proje geliştirecek kişilere örnek oluşturabilmesi amacıyla projenin kaynak kodları, Google şirketinin sunmakta olduğu Google Code servisi kullanılarak çevrimiçi ortamda açık kaynaklı proje olarak yayınlanmıştır. Projenin kullanıcı ara yüzü tasarlanırken hangi prensipler çerçevesinde tasarlandığı ve kullanıcıya ne gibi kolaylıklar sağladığı ayrıntılı bir şekilde ele alınan konular arasındadır. Uygulamanın okur tarafından daha iyi anlaşılabilmesi ve gelişim aşamasında geliştiricinin, projenin genel resmini görebilmesi amacıyla kullanım senaryosuna ilişkin görsel diyagramlar oluşturulmuş ve bu diyagramlar ayrıntılı bir şekilde anlatılmıştır. Uygulama geliştirilirken nesne yönelimli programlama paradigmasının yanında MVC tasarım şablonu da kullanılmıştır. Bu tasarım şablonu ve tercih sebebi belgede ayrıntılı olarak anlatılmıştır. 4

2. Kullanılan Teknolojiler ve Geliştirme Araçları Bu bölümde projede kullanılan teknolojiler ve bu teknolojilerin seçilme nedenleri açıklanmıştır. Bölümde ele alınan bir diğer konu seçilen geliştirme araçları ve bu geliştirme araçlarının tercih edilme sebepleridir. 2.1 Kullanılan Teknolojiler Projede kullanılacak teknolojiler belirlenirken hem geliştirme aşamasını kolaylaştıracak hem de büyük sayıda kullanıcıların en az bekleme süresiyle işlemlerini kolay anlaşılabilir bir ara yüz yardımıyla gerçekleştirebilecekleri teknolojiler seçilmiştir. 2.1.1 Spring Çatısı (Framework) Projede spring çatısının tercih edilmesinin sebebi spring çatısı altında yer alan spring mvc isimli web modülünün ve spring çekirdeğinin kurumsal ve dinamik web projelerinde geliştiriciler ve sistem kullanıcıları açısından sağladığı kolaylıklardır. Spring mvc mimarisinin geliştirciler açısından sağladığı kolaylık projemizin görsellik ve iş mantığı gibi kısımlarını birbirinden ayrı olarak geliştirilebilmesidir.. 2.1.2 ExtJs Javascript Kütüphanesi Projenin kullanıcı arayüzü tasarlanırken ExtJs kütüphanesi kullanılmasına karar verilmiştir. ExtJS JavaScript dilinde hazırlanmış ve kodlamasında da JavaScript kodları kullanılan web uygulamar için arayüz tasarım çatısıdır. Günümüzde artık masaüstü uygulamarının yerini giderek web uygulamarı almaktadır. Masaüstü uygulamalarda karşılaştığımız esnek görüntüyü basit bir JavaScript, CSS vs. aracılığıyla oluşturmaya kalkarsak bu bizim bayağı bir zamanımızı alacaktır. ExtJs kütüphanesi bu zorlukları aradan kaldırmakta en büyük yardımcımız, onun aracılığıyla esnek ve Ajax gömülü büyük form sayfalarını artık çok kısa bir sürede yapılabilmektedir. 5

ExtJs'le tasarlanmış form sayfasını diğer form sayfalarından ayıran en önemli özellik ise ExtJs'le tasarlanmış olan sayfaların çok ince ve güzel bir görüntüye sahip olmasıdır. Yazılımcı açısından olan üstünlükleri daha önemli aslında. ExtJs bir JavaScript kütüphanesi olduğundan yazılımcı çok kısa bir sürede rahat ExtJs kullanmayı başarabilmektedir. ExtJs kütüphanesinin en büyük avantajı Ajax teknolojisini içerisinde barındırmasıdır. Böylece hem sunucuya düşen yükün azaltılması hem de son kullanıcının bekleme süresinin en aza indirilmesi amaçlanmıştır. ExtJs in tercih edilmesinin diğer bir sebebi de kullanıcının gözüne hitap eden sayfalar tasarlanması için gerekli olan her türlü bileşeni içerisinde barındırmasıdır. 2.1.3 Hibernate Hibernate, Java platformunda yazılmış bir ORM (Object/Relational Mapping) aracıdır. ORM, nesne odaklı (object oriented) dillerdeki nesnelerin, ilişkisel veritabanlarındaki (relational databases) kayıtlara nasıl karşılık geldiğini yürüten bir teknolojidir. NHibernate adında.net çatısı için yeniden yazılmış bir türevi bulunur. Hibernate gibi ORM araçlarıyla, bir nesneyi veritabanına kaydetmek, yeni halini güncellemek ve sorgulama yapmak düz SQL bağlantılarına göre çok kolaydır. Örneğin, JDBC ile veritabanına bir kayıt eklemek için şuna benzer bir kod yazılır: stmt.executeupdate( "INSERT INTO KAHVE VALUES ('Colombian', 101, 7.99, 0, 0)"); Burada, "KAHVE" tablosuna bir kayıt eklenmekte. Böyle bir işlemi Hibernate ile yapmak için: session.saveorupdate(kahve); kahve, bildiğimiz düz bir java nesnesidir. Hibernate gibi ORM araçlarının en önemli faydası, kod yazımını kısaltmak veya kolaylaştırmaktan öte, yazılım bakımını kolaylaştırmasıdır. 6

Veritabanı temelli uygulamalarda, kodun 1/3 ü veritabanı erişimine yöneliktir. Veritabanındaki bir kolonunun tipinin değişmesi, yeni bir kolon eklenmesi gibi değişiklikler, bütün veri erişim kodunu tekrar gözden geçirmeyi gerektirir. Hibernate ile bu gözden geçirmeden çok yüksek oranda tasarruf edilir. Hibernate kullanılan yazılımlarda, veritabanındaki değişikliklerde yapılması gereken sadece nesnelerle tabloların birbirine nasıl eşleştirildiğinin (mapping) gözden geçirilmesidir. 2.2 Geliştirme Araçları Kan Bağış Web Uygulaması Eclipse IDE geliştirme ortamı kullanılarak geliştirilmiştir. Eclipse IDE geliştirme ortamı esnek yapısıyla yazılımcıya büyük kolaylıklar sağladığından tercih edilmiştir. Eclipse IDE geliştiriciye projeye bağlı olarak geliştirme ortamını özelleştirme imkanı sunar. Bu özelleştirmeler çeşitli eklentiler eklenerek yapılmaktadır. Eclipse IDE için her ihtiyaca uygun çok fazla sayıda eklenti seçeneği bulunmaktadır. Eclipse IDE yi ön plana çıkaran bir diğer özellik ise bu geliştirme ortamının tamamen ücretsiz olmasıdır. Veritabanı tasarımı yapılırken ise MySql Workbench isimli veritabanı tasarım aracı tercih edilmiştir. Aracın açık kaynaklı ve ücretsiz olması en önemli tercih sebebidir. 7

3. Sistemin İşleyişi Kan bağışı web uygulaması, kan bağışı yapmak isteyen kişilerin bunu en kolay şekilde elektronik ortamda gerçekleştirebilmesine olanak sağlamayı amaçlamaktadır. Sistemde süper yönetici, hastane yöneticisi, kan bağışçısı şeklinde yetkiler bulunmaktadır. Kullanıcı sisteme giriş yaptığında karşısına yetkisine bağlı olarak farklı ekranlar çıkar 3.1 Kullanım senaryosu modeline ilişkin açıklama Projenin iş akışı aşağıdaki diyagramda gösterilmiştir. Kan vermek isteyen bir kişi öncelikle kan bağış web uygulamasına bir tarayıcı vasıtasıyla giriş yapar. Web uygulamasına giren ziyaretçinin bağışçı statüsüne geçebilmesi için öncelikle sisteme kayıt yaptırması gerekmektedir. Kayıt işlemi zamanı kullanıcıdan isim, soy isim, adres, telefon numarası, kan grubu ve elektronik posta gibi bilgiler alınır ve tüm zorunlu alanlar eksiksiz doldurulduğu takdirde bağışçı sisteme kaydedilir. Şekil 1 Kullanım senaryosu modeli 8

Yeni bir doktor sisteme kaydolmak istediğinde karşısına çıkan kayıt ekranındaki bilgileri doldurur ve kaydının onaylanmasını bekler. Yeni bir doktorun kaydı yalnızca bağlı olduğu hastanenin baş hekimi tarafından onaylanabilecektir. Hastane kaydetme işlemi ise sistem yöneticisiyle iletişime geçilerek yapılacaktır. Gerekli bilgiler kayıt formunda doldurulduktan sonra uygun doğrulama işlemi ile hastane kaydı onaylanacaktır. Bir hastanın kan ihtiyacı durumunda doktor sisteme giriş yaparak sisteme kan isteği ile ilgili kan grubu gibi bilgileri girer. Bu aşamadan sonra o hastanenin bulunduğu semtte yaşayan sisteme kayıtlı, aynı kan grubuna sahip kullanıcılara sms ve eposta yoluyla istek olduğuna dair bildirim gönderilir. İstek gönderilirken bağışçının en son kan verme tarihi vb. önemli bilgiler dikkate alınarak istek gönderilir. Bildirim alan bağışçılar bağış yapmak istediklerinde bildirim açan doktorun bulunduğu hastaneyle iletişime geçerek, direk sistem üzerinden isteğe yanıt vererek veya direk ihtiyaç olan hastaneye giderek bağış yapmak istediklerini bildireceklerdir. Uygun kanın elde edilmesi durumunda doktor isteğin karşılandığına dair sisteme giriş yapar ve isteği kapatır bu durumda daha önce istek gönderilmiş bağışçılara isteğin karşılandığına dair bildirim iletilir. Bütün bildirim ve onaylama işlemleri uygulama üzerinden, eposta ile yapılabilmektedir. 9

4. Veritabanı Tasarımı Kan Bağış Web uygulamasında veritabanı olarak mysql veritabanı kullanılması tercih edilmiştir. Veritabanını yönetmek için ise mysql Workbench isimli araç tercih edilmiştir. Veritabanında bulunan tablolar aşağıdaki gibidir. Bunların her birini ayrı ayrı açıklayalım: Şekil 2 Veritabanı Tabloları Kisiler: Kişiler tablosu yetkisine bakılmaksızın her türlü kullanıcının sisteme giriş yapabilmesi için kullanılacak alanlardan oluşmaktadır. Her bir kişinin benzersiz bir id değeri olacaktır. Bunun dışında her bir kullanıcının kullanıcı adı olacaktır. Kullanıcı adı kişinin eposta adresiyle aynı olacaktır. Burada kullanıcı adı olarak eposta kullanılmasının en önemli nedeni kullanıcılar belli bir zaman boyunca web sitesine girmediklerinde, genellikle seçtikleri kullanıcı adını unuturlar. Bunun aksine kullanıcılar epostalarının ne olduğunu unutmazlar. Bu nedenle kullanıcı adı olarak kullanıcının epostası tercih edilmiştir. Tabloda bulunan diğer alanlar kullanıcı şifresi ve rolid dir. Her bir kullanıcının yetkisi farklıdır. Dolayısıyla tablomuzda bir kullanıcının hangi yetkilere sahip olduğunu belirtmek amacıyla rolid alanı kullanılmaktadır. 10

rolid değişkeni foreign key ilişkisiyle RolOzellik tablosundaki rid değeriyle ilişkilidir. Bu tablolar arasında ayrıca 1:N ilişki bulunmaktadır. Bunun sebebi Bir kullanıcının sadece bir role sahip olması ancak bir rolde birden fazla kullanıcı bulunabilmesidir. RolOzellik: Bu tablo, uygulama kullanıcılarını farklı yetkilerle yetkilendirmek amacıyla kullanılmaktadır. rid ve Ozellik olmak üzere tabloda iki alan bulunmaktadır. Kullanıcı Tablosuyla ilişkilidir. Bu ilişki kullanıcı tablosu anlatılırken açıklanmıştır. KanBagiscisi: Bu tablo veritabanında bulunan en fazla alanlı tablolardan bir tanesidir. Tablonun amacı kan bağışında bulunmak isteyen kişilerle ilgili her türlü bilginin tutulmasıdır. Kullanıcının adı ve soyadı, isimsoyisim isimli alanda beraber tutulmaktadır. Kullanıcının adres bilgisi adres isimli alanda tutulmaktadır. Kullanıcıya kısa mesaj göndermek veya acil durumlarda kullanıcıyla irtibata geçilebilmesi amacıyla tabloda kullanıcının telefon numarası telefonnumarası isimli alanda tutulmaktadır. Tabloda bağışçılarla ilgili tutulan en önemli bilgilerden bir tanesi de bağış yapacak kişinin kan grubudur. Çünkü bir kan isteği yapıldığında kan grubu uyuşan kişilere istek konusunda bildirim yapılmalıdır. Bu bilgi kangrubuid isimli alanda tutulmaktadır. Bu alan Kangruplari isimli tablodaki kid değeriyle foreign key ilişkisi içerisindedir. Kişinin bağlı olduğu hastane bilgileri de tabloda tutulmaktadır. Kişinin bağlı olduğu hastane bilgileri hastaneid isimli alanda tutulmaktadır. Kişiler kan bağışında bulunduktan sonra belli bir müddet boyunca kan bağışında bulunamayacaklarından son kan bağış tarihinin veri tabanında tutulması önem taşımaktadır. Bu amaçla sonkanbagistarihi isimli alanda kullanıcının son kan bağışı yaptığı tarihin bilgisi tutulmaktadır. Bağışçının yaşadığı semt veritabanında tutulan bir diğer özelliktir. Bu özellik sayesinde bir semtte kan ihtiyacı oluşacağı zaman öncelikle o semtte ikamet eden kişilere ulaşılacaktır. Bu amaçla semtid isimli alan semt isimli tablodaki semtid değeriyle foreign key ilişkisi içerisindedir. Bir kullanıcı bir semtte yaşayabilir ancak bir semtte birden çok bağışçı ikamet edebileceğinden tablolar arasında 1:N ilşkisi vardır. Sistemdeki duyuruların, kan isteklerinin kullanıcıya ulaştırılması amacıyla kullanıcının epostası email isimli alanda tutulmaktadır. 11

HastaneBilgileri: Doktorlar hastaneler aracılığıyla sisteme kayıt olacağından hastane bilgilerinin sistemde tutulması önemlidir. HastaneBilgileri isimli tabloda her bir hastanenin benzersiz id değeri tutulmaktadır. Hastanenin isim, adres,telefon numarası,baş hekimi gibi bilgileri bu tabloda tutulmaktadır. KanGrupları: Bu tablo kan gruplarını tutmak amacıyla oluşturulmuştur. Daha önce KanBagiscisi tablosu açıklanırken bu tablo ile arasındaki ilişkiden bahsedilmiştir. Semt, İlceler ve İller: Bu tablolar, kan bağışçılarının ikamet ettiği il, şehir ve semt bilgilerini tutmak, kullanıcılar üzerinde yaşadığı ile, ilçeye veya semte bağlı olarak işlemler gerçekleştirmek amacıyla kullanılmak üzere oluşturulmuştur. kanistekleri: Bu tablo kan istekleriyle ilgili bilgileri tutmak amacıyla oluşturulmuştur. Her isteğin benzersiz bir id değeri bulunmaktadır. İsteğin sisteme koyulduğu tarih bilgisini tutmak amacıyla koyuldugutarih isimli alanda koyulduğu oluşturulma tarihi bilgisi tutulmaktadır. İstekle ilgili herhangi bir ayrıntının yer alması amacıyla isteknotu isimli alan kullanılacaktır. Daha sonra sistemle ilgili istatistiksel bilgiler oluşturulmak istenirse gerek duyulacağı için kaldirildigitarih alanı tabloda bulunmaktadır. İsteği oluşturan doktorun bağlı olduğu hastane bilgisini tutmak amacıyla hastaneid isimli alan kullanılmıştır. Hastanın kan grubu ve kan isteğinin aktif kalacağı süre tabloda tutulan diğer önemli bilgilerdir. Kan bağışçıcı ile kan istekleri arasında N:M bir ilişki bulunmaktadır. Bunun anlamı bir kan bağışçısının birden çok istek alabileceği ve bir isteğin de aynı şekilde birden fazla bağışçı tarafından karşılanabileceğidir. 4.1 Veritabanı Tasarlanırken Dikkat Edilen Hususlar Veritabanı KanBagiscisi, HastaneBilgileri vb. tablolardan oluşmaktadır bu tablolar bütün iş akışını içerecek şekilde oluşturulmuştur. Kan İstekleri ve KanBagiscisi veritabanının en önemli kısımlarıdır ve 12

bu tablolar arasında m:n ilişkisi vardır ki, bu da belli bir grup insanla özellikle acil kan isteklerinde kullanılabilecek ve kontroller tarafıyla bir arada enteraktif bir bildirim yayınlanması için kullanılacaktır. Kan istekleri daha çok semt olarak uygulamada yerleştirilecektir ve genelde belli bir semte hitap edecektir. Bu kan istekleri kan bağışçılarının bağlı olduğu semtler göz önünde bulunarak hep belli bir kısma yönlendirilecek. Genelde iş akışı hastane tarafında kontrol edilecek ve baş hekim bu işleri yönetecektir. Kan istekleri oluşturulurken hastanın kan grubu vurgulanmaktadır. Bu gerekebilecek kan gruplarını tayin etmek açısından ilave edilmiştir. Enteraktif duyuru, haber alışverişi için, telefon numarası (belli bir kitleye sms ile kan isteğinde bulunmak için örneğin), eposta gibi bilgiler de adresten ilave veritabanında tutulmaktadır. Bir kan isteğinin ne kadar acil olduğunu süre ve bölgesel olarak kan isteklerinde belirtilecektir. Bundan başka kan isteklerini son üç ayda kan bağışında bulunanlara göndermemek için kan bağışçısının son kan verdiği tarih de veritabanında tutulmaktadır. Veritabanı bu ve diğer birçok unsur göz önünde tutularak tasarlanmış ve çeşitli durumlarda veritabanından nasıl faydalanılacağı düşünülmüştür 13

5. Projede kullanılan Tasarım Şablonu Projede MVC (Model-View-Controller) tasarım şablonu kullanılmıştır. MVC yapısında geliştirilen projeler, kullanıcı ara yüzü ile veri modeli adını verdiğimiz programın ana işlevselliğini yerine getiren bölümün birbirinden ayrılmasını sağlamakta ve bu şekilde geliştirilen proje bölümleri, birbirinden bağımsız olarak tasarlanabilmektedir. MVC tasarım şablonu sistemin tasarımını ve iş mantığını birbirinden ayırma özelliği sayesinde tasarımcılarla programcıların birbirinden bağımsız olarak, Hiçbiri bir diğerinin işine müdahale etmeden proje üzerinde çalışabilmektedirler. Böylece günümüzde yazılım projelerinin olmazsa olmazı haline gelmiş olan takım çalışması kavramı daha da kolaylaşmaktadır. MVC tasarım şablonunun işleyişi aşağıdaki resimde gösterilmiştir. Şekil 3 MVC Tasarım Şablonu 5.1 Spring MVC Kan Bağış Web uygulamasında mvc tasarım şablonunun uygulanabilmesi amacıyla spring çatısının, mvc modülü kullanılmıştır. Spring mvc, Spring çatısının web bileşenidir. Spring mvc güçlü web uygulamaları geliştirmek için birçok fonksiyonellik sunar. 14

Spring mvc framework'ü tasarlanırken yapıyı oluşturan her bir parçanın yüksek derecede yapılandırılabilir olmasına dikkat edilmiştir. Ayrıca Spring diğer popüler web çatılarıyla ( Struts, WebWork, Java Server Faces ve Tapestry) entegre edilebilmektedir. Spring'in bir diğer güçlü özelliği de kullanıcıya görüntü sunmak için servlet ve jsp kullanma zorunluluğunun olmamasıdır. Velocity, Freemarker, Excel veya Pdf gibi görüntü sunma teknolojileri de kullanılabilmektedir. Bu çatıyı kullanırken çatının sunduğu herhangi ara yüzü implemente etmek zorunluluğunuz yoktur. Spring mvc çatısı diğer mvc çatıları gibi istek bazlı çalışmaktadır. Burada merkezi bir servlet var ve bu servlet gelen istekleri controller'lere yönlendirmektedir. DispatcherServlet Spring ioc container ile tamamen entegredir bu sayede spring'in sunmuş olduğu bütün özellikleri kullanma imkanımız olmaktadır. Spring mvc 3,0 daki bir isteğin yaşam döngüsü aşağıdaki adımlardan oluşmaktadır: 1. İstemci sunucuya http tipinde bir istek gönderir. 2. Gelen istek Front Controller (DispatcherServlet) tarafından karşılanır öncelikle ve uygun Handler Mapping'leri bulmaya çalışır. 3. Handler Mapping'lerin yardımıyla DispatcherServlet isteği uygun controller'e gönderir. 4. Controller isteği işlemeye çalışır ve FrontController'e ModelandView nesnesini döndürür. 5. FrontController bu gönderilen nesneyi View Resolver kullanarak çözümler ve kulanıcıya sunulmak üzere bir görüntü oluşturur. 6. Daha sonra oluşturulan sayfa kullanıcıya sunulur. 15

Spring 3.0 Özellikleri Spring 3.0 Java 5'i desteklemektedir. Bu bize annotation bazlı yapılandırma yapma özelliği sunmaktadır. Ayrıca Java 5'in bir çok özelliği burada kullanılabilmektedir. Yeni expression dili olan Spring Expression Language SpEL kullanıcılara sunulmuştur. Spring 3.0 REST web servislerini desteklemektedir. Veri formatlama büyük derecede kolaylaştırılmıştır. Bunun için bazı annotation'lar oluşturulmuştur.örneğin zaman göstermek istiyoruz sayfamızda uygun formatı sadece @DateFimeFormat(iso=ISO.DATE) annotation'unu kullanarak kolaylıkla kullanıcıya sunabiliriz. Spring 3.0 ile birlikte JPA 2.0 desteklenmeye başlamıştır. 16

6. Proje Yapısı Proje yapısı aşağıdaki resimde gösterilmiştir. Burada bulunan her bir dosyayı ayrı ayrı açıklayalım. Şekil 4 Proje Yapısı web.xml : Bu dosya proje açısından çok önemlidir. Proje ile ilgili bütün önemli bilgiler bu dosyada bulunmaktadır. Dosyanın içerisinde bulunan önemli tanımlamalar: Aşağıda gen isimli bir DispatcherServlet tanımlanmıştır. DispatcherServlet spring çatısının sunmakta olduğu bir servletdir. Bu 17

servlet gelen isteklerin hangi servlet e yönlendirileceğini ve isteklerin hangi tarz uzantıya sahip olacağını açıklamaktadır. Gen isimli servlet /gen/* formatındaki url leri karşılayacaktır. Gen servletinin içeriği gen-servlet.xml isimli dosyada tanımlıdır. <servlet> <servlet-name>gen</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servletclass> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/spring-servlets/gen-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>gen</servlet-name> <url-pattern>/gen/*</url-pattern> </servlet-mapping> Aşağıda aynı şekilde doktor, admin, kullanıcı gibi servletler tanımlanmıştır bunların her biri farklı biçimlerde url isteklerini karşılama amacını taşımaktadırlar. Admin isimli servlet /administrator/* şeklindeki istekleri karşılayacaktır. Doktor isimli servlet ise /doktor/* şeklindeki istekleri karşılayacaktır. Bunların dışında bir de kullanıcı sisteme giriş yaptıktan sonra kullanıcı sayfasındaki /kullanıcı/* şeklindeki istekleri karşılayacak olan kullanıcı isimli servlet bulunmaktadır. <servlet> <servlet-name>admin</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/spring-servlets/admin-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>admin</servlet-name> <url-pattern>/administrator/*</url-pattern> 18

</servlet-mapping> Web uygulaması ilk açıldığında gösterilecek ilk sayfayı belirtmek amacıyla <welcome-file-list> isimli belirteç kullanılmıştır. Burada bizim açılış sayfamızın index.jsp olduğu belirtilmiştir. <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> Sayfalarımızın aslında.jsp uzantılı olmasına rağmen istediğimiz taktirde kullanıcıya sayfalarımızın.html uzantılı sayfalar olduğunu gösterebiliriz. Bu amaçla aşağıdaki kodları web.xml dosyasına eklemek gerekmektedir. Örneğin index.jsp sayfasına index.html şeklinde istek gönderebiliriz. <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> gen-servlet.xml: Bu dosya, web.xml isimli dosya içerisinde tanımlı olan gen isimli servlet in içeriğinin bulunduğu dosyadır. Bu dosya içerisindeki önemli kısımları tek tek açıklayalım. Aşağıda gösterilen kod projede mvc belirteçlerinin kullanılacağını belirtmek amacıyla yazılmıştır. <mvc:annotation-driven /> Aşağıda gösterilen kod satırı hangi java paketlerinin taranması gerektiğini belirtmektedir. View paketi içerisinde isteklerin iş mantığı kısmını halledeceğimiz için burada @Controller belirteciyle belirtilmiş java sınıfları bulunmaktadır. Controller sınıfları ileride daha ayrıntılı şekilde ele alınacaktır. <context:component-scan base-package="view" /> gen-servlet.xml içerisinde bu servletin karşılayacağıistekler için kullanıcıya sunacağı sayfaları nerede araması gerektiğine dair kodlar aşağıda gösterilmiştir. Burada /WEB-INF/view/gen/ dizini altında.jsp 19

uzantılı dosyaların kullanıcıya gösterilecek sayfalar olduğu belirtilmiştir. Burada prefix ve suffix isimli, özelliklerin kullanımı önemlidir. <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="viewclass"> <value>org.springframework.web.servlet.view.jstlview</value> </property> <property name="prefix"> <value>/web-inf/view/gen/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> Aynı şekilde doktor, admin ve kullanıcı servletleri de benzer içeriklere sahip olduklarından bunların her biri ayrı ayrı açıklanmamıştır. WEB-INF dizini altında bulunan diğer önemli klasör lib klasörüdür. Bu klasörün WEB-INF dizini altında bulunması önemlidir. Bu klasör projemizde kullanılan kütüphanelerin kullanılabilmesi için gerekli.jar uzantılı dosyalar içermektedir. Bu.jar dosyaları arasında spring çatısından faydalanabilmemiz için gereken dosyalar, hibernate kullanabilmemiz için gereken dosyalar vb. bulunmaktadır. WEB-INF dizini altında bulunan bir diğer klasör ise spring-context isimli klasördür. Bu klasörün yeri web.xml içerisinde tanımlanmıştır. Bu klasörün içerisinde applicationcontext.xml isimli dosya bulunmaktadır. Bu dosyanın içerisinde projemizde her yerde kullanılabilecek global beanler tanımlanmıştır. Kan bağış uygulamasının kök dizini WebContent isimli dizindir. Web sitesinde kullanılan bütün içerikler bu dizinin altında klasörler içerisinde bulunmaktadır. Şimdi tek tek bu klasörleri inceleyelim. 20

images: Bu klasör projede kullanılan her türlü görsel öğeyi içermektedir. Banner, buton resimleri, logo gibi görseller bu klasör içerisinde tutulmaktadır. js: Bu klasör web sitemizde görsel olarak daha zengin bir ara yüz sunmak amacıyla kullanılan javascript kodlarını içermektedir. resources: Bu klasör projemizde kullanıcıya gösterilmek amacıyla kullanılan static içerikleri barındırmaktadır. Klasör altında static isminde başka bir klasör bulunmaktadır. Static isimli klasörün içerisinde static.html uzantılı sayfalar bulunmaktadır. scripts: Bu klasör altında extjs javascript kütüphanesinin desteklenmesi amacıyla kullanılan ext-3.3.1 isimli klasör bulunmaktadır. Bu klasör extjs kütüphanesidir. ExtJs kütüphanesiyle ilgili ayrıntılı bilgi ayrıntılı olarak ele alınacaktır. styles: Bu klasör.css uzantılı dosyaları barındırmaktadır. Css dosyaları web sayfalarımızın tasarımıyla ilgili kodları içermektedirler. 6.1 Java Dosyaları Java dosyaları Java Resources altında, paketler şeklinde bulunmaktadır. Bu paketlerden önemli olanları aşağıda açıklanmıştır. model: Bu paket içerisinde pojolarımız bulunmaktadır. Pojo kavramı veritabanıyla ilişkili nesneleri belirtmek amacıyla kullanılan kavramdır. Burada çeşitli belirteçler vasıtasıyla bir sınıfın pojo olduğu belitilir. Aşağıda bir pojo örneği gösterilmiştir. Burada @Entity belirteci sınıfın bir pojo olduğunu belirtmek amacıyla kullanılmıştır. @Table isimli belirteç vasıtasıyla sınıfın veritabanındaki hangi tablo ile ilişkili olduğu belirtilmiştir. @Column belirteci değişkenin tablodaki hangi sütunla ilşkili olduğunu belirtmektedir. @Id isimli belirteç hangi değişkenin id olduğunu göstermektedir. @Id belirtecinin olduğu değişken için ayrıca @GeneratedValue belirteci kullanılmıştır. Bu belirteç id için oluşturulacak 21

değerlerin otomatik olarak otomatik artım tarzında bir özellikle atanacağını belirtmektedir. @Entity @Table(name="CONTACTS") public class Contact { @Id @Column(name="ID") @GeneratedValue private Integer id; @Column(name="FIRSTNAME") private String firstname; @Column(name="LASTNAME") private String lastname; @Column(name="EMAIL") private String email; @Column(name="TELEPHONE") private String telephone; } Yukarıda gösterilen pojo nun veritabanında temsil ettiği tablo aşağıdaki gibidir. Şekil 5 Örnek Veritabanı Tablosu 22

dao: Projede bulunan bir dğer önemli paket ise dao paketidir. Dao kelimesi veri erişim nesnesi anlamına gelmektedir. Dao katmanı veritabanı bağlantılarını gerçekleştirmektedir. Deneyimli yazılımcılar tarafından her bir dao sınıfının bir dao interface i tarafından implemente edilmesi önerilmektedir. view: Bu paket kullanıcı isteklerini karşılayacak controller sınıflarını içermektedir. Controller sınıflarının controller olduğunu belirtmek amacıyla sınıfın başında @Controller belirteci kullanılmaktadır. Metodların başında ise @RequestMapping belirteci kullanılmıştır. Kayit isimli metodun başında kullanılmış olan belirteç /kayit şeklindeki url isteklerini karşılayacağını belirtmektedir. Bu metod ModelAndView nesnesi döndürmektedir. Bu nesne kayit.jsp isimli sayfayı kullanıcıya gösterecektir. Aynı şekilde testing isimli metod ise anasayfa.jsp isimli sayfayı kullanıcıya gösterecektir. /anasayfa şeklinde bir istek geldiğinde. @Controller public class GenView { @RequestMapping(value="/kayit") public ModelAndView kayit(){ return new ModelAndView("kayit"); } @RequestMapping(value="/anasayfa") public ModelAndView testing(){ return new ModelAndView("anasayfa"); } } 23

service: Bu paketin içinde bulunan sınıfların başında @Service belirteci bulunur ve bu belirteç sınıfların servis sınıfı olduğunu belirtir. Servis sınıflarının amacı dao nesneleri ile pojolar arasında bir katman oluşturmaktır. Böylece dao kısmında sadece veritabanı bağlantılarına servis katmanındaysa iş mantığına odaklanarak kodun okunabilirliliğini arttırmış oluruz. Aşağıdaki resimde bu yapı gösterilmiştir. Şekil 6 - Dao, servis ve controller arasındaki ilişki., 24

7. Sonuç Projenin kaynak kodları ileride başkaları tarafından da kullanılabilmesi, edinilen tecrübelerin başkalarına da aktarılması ve benzer proje yapacak insanların örnek olarak faydalanabilmesi amacıyla, proje Google şirketinin sunduğu Google Code isimli servis vasıtasıyla Google sunucularına yerleştirilmiştir. Bu servisin kullanılma amaçlarından bir tanesi de kaynak kod yönetim mekanizması kullanılarak bu mekanizmanın en iyi şekilde anlaşılmasının sağlanmasıdır. Bu sistem kullanılarak projenin takım halinde geliştirilmesi mümkün kılınmaktadır. Kan Bağış Web Uygulamasının daha fazla kullanıcı çekebilmesi amacıyla proje ileride mobil uygulama şeklinde geliştirilebilir. Projede yönetici tarafından elle yapılan en yakın semt bulma işlemi, en yakın yer bulma algoritmaları kullanılarak program tarafından otomatik bir şekilde bulunması sağlanabilir. Böylece sistem daha da kullanışlı olur. Sistemde kan bağışçılarına her bağış için puan verilerek, belli bir puan biriktikten sonra bağışçıya tişört gibi küçük hediyeler verilebilir ve böylece kan bağışına teşvik arttırılmış olur. Projede her türlü yardım ve desteğini benden esirgemeyen danışmanım İman Askerzade ye teşekkür ediyorum. 25

8. Referanslar [1] http://www.springsource.com Spring Source Web Sitesi [2] docs.sencha.com/ext-js/3-4 - ExtJS 3.4 Dökümantasyonu [3] http://www.hibernate.org Hibernate Topluluğu Resmi Sitesi [4] http://www.eclipse.org Eclipse Topluluk Web Sitesi 26

9. Ekler Ana Sayfa Sıkça Sorulan Sorular 27

Kayıt Penceresi Admin Sayfası 28