apapun framework-nya, minumnya tetep pake Spring Framework


hehe, gak nyambung nih judulnya 😀

gak papa lah yang penting disini gw mo ngasih tau tentang kehebatan Spring Framework dalam manajemen transaksi. maksudnya?

yup, selama ini blum pernah ada framework yang dibuat untuk manajemen transaksi, biasanya hanya untuk persistence, seperti Hibernate, Java Persistence API, TopLink, EclipseLink, iBatis dan lain-lain. Dan kalo kita pake framework2 yang tadi gw sebutin, mau gak mau, kita harus manajemen transaksinya sendiri, artinya kita harus memanage persistence tersebut THREAD SAFE.

selama ini baru ada 2 teknologi manajemen transaksi yang ada (sebenarnya yang gw tau), pertama adalah EJB dan yang kedua adalah SpringFramework. Yang jadi permasalahan di EJB adalah, dia adalah teknologi Enterprise, jadi kalo kita bikin aplikasi desktop awau web yang gak Enterprise otomatis EJB gak bisa kita pake. tapi kita juga bisa pake openEJB yang bisa dipake untuk aplikasi standalone atau bisa kita embed ke aplikasi kita, cuma saja konfigurasinya agak ribet dan selain itu EJB hanya support untuk JPA.

lantas kenapa SpringFramework? pertama karena Konfigurasi Spring Framework itu mudah dan juga support berbagai frmaework persistence yang populer, seperti Hibernate, JPA, iBatis, bahkan support manajemen transaksi untuk JDBC. nah pada artikel ini, gw mo kasih contoh source-code yang menggunakan Hibernate Murni dan Hibernate yang management transaksi nya pake Spring Framework.

Hibernate :

package com.echo.faces.dao.injection;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.echo.faces.dao.IdentitasDao;
import com.echo.faces.entity.Identitas;

public class IdentitasDaoHibernate implements IdentitasDao {

	private SessionFactory sessionFactory;

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public Identitas deleteIdentitas(Identitas identitas) {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			session.delete(identitas);
			session.getTransaction().commit();
			return identitas;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

	public Identitas getIdentitas(Long id) {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			Identitas identitas = (Identitas) session.get(Identitas.class, id);
			session.getTransaction().commit();
			return identitas;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

	public Identitas insertIdentitas(Identitas identitas) {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			session.save(identitas);
			session.getTransaction().commit();
			return identitas;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

	public List<Identitas> selectIdentitas() {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			List<Identitas> list = session.createQuery("select a from Identitas a").list();
			session.getTransaction().commit();
			return list;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

	public List<Identitas> selectIdentitas(int begin, int max) {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			List<Identitas> list = session.createQuery("select a from Identitas a").setFirstResult(begin)
					.setMaxResults(max).list();
			session.getTransaction().commit();
			return list;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

	public Identitas updateIdentitas(Identitas identitas) {
		Session session = sessionFactory.openSession();
		try {
			session.getTransaction().begin();
			session.update(identitas);
			session.getTransaction().commit();
			return identitas;
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			throw new HibernateException(e);
		} finally {
			session.close();
		}
	}

}

Hibernate + Spring Framework

package com.echo.faces.dao.injection;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.echo.faces.dao.IdentitasDao;
import com.echo.faces.entity.Identitas;

public class IdentitasDaoInjection extends HibernateDaoSupport implements IdentitasDao {

	@Transactional(readOnly = false)
	public Identitas deleteIdentitas(Identitas identitas) {
		getHibernateTemplate().delete(identitas);
		return identitas;
	}

	@Transactional(readOnly = true)
	public Identitas getIdentitas(Long id) {
		return (Identitas) getHibernateTemplate().get(Identitas.class, id);
	}

	@Transactional(readOnly = false)
	public Identitas insertIdentitas(Identitas identitas) {
		getHibernateTemplate().save(identitas);
		return identitas;
	}

	@Transactional(readOnly = true)
	@SuppressWarnings("unchecked")
	public List<Identitas> selectIdentitas() {
		return getHibernateTemplate().loadAll(Identitas.class);
	}

	@Transactional(readOnly = true)
	@SuppressWarnings("unchecked")
	public List<Identitas> selectIdentitas(final int begin, final int max) {
		DetachedCriteria criteria = DetachedCriteria.forClass(Identitas.class);
		return getHibernateTemplate().findByCriteria(criteria, begin, max);
	}

	@Transactional(readOnly = false)
	public Identitas updateIdentitas(Identitas identitas) {
		getHibernateTemplate().update(identitas);
		return identitas;
	}

}

gimana? lebih simpel kan? dan pastinya ini bisa mempermudah kita kalo kita bikin DAO yang banyakkkkkkkkkk………

Iklan

10 pemikiran pada “apapun framework-nya, minumnya tetep pake Spring Framework

  1. Wah, keren…. diterusin dunk pembahasan tentang spring, coz pengen belajar spring tapi pusing…. ada info buat tutorialnya yang mudah dipahami gak mas..?

  2. 😀 alo pren mau tanya nih masalah ibatis pada konfigurasi SqlMapConfig biasanya kan langsung ditulis disitu atau pake file *.properties
    nah kalo saya pingin dari file lain contoh yang lokasinya ada di /home/mbahsomo/setting.ini
    bisa ngak ya
    jadi kalo pindah kompi gak usah kompile ulang jar, jadi tinggal ubah file setting.ini
    database apa driver apa ama yang lain 😀

  3. pertanyaannya konfigurasi si spring ato di ibatisnya?
    kalo di spring bisa
    cukup pake resource

    classpath:com/echo/sampeproject/resource/hehe.properties

    tergantung lokasi file .propertiesnya 😀

  4. Salam kenal mas, gw masih newbie nih di java. Gw ada proyek nih mas u absensi. Pake spring+hibernate. Dan gw ada problem gini nih. U kelas jurusan dan mahasiswa dah jadi punya hub One to Many (pake annotation). Trus di kelas test nya cuma tabel fakultas aja yang muncul.Gimana cara agar tabel jurusan muncul??
    Ini code nya:
    /**author insane**/
    @ContextConfiguration(locations = {“applicationContext.xml”})
    @TransactionConfiguration(transactionManager = “transactionManager”)
    public class TableCreationTest extends AbstractTransactionalJUnit38SpringContextTests {

    private static final Log log = LogFactory.getLog(TableCreationTest.class);
    @Resource
    private FakultasService fakultasService;
    @Resource
    private JurusanService jurusanService;

    public void testCreateTable() {
    log.info(“membuat tabel”);
    }

    @Rollback(false)
    public void testSaveFakultas(){
    log.info(“membuat sebuah fakultas”);
    Fakultas fak = new Fakultas();
    fak.setKodeFakultas(“FP”);
    fak.setNamaFakultas(“Fakultas Pertanian”);
    fakultasService.save(fak);
    }

    Trus gw tambahin

    public void testSaveFakultas(){
    log.info(“membuat sebuah fakultas”);
    Fakultas fak = new Fakultas();
    fak.setKodeFakultas(“FP”);
    fak.setNamaFakultas(“Fakultas Pertanian”);
    fakultasService.save(fak);
    Jurusan jur = new Jurusan();
    jur.setFakultas(fak);
    jur.setKodeJurusan(“TE”);
    jur.setNamaJurusan(“Teknik Elektro”);
    jurusanService.save(jur);
    fakultasService.delete(fak);
    }
    }
    Jadinya error.Gw tambahin public void testSaveJurusan(), error juga.
    Ada solusi gak mas??Mohon bantuan nya mas kalo bisa lewat email juga ndak apa2.Terimakasih,

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s