Memakai Jetty sebagai embedded web server


Jetty adalah sebuah web server yang unik.  Hal ini karena Jetty dapat dipakai sebagai embedded web server.  Apa maksudnya?  Biasanya pada aplikasi web, program yang telah kita buat perlu di-‘copy‘ ke sebuah container (web server).  Tapi embedded web server adalah kebalikannya.   Aplikasi kita didalamnya telah mengandung web server, sehingga kita tidak perlu memindahkan kode program ke web server lagi.  Lalu apa gunanya? Embedded web server dapat dipakai pada pengujian aplikasi dimana aplikasi akan dijalankan  pada embedded web  server yang tidak membutuhkan banyak setup serta tidak ‘berat.

Sebagai contoh, saya akan menggunakan Jetty untuk front-end testing secara otomatis.  Proyek saya berjalan pada Cloud Foundry yang memakai Tomcat 6.  Dengan demikian, versi Jetty yang paling mendekati adalah Jetty 7 yang masih memakai spesifikasi Servlet 2.5 sama seperti Tomcat 6.  Sebagai informasi, Jetty sudah mencapai versi 9 yang mendukung spesifikasi Servlet 3.0 seperti Tomcat 7.

Karena memakai Apache Maven, saya dapat menambahkan dependency ke Jetty secara mudah.  Agar mudah, saya menambahkan seluruh JAR yang dibutuhkan (versi aggregate), dengan informasi seperti berikut ini:

Group Id:  org.eclipse.jetty.aggregate
Artifact Id: jetty-all
Version: 7.6.7.v20120910
Scope: test

Disini saya memakai scope test,  yang menunjukkan bahwa artifact JAR Jetty hanya dibutuhkan untuk pengujian saja, bukan untuk menjalankan aplikasi saya.

Saya juga memastikan bahwa servlet-api dan jsp-api sudah ada di dependency Maven:

Group Id: javax.servlet
Artifact Id: servlet-api
Version: 2.5
Scope: provided

Group Id: javax.servlet.jsp
Artifact Id: jsp-api
Version: 2.1
Scope: provided

Saya memakai scope provided, yang menunjukkan bahwa kedua artifact tersebut dibutuhkan untuk melakukan kompilasi kode program, tetapi tidak perlu disertakan sebagai bagian dari proyek karena mereka telah disediakan oleh server.

Dan terakhir, karena implementasi JSP yang saya pakai adalah Jasper,  saya perlu menambahkan artifact Juli (untuk logging di Tomcat) pada dependency Maven:

Group Id: org.apache.tomcat
Artifact Id: juli
Version: 6.0.36
Scope: test

Setelah memastikan  Maven telah men-download semua artifact JAR yang dibutuhkan, saya bisa membuat kode program.  Sebagai contoh, berikut ini adalah penggalan kode program yang menjalankan Jetty sebagai embedded web server:

...
Server server = new Server (8080);
WebAppContext context = new WebAppContext();
context.setDescriptor("../FolderProyek/src/main/webapp/WEB-INF/web.xml");
context.setResourceBase("../FolderProyek/src/main/webapp");
context.setContextPath("/proyek");
context.setParentLoaderPriority(true);
server.setHandler(context);
server.start();
...

Semua proyek web Java selalu memiliki file web.xml.  Yang saya lakukan adalah memberitahu lokasi web.xml yang akan dijalankan pada Jetty.  Selain itu, saya juga memberi tahu lokasi folder yang berisi file HTML, JSP, dan sebagainya (resource base).  Dengan setContextPath(“/proyek”) maka Jetty dapat dipanggil dengan URL seperti http://localhost:8080/proyek.

Sekarang, bila kode program di atas selesai dikerjakan, saya dapat langsung membuka http://localhost:8080/proyek tanpa perlu meng-install  server seperti Tomcat atau GlassFish.

Proyek lain yang cukup menarik adalah Cargo (informasi ada di http://cargo.codehaus.org).  Dengan Cargo, saya bisa memberikan deskripsi server yang akan saya pakai  (misalnya Tomcat, Jetty, GlassFish, dan sebagainya) di kode program.  Nantinya, Cargo yang akan men-download dan men-install server yang dibutuhkan bila belum ada di komputer dimana program saya berjalan, kemudian Cargo akan memindahkan hasil build program secara otomatis.  Jadi bila saya ingin beralih dari Tomcat ke GlassFish, saya hanya perlu mengubah deskripsi server yang saya pakai.  Contoh kegunaan Cargo adalah pada server Continous Integration (CI).  Server CI akan men-checkout hasil kerja masing-masing programmer yang telah digabungkan, lalu menjalankan function testing secara otomatis.  Server CI bekerja secara periodik dan otomatis sehingga bila ditemui kesalahan, developer akan secepat mungkin mendapat notifikasi.

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: