Latihan Spring
1. Siapkan folder lib untuk jarnya2. Buat database dengan nama latihan dan buat table sbb:
3. Buka Eclipse dan pilih file -> new project-> Dynamic Web Project4. Beri nama latihan_spring dan setting configurasi dengan cara click modify dan checklist zk
support.5. Klick kanan nama project pilih properties -> pilih tab Liblaries -> add External JARs..6. Klick kanan pilih Spring Tools dan Klick Add Spring Project Nature.7. Klick kanan, pilih new -> klick others -> pilih Spring beans Definition di Spring, dan buat
application-context.xml seperti berikut ini!
CREATE TABLE IF NOT EXISTS `events` (
`id` bigint(20) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
`start_date` date NOT NULL,
`duration` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost/latihan</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value></value> </property> </bean> <bean id="factory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="packagesToScan"> <list> <value>com.padicon.bean</value> </list> </property>
<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- Use the C3P0 connection pool provider -->
<prop key="hibernate.c3p0.min_size">10</prop><prop key="hibernate.c3p0.max_size">15</prop><prop key="hibernate.c3p0.timeout">5000</prop><prop key="hibernate.c3p0.max_statements">100000</prop><prop key="hibernate.c3p0.idle_test_period">3000</prop>
</props> </property> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="factory"/> </bean></beans>
8. Klick src dan pilih new package, buat paket com.padicon.bean9. Bua class Event di paket com.padicon.bean
package com.padicon.bean;
import java.io.Serializable;import java.util.Date;
import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;
@Entity@Table(name="events")public class Event implements Serializable {
@Id@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id; private int duration; private String name; private Date start_date;
public Event() { }
public Event(String name) { this.name = name; }
public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column () public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getStartDate() { return start_date; } public void setStartDate(Date startDate) { this.start_date = startDate; }
public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
10. Buat Class di paket com.padicon.dao
package com.padicon.dao;
import java.util.List;
import org.hibernate.SessionFactory;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public abstract class AbstractSpringDao extends HibernateDaoSupport {
public AbstractSpringDao() { } public void setSession(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);}
protected void saveOrUpdate(Object obj) { getHibernateTemplate().saveOrUpdate(obj); }
protected void delete(Object obj) { getHibernateTemplate().delete(obj); }
protected Object find(Class clazz, Long id) { return getHibernateTemplate().load(clazz, id); }
protected List findAll(Class clazz) { return getHibernateTemplate().find("from " + clazz.getName()); }}
package com.padicon.dao;
import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.hibernate.SessionFactory;
public class DaoRegistry { private static ApplicationContext ctx; static { ctx = new ClassPathXmlApplicationContext("application-context.xml"); } /** * Private to make this a singleton. */ private DaoRegistry(){ } public static SessionFactory getSessionFactory(){ return (SessionFactory) ctx.getBean("factory", SessionFactory.class); } public static DataSource getDataSource(){ return (DataSource)ctx.getBean("dataSource", DataSource.class); }}
package com.padicon.dao;
import java.util.List;
import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;
import com.padicon.bean.Event;@Repository("EventSpringDao")@Transactionalpublic class EventSpringDao extends AbstractSpringDao{ public EventSpringDao(){} public Event find(Long id){ return (Event) super.find(Event.class, id); } public void saveOrUpdate(Event event){ super.saveOrUpdate(event); } public void delete(Event event){ super.delete(event); } public List findAll(){ return super.findAll(Event.class); }}
11. Buat Main di paket com.padicon.app
package com.padicon.app;
import java.util.Iterator;import java.util.List;
import com.padicon.bean.Event;import com.padicon.dao.DaoRegistry;import com.padicon.dao.EventSpringDao;
public class Main {
public static void main(String[] args) { // Create Dao object EventSpringDao eventDao = new EventSpringDao(); eventDao.setSession(DaoRegistry.getSessionFactory());
// Create domain objects and save them Event event = new Event(); // event.setName("Java Course in Boston"); //event.setStartDate(new java.util.Date()); //event.setDuration(60); //eventDao.saveOrUpdate(event);
// event = new Event(); // event.setId(1l); event.setName("Boronong"); event.setStartDate(new java.util.Date()); event.setDuration(100); eventDao.saveOrUpdate(event);
List listEvent = eventDao.findAll(); for (Iterator it = listEvent.iterator(); it.hasNext();) { Event result = (Event)it.next(); System.out.println("id : " + result.getId().toString()+ "Nama : "+result.getName()); } }}
(Catatan : Ketik yah jangn copy paste!)12. Buat paket com.padicon.composer dan buat Class sbb :
package com.padicon.composer;
import org.zkoss.zk.ui.util.GenericForwardComposer;import org.zkoss.zul.Button;import org.zkoss.zul.Messagebox;import org.zkoss.zul.Window;
public class BaseComposer extends GenericForwardComposer {protected Button btnSave;protected Button btnEdit;protected Button btnUpdate;protected Button btnDelete;protected Button btnCancel;protected Window win;Boolean hasilnya;
public void messageWarning(String result){try {
Messagebox.show(result,"Padicon Training",Messagebox.OK, Messagebox.EXCLAMATION);
} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();
}}
public void messageInformation(String result){try {
Messagebox.show(result,"Padicon Training",Messagebox.OK, Messagebox.INFORMATION);
} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();
}}
}
package com.padicon.composer;
import java.util.Iterator;import java.util.List;
import org.hibernate.HibernateException;import org.zkoss.zul.Datebox;import org.zkoss.zul.Intbox;import org.zkoss.zul.Listbox;import org.zkoss.zul.Listcell;import org.zkoss.zul.Listitem;
import org.zkoss.zul.Longbox;import org.zkoss.zul.Messagebox;import org.zkoss.zul.Textbox;import org.zkoss.zul.Window;
import org.zkoss.zk.ui.event.Event;
import com.padicon.dao.DaoRegistry;import com.padicon.dao.EventSpringDao;
public class EventComposer extends BaseComposer{
private Window win;private Longbox id;
private Intbox duration; private Textbox name; private Datebox start_date; private com.padicon.bean.Event event; private Listbox levents; public void loadEvents(){ levents.getItems().clear(); EventSpringDao esd= new EventSpringDao();
esd.setSession(DaoRegistry.getSessionFactory());com.padicon.bean.Event event= new com.padicon.bean.Event();List events = esd.findAll();for(Iterator iter = events.iterator();iter.hasNext();){
Listitem li = new Listitem();event = (com.padicon.bean.Event)iter.next();li.setValue(event.getId());li.setHeight("28px");Listcell lc = new Listcell();lc.setLabel(event.getName());lc.setParent(li);lc = new Listcell();lc.setLabel(String.valueOf(event.getDuration()));lc.setParent(li);lc = new Listcell();lc.setLabel(String.valueOf(event.getStartDate()));lc.setParent(li);li.setParent(levents);
}
} public void onSelect$levents(Event event) {
LoadEvent(Long.parseLong(levents.getSelectedItem().getValue().toString())); } public void onCreate$win(Event event) { loadEvents();
//if(!win.getDesktop().getExecution().getParameter("id").toString().equals(""))
//
LoadEvent(Long.parseLong(win.getDesktop().getExecution().getParameter("id").toString()));
}
private void LoadEvent(long value) { com.padicon.bean.Event event = new com.padicon.bean.Event();
EventSpringDao esd= new EventSpringDao();esd.setSession(DaoRegistry.getSessionFactory());event =(com.padicon.bean.Event) esd.findBy("id = "+value).get(0);id.setValue(event.getId());duration.setValue(event.getDuration());name.setValue(event.getName());start_date.setText(event.getStartDate().toString());
}
public void clearText() {id.setText("");duration.setText("");name.setText("");start_date.setText("");
}
public void onClick$btnEdit(Event event) {if (id.getText().equals("")) {
messageInformation("Anda harus memasukkan id ");name.focus();return;
}try {
EventSpringDao esd= new EventSpringDao();esd.setSession(DaoRegistry.getSessionFactory());if (esd.findBy("id = "+id.getValue()).size() < 1) {
messageInformation("Event Name : " + id.getValue()+ " tidak ditemukan ");
name.focus();return;
}LoadEvent(Long.parseLong(id.getValue().toString().trim()));id.setDisabled(true);
} catch (HibernateException e) {try {
Messagebox.show(e.getMessage());} catch (InterruptedException e1) {}
}btnSave.setDisabled(true);btnUpdate.setDisabled(false);btnDelete.setDisabled(false);btnCancel.setDisabled(false);
}
public void onClick$btnSave(Event event) {if(name.getValue().equals("")){
return;}
com.padicon.bean.Event event1 = new com.padicon.bean.Event();event1.setName(name.getText());event1.setDuration(duration.getValue());event1.setStartDate(start_date.getValue());EventSpringDao esd= new EventSpringDao();esd.setSession(DaoRegistry.getSessionFactory());String result="";try{esd.saveOrUpdate(event1);result="Data telah disimpan";}catch(Exception je){
result=je.getCause().getMessage();}if (result.equalsIgnoreCase("Data telah disimpan")) {
messageInformation(result);clearText();loadEvents();
} else {messageWarning(result);
}}
public void onClick$btnUpdate(Event event) {if(name.getValue().equals("")){
return;}com.padicon.bean.Event event1 = new com.padicon.bean.Event();event1.setId(id.getValue());event1.setName(name.getText());event1.setDuration(duration.getValue());event1.setStartDate(start_date.getValue());EventSpringDao esd= new EventSpringDao();esd.setSession(DaoRegistry.getSessionFactory());String result="";try{esd.saveOrUpdate(event1);result="Data telah diubah";}catch(Exception je){
result=je.getCause().getMessage();}if (result.equalsIgnoreCase("Data telah diubah")) {
messageInformation(result);clearText();loadEvents();btnSave.setDisabled(false);id.setDisabled(false);btnUpdate.setDisabled(true);
} else {messageWarning(result);
}}
public void onClick$btnDelete() {try {
if(id.getValue().equals("")){return;
}
if (Messagebox.show("Anda yakin untuk menghapus "+ name.getText(), "JOSSO", Messagebox.YES+ Messagebox.NO, Messagebox.QUESTION) ==
Messagebox.NO) {return;
}com.padicon.bean.Event event1 = new
com.padicon.bean.Event();event1.setId(id.getValue());EventSpringDao esd= new EventSpringDao();esd.setSession(DaoRegistry.getSessionFactory());String result="";try{
esd.delete(event1);result="Data telah dihapus";}catch(Exception je){
result=je.getCause().getMessage();}
if (result.equalsIgnoreCase("Data telah dihapus")) {messageInformation(result);clearText();name.setDisabled(false);name.focus();btnSave.setDisabled(false);btnUpdate.setDisabled(true);loadEvents();
} else {messageWarning(result);
}} catch (HibernateException e) {
try {Messagebox.show(e.getMessage());
} catch (InterruptedException e1) {}
} catch (InterruptedException e1) {} catch (NullPointerException e) {
try {Messagebox
.show("Error: Null Pointer Exception. Please rename and try again.");
} catch (InterruptedException e1) {}
}}
public void onClick$btnCancel() {messageInformation("Data nama : " + name.getText() + " gagal
diubah.");clearText();btnSave.setDisabled(false);btnUpdate.setDisabled(true);btnDelete.setDisabled(true);btnCancel.setDisabled(true);name.setDisabled(false);
}
}
13. Buat folder di WebContent dengan nama “event” dan buat file zul di dalamnya dengan nama event.zul sbb:
<?page title="Event" contentType="text/html;charset=UTF-8"?><zk><window title="Event" border="normal" id="win" apply="com.padicon.composer.EventComposer">
<groupbox mold="3d"> <caption label="Data Events" style="font-weight:600;"/> <grid> <columns height="22px"> <column label="Type" width="150px"/> <column label="Content" /> </columns> <rows> <row>Id :<longbox id="id" /></row> <row>Name :<textbox id="name" maxlength="100" width="200px"/></row> <row>Duration :<intbox id="duration" maxlength="10" /></row> <row>Description :<datebox id="start_date" format="yyyy-MM-d"/></row> <row spans="2" > <toolbar> <button id="btnSave" label="Save" orient="vertical"/> <button id="btnCancel" label="Cancel" orient="vertical"/> <button id="btnEdit" label="Edit" orient="vertical"/> <button id="btnUpdate" label="Update" orient="vertical" disabled="true"/> <button id="btnDelete" label="Delete" orient="vertical"/> </toolbar> </row> </rows> </grid> </groupbox> <separator/> <listbox id="levents" rows="10" mold="paging" pageSize="10">
<listhead height="28px"><listheader label="Name" width="20%"
sort="auto"/><listheader label="Duration" width="40%"
sort="auto"/><listheader label="Start" width="40%"
sort="auto"/></listhead>
</listbox> </window>
</zk>
14. Copy kan jar yang ada di lib latihan Spring ke lib WebContent/WEB-INF/lib
15. Klick kanan event.zul dan pilih Run As Run on Server