Pada tutorial kali ini kita akan membuat aplikasi berbasis web dengan Spring-Hibernate dengan menggunakan FrontEnd JSF 2.0 menggunakan Primeface, dan pada tutorial kali ini kita akan menggunakan Maven, sebelum memulai tutorial ada baiknya mempersiapkan tools dan teknologi yang akan digunakan
Tools dan Teknologi yang digunakan :
1. Eclipse 3.7 (Indigo)
2. Apache Tomcat 6 atau 7
3. PostgreSQL 9.0 (boleh diganti dengan database lain sesuai keinginan)
4. Hibernate 3.2.1
5. Spring 3.0.5
6. Apache Maven 2.x
Membuat Table Customer
CREATE TABLE customer
(
customer_id bigint NOT NULL,
customer_name character varying(50),
address character varying(50),
created_date timestamp without time zone,
created_by character varying(24),
last_updated timestamp without time zone,
last_updated_by character varying(24),
deleted smallint,
CONSTRAINT pk_customer PRIMARY KEY (customer_id)
)
WITH (
OIDS=TRUE
);
Sequence untuk autogenerate code
CREATE SEQUENCE customer_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 4
CACHE 1;
Project Struktur
Memulai project maven, pilih File -> New -> Project -> Maven -> Maven Project lalu pilih Next sehingga muncul sbb :
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>application</groupId>
<artifactId>application</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>application</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
</properties>
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
<repository>
<id>java.net.m2</id>
<name>java.net m2 repo</name>
<url>http://download.java.net/maven/2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.10</version>
</dependency>
<!-- Hibernate core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.7.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>3.0.0.ga</version>
</dependency>
<!-- Hibernate core library dependecy start -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<!-- Hibernate core library dependecy end -->
<!-- Hibernate query library dependecy start -->
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<!-- Hibernate query library dependecy end -->
<!-- POSTGRESSQL -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.4-701.jdbc4</version>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- JSF -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.4-b09</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.4-b09</version>
</dependency>
<!--<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.0-b13</version>
</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!-- PrimeFace -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<!--<version>2.2.1</version>-->
<version>3.0.M3</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>aristo</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>eggplant</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>humanity</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>glass-x</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>overcast</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>smoothness</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>pepper-grinder</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>mint-choc</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>sunny</artifactId>
<version>1.0.1</version>
</dependency>
<!-- el feature of EL 2.2 for tomcat-->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
<finalName>application</finalName>
</build>
</project>
Copy pom.xml tersebut diatas agar lib - lib yang dibutuhkan dapat didownload oleh maven, inilah salah satu fungsi maven mendaftarkan lib - lib yang dibutuhkan di pom.xml lalu maven yang akan mendownloadnya otomatis library yang didaftarkan ke komputer kita
Lalu ke step selanjutnya, buat file properties dengan nama db.properties dan DataSource.xml untuk koneksi ke database
jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/samz
jdbc.username=postgres
jdbc.password=postgres
File : DataSource.xml di src/main/resources/config/spring/beans
WEB-INF/classes/config/db.properties
Selesai membuat script koneksi selanjutnya buat model kelas dan hbm
File : Customer.java
package com.application.model;
import java.util.Date;
public class Customer{
public long customerId;
public String name;
public String address;
public Date createdDate;
//generate getter &setter
//klik kanan Source > Generate Getter and Setter, Select All lalu OK
}
File : Customer.hbm.xml
customer_id_seq
Daftarkan file hbm diatas tersebut di HibernateSessionFactory.xml (src/main/resources/config/spring/beans)
[
]
org.hibernate.dialect.PostgreSQLDialect
true
com/application/hibernate/Customer.hbm.xml
Yes it done,
Lalu sekarang kita buat Management Data Access(DAO) dimana file inilah yang akan berperan dalam mengatur data access atau query, segala query hibernate kita taro di DAO layer ini
Lets go!!!!
Pertama - tama kita buat interface dari DAO
File : CustomerDao.java (src/main/java/com/application/dao)
package com.application.dao;
import java.util.List;
import com.application.model.Customer;
public interface CustomerDao{
void addCustomer(Customer customer);
List<Customer> findAllCustomer();
}
Implementasikan interface DAO diatas, di file inilah kita akan membuat query
File : CustomerDaoImpl.java berada di folder src/main/java/com/application/dao
package com.application.dao;
import java.util.Date;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.application.model.Customer;
public class CustomerDaoImpl extends
HibernateDaoSupport implements CustomerDao{
public void addCustomer(Customer customer){
customer.setCreatedDate(new Date());
getHibernateTemplate().save(customer);
}
@SuppressWarnings("unchecked")
public List<customer> findAllCustomer(){
return getHibernateTemplate().find("from Customer");
}
}
CustomerService.java berada di folder src/main/java/com/application/service
package com.application.service;
import java.util.List;
import com.application.model.Customer;
public interface CustomerService{
void addCustomer(Customer customer);
List<Customer> findAllCustomer();
}
CustomerServiceImpl.java berada di folder src/main/java/com/application/service
package com.application.service;
import java.util.List;
import com.application.dao.CustomerDao;
import com.application.model.Customer;
public class CustomerServiceImpl implements CustomerService{
CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
public void addCustomer(Customer customer){
customerDao.addCustomer(customer);
}
public List<Customer> findAllCustomer(){
return customerDao.findAllCustomer();
}
}
Kenapa memakai service? salah satu gunanya untuk pengkapsulan DAO
Setelah itu buat Controller disinilah tempat untuk bisnis logic,
CustomerBean.java berada di folder src/main/java/com/application/beans
package com.application.beans;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import com.application.model.Customer;
import com.application.service.CustomerService;
public class CustomerBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3051005476848367530L;
// DI via Spring
CustomerService customerService;
public String name;
public String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
// get all customer data from database
public List<Customer> getCustomerList() {
List<Customer> customers = customerService.findAllCustomer();
if (customers.isEmpty()) {
customers = new ArrayList<Customer>();
}
return customers;
}
// redirect to form
public void listForm() {
FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null,
"/pages/customer/customerList?faces-redirect=true");
fc.renderResponse();
}
public void inputForm() {
FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null,
"/pages/customer/customerInput?faces-redirect=true");
fc.renderResponse();
}
// Tambah customer data ke database
public void addCustomers() {
Customer cust = new Customer();
cust.setName(getName());
cust.setAddress(getAddress());
customerService.addCustomer(cust);
clearForm();
FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null,
"/pages/customer/customerList?faces-redirect=true");
fc.renderResponse();
}
// clear form values
private void clearForm() {
setName("");
setAddress("");
}
}
Daftarkan Service dan Dao di CustomerBean.xml berada di folder src/main/resources/com/application/spring
Dan ini adalah viewnya untuk List
customerList.xhtml berada di folder src/main/webapp/pages/customer
Lalu kita ke Springnya buat file applicationContext.xml di folder WEB-INF
faces-config.xml berada di folder WEB-INF
org.springframework.web.jsf.el.SpringBeanFacesELResolver
config.messages
msg
customer
com.application.beans.CustomerBean
request
customerService
#{customerService}
Dan ini web.xml
Web Application
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
org.springframework.security.web.session.HttpSessionEventPublisher
org.springframework.web.util.Log4jConfigListener
com.sun.faces.expressionFactorycom.sun.el.ExpressionFactoryImpl
javax.faces.PROJECT_STAGEDevelopment
30
faces/pages/customer/customerList.xhtml
primefaces.THEMEaristo
Faces Servlet
javax.faces.webapp.FacesServlet
1
Resource Servlet
org.primefaces.resource.ResourceServlet
Resource Servlet
/primefaces_resource/*
Faces Servlet
/faces/*
Faces Servlet
*.jsf
Faces Servlet
*.faces
Faces Servlet
*.xhtml
contextConfigLocation/WEB-INF/applicationContext.xml
Download source code
disini
Kunjungi situs kami di
PT Samz Solution
Reference
http://www.mkyong.com