Skip to main content

Siri 3 : Mengenali Grails Data Sources dan Grails Object Relational Mapping (GORM)

Pada artikel sebelum ini, saya telah mula membina satu aplikasi mudah bagi merekod maklumat buku. Dengan hanya beberapa baris kod pada domain class dan controller sudah boleh ada fungsi CRUD (create-read-update-delete) bagi mengemaskini maklumat buku.

Bagi saya, yang pertama kali bersua dengan Grails, terasa hairan, "Bagaimana Grails menyimpan maklumat yang telah dikemaskini ?". Kebiasaannya bagi aplikasi sistem perlu ada perisian pangkalan data. Tetapi saya tidak membuat sebarang database atau tables atau fields. Dan kenapa apabila saya tutup aplikasi Grails saya pada Netbeans, data saya sudah tidak wujud bila dibuka kembali ?

Jawapannya terdapat pada Grails Data Source (sumber data) yang menjadi fail konfigurasi sebagai penghubung antara aplikasi dan pangkalan data. Pada fail ini terdapat maklumat berkaitan:
  1. Jenis pangkalan data (database) yang digunakan
  2. Nama pengguna (user name) kepada pangkalan data berkenaan
  3. Katalaluan (password) kepada pangkalan data berkenaan
  4. Jenis penggunaan (environment) pangkalan data samada
    1. pembangunan (development)
    2. ujian (test)
    3. produksi (production)
Melalui fail Data Source ini pula, Grails mempunyai komponen Grails Object Relational Mapping (GORM) dan Hibernate. Komponen ini akan membaca maklumat yang telah di senaraikan pada Domain Classes dan secara automatik mewujudkan table berdasarkan nama Domain Class dan table fields berdasarkan konfigurasi Domain Class berkenaan. Dan apabila aplikasi digunakan, komponen berkenaan akan melaksanakan kemaskini data kepada pangkalan data.

Dalam dunia Java, class merupakan satu bentuk object. Object melaksanakan fungsi-fungsi seperti pengiraan, pemprosesan dan paparan antaramuka. GORM dan Hibernate merupakan perantara (juga disebut sebagai satu bentuk middleware) bagi object dan pangkalan data. Saya cuba buat perkaitan yang mudah menggunakan MVC pattern:



Apabila object, sebagai contoh antaramuka Buku List, perlu memaparkan senarai buku, perantara ini akan membaca data dari pangkalan data dan disampaikan kepada object berkenaan, tanpa perlu ada SQL Statement "SELECT ... FROM ... WHERE ... ".

Sama juga apabila object, sebagai contoh antaramuka New Buku, perlu menyimpan data, perantara akan ambil data dari object berkenaan dan disimpan ke dalam pangkalan data, juga tanpa perlu ada SQL Statement "INSERT INTO ... VALUES ...". Perkara sama juga bagi pindaan UPDATE dan padam DELETE.

Hibernate juga dikenali sebagai satu jenis persistence framework. Kalau dialih bahasa bunyinya 'rangka kerja yang gigih'. Bagi saya terma-terma seperti ini yang menyebabkan keadaan menjadi dungu, membosankan untuk dipelajari dan akhirnya putus asa ! Jadi sekarang kita cuba sendiri.

  1. Fail konfigurasi Data Source boleh dibuka pada Netbeans melalui tab Projects > DemoBuku > Configuration > DataSource.groovy


  2. Perenggan pertama pada fail DataSource.groovy menyatakan jenis, nama pengguna dan katalaluan bagi pangkalan data yang digunakan.
    datasource {
         pooled = true
         driverClassName = "org.hsqldb.jdbcDriver"
         username = "sa"
         password = ""
    }
    Dari perenggan ini, saya dapat ketahui bahawa aplikasi DemoBuku saya menggunakan pangkalan data HSQLDB (HyperSQL Database).

  3. Perenggan kedua pada fail DataSource.groovy menyatakan bahawa Hibernate digunakan bersama dengan fungsinya untuk cache.
    hibernate {
        cache.use_second_level_cache = true
        cache.use_query_cache = true
        cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
    }
    Cache dapat melajukan proses paparan data dimana data yang pernah dibaca semasa sesi penggunaan tidak perlu dibaca berulang kali dari pangkalan data.

  4. Perenggan seterusnya pula adalah konfigurasi bagi jenis penggunaan environment (development, test dan production)
    environments {
        development {
            dataSource {
                dbCreate = "create-drop"
                url = "jdbc:hsqldb:mem:devDB"
            }
        }
        test {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:mem:testDb"
            }
        }
        production {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:file:prodDb;shutdown=true"
            }
        }
    }
    Perhatikan bahawa setiap jenis penggunaan environment menggunakan pangkalan data yang berlainan (devDB, testDB, dan prodDB) dan digunakan secara berlainan (create, create-drop dan update).

  5. Parameter create bermaksud gunakan pangkalan data yang sedia ada, jika ada, tetapi padam semua data; create-drop bermaksud, padamkan pangkalan data sedia ada kemudian bina semula pangkalan data dan apabila sesi dihentikan padamkan pangkalan data berkenaan; manakala update pula bermaksud guna pangkalan data dan data yang sedia ada.

  6. Sekarang saya pinda pada fail DataSources.groovy bagi penggunaan development environment kepada update dan simpan kepada file supaya data yang saya rekod semasa fasa pembangunan tidak hilang setiap kali sesi penggunaan.
    environments {
        development {
            dataSource {
                //ris 20110327 pinda create-drop ke update
                //dbCreate = "create-drop"
                dbCreate = "update"
                //ris 20110327 pinda mem ke file
                //url = "jdbc:hsqldb:mem:devDB"
                url = "jdbc:hsqldb:file:devDB"
            }
        }
        test {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:mem:testDb"
            }
        }
        production {
            dataSource {
                dbCreate = "update"
                url = "jdbc:hsqldb:file:prodDb;shutdown=true"
            }
        }
    }
    Perhatikan saya gunakan komen "//" pada barisan kod supaya kelak mudah untuk saya lihat pada pindaan yang saya telah buat. Tabiat komen adalah penting dalam pengaturcaraan.

  7. Simpankan pindaan yang dibuat pada Netbeans melalui menu File > Save All .

  8. Bina semula pindaan yang dibuat pada Netbeans melalui menu Run > Build Main Project .

  9. Mulakan projek DemoBuku pada Netbeans melalui menu Run > Run Main Project . Setelah 1 minit, pelayar web browser akan memaparkan muka utama DemoBuku pada http://localhost:8080/DemoBuku/

  10. Pada muka utama DemoBuku berkenaan, klik pada controller demobuku.BukuController, dan senarai rekod Buku List akan dipaparkan. Perhatikan senarai ini kosong walaupun pada sesi sebelum ini saya telah menyimpan rekod buku.

  11. Klik pada ikon New Buku untuk tambah rekod baru. Setelah maklumat rekod baru Buku diisi, klik pada butang Create untuk simpan rekod berkenaan.

  12. Klik pada ikon Buku List untuk paparkan senarai rekod Buku List. Senarai ini termasuk rekod baru yang telah disimpan.


  13. Hentikan projek DemoBuku pada Netbeans melalui tab Services di panel kiri : Servers > Jetty (Grails) > DemoBuku on 8080; klik-kanan dan pilih Stop.

  14. Setelah beberapa ketika, mulakan semula projek DemoBuku pada Netbeans melalui menu Run > Run Main Project . Setelah 1 minit, pelayar web browser akan memaparkan muka utama DemoBuku pada http://localhost:8080/DemoBuku/

  15. Pada muka utama DemoBuku berkenaan, klik pada controller demobuku.BukuController, dan senarai rekod Buku List akan dipaparkan. Perhatikan pada senarai ini terdapat rekod yang telah saya simpan sebelum ini.

  16. Klik pada Id bagi rekod buku; ini akan memaparkan maklumat buku bagi rekod berkenaan; kemudian klik pada ikon Edit untuk meminda maklumat berkaitan buku berkenaan.

  17. Setelah maklumat dipinda; klik pada ikon Update. Maklumat rekod berkenaan yang telah dikemaskini akan dipaparkan.

  18. Klik pada ikon Buku List, dan senarai rekod Buku List akan memaparkan senarai rekod termasuk rekod yang telah saya kemaskini.


  19. Hentikan projek DemoBuku pada Netbeans melalui tab Services di panel kiri : Servers > Jetty (Grails) > DemoBuku on 8080; klik-kanan dan pilih Stop.
Menakjubkan ! Dengan hanya meminda dua baris kod, saya boleh mengubah bagaimana untuk konfigurasi perantara GORM dan Hibernate. Pada minggu hadapan saya akan menulis bagaimana untuk konfigurasi menggunakan pangkalan data MySQL pula.

    Rujukan:
    1. http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html
    2. http://www.hibernate.org/
    3. http://en.wikipedia.org/wiki/Model-view-controller
    4. http://hsqldb.org/
    5. http://grails.org/doc/1.0.x/guide/3.%20Configuration.html

      Comments

      Seymour Cakes said…
      Amat menarik.
      Terima kasih atas sumbangan saudara. :-)

      Popular posts from this blog

      Mengganti Ballast / Choke Pada Lampu Kalimantang di Rumah Presint 9B Putrajaya

      Sedikit nota persendirian bagi cara untuk membaiki lampu kalimantang di rumah saya di Presint 9B, Putrajaya. Pada lampu kalimantang di rumah ini terdapat tiub lampu, starter, ballast / choke dan housing, seperti gambarajah dibawah. Kapasitor adalah opsyen yang tidak semestinya ada.



      Sekiranya lampu tidak menyala, cuba dengan menukar starter, kemudian dengan menukar tiub lampu. Jika masih tidak berjaya buka housing kemudian periksa sekiranya ada dawai yang tercabut. Kod warna dawai adalah
      Hitam : HidupPutih : NeutralHijau : Bumi Kod warna di sini adalah pelik kerana mengikut kod warna di Amerika Syarikat dan Kanada. Kebiasaannya di Malaysia kod warna adalah Perang untuk Hidup, Biru untuk Neutral dan Hijau & Kuning untuk Bumi.

      Sekiranya dawai dipasang dengan baik dan lampu masih tidak menyala, serta terdapat kesan terbakar pada hujung dawai Hidup pada Ballast / Choke, ini bermaksud anda perlu menukar ballast berkenaan. Terdapat dua jenis ballast:
      Ballast biasa berharga murah lebih kura…

      5 Larian Marathon Paling Popular di Malaysia, 2017

      Acara larian marathon sejauh 42.2km semakin mendapat ramai penyertaan di Malaysia. Setiap acara mempunyai identiti tersendiri dengan lokasi, laluan, masa bermula dan suasana yang berbeza-beza. 5 acara marathon sepanjang tahun 2017 yang paling popular dari segi bilangan penyertaan adalah :

      1. Standard Chartered KL Marathon : dianggap sebagai acara marathon paling premier di Malaysia. Diadakan di ibukota Kuala Lumpur, sebahagian besar pusat bandar ibukota ini memberi laluan kepada acara premier tahunan ini.


      2. Penang Bridge International Marathon : menawarkan larian paling jauh di atas jambatan, bukan sahaja di Malaysia atau Asia, malah seluruh dunia. Penang juga mempunyai berbagai tarikan yang dapat memenuhi citarasa pengunjung.


      3. Borneo International Marathon : diadakan di Kota Kinabalu menarik pelari marathon Malaysia dengan keindahan Laut Cina Selatan, bayangan Gunung Kinabalu dan pembangunan bandar moden di kepulauan Borneo.


      4. Twincity Marathon : merentas koridor multimedia Cyber…

      Carta Larian Februari 2018 Putrajaya Running Buddies

      Carta Larian Bulan Februari 2018
      Putrajaya Running Buddies Garmin Group



      Ranking berdasarkan :
      15 pelari dari 3 Team terbaik dari bulan lepas akan dikekalkan
      35 pelari terbaik akan disusun mengikut ranking individu pada bulan lepas

      Projek Bela Ikan Guppy

      Catatan pendek berkaitan projek saya untuk membela ikan guppy bersama anak saya yang berumur 6 tahun. Projek ini adalah sebagai pengenalan untuk pelajari cara-cara untuk membela dan menjaga ikan. Ikan guppy telah dipilih kerana ianya dikatakan agak tahan lasak dan senang dijaga oleh pengusaha kedai akuarium.

       Berikut adalah senarai kos dibundarkan ke nilai RM teratas.
      Sabtu, 25 Feb 2012Tangki lebar sekaki RM10Hiasan pokok plastik RM5Hiasan pasir berwarna RM5Penapis air RM30Selasa, 28 Feb 2012Ikan Guppy jantan RM2 seekor (asal 3 ekor tapi seekor mati)Makanan ikan RM5Jumaat, 2 Mac 2012Ikan Guppy betina RM2 seekor (beli 2 ekor tapi keesokannya mati kedua-duanya)Pam udara RM10
      Perkara yang telah kami pelajari adalah: Sentiasa jaga kebersihan air, air yang kotor akan akibatkan ikan mati (apa yang terjadi pada 2 ekor ikan guppy betina)Air perlu digantikan setiap seminggu, sambil itu bilas tangki sehingga bersihApabila mengganti air, gunakan air dari paip air yang bertapis (untuk kurangkan kes…

      Ringkasan Keputusan Larian Twincity Marathon 2018

      Larian Twincity Marathon tahunan yang ke empat telah diadakan pada Ahad, 21 January 2018 bertempat di perkarangan Magic, Cyberjaya.
      Berikut adalah ringkasan keputusan larian berkenaan :



      Perbandingan Maybank2U dan Maybank2E Untuk Syarikat

      Bagi syarikat Sendirian Berhad (Sdn Bhd), pihak Malayan Banking Berhad (Maybank) ada menawarkan dua jenis perkhidmatan bagi perbankan internet iaitu, Maybank2U dan Maybank2E. Terdapat perbezaan ketara antara dua perkhidmatan berkenaan.

      Pertamanya antaramuka pengguna amat berbeza dimana Maybank2U mengguna menu channels melintang dan menu fungsi di sisi, manakala Maybank2E menggunakan tree menu disisi.

      Keduanya, sepertimana untuk individu, Maybank2U memboleh semua pengguna untuk melaksanakan transaksi. Berbeza dengan Maybank2E di mana pengguna terbahagi kepada Data Entry dan Authoriser.

      Maybank2U untuk syarikat mempunyai fungsi yang hampir sama dengan Maybank2U untuk individu, dengan satu perbezaan yang besar, iaitu pengurusan penerima. Bermaksud untuk menambah penerima, pihak syarikat perlu mengemukakan borang pendaftaran penerima ke cawangan bank Maybank berkenaan.

      Senarai Larian Marathon di Malaysia, 2018

      Berikut adalah senarai acara larian marathon sejauh 42km di Malaysia yang telah berlangsung atau diumumkan sepanjang tahun 2018.



      1. Twincity Marathon : pembuka tirai bagi tahun 2018 dengan laluan merentas koridor multimedia Cyberjaya dan pusat pentadbiran kerajaan Putrajaya. Ianya menjadi pilihan pelari kerana amat bermurah dengan tempoh masa 8 jam yang diberikan dan sajian makanan sepanjang laluan dan garisan penamat. Bagi tahun 2018, seramai 1,674 pelari marathon telah menamatkan larian mereka dalam tempoh masa yang ditetapkan. Ringkasan keputusan larian acara Twincity Marathon boleh dibaca di sini.

      Bertukar Dari Yes4G ke Maxis Home Fibre di Putrajaya

      Pada hari Sabtu, 23 Mac 2013, saya telah memasang perkhidmatan jalur lebar Maxis Home Fibre di rumah Putrajaya. Sebelum ini saya menggunakan perkhidmatan Yes 4G. Pertukaran ini atas sebab kos.

      Perkhidmatan Yes 4G menawarkan capaian internet sebanyak 10GB pada kelajuan 5Mbps untuk harga RM150 sebulan. Menggunakan rangkaian 4G, perkhidmatan ini mobile dan boleh digunakan di mana-mana tempat yang mempunyai liputan. Di sepanjang lebuhraya PLUS Utara-Selatan boleh menonton video YouTube sambil bergerak dalam kenderaan.

      Saya mula menggunakan perkhidmatan Yes 4G apabila berpindah ke Putrajaya pada 2011. Ketika itu perkhidmatan broadband lain dari Maxis dan Celcom sangat buruk di kawasan rumah saya di Presint 9. Kelajuan Yes 4G di rumah saya pada purata adalah 5Mbps (adakala lebih dari itu).

      Cuma kuota 10GB ini tidak memadai bagi kami sekeluarga, dan kadang-kadang perlu top-up lagi walaupun belum cukup sebulan. Adakala sehingga berbelanja RM300 (RM150 x 2) sebulan. Maklumat berkaitan kadar pe…

      Carta Bulan Januari 2018 Putrajaya Running

      Carta Bulan Januari 2018
      Garmin Group Leaderboard
      Putrajaya Running Buddies

      Tahniah dan terima kasih kepada semua yang telah sertai carta larian ini yang telah mencatat 6,312km untuk bulan Januari 2018.



      3 Pasukan Terbaik untuk bulan Januari 2018
      Team C (Zulhafizy, Mohd Razlan, Farrah Fadir, Jasmin Lee, Azlan Ishak) mencatat 825km.
      Team G (Alfi Jamilin, Fadzil Yusoff, Akob Ariffin, Nuzid Mohari, Azrul Amin) mencatat 741km.
      Team I (Naszwan, Azizul Ab Ghani, Wani Latif, Muhammad Firdaus, Ramrod) mencatat 695km.

      Hari Pendaftaran Tingkatan 1 MRSM Parit, Perak

      Syukur, pada hari Selasa 15 Januari 2013, saya sekeluarga telah menghantar anak sulung saya mendaftar sebagai pelajar tingkatan 1 di MRSM Parit yang terletak di daerah Perak Tengah. MRSM Parit baru dibuka mengambil pelajar pada pertengahan tahun 2012. Bagi pelajar tingkatan 1 MRSM Parit, mereka akan mengikuti program iGCSE dan akan menduduki peperiksaan taraf O Levels pada tingkatan 4.

      Sekolah tampak bersih dan kemas, serta teratur. Manakala pelajar sediaada nampak selesa dan gembira bersama rakan sebaya. Isteri saya berkata Pengetua agak sampoi apabila menyampaikan taklimat kepada ibubapa pelajar baru. Saya juga berkesempatan berbual dengan Timbalan Pengetua. Semoga urusan dan perancangan pihak sekolah dipermudahkan.