• Tidak ada hasil yang ditemukan

BAB III PEMBANGUNAN API MYSQL

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB III PEMBANGUNAN API MYSQL"

Copied!
12
0
0

Teks penuh

(1)

III-1

BAB III

PEMBANGUNAN API MYSQL

Setelah dilakukan studi mendalam tentang hal-hal teknis yang berhubungan dengan pengerjaan Tugas Akhir ini maka langkah selanjutnya adalah membangun API MySQL dengan menggunakan metodologi Rational Unified Process (RUP) yang bersifat iteratif[BEN02]. Selanjutnya API MySQL ini akan disebut dengan MyME.

III.1

Deskripsi Umum

MyME adalah sebuah API yang mengimplementasikan protokol MySQL dan memungkinkan aplikasi Java ME untuk berkomunikasi dengan MySQL Server. Sebuah aplikasi Java ME dapat menggunakan MyME untuk melakukan komunikasi dengan MySQL Server pada jaringan wireless.

Gambar III-1 - Gambaran global MyME

MyME pada versi ini tidak akan mengimplementasikan semua protokol MySQL sehingga tidak semua fitur dari MySQL Server dapat digunakan. Salah satu fitur protokol MySQL yang tidak diimplementasikan adalah protokol untuk menangani Prepared Statement. Pembatasan implementasi ini dilakukan karena protokol MySQL yang utuh memiliki tingkat kompleksitas yang tinggi sehingga tidak cocok untuk diimplementasikan pada mobile device yang mempunyai banyak keterbatasan.

(2)

III.2

Pengumpulan Kebutuhan MyME

Untuk dapat mendefinisikan kebutuhan MyME, dilakukan eksplorasi pada package JDBC pada Java SE dan driver JDBC MySQL. Selanjutnya hasil dari eksplorasi disesuaikan dengan kemampuan mobile device dan platform Java ME yang memiliki banyak keterbatasan. Berikut adalah kebutuhan fungsional dari MyME:

1. Mampu melakukan proses otentikasi dengan MySQL Server versi 4.1.1 atau yang lebih baru. 2. Mampu mengirim perintah (Command Packet) kepada MySQL Server.

3. Mampu menerima hasil query (Result Set Packet) yang dikirimkan oleh MySQL Server. 4. Mampu mengakomodasi tipe data MySQL yang terdiri dari:

Numeric Types, yang meliputi: a. BIT b. BOOLEAN c. TINYINT d. SMALLINT e. INT f. MEDIUMINT g. BIGINT h. FLOAT i. DOUBLE j. DECIMAL

Date and Time Types, yang meliputi: a. DATE

b. DATETIME c. TIMESTAMP d. TIME

e. YEAR

String Types, yang meliputi: a. CHAR b. VARCHAR c. TINYTEXT d. MEDIUMTEXT e. LONGTEXT f. TEXT g. ENUM h. SET

(3)

Selain kebutuhan fungsional di atas, terdapat juga kebutuhan nonfungsional sebagai berikut:

1. Memiliki cara penggunaan yang mirip dengan cara penggunaan dari JDBC sehingga mudah untuk dipelajari dan digunakan.

2. Memiliki ukuran file yang sekecil mungkin.

3. Menggunakan memori seefektif dan seefisien mungkin. 4. Mudah untuk dikembangkan lebih lanjut.

III.3

Diagram Use Case

Gambar III-2 - Use Case Diagram MyME

Gambar III-2 adalah diagram use case dari MyME. Diagram use case ini menggambarkan tingkah laku dari MyME dan hubungannya dengan pengguna. Use case yang didefinisikan adalah:

1. Melakukan otentikasi MySQL

API membuka koneksi socket ke MySQL Server yang dispesifikasikan dan melakukan sesi Handshake dengan MySQL Server. Pengguna API akan mendapatkan suatu objek yang merepresentasikan koneksi yang terbentuk jika proses otentikasi berhasil atau sebuah exception jika proses otentikasi gagal.

2. Mengirim perintah MySQL dan menerima responnya

Dengan objek koneksi yang didapatkan, pengguna API dapat mengirimkan perintah berupa Command Packet kepada MySQL Server. Jika terjadi error dalam pemrosesan perintah, pengguna akan menerima exception. Perintah yang dapat dikirimkan dapat dilihat pada Tabel A-3 Lampiran A.

(4)

3. Mengirim statement SQL dan menerima hasilnya

Dengan objek koneksi yang didapatkan, pengguna API dapat mengirimkan statement SQL kepada MySQL Server. Jika hasilnya berupa result set, pengguna akan menerima objek result set tersebut. Dan jika terjadi error pengguna akan menerima exception.

III.4

Diagram Sekuens

Pada bagian ini akan dilakukan perancangan diagram sekuens berdasarkan use case yang telah didefinisikan.

III.4.1 Melakukan Otentikasi MySQL

Proses ini akan melibatkan tiga bagian, yaitu MyME yang merepresentasikan kelas DriverManager pada JDBC, MySQLConnection yang merepresentasikan kelas Connection pada JDBC, dan MySQLIO yang bertanggung jawab dalam penerimaan dan pengiriman paket dari dan ke MySQL Server melalui koneksi socket.

Gambar III-3 - Diagram sekuens proses otentikasi MySQL

Pertama-tama aplikasi harus melakukan instansiasi MyME terlebih dahulu. Langkah selanjutnya adalah mendapatkan MySQLConnection dengan memanggil fungsi connect() pada objek MyME

dengan parameter string URL. Dalam string URL ini, aplikasi dapat menspesifikasikan alamat host MySQL Server beserta nomor port-nya, username, password, dan properti-properti lainnya yang diinginkan. Kemudian MySQLConnection akan melakukan proses otentikasi menggunakan MySQLIO untuk mengirimkan paket Handshake. Bila terjadi exception dalam proses otentikasi, aplikasi akan

(5)

menerima MySQLException. Berikut ini adalah diagram sekuens yang memperlihatkan proses otentikasi ke MySQL Server.

III.4.2 Mengirim Perintah MySQL dan Menerima Responnya

Berikut ini adalah diagram sekuens yang menggambarkan proses pengiriman perintah MySQL kepada MySQL Server.

Gambar III-4 - Diagram sekuens mengirim perintah MySQL dan menerima responnya

Proses ini melibatkan MySQLConnection dan MySQLIO. Setelah aplikasi melakukan proses otentikasi, aplikasi dapat mengirimkan perintah MySQL kepada MySQL Server. Aplikasi dapat mengirimkan perintah MySQL dengan memanggil fungsi-fungsi yang ada pada MySQLConnection. Selanjutnya MySQLConnection akan menggunakan MySQLIO untuk mengirimkan paket Command kepada MySQLServer. Respon dari pengiriman perintah tersebut akan diteruskan kepada aplikasi yang memanggilnya. Bila terjadi exception dalam proses pengiriman perintah MySQL, aplikasi akan menerima MySQLException.

III.4.3 Mengirim Statement SQL dan Menerima Hasilnya

Selain MySQLConnection dan MySQLIO, proses ini juga melibatkan Statement yang merepresentasikan kelas Statement pada JDBC, dan ResultSet yang merepresentasikan kelas ResultSet pada JDBC. Setelah aplikasi melakukan proses otentikasi, aplikasi dapat mengirimkan statement SQL kepada MySQL Server. Berikut ini adalah diagram sekuens yang menggambarkan proses pengiriman statement SQL kepada MySQL Server.

(6)

Gambar III-5 - Diagram sekuens proses mengirim statement SQL dan menerima hasilnya

Untuk dapat mengirimkan statement SQL, aplikasi harus mendapatkan Statement dengan memanggil fungsi createStatement() pada MySQLConnection. Selanjutnya aplikasi dapat mengirimkan statement SQL dengan menggunakan fungsi execute atau executeQuery pada Statement. Kemudian objek MySQLIO akan mengirimkan paket statement SQL tersebut kepada MySQLServer. Respon dari pengiriman statement SQL tersebut akan diteruskan kepada aplikasi yang memanggilnya. Bila respon berupa result set, aplikasi akan menerima ResultSet sebagai representasi result set tersebut. Dan bila terjadi exception dalam proses pengiriman statement SQL, aplikasi akan menerima MySQLException.

III.5

Arsitektur dan Package MyME

Dari analisis yang telah dilakukan, selanjutnya dapat dipetakan kapabilitas-kapabilitas MyME ke package yang bersesuaian. MyME terdiri dari 2 subsistem. Subsistem pertama merupakan pembungkus fungsi-fungsi yang berhubungan dengan protokol MySQL dan komunikasi dengan MySQL Server. Subsistem ini terdiri dari packageMySQLIO dan Types. Package-package ini tidak diakses secara langsung oleh aplikasi pengguna API MyME. Sedangkan subsistem kedua merupakan pembungkus fungsi-fungsi yang akan dipakai secara langsung oleh aplikasi pengguna API MyME. Subsistem ini terdiri dari package MySQLConnection, Statement, ResultSet, dan Exceptions.

(7)

Tabel III-1 memuat package-package yang akan dikembangkan sebagai bagian dari API MyME. Package-package tersebut dapat berupa sebuah kelas ataupun lebih dari satu buah kelas.

Tabel III-1 – Package-package pada MyME No. Nama Package Keterangan

1 MySQLIO Package yang bertanggung jawab mengirim dan menerima data berupa

sekumpulan byte melalui layanan TCP/IP dan bertugas juga memantau kegagalan yang terjadi pada proses transfer data menjadi suatu kelas exception.

2 Types Package yang bertanggung jawab untuk menerjemahkan tipe data MySQL

menjadi tipe data Java ME dan juga sebaliknya.

3 MySQLConnection Package yang merepresentasikan sebuah koneksi ke suatu MySQL Server.

Modul ini mempunyai fungsi untuk melakukan proses otentikasi dan mengirimkan perintah kepada MySQL Server.

4 Statement Package yang berfungsi untuk mengeksekusi statement SQL dan kemudian

mengembalikan hasilnya. Hasil dari ekseskusi statement SQL dapat berupa

laporan keberhasilan pengeksekusian, result set hasil query, ataupun laporan SQL Error jika terjadi suatu kesalahan.

5 ResultSet Package yang merepresentasikan sebuah result set basisdata yang biasanya

adalah hasil dari pengeksekusian query ke basisdata. Result set memiliki bentuk sebuah tabel yang terdiri dari kolom dan baris.

6 Exceptions Bertugas membungkus semua kegagalan pada proses pemakaian API MyME.

Kegagalan yang didukung antara lain: gagal mengirim/menerima data, gagal

mengeksekusi statement atau query, gagal mengalokasikan memori, gagal

melakukan proses otentikasi, dan lain-lain.

(8)

III.6

Diagram Kelas Analisis

Pada Subbab ini akan dilakukan perancangan diagram kelas analisis dari kebutuhan-kebutuhan yang telah dibahas sebelumnya.

(9)

Untuk dapat menggunakan API MyME, pengguna harus membuat sebuah instan dari kelas MyME dan kemudian memanggil fungsi connect() untuk mendapatkan sebuah objek dari kelas MySQLConnection. Kelas MySQLConnection adalah representasi dari sebuah koneksi ke suatu MySQL Server. MySQLConnection menggunakan kelas MySQLIO untuk melakukan komunikasi dengan MySQL Server melalui socket.

Untuk dapat mengirimkan statement SQL, pengguna harus memanggil fungsi createStatement pada kelas MySQLConnection untuk mendapatkan objek Statement. Kemudian pengguna dapat memanggil fungsi execute() atau executeQuery() untuk mengirimkan statement SQL kepada MySQL Server. Jika hasil dari eksekusi tersebut berupa result set, fungsi akan mengembalikan objek ResultSet sebagai representasi dari result set tersebut. Kelas Types digunakan untuk menerjemahkan tipe data MySQL menjadi tipe data Java ME.

Jika terjadi suatu exception, API akan menggunakan kelas SQLError untuk membungkus exception tersebut dan melemparkannya sebagai objek SQLException.

III.7

Kelas Perancangan MyME

Terdapat sedikit perbedaan antara kelas-kelas analisis dengan kelas-kelas perancangan. Perbedaan tersebut adalah ditambahkannya beberapa kelas lain untuk mendukung implementasi API ini. Pemetaan kelas analisis ke kelas perancangan dapat dilihat pada Tabel III-2.

Tabel III-2 - Pemetaan kelas analisis ke kelas perancangan No. Kelas Analisis Kelas Perancangan

MySQLConnection 1 MySQLConnection DatabaseMetaData MySQLIO 2 MySQLIO Buffer 3 MyME MyME ResultSet Field 4 ResultSet ResultSetMetaData 5 SQLError SQLError 6 SQLException SQLExceptions 7 Statement Statement Types BigDecimal BigInteger Date Time 8 Types Timestamp Util 9 Utils SQLDefs

(10)

MyME dibagi menjadi 2 subsistem yang terdiri dari subsistem Internal dan subsistem Eksternal. Subsistem Internal terdiri dari kelas-kelas yang tidak digunakan secara langsung oleh aplikasi pengguna MyME. Sedangkan Subsistem Eksternal terdiri dari kelas-kelas yang dapat digunakan secara langsung oleh aplikasi pengguna MyME. Komponen-komponen utama dari subsistem Internal adalah MySQLIO dan Types. Sedangkan komponen-komponen utama dari subsistem Eksternal adalah Statement, ResultSet, dan MySQLConnection. Masing-masing komponen tersebut diimplementasikan menjadi sebuah kelas. Terdapat juga beberapa kelas tambahan yang diimplementasikan untuk mendukung implementasi kelas-kelas yang telah dirancang sebelumnya. Daftar kelas pada subsistem Internal dapat dilihat pada Tabel III-3 dan daftar kelas subsistem Eksternal dapat dilihat pada Tabel III-4.

Tabel III-3 – Daftar kelas dari MyME subsistem Internal No. Nama Kelas Keterangan

1 Buffer Kelas ini merepresentasikan paket data dalam protokol MySQL.

2 Field Kelas ini merepresentasikan kolom table dari MySQL

3 MySQLIO Kelas yang bertanggung jawab mengirim dan menerima data yang dibungkus

dalam objek kelas Buffer. Kelas ini juga melakukan proses otentikasi ke MySQL Server.

4 SQLDefs Kelas ini memetakan konstanta yang ada pada MySQL

5 SQLError Kelas ini memetakan jenis kesalahan pada MySQL

6 Types Kelas yang memetakan tipe data MySQL

7 Util Kelas ini menyediakan fungsi-fungsi tertentu yang digunakan untuk membantu

kelas-kelas lainnya.

Tabel III-4 – Daftar kelas dari MyME subsistem Eksternal No. Nama Kelas Keterangan

1 BigDecimal Kelas ini merepresentasikan tipe data big decimal.

2 BigInteger Kelas ini merepresentasikan tipe data big integer.

3 DatabaseMetaData Kelas ini menyediakan informasi mengenai database yang sedang diakses.

4 Date Kelas ini merepresentasikan tipe data date yang terdiri dari tanggal, bulan, dan

tahun dengan format ‘yyyy-mm-dd’.

5 MyME Kelas ini menyediakan fungsi untuk membuka koneksi ke MySQL Server dan

mengembalikan objek kelas MySQLConnection.

6 MySQLConnection Kelas yang merepresentasikan sebuah koneksi ke suatu MySQL Server. Kelas ini

digunakan untuk menghasilkan objek kelas Statement, mendapatkan objek kelas DatabaseMetaData, dan menutup koneksi.

7 ResultSet Kelas yang merepresentasikan sebuah result set yang biasanya adalah hasil dari

pengeksekusian query ke basisdata. Pengguna kelas ini dapat mengambil nilai

dari tiap kolom tabel atau mendapatkan objek kelas ResultSetMetaData.

8 ResultSetMetaData Kelas ini menyediakan berbagai informasi mengenai result set yang diterima.

9 SQLExceptions Kelas ini bertugas membungkus semua kegagalan pada proses pemakaian API

MyME.

10 Statement Kelas ini berfungsi untuk mengeksekusi statement SQL dan mengembalikan

hasilnya. Hasil tersebut dapat berupa laporan keberhasilan pengeksekusian, objek kelas ResultSet, ataupun SQLException jika terjadi suatu kesalahan.

11 Time Kelas ini merepresentasikan tipe data time yang terdiri dari jam, menit, dan detik

dengan format ‘hh:MM:ss’.

12 Timestamp Kelas ini merepresentasikan tipe data timestamp yang terdiri dari tanggal, bulan,

tahun, jam, menit, detik, dan nanodetik dengan format ‘yyyy-mm-dd hh:MM:ss.fffffffff’.

(11)

III.8

Implementasi MyME

Setelah melakukan berbagai analisis terhadap MyME yang kemudian diikuti proses perancangan MyME, maka pada Subbab ini akan dijelaskan proses implementasi dari MyME.

III.8.1 Lingkungan Implementasi

Lingkungan implementasi MyME adalah sebagai berikut: 1. Sistem Operasi: Apple Macintosh Tiger OSX 10.4.8 2. Perangkat Lunak Utama:

a. VMWare Fusion 1.0

b. Microsoft Windows XP Professional Service Pack 2 c. Java Development Kit (JDK) 1.5

d. J2ME Wireless Tool Kit (WTK) 2.2 e. SonyEricsson J2ME SDK

f. Eclipse 3.2 dengan obfuscator Proguard 3.10 3. Perangkat Keras Utama:

Notebook Sony VAIO SZ-220 B dengan spesifikasi: a. Processor Intel Core Duo CPU T2400 1,83 GHz b. Memory DDR2 SDRAM 1GB

c. Harddisk 120 GB

Agar hasil kompilasi memiliki ukuran file yang lebih kecil, Proguard digunakan sebagai obfuscator Java ME.

III.8.2 Batasan Implementasi

Batasan implementasi MyME adalah sebagai berikut:

1. Tidak semua tipe data MySQL diimplementasikan. Tipe data yang diimplementasikan dapat dilihat pada Subbab III.2.

2. Menggunakan kerangka API yang mirip dengan JDBC tetapi tidak semua fungsi dan kelas JDBC diimplementasikan.

3. Tidak semua ponsel mendukung pemakaian API ini dan pada Tugas Akhir ini tidak dibahas mengenai incompatibility perangkat keras. Perangkat keras yang mendukung API ini adalah perangkat keras yang mendukung Java dengan spesifikasi profil MIDP 2.0 dan konfigurasi CLDC 1.1.

4. Tidak mendukung transaksi MySQL. 5. Tidak mendukung koneksi yang terkompresi. 6. Tidak mendukung koneksi SSL.

(12)

III.8.3 Penggunaan MyME

Untuk melakukan komunikasi dengan MySQL Server, MyME menggunakan socket TCP/IP. Spesifikasi koneksi diberikan oleh pengguna MyME dalam bentuk String dengan format “myme:mysql://host[:port]/[database]?[property]=[value]”. Setelah koneksi terbangun dan proses otentikasi berhasil dilakukan, pengguna MyME dapat mengeksekusi query dengan cara memanggil fungsi createStatement() pada objek MySQLConnection untuk mendapatkan objek Statement. Dengan objek Statement tersebut, pengguna dapat memanggil fungsi execute() dengan parameter String query yang diinginkan. Jika hasil eksekusi query tersebut adalah sebuah result set, maka pengguna MyME dapat memanggil fungsi getResultSet() pada objek Statement untuk mendapatkan objek ResultSet. Dengan objek ResultSet tersebut maka nilai dari setiap kolom pada tabel result set dapat diambil. Cara penggunaan dari MyME ini mirip dengan cara penggunaan JDBC.

Contoh source code dari penggunaan MyME dapat dilihat pada Kode III-1. import org.myme.*;

...

MyME myme = new MyME(); try {

MySQLConnection conn =

myme.connect(“myme:mysql://if.itb.ac.id:3306/user=root&pass=123”); Statement stmt = conn.createStatement();

if (stmt.execute(“SELECT * FROM tab”)) { ResultSet rs = stmt.getResultSet(); while (rs.next()) { System.out.println(rs.getString(1)); } } conn.close(); } catch (SQLException e) { }

Gambar

Gambar III-1 - Gambaran global MyME
Gambar III-2 - Use Case Diagram MyME
Gambar III-3 - Diagram sekuens proses otentikasi MySQL
Gambar III-4 - Diagram sekuens mengirim perintah  MySQL dan menerima responnya
+6

Referensi

Dokumen terkait

Talun hutan rakyat Talun adalah lahan di luar wilayah permukiman penduduk yangditanami tanaman tahunan yang dapat diambil kayu maupunbuahnya.Sistem ini tidak

Reaksi yang paling utama dari senyawa aromatik adalah reaksi substitusi aromatik elektrofilik digambarkan sebagai (E+) yang akan bereaksi dengan cincin aromatik

Konsumen dari produk obat herbal dapat dibagi menjadi masyarakat pengguna serta dokter atau tenaga medis sebagai pihak yang memiliki posisi untuk

Organisasi Tunjangan masih berdasarkan golongan bukan kinerja, tidak ada apresiasi terhadap motivasi berprestasi yang baik, sistem mutasi dan promosi tidak transparan,

Sitem absensi dan akademik sekolah dapat menampilkan seluruh nilai yang didapatkan oleh seorang siswa per mata pelajaran dan dapat diakses oleh orang tua melalui

Modul ke: Fakultas Program Studi Dasar-dasar Metode Penelitian • Kontrak Perkuliahan • Filsafat Ilmu • Logika Ilmiah.. • Sejarah &

Indra Tedjakumala, diketahui bahwa jumlah gigi minimum tergantung dari sudut jumlah gigi minimum tergantung dari sudut tegangan [.. tegangan [ 

Pada masa akhir usia sekolah 10-12 tahun atau pra remaja,anak- anak terlihat semakin mahir menggunakan logikanya contohnya dari kemahiran dalam masalah hitung