suhe arie's pages

Programmer juga manusia

Java Enterprise, mulai dari mana ? (part 2 – Netbeans & Glassfish)

Artikel ini merupakan tutorial yang berisi aplikasi kalkulator sederhana dengan menggunakan arsitektur Java EE. Jika Anda belum tahu tentang apa itu Java EE, silahkan baca artikel ini terlebih dahulu. Kali ini kita akan menggunakan Netbeans 6.1 sebagai IDE dan Glasshfish v2 sebagai application servernya.

1. Download & install

Kedua software tersebut bisa didownload sekaligus di http://download.netbeans.org/netbeans/6.1/final/. Install netbeans dan glassfish di komputer Anda dengan mengikuti wizard.

2. Setup Project

Start Netbeans, pilih menu File -> New Project.
Pada dialog New Project, pilih categori Enterprise -> Enterprise Application, klik Next.

Masukkan nama project TestEnterpriseProject.

Pilih Server Glassfish V2, Java EE Version 5, dan pastikan Anda mengaktifkan pilihan Create EJB Module dan Create Web Application Module, kemudian klik Finish.

Maka Netbeans akan mengcreate project TestEnterpriseProject sebagai project utama, project TestEnterpriseProject-ejb sebagai sub-project untuk modul EJB, dan TestEnterpriseProject-war sebagai sub-project untuk modul web.

Struktur project seperti tampak pada gambar berikut:

3. EJB module

Ada 3 macam EJB dalam spesifikasi EJB versi 3.0 (EJB3) :

a. Session Bean
Session bean adalah EJB yang digunakan untuk mengeksekusi proses. Isi dari Session Bean ini biassanya berupa kata kerja (transfer, pay, calculate, updateData, dll). Stateless Session Bean (SLSB) adalah Session Bean yang tidak menyimpan state (keadaan) pada setiap kali eksekusi. Berbeda dengan Statefull Session Bean (SFSB) yang dapat menyimpan state. State ini dapat kita gunakan misalnya untuk menyimpan informasi user atau barang-barang yang sudah dibeli (pada kasus online shop).

b. Entity Bean
Entity Bean adalah EJB yang digunakan untuk mempermudah manipulasi database. Konsepnya adalah Object – Relational Mapping (ORM) yang berarti memetakan object dengan data di dalam database. Entity Bean sebenarnya adalah spesifikasi “bawaan” dari versi EJB sebelumnya yaitu EJB 2.1. Dalam EJB3, ada API lain yang lebih sederhana yaitu Java Persistence API (JPA). Sekarang orang lebih banyak menggunakan JPA dibandingkan Entity Bean.

c. Message Driven Bean
Message Driven Bean (MDB) adalah EJB yang digunakan untuk keperluan messaging menggunakan Java Messaging Service (JMS).

Kali ini kita akan menggunakan Stateless Session Bean. Session Bean karena kita akan melakukan pertihutang matematik, Stateless karena kita tidak perlu menyimpan informasi apapun.

Klik kanan di sub-project EJB, pilih New -> Session Bean. Masukkan properties berikut:
EJB Name: CalculatorSession
Package: suhearie.blog.enterprise.ejb
Session Type: Stateless
Create Interface: Local

Netbeans secara otomatis akan meng-create class CalculatorSessionBean sebagai bean class dan CalculatorSessionLocal sebagai interface. Untuk membuat Session Bean, kita membutuhkan sebuah interface dan sebuah class. Interface digunakan untuk menentukan method apa yang bisa dipanggil oleh client, sedangkan bean class merupakan implementasi dari method tersebut.

Business Logic Interface – Local
Interface CalculatorSessionLocal diberi annotation @Local, artinya interface ini bisa diakses oleh client yang “local” atau berada dalam JVM yang sama dengan EJB server. Client yang kita gunakan adalah web component (JSP dan Servlet) yang berjalan di application server yang sama, sehingga kita cukup menggunakan Local interface. Di interface ini, kita hanya mendefinisikan satu method saja yaitu calculate yang menerima parameter-parameter berupa OPERATION, operand1 dan operand2.

package suhearie.blog.enterprise.ejb;

import javax.ejb.Local;

/**
 *
 * @author sarianto
 */
@Local
public interface CalculatorSessionLocal {

    public enum OPERATION {ADD, SUBSTRACT, MULTIPLY, DIVIDE};

    public int calculate(OPERATION operation, int oper1, int oper2);

}

Bean Class – Business Logic Implementation
Class CalculatorSessionBean adalah implementasi dari interface CalculatorSessionLocal. Kita menandainya dengan annotation @Stateless yang berarti kita mendefinisikannya sebagai Stateless Session Bean. Pada implementasi method calculate, kita melakukan perhitungan matematika yang sebenarnya.

package suhearie.blog.enterprise.ejb;

import javax.ejb.Stateless;

/**
 *
 * @author sarianto
 */
@Stateless
public class CalculatorSessionBean implements CalculatorSessionLocal {

    public int calculate(OPERATION operation, int oper1, int oper2) {
        switch(operation) {
            case ADD:
                return oper1+oper2;
            case SUBSTRACT:
                return oper1-oper2;
            case MULTIPLY:
                return oper1*oper2;
            case DIVIDE:
                return oper1/oper2;
            default:
                throw new UnsupportedOperationException("Not supported yet.");
        }
    }
}

4. Web Module

Kita akan menggunakan web sebagai user inteerface. Komponen yang akan digunakan adalah Servlet dan JSP.

a. Servlet
Servlet adalah komponen web yang berupa java class yang mengextends javax.servlet.http.HttpServlet. Class ini biasanya digunakan untuk menangani http request, melakukan processing, kemudian memberikan hasil processing tersebut ke halaman JSP untuk ditampilkan di browser. Konsep ini disebut Model-View-Controller (MVC).

b. Java Server Page (JSP)
JSP mirip dengan PHP atau ASP yang merupakan halaman HTML yang dapat disisipi dengan kode java (scriplet). Tujuannya untuk memudahkan developer dalam merancang user interface.

File index.jsp, kita gunakan untuk membuat form html yang akan mensubmit parameter-parameter yang digunakan untuk melakukan perhitungan. Netbeans sudah menyediakan file index.jsp ini di dalam folder TestEnterpriseProject-war -> Web Pages. Edit file tersebut sehingga menjadi seperti berikut. Form html disubmit ke servlet (CalculatorServlet), yang sesaat lagi akan kita buat.

<html>
    <head>
        <title>Java EE Calculator</title>
    </head>
    <body>
<h2>Welcome to Java EE Calculator Test Project !</h2>
<form action='<%=request.getContextPath()%>/CalculatorServlet' method='POST'>
            Operation:
            <select name="operation">
                <option selected value="ADD">ADD</option>
                <option value="SUBSTRACT">SUBSTRACT</option>
                <option value="MULTIPLY">MULTIPLY</option>
                <option value="DIVIDE">DIVIDE</option>
            </select>

            Operand 1:<input type="text" name="oper1" value="0" />

            Operand 2:<input type="text" name="oper2" value="0" />

            <input type="submit" value="Calculate" name="Calculate" />
        </form>
    </body>
</html>

Create servlet, dengan cara klik kanan di module TestEnterpriseProject-war, pilih New -> Servlet. Isikan class name CalculatorServlet, dan package suhearie.blog.enterprise.servlet. Klik next, pastikan option untuk memasukkan informasi servlet ini ke file deployment descriptor diaktifkan, kemudian klik finish.

Modifikasi servlet tersebut menjadi seperti berikut.
Di class ini kita memiliki satu class variable bertipe CalculatorSessionLocal dan memberinya annotation @EJB yang berarti application server akan meng-inject object tersebut secara otomatis ke dalam servlet kita. Konsep ini disebut dengan dependency injection. Selanjutnya, kita mengambil parameter-parameter yang dikirim melalui http request, kemudian menggunakan session bean untuk melakukan perhitungan berdasarkan parameter-parameter tersebut. Hasil perhitungan kita masukkan sebagai attribut di object request. Untuk menampilkannya, kita akan memforward request menuju ke halaman JSP CalculatorPage.jsp (kita buat sesaat lagi) menggunakan RequestDispatcher.

package suhearie.blog.enterprise.servlet;

import java.io.*;

import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.http.*;
import suhearie.blog.enterprise.ejb.CalculatorSessionLocal;

/**
 *
 * @author sarianto
 */
public class CalculatorServlet extends HttpServlet {

    /**
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
    @EJB
    CalculatorSessionLocal calculatorSession;
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String operation = request.getParameter("operation");
        int oper1 = Integer.parseInt(request.getParameter("oper1"));
        int oper2 = Integer.parseInt(request.getParameter("oper2"));

        int result = calculatorSession.calculate(CalculatorSessionLocal.OPERATION.valueOf(operation), oper1, oper2);
        request.setAttribute("result", result);
        request.getRequestDispatcher("/CalculatorPage.jsp").forward(request, response);
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
}

File CalculatorPage.jsp, kita gunakan untuk menampilkan hasil perhitungan.

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Java EE Calculator</title>
    </head>
    <body>
<h2>Java EE Calculator Result:</h2>
Operation: <%=request.getParameter("operation")%>
        Operand 1: <%=request.getParameter("oper1")%>
        Operand 2: <%=request.getParameter("oper2")%>
        Result:<B> <%=  request.getAttribute("result")%></B>
        <a href='<%=request.getContextPath()%>/'>BACK</a>
    </body>
</html>

Setelah selesai semua, pindah ke tab Services, buka tree Servers, klik kanan di Glassfish, pilih Start untuk menjalankan Glassfish application server. Setelah glassfish berjalan, kembali ke tab Projects, klik kanan di TestEnterpriseProject, pilih Undeploy and Deploy. Setelah proses undeploy dan deploy selesai, buka web browser anda dan masukkan alamat http://localhost:8080/TestEnterpriseProject-war, dan Anda akan melihat halaman seperti berikut:

Masukkan parameter, kemudian klik tombol Calculate, maka hasilnya akan ditampilkan:

Advertisements

August 26, 2008 - Posted by | Java, Java Enterprise | , , , , , ,

15 Comments »

  1. πŸ™‚

    Comment by Fadhl Rafiqi | August 26, 2008 | Reply

  2. Nice tutorial πŸ™‚ thx bro…

    Comment by Alvin Laurent | September 11, 2008 | Reply

  3. wah bro, ane beginner di java, ini sangat membantu dalam ane utk belajar JEE, thanks bro,

    di tambah lagi tutorial mengenai JEE nya donk, tutorial menggunakan databasenya sekalian yang ada CRUD

    Comment by budi | January 16, 2009 | Reply

  4. wah, htx mas tutorialnya

    btw nulis lagi donk tutorial selanjutnya πŸ™‚

    Comment by harisrozak | January 24, 2009 | Reply

  5. thank om tutornya sangat membantu πŸ™‚

    Comment by ferdy_kruak | May 4, 2009 | Reply

  6. akhirnya ketemu jg tutorial yg cocok buat ane yg baru belajar java ee.
    makasih banyak ya mas suhendra, ngebantu bgt dalam pemahaman java ee.
    :2thumbup

    Comment by Diaz Pradiananto | October 5, 2011 | Reply

  7. bingung ,,,
    masih error prram ane,,
    ane lagi bkin forum diskusi memakai netbeans and glassfish,
    pake wamp server juga,
    tapi ketika mau ganti Login Adminnya, gak bisa lagi,,
    apanya yg slah itu gan??
    ada yg mau bantu ane gak??
    udah diganti Ph sama Java admi Forum dksusi nya.
    teteeeeppp aja error, 😦

    Comment by Hikaru | October 16, 2011 | Reply

    • Wah.. ane bingung sama pertanyaannya πŸ˜€

      Comment by suhearie | January 26, 2012 | Reply

  8. contohin yg ad CRUDnya bro.. tutorialnya mantap

    Comment by satria | December 6, 2011 | Reply

    • Hehe.. yah ini kan namanya juga pengenalan. Silahkan bikin sendiri, trus dishare gitu πŸ™‚
      Ada sih tutorial pake database, tp pake jdbc biasa.

      Comment by suhearie | January 26, 2012 | Reply

  9. Gan q ghe ada Tugas bikin Sistem informasi Nilai Mahasiswa Online…
    kira” aga punya tutoriannya gx?
    mohon bantuannya ga…
    sebelumnya thx…
    mohon balasannya…

    Comment by shadull | May 27, 2012 | Reply

    • Sorry, ga bisa ngelayanin request seperti ini. Coba dulu, kalo ada masalah, silahkan bertanya.

      Comment by suhearie | October 26, 2012 | Reply

  10. kok resultny null y?

    Comment by Sylvia | November 8, 2012 | Reply

    • Null banyak sebabnya, harus dicek satu per satu dimana kesalahannya. Silahkan cek lagi source code nya atau tambahkan tracing, atau debug.

      Comment by suhearie | November 12, 2012 | Reply

  11. kk saya udah ikutin langkahnya step by step, tapi saat saya klik calculate untuk keluarin hasilnya keluar error seperti ini https://www.dropbox.com/s/il697hpcwh31wvx/eror.png

    kiraΒ² ini kenapa ya??

    Comment by Adiyat Mubarak (@adiyatmubarak) | February 20, 2013 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: