Mengenal Quarkus Panache: Paradigma Baru dalam Java Persistence dan ORM

Ichwan Sholihin
4 min readDec 31, 2023
Photo by quarkus.io

Java Persistence adalah konsep kunci dalam pengembangan aplikasi Java yang berkaitan dengan penyimpanan dan pengambilan data dari basis data, sementara Object-Relational Mapping (ORM) adalah teknik yang memetakan objek dalam aplikasi ke entitas di basis data. Keduanya berperan penting dalam memastikan konsistensi data dan kemudahan akses. Sebagian besar Java Developer pastinya sudah sangat lumrah dalam menggunakan Spring Data JPA pada framework Spring dengan dukungan fitur yang banyak dan lengkap untuk memanipulasi data pada database salah satu contohnya. Namun saat ini terdapat framework alternatif selain Spring yang dapat memanajemen data persistence pada Java dengan fitur yang lebih efisien dan powerful dari Spring Data JPA, yakni Quarkus Panache.

Pengenalan Quarkus

Quarkus merupakan salah satu framework open-source Java yang menyederhanakan pengembangan untuk membangun aplikasi dengan dukungan beberapa bahasa pemrograman selain Java, yakni Kotlin dan Scala. Salah satu fitur utama Quarkus adalah kompilasi ahead-of-time (AOT), yang mengoptimalkan penggunaan resource dan memungkinkan waktu startup yang cepat. Ini menjadikan Quarkus sebagai pilihan ideal untuk mengembangkan aplikasi di lingkungan berbasis container seperti Docker dan Kubernetes. Fokusnya pada optimisasi resource, waktu startup yang cepat, dan pengembangan berbasis cloud membuatnya menjadi pilihan populer untuk pengembangan aplikasi modern.

Sementara itu, Quarkus Panache menjadi salah satu fitur penting pada Quarkus yang memberikan pendekatan baru pada Java Persistence dan ORM dengan memberikan model pemrograman aktif yang memudahkan developer untuk berinteraksi dengan database tanpa kompleksitas persistence layer. Pada artikel ini, kita akan mengimplementasikan secara sederhana penggunaan Quarkus Panache untuk manipulasi object dari database.

Memulai Quarkus

Sama halnya dengan Spring, Quarkus harus diinstal dan inisialisasi project terlebih dahulu. Untuk memulai project dengan Quarkus buka laman

dan isi group, artifact serta build tool yang ingin digunakan. Pada project ini, pilih dependency berikut:

Lalu, klik tombol generate your application dan ekstrak zip serta open project dengan IDE yang digunakan. Pada project ini, kita akan menggunakan PostgreSQL sebagai database dan pastikan anda sudah menginstal pgAdmin sebelumnya.

Jika project sudah selesai diekstrak, jalankan perintah berikut pada terminal untuk menginstal quarkus:

curl -Ls https://sh.jbang.dev | bash -s - trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio

Agar lebih mudah dalam menggunakan Quarkus, install Extension (jika menggunakan VSCode) atau Plugin (IntellIj IDEA) Quarkus Tools yang dikembangkan oleh Red-Hat.

Kemudian buka package src->main->resources->application.properties dan tambahkan konfigurasi file berikut:

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=postgres
quarkus.datasource.password=admin
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5433/my_book_db
quarkus.hibernate-orm.database.generation=drop-and-create

Ubah username dan password sesuai kebutuhan. Untuk generate database kita akan menggunakan skema drop-and-create yang mana setiap project starting akan dihapus dan dibuat ulang. Pastikan juga untuk membuat database terlebih dahulu dengan nama my_book_db pada postgreSQL.

Quarkus Panache menyediakan dua pola (pattern) utama dalam mengakses dan memanipulasi data: Active Record Pattern dan Repository Pattern. Kedua pattern ini memberikan pendekatan yang berbeda dalam interaksi dengan database. Berikut adalah penjelasan singkat dan implementasi untuk masing-masing pattern:

Active Record Pattern

Active Record adalah design pattern di mana object dalam aplikasi menyimpan data mereka sendiri langsung ke dan dari database. Dengan kata lain, setiap objek di aplikasi memiliki tanggung jawab langsung untuk menyimpan dan mengambil data dari database. Setiap entity dalam aplikasi (biasanya sebuah class) adalah turunan dari kelas PanacheEntity. Properties dari class tersebut secara langsung mencerminkan kolom-kolom di tabel database. Dengan menggunakan pattern ini, operasi CRUD (Create, Read, Update, Delete) dapat dilakukan langsung pada instance objek tanpa perlu lapisan perantara. Berikut adalah contoh gambaran sebuah entity yang menerapkan active record pattern:

Ketika meng-extends PanacheEntity , Quarkus menyediakan method CRUD serta secara otomatis akan men-generate ID pada entity tersebut dan diharuskan menggunakan access modifier public pada setiap properties. Tetapi jika kita ingin meng-custom ID pada class diatas, ubah extends PanacheEntity ke class PanacheEntityBase dan tambahkan property ID.

Repository Pattern

Repository adalah design pattern di mana operasi-operasi database diisolasi dalam class terpisah yang disebut sebagai “repository.” Repository bertanggung jawab untuk menyediakan metode-metode yang diperlukan untuk mengakses dan memanipulasi data dalam database.

Sama halnya dengan design pattern pada Spring Boot, entity (class) dalam aplikasi tidak memiliki tanggung jawab langsung untuk berinteraksi dengan database. Sebaliknya, operasi-operasi database didefinisikan dalam class repository yang terpisah. Class repository ini menyediakan metode-metode seperti findById, persist, update, dan delete yang digunakan untuk melakukan operasi CRUD.

Pemilihan antara Active Record dan Repository tergantung pada kompleksitas aplikasi, preferensi developer, dan kebutuhan spesifik project. Beberapa project mungkin merasa nyaman dengan kejelasan Active Record, sementara project yang lebih besar dan kompleks mungkin lebih memilih struktur Repository untuk meningkatkan pemeliharaan dan pengujian.

Salah satu fitur menarik dari Quarkus adalah kemampuannya untuk menjalankan aplikasi tanpa memerlukan kelas utama (main class) secara eksplisit. Hal ini dapat terjadi karena Quarkus menggunakan teknologi yang disebut “Classpath scanning” (pemindaian classpath). Biasanya, dalam aplikasi Java, kita memiliki kelas utama yang memiliki method main yang dieksekusi saat aplikasi dimulai. Namun, Quarkus menggunakan mekanisme pemindaian classpath untuk menemukan bean atau komponen yang perlu dimuat dan dijalankan.

Untuk detail source code dan cara menjalankan pada masing-masing entity diatas, kunjungi repository berikut:

Referensi:

--

--