JPA Project template

Setelah satu minggu lalu saya posting spring-hibernate template, saya mau posting satu lagi project template, JPA.

Alasan utama kenapa saya pindah ke JPA adalah kemudahan setting dan library, NetBeans 6.0 sudah mengandung semua libary yang diperlukan jika kita menggunakan JPA dan TopLink. Beberapa hal yang harus dikorbankan tanpa adanya spring adalah:

  1. Dependency Injection. Untuk menginject EntityManager harus dilaksanakan secara manual, tidak lagi bisa otomatis dengan @Autowired (lihat class UserService.java)
  2. Declarative Transaction. Begin dan commit transaction dilaksanakan secara manual

Karena kita hanya menggunakan library JPA saja, maka kodenya menjadi lebih sederhana dan classnya menjadi lebih sedikit. Interface UserService dihilangkan karena tidak berguna lagi, satu-satunya alasan kenapa Interface UserService dibuat adalah karena interface tersebut diperlukan Spring untuk membuat declarative transaction proxy.

Sisi tampilan sama persis dengan tampilan yang lainya. tidak ada yang berubah dengan tampilan dan fungsional aplikasi, semuanya sama, hanya bagian backendnya saja yang berubah.

Saya merekomendasikan arsitektur ini karena kesederhanaanya, kita tidak perlu banyak-banyak membundle jar seperti pada spring-hibernate template. Ukuran distribusinya berkurang dari 9.3MB menjadi hanya 3.8MB.

sudah tidak sabar ingin melihat? silahkan download di sini

== update 24 mei 2008 ==

Terdapat bugs dalam kode program ini, di bagian service ada kode untuk handle transaction, seperti di bawah ini :

            entityManager.getTransaction().begin();
            personDao.save(person);
            entityManager.getTransaction().commit();

terlihat bahwa kode diatas tidak ada bagian yang akan me-rollback transaction jika ada kesalahan, nah seharusnya kode diatas menjadi :

     try {
            entityManager.getTransaction().begin();
            personDao.save(person);
            entityManager.getTransaction().commit();
        } catch (RollbackException ex) {
            entityManager.getTransaction().rollback();
        }

Kode yang sudah dirubah dapat didownload di sini

Tags: , ,

9 Responses to “JPA Project template”

  1. santo Says:

    Wah jadi lebih singkat yah…..

    (mau nyoba kasi comment nih…)
    Tapi klo kita bikin aplikasi-desktop untuk enterprise mungkin nantinya agak lebih repot kali yah?

    Klo pake Spring mungkin kita dipaksa mengikuti struktur Spring, tapi klo pake ini kita lebih bebas menentukan. (walaupun sampai sekarang gwe masih bingung sama spring…hehehehe)

  2. Vyor Says:

    Terima Kasih !!!

  3. Vyor Says:

    Pak, Ifnu saya bisa minta tutorial JPA ???

  4. Vyor Says:

    Saya juga mau tanya,
    Library Beans Binding itu apa ya ???

  5. Vyor Says:

    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

    Kalo yang ini maksudnya apa ya ??

  6. ifnu Says:

    library beans binding ini untuk proses binding antara data (biasa disebut dengan class model) dengan componen swing seperti textfield, table dll tanpa secara manual mengeset nilainya ke dalam komponen. Kalau menurut saya sih ini lebih mudah dibanding dengan kalau harus membuat misalnya tablemodel sendiri, tapi karena library ini masih lumayan baru dan minim dokumentasi, yang tahu masih sangat sedikit.

    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

    property diatas dimark transient agar tidak dimasukkan ke dalam database oleh JPA, semua yang ditandai transient artinya tidak masuk dalam database. PropertyChange listener ini digunakan untuk menangkap event perubahan nilai pada object.

    moga2 tambah ngerti dan ndak tambah bingung, kalau bingung diignore ajah :D

    asal programnya jalan udah cukup deh :D

  7. Vyor Says:

    Ngerti dikit-dikit ….
    heheheheheeee……….

    Tapi banyak bingungnya :)

  8. Vyor Says:

    Sebenarnya dah jalan Kak Ifnu.
    Saya coba sendiri dengan tidak menggunkan service. Saya buat PhoneBook sederhana.
    Model yang saya buat ada 2 : Person dan Phone.
    di bagian Person saya mapping ke Phone dengan List seperti yang punya pada model Group.
    Trus waktu saya eksekusi, ternyata java mengcreate tabel baru yang namanya merupakan gabungan dari kedua tabel yang lain(Person dan Phone).
    Bagaimana caranya saya menentukan tabel yang dibuat secara otomatis tersebut itu ????

    Terima Kasih atas ilmunya.

  9. Dumb Says:

    Wah, cool…. telat ni ya saya….he..he… om ifnu.. kalau yang dimaksud Top Link,Eclipse Link, Hibernate yang terdapat dalam pilihan library persistencenya apa ya? Terus Bedanya TopLink sama Hibernate apa? Maklum nie, masih newbie bgt….thanks….

Leave a Reply