Spring MVC File Upload
Jumat pagi sebelum kerja mau nulis dulu di sini ah,, sebenernya batas ngeblog adalah hari rabu jam 1 siang. Tapi ga papa deh dari pada ga ngeblog sama sekali -_-".
Article yang di bahas kali adalah upload file menggunakan Spring MVC, cuman ini Spring MVCnya masih versih jadul. Sebab di kantor pernah usul pake @RequestMapping buat bikin controllernya, cuman katanya pake yang jadul aja, sebab biar gampang bug trackingnya. Jadi buat controllenya masih di taro di dispatcher servlet.
Yu ah, daripada kebanyakan curhat langsung ke TKP saja. Seperti biasa kalo mau ngoding siapin dulu library yang di butuhkan, kali ini library yang di butuhkan adalah :
- common-fileupload.jar
- common-io.jar (yang terbaru lebih bagus)
- spring.jar (intinya library springnya ya)
Spring Form Tag & JSTL (JSP Standard Tag Library)
Saat ini kebetulan lagi ngerjain project web di suatu tempat, kebetulan untuk viewnya menggunakan JSTL dan di dalamnya menggunakan tag formnya spring. Padahal dulu sebelumnya sering menggunakan velocity, walaupun tag velocitynya cuman seuprit yang yang di pake :hammer:.
Jadi JSTL adalah JSP Standard Tag Library, menyediakan fungsionalitas umum yang dibutuhkan untuk membangun suatu aplikasi web. Tag - tagnya menyediakan dukungan untuk presentasi logika, format, dukungan XML dan untuk akses database (katanya sih). Dan katanya lagi JSTL menyediakan dukungan untuk i18n (dalemhati i18n apaan y ?? :hammer:), nah dukungan untuk i18n ini sangat mirip dengan bean si struts.
Di versi 2.0, spring menyediakan satu set data yang komperensif untuk menangani elemen form pada saat menggunakan JSP dan Spring MVC. Setiap tagnya menyediakan dukungan untuk himpunan attribut dari HTML.
[Read More]
Membuat Generic DAO
Pada article ini saya akan membahas tentang pembuatan Generic DAO, tetapi sebelum ke inti pembahasan saya akan jelaskan mengapa harus Generic DAO.
Apabila anda sudah terbiasa membuat suatu DAO (Data Akses Objek), pasti anda sangat terbiasa dengan ini, jika suatu entity class yang di dalamnya mewakili sebuah table di database maka untuk memisahkan proses akses ke database di perlukan sebuah DAO untuk setiap entity class. Menurut analisa saya, apa yang terjadi jika anda membuat suatu project besar yang memiliki banyak module yang di dalam nya memiliki banyak entity class. Tentunya si programmer dengan rajin dan sabar membuat satu persatu DAO tersebut untuk kebutuhan bisnis proses dari aplikasi. Nah disinilah Generic DAO diperlukan agar sang programmer tidak perlu melakukan pemborosan tersebut.
[Read More]
Widget & Panel yang tersedia dalam GWT (Google Web Toolkit)
Pada article ini saya akan mengenalkan widget dan panel yang tersedia dalam GWT. Saya tidak akan menjelaskan masing - masing dari widget dan panels tersebut, sebab di lihat dari bentuknya sudah ketahuan fungsi dari widget & panel tersebut. Nah langsung ke TKP....
Widgets
1. Button

2. Push Button

3. Radio Button

4. Check Box

5. Date Picker

6. Toggle Button

7. Text Box

8. Password Text Box

9. Text Area

10. Hyper Link

11. List Box

12. Menu Bar

13. Tree

14. Suggest Box

15. Rich Text Area

16. Table

17. Tab Bar

18. Dialog Box

Panels
1. Pop up Panel

2. Stack Panel & Stack Layout Panel

3. Horizontal Panel

4. Vertical Panel

5. Flow Panel

6. Vertical Split Panel

7. Horizontal Split Panel

8. Split Layout Panel

9. Dock Panel & Dock Layout Panel

10. Tab Panel & Tab Layout Panel

11. Disclosure Panel

Nah gambar - gambar di atas merupakan widget & panel yang ada dalam GWT !! jadi kalo anda lihat produk google komponennya mirip ama yang di atas, berarti di buatnya pake GWT.
Terima Kasih
Aditya Lukman Afandi
Spring Hibernate versi XML
Pada article sebelumnya saya sudah membahas penggunaan Data Akses Object (DAO) pada hibernate di Hibernate DAO, JPA dan ANT sebagai buildernya, nah pada article ini saya akan menjelaskan implementasi spring hibernate dengan metode XML. Memang saat ini metode tersebut sudah mulai di tinggalkan oleh para programmer, karena saat ini sudah menggunakan anotation ( @ ) dalam pembuatan repository bean. Dengan menggunakan anotation, programmer tidak harus membuat bean di XML dan dengan begini proses pengcodean menjadi lebih simple. Tapi pada article saya tidak akan menjelaskan penggunaan menggunakan anotation, karena di article ini saya akan memberitahu terlebih dahulu penggunaaan spring hibernate menggunakan XML.
Dari pada panjang lebar nunggu lama mending kita langsung ke TKP, seperti biasa sebelum di mulai saya akan menunjukan library apa saja yang di butuhkan dalam project ini.
1. antlr-2.7.6.jar 10. hibernate-annotations.jar
2. asm.jar 11. hibernate-commons-annotations.jar
3. asm-attrs.jar 12. hibernate-entitymanager.jar
4. commons-collections-2.1.1.jar 13. hibernate-tools.jar
5. commons-logging-1.1.jar 14. jta.jar
6. dom4j-1.6.1.jar 15. mysql-connector-java-5.1.6.jar
7. ejb3-persistence 16. cglib-2.1.3.jar
8. freemarker-2.3.10.jar 17. spring-2.5.6.jar
9. hibernate3.jar
setelah librarynya terkumpul semuanya, saya akan kasih lihat struktur project ini seperti apa

sudah lihat struktur projectnya kan ?? bila ingin tau mengapa saya selalu menunjukan struktur project pada saat membuat postingan. Hal itu di karenakan saya tidak perlu menjelaskan step by step untuk pembuatan project, package, class - class java dan configuration file. Back to the topic, selanjutnya adalah pembuatan class - class javanya.
class yang pertama di buat adalah
DefaultPersistence.java
package com.adhit.project.utility;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class DefaultPersistence implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class selanjutnya adalah class entity item, by the way kenapa saya selalu memberi contoh dengan entity item, entahlah lagi pula ga penting juga yah, hahaha, yang penting kan codingannya.
Item.java
package com.adhit.project.entity;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import com.adhit.project.utility.DefaultPersistence;
@Entity
@Table(name="tb_item")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Item extends DefaultPersistence {
private String code;
private String name;
private String description;
private Integer price;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
setelah itu adalah pembuatan interface class
ItemDAO.java
package com.adhit.project.item.dao;
import java.util.List;
import com.adhit.project.entity.Item;
public interface ItemDAO {
public void save (Item item);
public void delete (Item item);
public Item find (Object id);
public List<Item> findList (String query);
}
setelah membuat interface class, proses selanjut adalah pembuatan class implement dari interface tersebut
ItemDAOImplement.java
package com.adhit.project.item.dao;
import java.io.Serializable;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.adhit.project.entity.Item;
@Repository
public class ItemDAOImplement extends HibernateDaoSupport implements ItemDAO {
@Autowired
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
@Override
public void delete(Item item) {
getHibernateTemplate().delete(item);
}
@Override
public Item find(Object id) {
Item item = (Item) getHibernateTemplate().get(Item.class, (Serializable) id);
return item;
}
@Override
public List<Item> findList(String query) {
return getHibernateTemplate().find(query);
}
@Override
public void save(Item item) {
getHibernateTemplate().saveOrUpdate(item);
}
}
class selanjut di buat adalah class yang di perlukan untuk memanggil repository beannya
Service.java
package com.adhit.project.utility;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.adhit.project.item.dao.ItemDAOImplement;
public class Service {
private static ApplicationContext applicationContext;
static {
applicationContext = new ClassPathXmlApplicationContext(
"application.context.xml");
}
public static ItemDAOImplement getItem() {
return (ItemDAOImplement) applicationContext.getBean("itemDAO",
ItemDAOImplement.class);
}
}
nah sekarang class terakhir yang di buat adalah untuk testing class code di atas
ItemMain.java
package com.adhit.project.main;
import java.util.ArrayList;
import java.util.List;
import com.adhit.project.entity.Item;
import com.adhit.project.item.dao.ItemDAO;
import com.adhit.project.utility.Service;
public class ItemMain {
public static void main (String args[]) {
ItemDAO service = Service.getItem();
Item item = new Item();
List<Item> items = new ArrayList<Item>();
item.setCode("KODE1");
item.setName("Acer Aspire Core I5");
item.setDescription("Acer Aspire Core I5, VGA NVDIA GeoForce");
item.setPrice(500);
// Save Item
service.save(item);
// Load Item By Id
item = service.find(item.getId());
System.out.println(">>> "+item.getName());
// Edit Item
item.setId(item.getId());
item.setName("Acer Aspire");
service.save(item);
// List Item
items = service.findList("select object(i) from "
+ Item.class.getName() + " as i where i.id = '" + item.getId()
+ "'");
// Print Item Data
for(Item i : items) {
System.out.println(">>> Code : "+i.getCode());
System.out.println(">>> Name : "+i.getName());
System.out.println(">>> Description : "+i.getDescription());
System.out.println(">>> Price : "+i.getPrice().doubleValue());
}
//Delete Item
service.delete(item);
}
}
Selanjut adalah pembuatan hibernate.cfg.xml untuk konfigurasi hibernate, apllicationContext.xml pembuatan repositoy bean dan project.properties adalah file properties yang di perlukan applicationContext.xml
nah sekarang mari buat hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Properties -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">tulalit</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.adhit.project.entity.Item"/>
</session-factory>
</hibernate-configuration>
setelah membuat hibernate.cfg.xml, selanjut adalah membuat file properties
project.properties
hibernate.connection.driver_class= com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/latihan
hibernate.connection.username = root
hibernate.connection.password = tulalit
hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl_auto=create
hibernate.show_sql=true
hibernate.show_statistics=true
setelah ke dua file tersebut di buat, yang terakhir adalah membuat xml contextnya
application.context.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:property-placeholder
location="classpath:project.properties" />
<context:component-scan base-package="com.adhit.crud" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${hibernate.connection.driver_class}"
p:url="${hibernate.connection.url}"
p:username="${hibernate.connection.username}"
p:password="${hibernate.connection.password}" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.adhit.project.entity.Item</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.generate_statistics">
${hibernate.show_statistics}
</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean
class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
</entry>
</map>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<bean id="itemDAO"
class="com.adhit.project.item.dao.ItemDAOImplement"
p:sessionFactory-ref="sessionFactory" />
</beans>
sebelum membuat itu semua, silahkan sediakan sebuah database kosong tanpa table untuk proses penyimpanan data, mengapa tanpa table, karena table untuk keperluan penyimpanan akan di generate oleh springnya dengan membaca mapping entity yang ada di hibernate.cfg.xml. Untuk struktur tablenya di ambil dari struktur entity yang di mapping. Kalo untuk settingan konfigurasi database bisa edit hibernate.cfg.xml dan project.propertes yang isinya konfigurasi tinggal di sesuaikan komputer lokal masing - masing.
Setelah panjang lebar (sebenernya sih gak panjang lebar, haha, karena saya tidak menjelaskan detail codingan di atas) article ini telah selesai di posting. Rencana untuk posting article sih sebenernya banyak yang ingin di tulis, tapi sepertinya article selanjut adalah implementasi spring hibernate menggunakan anotation (@). Dan yang pasti harapan saya semoga article ini berguna bagi para pembaca, dan semoga saya bisa membuat article yang lebih bermanfaat dari artcle sebelumnya, juga ilmu saya bisa terus bertambah agar bisa di share pada semua (banyak berharap dan cuap - cuap juga yah di ujung, wkwkwkw).
Terima Kasih
Aditya Lukman Afandi