Javalite RESTful Controller

Sama seperti framework lain yang berbasis mvc, controller merupakan sebuah class yang berperan penting untuk menerima dan mengembalikan request yang dilakukan oleh user. Pada javalite, controller terdapat pada framework activeweb, dan berperan juga sebagai route aplikasi yang akan kita buat.

Untuk membuat sebuah class sebagai controller pada javalite, caranya hanya dengan meng-extends class org.javalite.activeweb.AppController dan menyimpan class tersebut pada directory app.controllers seperti berikut :

package app.controllers;
import org.javalite.activeweb.AppController;

public class HomeController extends AppController {
   @GET
   public void index(){
      render().noLayout();
      respond("Hello world, selamat datang di home controller");
   }
}

Karena controller pada javalite berfungsi sebagai routing aplikasi, semua controller javalite dapat diakses dengan pola url

http://HOST:PORT/CONTEXT/CONTROLLER_NAME/{ACTION}/{ID}

Dengan pola tersebut, maka HomeController diatas dapat diakses sebagai url seperti berikut:

http://localhost:8080/home/index

HOST = localhost
PORT = 8080
CONTEXT = / (misal class HomeController berada di folder ‘master’, maka context = ‘/master’)
CONTROLLER_NAME = home
ACTION = index (action dengan nama ‘index’ bisa tidak dituliskan)

Pada controller diatas terdapat sebuah anotasi yang disimpan diatas sebuah aksi, anotasi tersebut menandakan HTTP Method yang digunakan pada aksi tersebut. Pada contoh diatas aksi index dapat diakses dengan method GET. Selain @GET method lain dapat di tulis dengan anotasi @POST, @DELETE, @PUT, @HEAD.

Lalu, bagaimana dengan RESTful controller?

Untuk membuat sebuah class menjadi RESTful controller pada javalite, caranya sama dengan membuat controller biasa seperti diatas, namun dengan tambahan sebuah anotasi @RESTful. Dengan menambah anotasi tersebut maka controller tersebut akan dikenal sebagai sebuah RESTful controller oleh javalite, dan dengan menambahkan anotasi tersebut juga, maka class tersebut harus harus memiliki satu set methods yang sudah ditentukan. Berikut contoh class RESTful controller:

package app.controllers;

import org.javalite.activeweb.AppController;
import org.javalite.activeweb.annotations.RESTful;

@RESTful
public class BookController extends AppController {
   public void index() { }
   public void newForm() { }
   public void create() { }
   public void show() { }
   public void editForm() { }
   public void update() { }
   public void destroy() { }
}

Pada RESTful controller, kita tidak perlu menuliskan Http method apa yang digunakan pada aksi yang ada dicontroller tersebut. Lalu, untuk mengakses RESTful controller diatas sebagai url dapat dijelaskan pada tabel berikut

HTTP Method Path Action
GET /book Index
GET /book/new_form
/book/new-form
newForm
POST /book create
GET /book/id show
GET /book/id/edit-form
/book/id/edit_form
editForm
PUT /book/id update
DELETE /book/id destroy

Diatas merupakan penjelasan singkat bagaimana membuat sebuah RESTful controller dan bagaimana mengakses RESTful controller di javalite. Selamat mencoba.

Javalite Http Client

Javalite HTTP merupakan sebuah library dari javalite untuk membuat sebuah request http ke client. Sebenarnya untuk http client sendiri kita dapat menggunakan HttpClient milik apache yang lebih sering digunakan, tetapi library Http dari javalite ini dapat menjadi pilihan lain untuk melakukan request http ke client. Mari kita lihat apa saja yang dapat kita lakukan dengan library ini.

Untuk memulai menggunakan javalite http, kita dapat menambahkan dependency javalite-common kedalam build tools yang kita gunakan

Maven

<dependency>
   <groupId>org.javalite</groupId>
   <artifactId>javalite-common</artifactId>
   <version>2.0</version>
</dependency>

Gradle

compile group: 'org.javalite', name: 'javalite-common', version: '2.0'

GET

Untuk membuat request get ke client menggunakan library Http, kita dapat membuatnya seperti berikut:

Get get = Http.get(“http://example.com”);
System.out.println(get.text());
System.out.println(get.headers());
System.out.println(get.responseCode());

Penjelasan untuk baris kode diatas yaitu kita melakukan request menggunakan method GET ke client http://example.com dan menampilkan pada console berupa response body, response headers, dan response code. Class Get diatas merupakan sebuah class yang menampung response dari client dengan request method get. Sedangkan untuk mengolah response dari client kita dapat menggunakan fungsi – fungsi berikut

  1. Method.text() : untuk mendapatkan responseBody
  2. Method.headers() : untuk mendapatkan responseHeaders
  3. Method.responseCode() : untuk mendapatkan responseCode

POST

Untuk melakukan request POST ke client, dapat menggunakan banyak cara, misalkan kita akan melakukan request POST ke client dengan data berupa JSON, maka kita dapat membuatnya seperti berikut :

Post post = Http.post(“http://example.com/post-json”, json)
                .header(“Accept”, “application/json”)
                .header(“Content-Type”, “application/json”);

Atau, jika kita bekerja dengan form, maka kita tidak perlu repot untuk mengubah data dari form input ke JSON, kita dapat mengirimkan langsung input dari form menggunakan param.

Post post = Http.post(“http://example.com/post”)
                .param(“firstname”, “john”)
                .param(“lastname”, “doe”);

Sama seperti request GET, pada request POST kita menampung response dari client pada class Post, dan untuk mengolah response dari client kita dapat memanggil fungsi post.text(), post.header() atau post.responseCode()

MULTIPART REQUEST

Pada kasus tertentu, kita ingin mengirimkan sebuah file ke client, maka kita dapat menggunakan multipart request menggunakan javalite http, berikut contoh penggunaan multipart request:

Multipart mp = Http.multipart(“http://example.com/post-multipart”)
                   .field(“filename”, “doc1”)
                   .file(“file”, “/home/example/doc1.txt”);

Diatas merupakan beberapa contoh simple dalam melakukan request menggunakan library Http milik javalite, tentunya penggunaan library ini dapat diexplore lebih jauh lagi sesuai kebutuhan. Selamat mencoba.

Menggunakan ActiveJDBC Sebagai ORM

ActiveJDBC merupakan salah satu framework dari javalite yang digunakan sebagai ORM (Object-relational mapping). Sebagai sebuah ORM, ActiveJDBC dapat mensupport banyak database yaitu SQLServer, MySQL, Oracle, PostgreSQL, H2, SQLite3, DB2.

Seperti yang sudah dijelaskan pada postingan sebelumnya tentang Mengenal Javalite, bahwa framework yang terdapat pada javalite dapat digunakan atau di integrasikan dengan framework lain, lalu bagaimana menggunakan ActiveJDBC?

Setting library

Untuk menggunakan ActiveJDBC yang pertama kali harus dilakukan yaitu menambahkan library kedalam build tools yang digunakan pada project kita

Maven

<plugin>
  <groupId>org.javalite</groupId>
  <artifactId>activejdbc-instrumentation</artifactId>
  <version1.4.13</version>
  <executions>
    <execution>
      <phase>process-classes</phase>
      <goals>
      	<goal>instrument</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<dependencies>
  <dependency>
    <groupId>org.javalite</groupId>
    <artifactId>activejdbc</artifactId>
    <version>1.4.13</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.34</version>
  </dependency>
</dependencies>

Gradle

buildscript {
  repositories {
  	mavenCentral()
  }
  dependencies {
  	classpath group: 'org.javalite', name: 'activejdbc-gradle-plugin', version: '2.0'
  }
}
apply plugin: 'org.javalite.activejdbc'

dependencies {
  // ActiveJDBC
  compile group: 'org.javalite', name: 'activejdbc-gradle-plugin', version: '2.0'
}

Membuat Model

Untuk membuat sebuah model dapat dilakukan dengan mudah, yaitu dengan membuat sebuah class yang mengextends class Model yang disediakan ActiveJDBC. Dengan mengextends class Model dari ActiveJDBC, class yang kita buat akan secara langsung termapping dengan table yang sudah didefinisikan pada anotasi @Table

@Table(“mst_pegawai”)
Public class Pegawai extends Model {}

Koneksi Database

Untuk koneksi database menggunakan ActiveJDBC cukup dengan memanggil fungsi Base.open dengan parameter driver, url, username dan password database. Seperti contoh berikut

Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/simple", "user","password");

Operasi CRUD

Contoh simple penggunaan ActiveJDBC untuk seleksi data adalah sebagai berikut

List<Pegawai> daftarPegawai = Pegawai.where(“first_name = ?”, “John”);
Pegawai pegawai = daftarPegawai.get(0);

Method where() diatas akan digenerate menjadi sebuah query select * from mst_pegawai where first_name = ‘John’. Untuk menambah record baru atau insert dapat menggunakan cara seperti berikut

Pegawai p = new Pegawai();
p.set(“first_name”, “John”);
p.set(“last_name”, “Doe”);
p.saveIt();

Dengan kode diatas maka akan ditambahkan pegawai baru dengan first_name = John dan last_name = Doe. Untuk melakukan update data, dapat dengan melakukan seleksi pada data yang akan diupdate, lalu update data seperti contoh berikut

Pegawai pegawai = Pegawai.findById(1);
Pegawai.set(“last_name”, “Doe2”);
Pegawai.saveIt();

Sedangkan untuk fungsi delete, dapat dilakukan seperti fungsi update yaitu melakukan seleksi data yang akan didelete lalu panggil fungsi delete()

Pegawai pegawai = Pegawai.findById(1);
pegawai.delete();

Transaction

Fungsi terakhir yang akan penulis jelaskan yaitu transaction. Untuk melakukan transaction dapat memulai dengan memanggil fungsi Base.openTransaction(), untuk melakukan commit dapat memanggil fungsi Base.commitTransaction(), sedangkan untuk melakukan rollback dapat memanggil fungsi Base.rollbackTransaction(). Berikut contoh penggunaan transaction pada ActiveJDBC

try{
    Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/simple", "user","password");
    Base.openTransaction();
    
    Pegawai p = new Pegawai();
    p.set(“first_name”, “John”);
    p.set(“last_name”, “Doe”);
    p.saveIt();
    
    Base.commitTransaction();
}catch(Exception e){
    Base.rollbackTransaction()
}finally{
    Base.close()
}

Mengenal Javalite

Javalite merupakan sekumpulan framework yang digunakan untuk menyederhanakan tugas seorang developer dalam membangun aplikasi. Sekumpulan framework yang disediakan oleh javalite yaitu sebagai berikut:

captuasdre

Sekumpulan framework tersebut dapat digunakan sesuai kebutuhan, misal kita akan membuat aplikasi web menggunakan javalite, maka kita dapat menggunakan ActiveWeb untuk aplikasi webnya, dan ActiveJDBC sebagai ORM nya. Pada penerapannya framework ini juga dapat bekerja dengan framework lain, contohnya kita dapat menggunakan ActiveJDBC sebagai ORM pada framework spark, penggunaan JSpec sebagai unit testing pada framework lain, dan masih banyak lagi penggunaan lainnya.

Dengan banyaknya pilihan framework java yang tersedia saat ini, memang javalite bukan framework yang terkenal atau umum digunakan. Namun framework ini dapat menjadi pilihan jika ingin menggunakan framework lain yang lebih “ringan”. Sesuai dengan tagline dari javalite sendiri “light as a feather”, framework ini berdasarkan pengalaman penulis memang tergolong lebih ringan dan mudah digunakan dibandingkan dengan framework yang sudah ada sekarang.

Beberapa kemudahan yang penulis rasakan ketika menggunakan framework ini salah satunya adalah minimnya penggunaan anotasi pada kode. Tidak seperti framework spring atau framework lainnya, javalite tidak banyak menggunakan anotasi.

contoh

Javalite sendiri secara default menggunakan maven sebagai build manager nya, namun bagi yang tidak terbiasa menggunakan maven, framework ini juga dapat menggunakan gradle. seperti framework lain yang menggunakan metode mvc, javalite memiliki tiga komponen penting yaitu Model, View dan Controller. Model pada framework ini menggunakan ActiveJDBC yang disimpan pada direktori src/main/java/app/models,  sedangkan View pada framework ini menggunakan freemarker untuk templating nya yang tersimpan pada direktori webapp/WEB-INF/views, dan Controller yang berfungsi sebagai routing tersimpan pada direktori src/main/java/app/controllers.

berikut contoh struktur project penggunaan javalite (ActiveWeb, ActiveJDBC dan DB Migrator) untuk aplikasi web.

structure

Berdasarkan pada pengalaman penulis menggunakan framework javalite, framework ini memiliki kelebihan dan kelemahan dibandingkan framework lain.

Kelebihan :

  1. Mudah digunakan bagi pemula atau bagi yang baru memulai belajar menggunakan framework java.
  2. Mudah untuk di pelajari, karena tergolong mirip dengan framework mvc lainnya.

Kekurangan :

  1. Dokumentasi yang minim
  2. Tidak memiliki basis komunitas yang besar

Dengan kelebihan dan kekurangan yang dimiliki framework ini, penulis menganggap framework ini layak digunakan untuk membangun aplikasi kecil atau menengah, namun tidak disarankan untuk digunakan dalam membangun aplikasi besar atau komersil, mengingat komunitas pengguna framework ini yang tidak besar, dan dokumentasi nya yang minim.

sumber:

  1. http://javalite.io
  2. https://github.com/javalite