Mengatur Koneksi Database Di simple-jpa 0.5


Setelah menggunakan plugin simple-jpa pada beberapa proyek Griffon, saya mulai memiliki beberapa ide perubahan.   Untuk itu, saya perlu menghabiskan banyak waktu luang.   Perubahan ini akan membuat versi 0.5 tidak compatible dengan versi sebelumnya, tapi (setidaknya) bagi saya, ini akan membuat simple-jpa menjadi lebih baik.   Perjalanan mencapai 0.5 memang masih panjang, seiring dengan perubahan yang saya terapkan secara perlahan-lahan.   Salah satu penambahan fitur yang baru saja saya selesaikan adalah fitur yang berkaitan dengan pengaturan properties untuk sebuah persistence unit.

Sebuah masalah yang saya hadapi pada saat deployment adalah bagaimana melakukan penyesuaian konfigurasi di persistence.xml setelah aplikasi selesai dibuat dan siap didistribusikan.   Saya sering kali perlu mengubah nilai JDBC URL untuk merujuk ke lokasi IP komputer yang menjalankan database, beserta user atau password untuk database tersebut.   Sebagai contoh, saya pernah men-deploy aplikasi yang sama di tiga komputer berbeda (di lokasi berbeda) yang mengakses server database yang berbeda.   Masalahnya adalah file persistence.xml berada dalam file JAR. File tersebut sudah di-sign sehingga file persistence.xml di dalam file JAR (format zip) tidak dapat diubah begitu saja.   Apa yang harus saya lakukan agar dapat mengubah atribut koneksi tanpa harus men-compile dan mendistribusikan ulang aplikasi?  Solusinya?

Pada versi 0.5, simple-jpa akan membaca isi file simplejpa.properties di lokasi direktori dimana program dijalankan.   Bila file ini ditemukan, maka isi dari file tersebut akan menimpa nilai properties yang ada di persistence.xml.   Contoh isinya akan terlihat seperti:

javax.persistence.jdbc.url="jdbc:mysql://192.168.1.100/database"
javax.persistence.jdbc.user="scott"
javax.persistence.jdbc.password="tiger"

File tersebut akan dibaca oleh ConfigSlurper dari Groovy, sehingga isinya juga bisa seperti berikut ini:

javax {
  persistence {
    jdbc {
      url = "jdbc:mysql://192.168.1.100/database"
      user = "scott"
      password = "tiger"
    }
  }
}

Isi dari file simplejpa.properties juga dapat disesuaikan dengan environment Griffon yang sedang aktif (misalnya "development" atau "production"), seperti pada contoh berikut ini:

environments {
  development {
    hibernate.dialect = "org.hibernate.dialect.DerbyDialect"
    javax.persistence.jdbc.driver = "org.apache.derby.jdbc.EmbeddedDriver"
    javax.persistence.jdbc.url = "jdbc:derby://localhost:1527/latihan"
    javax.persistence.jdbc.user = "user"
    javax.persistence.jdbc.password = "password"
  }
  production {
    hibernate.dialect = "org.hibernate.dialect.MySQL5Dialect"
    javax.persistence.jdbc.driver = "com.mysql.jdbc.Driver"
    javax.persistence.jdbc.url = "jdbc:mysql://localhost/latihan"
    javax.persistence.jdbc.user = "user"
    javax.persistence.jdbc.password = "password"
  }
}

Pada konfigurasi di atas, bila pengguna menjalankan aplikasi saat development (misalnya dengan men-klik tombol Run dari IDE), maka yang akan dipakai adalah sebuah database JavaDB (Derby).   Bila aplikasi tersebut dijalankan melalui hasil distribusi file JAR-nya (environment production), maka yang akan dipakai adalah sebuah database MySQL Server.

Selain itu, pengguna tidak serta merta harus memakai file bernama simplejpa.properties, karena nama dan lokasi file tersebut dapat diatur di Config.groovy dengan memberikan baris seperti berikut ini:

griffon.simplejpa.entityManager.propertiesFile = "C:\\database\\db.properties"

Selain melalui Config.groovy, nama file properties tersebut juga dapat dikonfigurasi dengan menggunakan system properties.   Sebagai contoh, sebuah aplikasi dalam bentuk file JAR telah diatur untuk membaca file C:\database\db.properties.   Bila saya ingin memaksanya untuk membaca konfigurasi di file C:\sementara\simplejpa.properties tanpa harus men-compile ulang aplikasi tersebut, maka saya dapat memberikan perintah seperti ini saat menjalankan aplikasi:

C:\> java -Dgriffon.simplejpa.entityManager.propertiesFile=C:/sementara/simplejpa.properties -classpath "%CP%" griffon.swing.SwingApplication

Properties untuk persistence unit yang diawali dengan javax.persistence juga dapat dilewatkan melalui system properties, seperti berikut ini:

C:\> java -Djavax.persistence.jdbc.url=jdbc:mysql://192.168.1.101/latihan -Djavax.persistence.jdbc.user=user ...

Sebagai informasi, Hibernate JPA juga akan membaca properties dari system properties yang diawali dengan hibernate seperti hibernate.hbm2ddl.auto.   Ini adalah fitur khusus untuk Hibernate dan bukan merupakan bagian dari JPA.

Bila properties didefinisikan di beberapa tempat, maka simple-jpa akan memakainya berdasarkan urutan berikut (prioritas paling rendah ke paling tinggi):

  1. Isi file persistence.xml.
  2. Konfigurasi di Config.groovy.
  3. Properties yang dilewatkan melalui system properties adalah prioritas paling tinggi yang akan menimpa nilai sebelumnya.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

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

%d blogger menyukai ini: