Expose Database sebagai WebService


daaxis
Web service adalah bagian dari bisnis logic yang ditempatkan pada beberapa tempat internet, dan bisa diakses menggunakan protokol standar seperti HTTP dan SMTP. Penggunaan web service bisa sederhana seperti pencatatan ke dalam situs serta kompleks seperti menfasilitasi banyak organisasi negosiasi bisnis (David dan Tyler 2002). Web service menggunakan paradigma client-server. Ketika suatu URL sebuah dokumen diketikkan, browser berfungsi sebagai client yang menghubungi sebuah server pada komputer yang tertera pada URL untuk meminta dokumen. Kemudian browser menampilkan dokumen tersebut kepada pengguna.
Dalam posting ini saya akan memperlihatkan pembuatan web service yang digunakan untuk menampilkan isi dari database. Berikut ini adalah overview dari pembuatan web service untuk mengekspos isi dari database:

  1. Membuat database
  2. Membuat Java Bean
  3. Membuat Service Life Cycle
  4. Membuat Class service
  5. Membuat services.xml
  6. Membuat build.xml

Membuat Database

Di sini saya membuat database dengan menggunakan Database Management System (DBMS) MySQL. Saya akan mengekspos isi dari database yang berisi satu buah tabel yaitu tabel person. Tabel person memiliki tiga buah kolom yaitu id, nama, dan alamat. Nama dari database adalah “webservice”. Berikut adalah ilustrasinya:

db diagram

Urutan implementasi dari pembangunan database ini adalah: pembuatan database, pembuatan tabel, pengisian data.

CREATE DATABASE webservice;

CREATE TABLE person(
id integer,
nama VARCHAR(40),
alamat VARCHAR(50),
PRIMARY KEY (id)
);

INSERT INTO person (id, nama, alamat) VALUES (1, 'Siti Hapshoh', 'Cilacap');
INSERT INTO person (id, nama, alamat) VALUES (2, 'Prawito Hudoro', 'Cilacap');
INSERT INTO person (id, nama, alamat) VALUES (3, 'Sandy Cahya Gumilar', 'Cibinong');
INSERT INTO person (id, nama, alamat) VALUES (4, 'Raihan', 'Papua');

Membuat Java Bean

Java bean digunakan untuk merepresentasikan entitas output dari service. Service akan memberikan informasi kepada user isi dari semua field (kolom) pada tabel, yaitu, id, nama, alamat. Sehingga java bean yang akan dibuat juga akan memiliki 3 field tersebut. Berikut adalah sourcecode lengkapnya:

package source.data;

/**
 *
 * @author Windu Purnomo
 */

public class JavaBean {
	private int id;
	private String nama;
	private String alamat;

	public void setId(int id){
		this.id = id;
	}
	
	public void setNama(String nama){
		this.nama = nama;
	}
	
	public void setAlamat(String alamat){
		this.alamat = alamat;
	}
	
	public int getId(){
		return id;
	}
	
	public String getNama(){
		return nama;
	}
	
	public String getAlamat(){
		return alamat;
	}
}

Membuat Service Life Cycle

Service Life Cycel mengatur daur hidup dari service. Disini kita menuliskan cara melakukan koneksi ke database dan menutup koneksi. Berikut sourcecode lengkapnya:

package source.data;

import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.ServiceLifeCycle;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class SLC implements ServiceLifeCycle {
	public static final String DB_CONNECTION = "dbconnection";
	
	/**
	*startUp() akan dipanggil untuk memanggil koneksi ke database
	*Lakukan konfigurasi pada nama databae, user, dan password.
	*/
    public void startUp(ConfigurationContext configctx, AxisService service) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // Creating the DB connection for the sample DB
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/webservice",
                    "root",
                    "");
            //Storing the DB in the ConfigurationContext
            configctx.setProperty(DB_CONNECTION, conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void shutDown(ConfigurationContext configctx, AxisService service) {
        Connection conn = (Connection) configctx.getProperty(DB_CONNECTION);
        if (conn != null) {
            try {
                // closing the DB
                conn.close();
            } catch (SQLException e) {
                System.out.println("Error while closing the DB connection");
            }
        }
    }
}

Membuat Class Service

Class service digunakan untuk membuat logic dari service. Misalkan ingin membuat sebuah service penjumlahan. Maka pada class ini kita menuliskan bagaimana proses penjumlahan itu. Dalam kasus ini kita akan memberikan service berupa data dari database. Sehingg dalam class service ini, akan dituliskan proses memanggil class Service Life Cycle untuk membuka koneksi, query ke database, mengambil data dari resultset ke dalam linked list, dll. Berikut source code lengkapnya:

package source.service;
import org.apache.axis2.context.MessageContext;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import source.data.JavaBean;
import source.data.SLC;

public class Person{
	public JavaBean[] serviceMethod(){
	Connection conn = (Connection) MessageContext.getCurrentMessageContext().getProperty(SLC.DB_CONNECTION);
	String query = "SELECT * FROM person";
	if(conn != null){
		try{
			PreparedStatement ps = conn.prepareStatement(query);
			ResultSet rs = ps.executeQuery();
			ArrayList list = new ArrayList();
			while (rs.next()){
				JavaBean jb = new JavaBean();
				jb.setId(rs.getInt("id"));
				jb.setNama(rs.getString("nama"));
				jb.setAlamat(rs.getString("alamat"));
				list.add(jb);
			}
			return (JavaBean[])list.toArray(new JavaBean[list.size()]);
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
	
	return null;
	}
}

Membuat services.xml

services.xml adalah service configuration file, di sini kita akan mendefinisikan nama service, dan path-path, url yang terkait dengan service, dengan menggugnakan script xml. Berikut sourecode lengkapnya:

<service name="Agama" class="source.data.SLC">
    <description>Service Dinas Kependudukan Bogor Timur</description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>	
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">source.service.Agama</parameter>
</service>

Membuat build.xml

build.xml bersama dengan apache ant, akan melakukan build terhadap sistem. build.xml berperan sebagai skenarion dari proses build sistem. Dalam build.xml dijelaskan alur dari skenario build, memberikan nama direktory yang akan dibuat, membersihkan direktory, membuat direktory baru, compile file-file java, membuat file jar, mengopy beberapa file dan directory, membuat file aar, mendeploy file aar ke server. Berikut sourcecode lengkapnya:

<project name="Dinas Penduduk Bogor Timur" basedir="." default="generate.service">

	<property name="service.name" value="Agama" />
	<property name="dest.dir" value="build" />
	<property name="dest.dir.classes" value="${dest.dir}/${service.name}" />
	<property name="dest.dir.lib" value="${dest.dir}/lib" />	
       <property name="axis2.home" value="C:\Program Files\axis2-1.4.1"/>
	<property name="repository.path" value="${axis2.home}/repository" />
	<property name="catalina.base" value="C:\Program Files\apache-tomcat-6.0.20\webapps\axis2\WEB-INF\services" />

	<path id="build.class.path">
		<fileset dir="${axis2.home}/lib">
			<include name="*.jar" />
		</fileset>
	</path>
	
	<path id="client.class.path">
		<fileset dir="${axis2.home}/lib">
			<include name="*.jar" />
		</fileset>
		<fileset dir="${dest.dir.lib}">
			<include name="*.jar" />
		</fileset>
	</path>

	<target name="clean">
		<delete dir="${dest.dir}" />
	</target>

	<target name="prepare">
		<mkdir dir="${dest.dir}" />
		<mkdir dir="${dest.dir}/lib" />
		<mkdir dir="${dest.dir.classes}" />
		<mkdir dir="${dest.dir.classes}/META-INF" />
	</target>
	
	<target name="generate.service" depends="clean,prepare">
		<copy file="src/META-INF/services.xml" tofile="${dest.dir.classes}/META-INF/services.xml" overwrite="true" />
		<javac srcdir="src" destdir="${dest.dir.classes}" includes="source/service/**, source/data/**">
			<classpath refid="build.class.path" />
		</javac>
		<jar basedir="${dest.dir.classes}" destfile="${dest.dir}/${service.name}.aar" />
		<copy file="${dest.dir}/${service.name}.aar" tofile="${catalina.base}/${service.name}.aar" overwrite="true" />
	</target>
	
</project>

download:
1. JavaBean.java
2. SLC.java
3. Person.java
4. services.xml
5. build.xml
6. Semua File

About windupurnomo

I'm interested in programming. I am active with several programming such as Java, C #, C, JavaScript, HTML. I'm also develop desktop application (Java Swing), Mobile Application (Android), and Web programming (ASP MVC).
This entry was posted in Kuliah, Sistem Berorientasi Objek and tagged , , , , , , , , , , , , , , , , , . Bookmark the permalink.

7 Responses to Expose Database sebagai WebService

  1. Pingback: Expose Database sebagai Web Service (Part 2) « Windupurnomo’s Blog

  2. aadunjuve says:

    betapa baik hatinya gw mau berkunjung ke blog lu…emang itu tugas kuliah atau kerjaan asprak lu??

  3. yusuf says:

    Terus lihat isi data web service-nya gimana caranya? Maaf newbie..

  4. windupurnomo says:

    loclhost:8080/axis2/namaService/namaMethod

  5. sudi says:

    bisa gak hibernate untuk pengolahan data di web service?

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