Archive for February, 2008

26
Feb
08

Gabungin JSF & EJB pake netbeans tinggal klak klik jadi :)

Sekarang saya lagi pelajarin framework” JEE, makanya supaya gak lupa saya tulis deh. Berhubung semalam saya lembur sampe stengah tiga buat belajar EJB dan JSF (gimana ga nyampe jam stengah tiga wong saya mulainya jam stengah 1 :mrgreen: ), jadi harus saya tulis dulu biar mantep 😆

Langkah 1:

bikin dulu session beannya. Nih interfacenya(MahasiswaRemote.java), nanti tinggal di implements


package mahasiswa.bean;

import java.util.List;
import javax.ejb.Remote;
import mahasiswa.model.Mahasiswa;

/**
 * This is the business interface for Mahasiswa enterprise bean.
 */
@Remote
public interface MahasiswaRemote {
    List listMahasiswa();

}

dan yang ini implementasinya(MahasiswaBean.java)


/*
 * MahasiswaBean.java
 *
 * Created on February 25, 2008, 12:07 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package mahasiswa.bean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import mahasiswa.model.Mahasiswa;

/**
 *
 * @author JollkY
 */
@Stateless
public class MahasiswaBean implements MahasiswaRemote {
    Connection con = null;
    PreparedStatement state = null;
    ResultSet rs = null;
    /** Creates a new instance of MahasiswaBean */
    public MahasiswaBean() {
    }

    public void setConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public List listMahasiswa() {
        this.setConnection();
        String query = "SELECT Id,nim,nama,alamat,fakultas FROM mahasiswa";
        List listMhs = new ArrayList();
        try {
            this.state = con.prepareStatement(query);
            this.rs = this.state.executeQuery();
            while(this.rs.next()) {
                Mahasiswa mhs = new Mahasiswa();
                mhs.setId(this.rs.getLong(1));
                mhs.setNim(this.rs.getString(2));
                mhs.setNama(this.rs.getString(3));
                mhs.setAlamat(this.rs.getString(4));
                mhs.setFakultas(this.rs.getString(5));
                listMhs.add(mhs);
            }
        } catch(Exception ex) {
            ex.printStackTrace();
        } finally {
            if(this.con!=null) {
                try {
                    this.con.close();
                    if(this.state!=null) {
                        this.state.close();
                    }

                    if(this.rs!=null) {
                        this.rs.close();
                    }
                } catch(Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return listMhs;
    }

}

sebenarnya untuk membuat method bean nya kita tinggal klik kanan pada file bean (klo saya berarti file Mahasiswabean.java), kemudian pilih menu EJB methods -> Add business method… nanti akan ditampilkan window baru, jadi disana kita tinggal tentukan sendiri. Setelah selesai maka pada MahasiswaBean.java akan ditambahkan method tersebut dan juga pada MahasiswaRemote.java, otomatis.Langkah 2:

Saya buat kelas, sejenis action class pada struts. Kelas ini nantinya yang akan berhubungan dengan interface sesuai dengan konfigurasi pada faces-config.xml-nya JSF.


package mahasiswa.action;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import mahasiswa.bean.MahasiswaBean;
import mahasiswa.bean.MahasiswaRemote;
import mahasiswa.model.Mahasiswa;
/*
 * MahasiswaListAction.java
 *
 * Created on February 25, 2008, 12:31 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author JollkY
 */
public class MahasiswaListAction {
    /** Creates a new instance of MahasiswaListAction */
    private List listMhs;
    public MahasiswaListAction() {
    }

    private MahasiswaRemote lookupMahasiswaBean() {
        try {
            Context c = new InitialContext();
            return (MahasiswaRemote) c.lookup("java:comp/env/ejb/MahasiswaBean");
            //return (MahasiswaRemote) c.lookup(MahasiswaRemote.class.getName());
        }
        catch(NamingException ne) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        }
    }

    public String listMahasiswa() {
        this.setListMhs(this.lookupMahasiswaBean().listMahasiswa());
        System.out.println(getListMhs().get(0).getNama());
        return "sukses";
    }

    public List getListMhs() {
        return listMhs;
    }

    public void setListMhs(List listMhs) {
        this.listMhs = listMhs;
    }

}

untuk method lookupMahasiswaBean() cukup klik kanan pada class MahasiswaListAction kemudian pilih Enterprise Resources -> Call Enterpirse Bean. Akan muncul window baru utuk memilih bean mana yang akan dipakai.Sangat mudah, jadi tidak perlu di hapal” 😈

Langkah 3:

Saya siapkan file konfigurasi jsf (faces-config.xml), sbb




<!-- =========== FULL CONFIGURATION FILE ================================== -->



        
            /pages/index.jsp
            
                sukses
                /pages/mahasiswa_list.jsp
            
        
        
            mahasiswaList
            mahasiswa.action.MahasiswaListAction
            session
        

    

Langkah 4:

Terakhir tinggal buatin halaman” jsp nya. File pertama index.jsp





    
        
        <title>JSP Page</title>
    
    
      
        
        
        
    
    


Button yang dibuat diatas akan memanggil method listMahasiswa yang ada pada bean/class yang diberi nama(pada faces-config.xml) mahasiswaList. Lihat pada file konfigurasi. Method listMahasiswa tersebut akan mengembalikan string “sukses” dimana menurut navigation rule yang ada di faces-config.xml, sbb

<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>sukses</from-outcome>
<to-view-id>/pages/mahasiswa_list.jsp</to-view-id>
</navigation-case>
</navigation-rule>

request/input yang berasal dari halaman /page/index.jsp akan diteruskan ke halaman /pages/mahasiswa_list.jsp, sbb







    
        
        <title>JSP Page</title>
    
    
        
            <h3>Daftar Mahasiswa</h3>

            <table>
                <tr>
                    <td>NIM</td>
                    <td>Nama</td>
                    <td>Alamat</td>
                    <td>Fakultas</td>
                </tr>
                
                    <tr>
                        <td>${mhs.nim}</td>
                        <td></td>
                        <td></td>
                        <td></td>
                    </tr>
                
            </table>

        
    


Jangan lupa untuk memasukkan library jsf pada project war dan library mysql connector pada project ejb.

Sekian… chaoo 😈

Advertisements
22
Feb
08

Error handling, struts 1.x

Dalam teknik pemrogramman MVC dengan menerapkan framework struts begitu banyak kemudahan yang diberikan. Salah satunya adalah penanganan error dan pemberian pesan error itu sendiri. Misalnya, perhatikan form html dibawah:





    
        <title>Error Handling Test</title>
    
    
        
        
            <table>
                <tr>
                    <td>Username: </td>
                    <td></td>
                </tr>
                <tr>
                    <td>
                        
                    </td>
                </tr>
            </table>
        
    

tag <html:errors/> merupakan tag dimana pesan error akan muncul. Format tampilan errornya sama sperti kita menggunakan tag <ol><li></li></ol> pada tag html biasa.
Form di atas merupakan form dimana saya diminta memasukkan username aja untuk coba”. Kemudian saya buat setter/getternya, sbb:


package com.myapp.beans;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

/**
 *
 * @author programer05
 */
public class Beans extends ActionForm {
    private String username;

    public Beans() {}

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        String name = this.getUsername();
        ActionErrors errors = new ActionErrors();
        if(name.length()<1 || name==null) {
            errors.add("username", new ActionMessage("errors.username"));
        }
        return errors;
    }

}&#91;/sourcecode&#93;
potongan kode ini:
&#91;sourcecode language="java"&#93;

public ActionErrors validate(ActionMapping mapping,

            HttpServletRequest request) {

        String name = this.getUsername();

        ActionErrors errors = new ActionErrors();

        if(name.length()<1 || name==null) {

            errors.add("username", new ActionMessage("errors.username"));

        }

        return errors;

    }&#91;/sourcecode&#93;
merupakan method yang akan melakukan validasi terhadap input dari user. Tipe kembaliannya berupa objek <b>ActionErrors</b>. Jadi, jika ada tambahan pesan error yang lain kita tinggal menggunakan method add(). Nanti untuk menampilkan kita tidak perlu repot, karena aplikasi akan mengatur tampilannya seperti ini:
<ul>
	<li>Pesan error 1</li>
	<li>Pesan error 2</li>
	<li>dst...</li>
</ul>
Kemudian untuk kode [...] new <b>ActionMessage("errors.username") </b> [...], string yg ada di dalamnya merupakan keyword yg ada pada file properties dari struts, sbb:



errors.header=<UL>
errors.prefix=<LI>
errors.suffix=</LI>
errors.footer=</UL>
errors.invalid={0} is invalid.
errors.maxlength={0} can not be greater than {1} characters.
errors.minlength={0} can not be less than {1} characters.
errors.range={0} is not in the range {1} through {2}.
errors.required={0} is required.
errors.byte={0} must be an byte.
errors.date={0} is not a date.
errors.double={0} must be an double.
errors.float={0} must be an float.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.short={0} must be an short.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
errors.cancel=Operation cancelled.
errors.detail={0}
errors.general=The process did not complete. Details should follow.
errors.token=Request could not be completed. Operation is not in sequence.
welcome.title=Struts Application
welcome.heading=Struts Applications in Netbeans!
welcome.message=It's easy to create Struts applications with NetBeans.
errors.username=<h2>Invalid username</b>

tinggal dicari saja yang mana keywordnya :twisted:Setelah itu, qta edit file configurasi struts(struts-config.xml) yang akan mengatur bagaimana navigasi aplikasi dan bgm jika terjadi kesalahan. Berikut potongan listing struts-config.xml:


[...]


    <form>
        <form name="formBeans" />
    </form>

    

    

    
        
    

    
        
        
                    
        
    

[...]

saya asumsikan anda sudah cukup paham mengenai isi file struts-config.xml ini. Bagian penting dari error handling yang saya maksud adalah pada bagian validate=”true”, yang memberitahukan kepada aplikasi bahwa harus melakukan validasi terlebih dahulu terhadap input user. Kemudian input=”/main.jsp”, yang memberitahukan bahwa input yang perlu divalidasi berasal dari halaman /main.jsp, sehingga aplikasi juga akan tahu jika memang ada kesalahan, kepada user akan dikembalikan halaman /main.jsp sekaligus dengan pesan error-nya. Action dari path /action terdapat pada kelas com.myapp.actions.Actions, berikut isi filenya:


package com.myapp.actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author programer05
 */
public class Actions extends Action {

    public Actions(){}

    public ActionForward execute(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {

        return (mapping.findForward("success"));
    }

}

Kelas action di atas hanya berisi return value saja, jadi jika memang tidak ada kesalahan langsung diforward kehalaman yang lain. Cukup mudah saya rasa. Paling tidak coding lebih teratur :mrgreen:Later 😈

05
Feb
08

Struts 1.x, sudah lumayan paham

Setelah 1 minggu lebih cari” tau tentang struts, akhirnya datang juga :mrgreen:

Saya sudah ngerti gimana cara pake framework struts. Struts sangat cocok dibuat untuk pemrograman arsitektur MVC (Model View Controller). Framework ini bekerja di bagian controller, yang mengatur jalannya aplikasi web. Yang jadi bagian” penting penerapan framework struts adalah, File configurasi (struts-config.xml), dimana programmer membuat mapping dari hubungan antara interface (view) dengan action-action class-nya. Yang berikutnya adalah action class itu sendiri. Pada saat user berinteraksi dengan interface pada halaman web, misalnya mengirimkan sesuatu ke server untuk diproses. Aplikasi akan melihat/memeriksa file konfigurasi tadi (struts-config.xml) untuk melihat class action mana yang akan melakukan proses yang diminta. Kemudian class action akan memprosesnya, lalu mengembalikan hasilnya atau mengarah ke interface lain sebagai tanda apakan proses berhasil atau bisa juga gagal. Yang menjadi pertanyaan adalah, kemana hasilnya akan dikembalikan atau kemana arah selanjutnya setelah proses selesai? Lihat lagi ke dalam struts-config.xml . Di dalamnya juga diikutsertakan konfigurasi untuk menentukan halaman apa yang ditampilkan ke user jika proses sukses, atau halaman mana jika gagal.

struts.png

Kurang lebih alurnya seperti diatas. Biasanya pada action class dibuatkan object baru daru DAO class, sedangkan alur dari formClass ke DTOClass merupakan proses konversi dari object DTOClass ke object formClass. Hal ini dilakukan karena data” yang ditampilkan di interface tidak selalu sama seperti yang ada pada object dari DTOClass. Data yang ditampilkan ke interface biasanya merupakan object dari formClass. Aplikasi yang pake struts framework akan lebih muantap lagi jika dikombinasikan dengan framework Hibernate. 😈

Sayonara!!! 8)