<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Javacı Net</title>
	<atom:link href="http://www.javaci.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javaci.net</link>
	<description>Bir başka WordPress blogu.</description>
	<lastBuildDate>Sat, 23 Jan 2010 21:38:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JSF Richfaces Hibernate Spring Örnek Uygulaması</title>
		<link>http://www.javaci.net/2010/01/jsf-richfaces-hibernate-spring-ornek-uygulamasi/</link>
		<comments>http://www.javaci.net/2010/01/jsf-richfaces-hibernate-spring-ornek-uygulamasi/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 21:09:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://www.javaci.net/?p=1</guid>
		<description><![CDATA[Bu yazımızda JSF Richfaces Hibernate Spring teknolojilerini kullanarak bir ToDo uygulaması yapacağız. Bu uygulamada yapılacaklar listesi tutulacak ve bu liste arasında arama yapabileceğiz. Bu yapacağımız uygulamanın en güzel özelliği ise herşeyi AJAX ile yapıyor olmamız.
Projeye başlamadan önce kullanılan teknolojiler üzerinden geçmemiz iyi olacak.
JSF : Java&#8217;nın component tabanlı web geliştirme kütüphanesi. MyFaces 1.2 versiyonu kullanılıyor.
Richfaces : [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-318" title="duke-dance" src="http://www.javaci.net/wp-content/uploads/2008/11/duke-dance.gif" alt="duke-dance" width="111" height="91" align="left" style="margin:10px"/>Bu yazımızda JSF Richfaces Hibernate Spring teknolojilerini kullanarak bir ToDo uygulaması yapacağız. Bu uygulamada yapılacaklar listesi tutulacak ve bu liste arasında arama yapabileceğiz. Bu yapacağımız uygulamanın en güzel özelliği ise herşeyi AJAX ile yapıyor olmamız.</p>
<p>Projeye başlamadan önce kullanılan teknolojiler üzerinden geçmemiz iyi olacak.</p>
<p><strong>JSF :</strong> Java&#8217;nın component tabanlı web geliştirme kütüphanesi. MyFaces 1.2 versiyonu kullanılıyor.<br />
<strong>Richfaces :</strong> Gene JSF implementasyonu olan bu kütüphane bize zengin AJAX desteği sunuyor. 3.2.2.SR1 versiyonu kullanılıyor.<br />
<strong>Hibernate :</strong> Hibernate ile birlikte Database işlemleri Obje tabanlı yapılmakta. 3.2.1.ga versiyonu kullanılıyor<br />
<strong>Spring :</strong> Spring benim olmaz ise olmaz kütüphanelerimden. Spring ile birlikte J2EE&#8217;nin tüm nimetlerinden bir Application Server&#8217;a(JBoss, Glassfish gibi) ihtiyacınız olmadan yararlanabilirsiniz. 2.5.1 versiyonu kullanılıyor.</p>
<p>Veritabanı olarak HsqlDB kullanmaktayım. Veritabanı &#8220;on the fly&#8221; yaratıldığı için her uygulamayı başlattığınızda eski datalar yok olacaktır. İsterseniz siz bunun yerine MySql kullanabilirsiniz.</p>
<p>Projeyi çalıştırmak için bilgisayarınızda Maven kurulu olması gerekiyor. Ama &#8220;Maven nedir?&#8221; diyorsanız <a href="http://www.javaci.net/2007/06/26/maven-2/" target="_blank">buradan</a> gerekli bilgiyi öğrenebilirsiniz.</p>
<p>Aşağıdan Todo Ekleme, Listeleme ve Arama sayfalarını görebilirsiniz<br />
<a href="http://www.javaci.net/wp-content/uploads/2008/11/1.jpg"><img class="aligncenter size-medium wp-image-315" title="TODO Ekleme" src="http://www.javaci.net/wp-content/uploads/2008/11/1-300x246.jpg" alt="" width="300" height="246" align="center" /></a></p>
<p><a href="http://www.javaci.net/wp-content/uploads/2008/11/2.jpg"><img class="aligncenter size-medium wp-image-316" title="2" src="http://www.javaci.net/wp-content/uploads/2008/11/2-300x63.jpg" alt="TODO Listeleme" width="300" height="63" align="center" /></a></p>
<p><a href="http://www.javaci.net/wp-content/uploads/2008/11/3.jpg"><img class="aligncenter size-medium wp-image-317" title="3" src="http://www.javaci.net/wp-content/uploads/2008/11/3-300x113.jpg" alt="TODO Arama" width="300" height="113" align="center" /></a></p>
<p>Projeyi çalıştırmak için önce proje kodunu indirin.</p>
<p><a href="http://www.javaci.net/wp-content/uploads/javacitodo.zip">Download</a></p>
<p>İndirme işlemini tamamladıktan sonra proje dosyalarını sıkıştırılmış dosyadan çıkartıp, o klasöre konsoldan giriş yapınız.<br />
Projeyi çalıştırmak için konsolda <strong>mvn jetty:run</strong> demeniz yeterli olacaktır. Gerisini Maven sizin için halledecektir.</p>
<p>Şimdi biraz da kodu inceleyelim.</p>
<p>1 tane model sınıfımız var. Veritabanı işlemlerimizi bu model sınıfı ile yapıyoruz.</p>
<pre name="code" class="java">package net.javaci.todo.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.Calendar;

import javax.persistence.*;

@Entity
public class Todo implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Basic
    private String title;

    @Basic
    @Lob
    private String description;

    @Basic
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date publishedDate;

    public Todo() {
        this.publishedDate = Calendar.getInstance().getTime();
    }

     public Todo(String title, String description) {
	this.title = title;
	this.description = description;
        this.publishedDate = Calendar.getInstance().getTime();
     }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getPublishedDate() {
        return publishedDate;
    }

    public void setPublishedDate(Date publishedDate) {
        this.publishedDate = publishedDate;
    }
}</pre>
<p>DAO(Data Access Object) sınıfımız sayesinde veritabanı üzerinde yapacağımız işlemleri belirliyoruz. Ayrıca DAO sayesinde ileride teknoloji değişikliği yapacaksak kolay entegre etmemizi sağlıyor. Mesela bir bu projede JPA(Java Persistence API) kullandık.</p>
<pre name="code" class="java">package net.javaci.todo.dao.jpa;

import org.springframework.stereotype.Repository;
import javax.persistence.Query;

import net.javaci.todo.domain.Todo;
import net.javaci.todo.dao.jpa.GenericDaoWithJpa;
import net.javaci.todo.dao.TodoDao;

import java.util.List;

@Repository
public class TodoDaoJpa extends GenericDaoWithJpa implements TodoDao {

    public List getAllTodo() {
        return this.loadAll();
    }

    public List findByTitle(String title) {
        Query query = entityManager.createQuery("Select t from Todo t where t.title like ?1");
	query.setParameter(1, title + "%");

	return query.getResultList();
    }

    public List findByDescription(String description) {
        Query query = entityManager.createQuery("Select t from Todo t where t.description like ?1");
	query.setParameter(1, description + "%");

	return query.getResultList();
    }
}</pre>
<p>JSF ve Spring ikilisinin diğer bir özellikleri ise bizi MVC(Model-View-Controller) pattern&#8217;ına zorlamasıdır. Yukarıda Model ve Controller&#8217;dan bahsettik. Şimdi ise View&#8217;den bahsedelim.</p>
<p>Her bir işlem için ayrı Backing Bean ekledim. Backing Bean&#8217;lerin özellikleri JSF web arayüzündeki işlemleri karşılamalarıdır. Bunu eğer .NET kullandıysanız web sayfası üzerindeki buttona işlem atamak için çift tıkladığınızda gelen sayfaya eştir.</p>
<p>Arama için gerekli olan Backing Bean&#8217;i aşağıda görebilirsiniz.</p>
<pre name="code" class="java">package net.javaci.todo.view;

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import net.javaci.todo.domain.Todo;
import net.javaci.todo.service.TodoService;

@Component("searchTodo")
@Scope("request")
public class SearchTodo implements Serializable{

    private Todo todo = new Todo();
    private List result;

    @Autowired
    private TodoService todoService;

    public Todo getTodo() {
        return todo;
    }

    public void setTodo(Todo todo) {
        this.todo = todo;
    }

    public List getResult() {
        return result;
    }

    public void setResult(List result) {
        this.result = result;
    }

    public String search() {
        Set s = new HashSet();
        if(todo != null) {
            if(!todo.getTitle().equals("")) {
                s.addAll(todoService.findByTitle(todo.getTitle()));
            }
            if(!todo.getDescription().equals("")) {
                s.addAll(todoService.findByDescription(todo.getDescription()));
            }
        }

        result = new ArrayList(s);
        return null;
    }
}</pre>
<p>Bu Backing Bean&#8217;e karşılık gelen JSF Web Arayüzünü de aşağıda görebilirsiniz.</p>
<pre lang="java"></pre>
<p>Yukarıda görüldüğü gibi <strong>searchTodo.search</strong> çağırımı ile <strong>searchTodo</strong> Backing Bean&#8217;i içerisindeki <strong>search</strong> methodu çağırılıyor. Çağırım işlemi tamamlandıktan sonra da <strong> todosearchresult</strong> datayı göstermek için yenileniyor.</p>
<p>Sonuç olarak Java ile kolay ve hızlı web siteleri geliştirelebilir. Eğer rol tabanlı kullanıcı kontrolü de eklemek istiyorsanız Spring Security kullanabilirsiniz. Bunu ileriki yazılarımda göreceksiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javaci.net/2010/01/jsf-richfaces-hibernate-spring-ornek-uygulamasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
