suhe arie's pages

Programmer juga manusia

Java Enterprise, mulai dari mana ? (part 3 – Eclipse & JBoss)

Ini sebenarnya hanya perbandingan saja, saya ingin mencoba membuat aplikasi yang persis sama dengan yang ada di artikel sebelumnya. Bedanya, di part 2, saya membuatnya dengan IDE Netbeans dan mendeploynya di Glassfish, sedangkan kali ini saya akan menggunakan IDE Eclipse 3.4 for Java EE developer dan mendeploynya di JBoss versi 4.2.2.

Karena di Java kita punya banyak pilihan, semoga artikel ini bisa memberi gambaran tentang alternatif-alternatif yang bisa kita gunakan, sekaligus menunjukkan bahwa aplikasi yang sama bisa dideploy di atas 2 application server yang berbeda tanpa harus melakukan banyak perubahan.

Di artikel ini saya tidak akan mengulang penjelasan tentang apa itu Java EE dan modul-modul yang terdapat di dalamnya. Silahkan lihat artikel ini untuk overview Java EE, dan artikel itu untuk penjelasan komponen Java EE yang digunakan di dalam contoh aplikasi ini.

1. Download dan install

Eclipse 3.4 for Java EE developer bisa didownload dari http://www.eclipse.org/downloads/. JBoss bisa didownload di http://www.jboss.org/jbossas/downloads/, saya menggunakan versi 4.2.2 GA. Ekstrak file-file zip tersebut ke komputer Anda, selanjutnya saya akan menyebut direktori instalasi eclipse sebagai ECLIPSE_HOME dan direktori instalasi JBoss sebagai JBOSS_HOME.

2. Register JBoss ke Eclipse

Klik menu Windows -> Preferences. Pilih item Server -> Runtime Environments di tree. Kemudian klik tombol Add untuk meregister application server baru ke dalam eclipse.

Di wizard New Server Environment, pilih JBoss -> JBoss v4.2, klik next, browse JBOSS_HOME anda, kemudian klik finish. Hasilnya, kita bisa melihat server JBoss kita teregister di eclipse, dan kita bisa mengontrol server ini seperti halnya Netbeans mengontrol Glassfish.

3. Setup Project

Di panel Project Explorer, klik kanan, pilih New -> Project. Pilh Enterprise Application Project, klik next. Isi project name dengan TestEnterpriseProject, target envronment JBoss v4.2, EAR version 5.0 dan gunakan default configuration for JBoss v4.2. Klik next, akan ditampilkan module dependencies. Kita akan meng-create module baru, klik New Module. Pilih EJB module dan Web module saja.

Kembali ke wizard sebelumnya, aktifkan option Generate Deployment Descriptor. Hasilnya seperti gambar sebelah kanan.

4. EJB Module

Klik kanan di project TestEnterpriseProjectEJB, pilih New -> Session Bean.

Eclipse secara otomatis akan meng-create class CalculatorSession 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;

@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 CalculatorSession 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;

/**
 * Session Bean implementation class CalculatorSession
 */
@Stateless
public class CalculatorSession implements CalculatorSessionLocal {

    /**
     * Default constructor.
     */
    public CalculatorSession() {
        // TODO Auto-generated constructor stub
    }

    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.");
        }
    }
}

5. Web Module

Subproject TestEnterpriseProjectWeb harus mempunyai referensi ke subproject TestEnterpriseProjectEJB, agar servlet yang kita buat bisa memanggil komponen EJB. Klik kanan di project TestEnterpriseProjectWeb, pilih Build Path -> Configure Build Path. Pilih tab Projects, jika belum ada, klik tombol Add, kemudian pilih project TestEnterpriseProjectEJB.

File index.jsp, kita gunakan untuk membuat form html yang akan mensubmit parameter-parameter yang digunakan untuk melakukan perhitungan. Klikkanan di project TestEnterpriseProjectWeb, pilih New -> JSP.

Modifikasi menjadi seperti berikut:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<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>

Form html disubmit ke servlet (CalculatorServlet), yang sesaat lagi akan kita buat.

Create servlet, dengan cara klik kanan di module TestEnterpriseProjectWeb, pilih New -> Servlet. Isikan class name CalculatorServlet, dan package suhearie.blog.enterprise.servlet.

Fitur EJB injection masih belum disupport oleh JBoss v4.2. Jadi di servlet ini, kita harus melakukan JNDI lookup secara manual. Lookup kita lakukan di dalam constructor. Default JNDI name untuk local EJB3 di JBoss adalah [ear-filename]/[bean-name]/local. 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.

Modifikasi servlet tersebut menjadi seperti kode berikut.

package suhearie.blog.enterprise.servlet;

import java.io.IOException;

import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import suhearie.blog.enterprise.ejb.CalculatorSessionLocal;

/**
 * Servlet implementation class CalculatorServlet
 */
public class CalculatorServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    CalculatorSessionLocal calculatorSession;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CalculatorServlet() {
        super();
        InitialContext ctx;
		try {
			ctx = new InitialContext();
	        calculatorSession = (CalculatorSessionLocal) ctx.lookup("TestEnterpriseProject/CalculatorSession/local");
		} catch (NamingException e) {
			e.printStackTrace();
		}
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(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);
	}

}

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>

6. Deployment.

Setelah selesai semua, buka tab Servers, klik kanan di JBoss v4.2, pilih Start untuk menjalankan JBoss application server.

Setelah status JBoss berubah menjadi started, klik kanan di JBoss, pilih Add and Remove Projects, masukkan project TestEnterpriseProject.

Jika status server sudah synchronized seperti ini, artinya project kita sudah berhasil dideploy pada JBoss.

Buka web browser anda dan masukkan alamat http://localhost:8080/TestEnterpriseProjectWeb, dan Anda akan melihat halaman seperti berikut:

Pilih operasi, masukkan operand 1 dan 2, kemudia tekan tombol calculate, maka hasil perhitungan akan ditampilkan pada halaman berikut.

Advertisements

September 1, 2008 - Posted by | Java, Java Enterprise | , , , , , ,

15 Comments »

  1. Wah…artikel Java EEnya mantap nih…Malah lebih jelas dari tutorial resminya Sun (apalagi buat gw yang baru belajar Java EE)

    Nice blog πŸ™‚

    Comment by Rio | September 6, 2008 | Reply

  2. Bagus nih, bisa diteruskan jadi buku.
    Pakai Eclipse dan JBoss saja deh, banyak dipakai.

    Comment by Josef | September 10, 2008 | Reply

    • Semoga tercapai, kapan-kapan πŸ™‚

      Comment by suhearie | March 5, 2009 | Reply

  3. bagus banget nih, jadi semangat lagi mo belajar java.
    pakai IntelliJ IDE dong. soalnya awalnya saya pake itu, trus keliatan susah jadi males belajarnya.

    thanks bro.
    πŸ˜€

    Comment by mukasintu | October 27, 2008 | Reply

    • Eclipse mantep, udah gitu gratis pula. IntelliJ denger2 sih bagus juga (kata temen), tapi belum pernah pake, karena belum ada yang kasih donasi license.

      Comment by suhearie | March 5, 2009 | Reply

  4. nice tutorial, thanks very much

    Comment by budi | January 16, 2009 | Reply

  5. Mas numpang tanya,
    kalo menghubungkan EJB ke database (MySQL,Postgre) bagaimana ya?
    mungkin seperti pembuatan “buku tamu” dan sebagainya. Saya sangat tertarik sekali akan hal ini. terima kasih sebelumnya

    NB:atau mungkin mas memiliki sejumlah referensi yang bisa Saya baca.

    Comment by nukhran | September 16, 2010 | Reply

    • EJB sendiri ada 3 macam: Entity Bean, Session Bean & Message Driven Bean. Entity bean adalah object yang merepresentasikan data di database, jadi kita tidak harus memanipulasi database menggunakan SQL query.

      Comment by suhearie | October 23, 2010 | Reply

  6. Thanks Suhu Ari atas pencerahannya.. sungguh lengkap sekali tutorial ini. cukup membantu untuk pemula seperti saya.
    Suhu, klo ada tambahan tulisan tolong kasi tau saya lagi yah πŸ˜€
    hehehehhe..
    thanks!!!

    Comment by binbinbo | October 19, 2010 | Reply

    • Sama-sama. Cuman sekarang saya jarang banget posting lagi.

      Comment by suhearie | October 23, 2010 | Reply

  7. Very good tutorial ! It’s well explained so I understand it even without studying Indonesian language πŸ™‚ But unfortunately after doing all the steps correctly when I open the browser and type the URL i get nothing. Could you help?

    Comment by yassine | April 7, 2011 | Reply

    • Hi.. you’re welcome. Google translate is always there to help you πŸ™‚
      If you got nothing after following all the steps, you may need to check the output of the JBoss in the eclipse console. It may have some error messages that give you a clue what was happening and take action from there.

      Comment by suhearie | September 19, 2011 | Reply

  8. gan bisa di contohin pake database gan??? tutorialnya bagus gan..

    Comment by navis | December 6, 2011 | Reply

    • Yah ntar kalo pas mood nulis lagi ya.. ato kalo ga bikin sndiri gan trus di share πŸ˜€

      Comment by suhearie | January 26, 2012 | Reply

  9. Great article πŸ™‚ salut sama penjelasannya.. πŸ™‚ mampu menyederhanakan sebuah konsep yang kompleks menjadi sederhana dan sangat mudah di mengerti, tanpa mengurangi esensi dari konsep tersebut.. thanks for sharing.. πŸ™‚

    Comment by dickyamja | August 10, 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: