• Tidak ada hasil yang ditemukan

BAB II KAJIAN PUSTAKA

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB II KAJIAN PUSTAKA"

Copied!
19
0
0

Teks penuh

(1)

II-1

KAJIAN PUSTAKA

Pada bab dua ini akan dibahas mengenai definisi dan konsep dari fault tolerance, RDBMS, MySQL, database transaction, JDBC, database connection, dan database session, serta hasil eksplorasi terhadap MySQL Connector/J dan MySQL. Landasan teori ini akan memberikan pemahaman yang lebih mendalam mengenai topik-topik yang disebutkan sehingga akan mempermudah proses analisis penyelesaian masalah pada bab selanjutnya.

2.1

Fault Tolerance

Fault tolerance merupakan properti yang memungkinkan suatu sistem dapat terus beroperasi ketika terjadi kegagalan pada salah satu atau lebih komponennya. Properti

fault tolerance sangat diperlukan terutama pada highly available atau life critical system. Implementasi fault tolerance pada suatu sistem dapat dilakukan dengan beberapa strategi berikut [SHO87]:

1. Menyediakan beberapa instan identik dari sistem atau subsistem, mengarahkan

task atau request ke seluruh instan secara paralel, lalu memilih hasil terbaik berdasarkan quorum.

2. Menyediakan beberapa instan identik dari sistem atau subsistem dan beralih ke instan lainnya ketika terjadi kegagalan pada instan utama (failover).

3. Menyediakan beberapa implementasi yang berbeda untuk suatu spesifikasi dan menggunakannya seperti sistem tereplikasi untuk mengatasi error pada implementasi tertentu.

Pada MySQL Cluster, fault tolerance pada DBMS MySQL diimplementasikan dengan replikasi synchronous dengan mekanisme two-phase commit untuk menjamin penulisan data pada seluruh node ketika commit. Ketika terjadi kegagalan pada salah satu replika, sistem masih dapat menggunakan replika lainnya.

(2)

2.2 RDBMS (

Relational Database Management System

)

RDBMS merupakan sebuah sistem kompleks yang mendukung penyimpanan dan

retrieval data berdasarkan model relasional. Model relasional merepresentasikan data sebagai komponen informasi yang saling terkait (atribut) dari suatu entitas. Set nilai dari atribut-atribut sebuah entitas disimpan sebagai tuple yang akan dikumpulkan dalam sebuah tabel. Sebuah tabel dapat memiliki relasi dengan tabel lainnya dengan batasan (constraint) domain, key, atribut, atau tuple.

Karakteristik utama database relasional adalah pemisahan mutlak antara data fisik dan data lojik. Akses terhadap data dilakukan melalui suatu model lojik seperti SQL (Structured Query Language) tanpa perlu menspesifikasikan lokasi fisik penyimpanan data. Salah satu faktor pendukung kemudahan akses data secara lojik tersebut adalah arsitektur RDBMS yang rumit.

Umumnya RDBMS dikembangkan dengan arsitektur client/server, di mana aplikasi

client dikembangkan sebagai program terpisah yang terhubung ke database melalui jalur komunikasi seperti socket atau pipe, misalnya MySQL. MySQL berjalan sebagai

server yang menyediakan akses ke database bagi sejumlah client sekaligus secara konkuren. Aplikasi client MySQL dapat terhubung ke database melalui berbagai metode komunikasi yang ditangani secara identik, antara lain Unix domain socket

(umumnya /tmp/mysql.sock atau /var/run/mysqld/mysql.sock), Windows

named pipe (umumnya \\hostname\pipe\mysql), shared memory, atau port TCP (umumnya port 3306).

Selain itu terdapat embedded database system yang memungkinkan client terhubung langsung ke database, karena database system merupakan bagian dari aplikasi client. Operasi terhadap database dilakukan oleh aplikasi dengan mengeksekusi prosedur tertentu. Embedded database system banyak digunakan untuk pengembangan sistem yang membutuhkan respon dan informasi dari database segera tanpa delay.

RDBMS yang dikembangkan sebagai client/server umumnya memiliki protokol tertentu yang mendefinisikan metode komunikasi client dan dan database server. Protokol komunikasi tersebut menentukan data dan format yang harus dikirimkan

(3)

client untuk melakukan request koneksi ke suatu database, mengirimkan command ke

database, dan melakukan pemutusan koneksi. Protokol komunikasi biasanya spesifik untuk setiap database.

Pada protokol MySQL versi 10, setiap client message dikirim sebagai sebuah paket MySQL, sedangkan respon server bisa terdiri dari beberapa paket. Paket MySQL ini tidak berhubungan dengan paket network layer yang digunakan, bahkan banyak paket respon dari server yang hanya berupa sebuah IP datagram. Setiap paket memiliki

header sepanjang empat byte. Tiga byte pertama header menunjukkan ukuran paket.

Byte terakhir header menunjukkan nomor urut paket, diawali dengan 0.

Secara garis besar terdapat dua jenis interaksi antara client dan server, yaitu interaksi

handshake yang dilakukan pada saat client membentuk koneksi ke server dan interaksi perintah setelah terbentuk koneksi. Interaksi selengkapnya diilustrasikan pada Gambar II-4. Berikut langkah-langkah handshake setelah terbentuk koneksi di level transport:

1. Server mengirimkan Handshake Initialization Packet ke client yang berisi informasi mengenai versi protokol, versi server, dan thread id.

2. Client mengirimkan Client Authentication Packet ke server yang berisi informasi mengenai username, password, dan nama database yang akan digunakan.

3. Server mengirimkan OK packet atau Error packet kepada client. Setelah menerima OK packet, client dapat mulai mengirimkan Command Packet. Sebaliknya, jika client menerima Error packet, client akan menutup koneksi.

Ketika memberikan perintah ke server, client akan mengirimkan Command Packet

yang berisi satu byte perintah dan n byte argumen. Server akan mengirimkan simple response berupa OK Packet jika perintah berhasil dilakukan, tabular response berupa

Result Set Packet jika perintah mengembalikan data, atau Error Packet jika ditemukan kesalahan.

Untuk mempermudah client mengakses database tanpa perlu mengetahui detil protokol komunikasinya, biasanya vendor database menyediakan modul yang

(4)

berfungsi sebagai ”interpreter” antara aplikasi client dan database server. Modul yang disebut database connector tersebut terdiri dari API, library pendukung API tersebut, dan database driver yang spesifik untuk setiap DBMS. Aplikasi client dapat mengirim perintah SQL ke database server melalui database connector, kemudian

database connector akan mengirimkan perintah tersebut ke database server sesuai protokol network yang dispesifikasikan oleh driver dan mengembalikan hasil eksekusi perintah ke client.

Gambar II-1 Komunikasi aplikasi client dan database server [BEL07]

MySQL menyediakan konektivitas untuk aplikasi client yang dikembangkan dengan bahasa Java melalui JDBC driver, yang dikenal dengan nama MySQL Connector/J. MySQL Connector/J merupakan JDBC driver tipe 4, yaitu driver yang merupakan implementasi murni dari protokol MySQL dan tidak bergantung pada library client

MySQL yang digunakan.

Suatu RDBMS dapat menangani operasi atomik maupun transaksi. Transaksi memungkinkan eksekusi sekumpulan operasi seakan-akan sebagai sebuah operasi atomik. Suatu transaksi biasanya diawali dengan statement begin transaction dan diakhiri dengan statement endtransaction. Operasi-operasi terkait transaksi berada di antara kedua statement tersebut.

Transaksi merupakan salah satu cara untuk menjamin fault tolerance pada data management tier karena memiliki properti ACID (Atomicity, Consistency, Isolation, dan Durability) yang menjamin integritas dari data.

(5)

Database system harus mampu menjaga properti dari transaksi sebagai berikut:

1. Atomicity: Semua operasi dalam transaksi harus tereksekusi atau tidak sama sekali.

2. Consistency: Data yang akan disimpan di database hanyalah data yang valid. 3. Isolation: Jika terdapat beberapa transaksi yang berjalan secara konkuren,

transaksi tersebut tidak boleh saling menginterferensi.

4. Durability: Setelah transaksi selesai dieksekusi, perubahan yang dilakukan oleh transaksi tersebut terhadap database permanen walaupun terjadi kegagalan sistem.

Gambar II-2 State diagram transaksi [SIL02]

Pada state diagram di atas (Gambar II-2), setiap transaksi akan berada di salah satu

state berikut:

1. Active: Keadaan awal, setiap transaksi berada pada state ini ketika eksekusi. 2. Partially Commited: State di mana operasi terakhir dari sebuah transaksi telah

dieksekusi.

3. Failed: State setelah ditemukan kegagalan pada transaksi.

4. Aborted: Transaksi telah di-roll-back dan database kembali ke kondisi sebelum transaksi dieksekusi.

(6)

MySQL mengelola dua jenis transaksi, yaitu transaksi statement yang memperlakukan setiap statement sebagai sebuah transaksi dan transaksi normal. Transaksi statement

dimulai setiap kali sebuah statement diterima oleh database, akan commit jika

statement tersebut berhasil dieksekusi atau roll-back jika statement gagal dieksekusi. Transaksi normal diawali dan diakhiri secara eksplisit oleh user, terdiri dari sejumlah

statement di antara statement begin dan end transaksi. Penentuan commit atau roll-back suatu transaksi normal ditentukan oleh user atau storage engine terkait. Pada mode autocommit, transaksi normal akan diperlakukan sebagai sejumlah transaksi

statement.

Untuk setiap koneksi client, MySQL menyimpan state transaksi statement dan transaksi normal di thd->transaction. Struktur thd->transaction memiliki dua atribut bertipe THD_TRANS, yaitu thd->transaction.stmt yang memuat list of engines yang terlibat pada suatu statement dan thd->transaction.all yang memuat list of engines yang terlibat pada seluruh statement pada transaksi normal. Setiap elemen list merupakan pointer ke storage engine, data transaksional, dan flag

transaksi.

Pada transaksi yang autocommit, data pada thd->transaction.all akan kosong. Sebaliknya, data pada thd->transaction.stmt diperlukan untuk menentukan

commit/roll-back pada transaksi normal, sehingga transaksi nomal tidak akan pernah

commit jika belum semua transaksi statement di dalamnya commit. Setiap kali suatu

statement commit atau roll-back, list pada thd->transaction.stmt akan dikosongkan, siap untuk digunakan oleh statement berikutnya. List pada thd->transaction.all akan dikosongkan setelah transaksi normal commit. Jika koneksi terputus saat transaksi normal sedang berjalan, maka transaksi tersebut akan di- roll-back.

2.3 JDBC (Java

Database Connectivity

)

JDBC merupakan teknologi yang memungkinkan program Java melakukan manipulasi data pada database. Terdapat empat komponen utama pada JDBC, yaitu:

(7)

1. JDBC API (Application Programming Interface)

JDBC API merupakan API Java yang terdiri dari beberapa kelas dan interface

untuk mengakses database relasional. JDBC API memudahkan suatu aplikasi Java untuk membentuk koneksi ke data source, mengirim statement query dan

update ke data source, dan memproses hasil eksekusi statement tersebut dari

data source. Dengan menggunakan JDBC API, aplikasi menjadi independen terhadap database yang digunakan, sebuah program dapat digunakan untuk mengakses berbagai jenis data source berbeda. Pada JDBC 4.0, terdapat dua jenis API, yaitu JDBC 4.0 Core API, dan JDBC 4.0 Standard Extension. JDBC 4.0 Core API wajib digunakan dalam pembentukan koneksi dan terdapat dalam packagejava.sql.Sedangkan JDBC 4.0 Standard Extension

API terdapat dalam packagejavax.sql, merupakan alternatif lain dari JDBC 4.0 Core API karena memiliki fungsi tambahan yang bersifat opsional.

2. JDBC Driver Manager

JDBC Driver Manager yang merupakan backbone dari arsitektur JDBC adalah sebuah kelas yang bekerja di antara user dan driver JDBC. Driver Manager

berfungsi menghubungkan aplikasi Java dengan driver JDBC yang tepat saat pembentukan koneksi ke database.

3. JBDC Test Suite

JDBC Test Suite bertugas menguji kemampuan suatu JDBC driver untuk menjalankan program user dengan mengeksekusi berbagai fitur esensial pada JDBC API.

4. JDBC-ODBC Bridge

JDBC-ODBC Bridge memungkinkan penggunaan driver ODBC sebagai

driver JDBC. JDBC-ODBC Bridge akan menerjemahkan method call JDBC menjadi function call ODBC, sehingga dapat digunakan untuk berkomunikasi dengan database apapun yang memiliki driver ODBC. Implementasi JDBC-ODBC Bridge terdapat dalam package sun.jdbc.odbc yang berisi native library untuk mengakses ODBC.

(8)

Gambar II-3 Arsitektur JDBC [HAE02]

2.3.1 JDBC API

JDBC API memungkinkan independensi pengembangan aplikasi terhadap database

yang digunakan, karena implementasi dari interface yang didefinisikan di API tersebut disediakan oleh vendor database. Terdapat beberapa kelas dan interface

utama pada JDBC API, antara lain:

1. java.sql.DriverManager

Kelas yang mengelola JDBC driver pada list jdbc.drivers, digunakan untuk membentuk koneksi ke data source. Pembentukan koneksi dilakukan dengan menggunakan methodgetConnection.

2. javax.sql.DataSource

Interface yang merupakan alternatif dari java.sql.DriverManager, implementasinya disediakan oleh vendor JDBC driver. Terdapat beberapa tipe implementasi yang memungkinkan pembentukan objek Connection standar, objek Connection yang secara otomatis berpartisipasi dalam connection pooling, atau objek Connection yang dapat digunakan pada distributed transaction. Serupa dengan DriverManager, pembentukan koneksi ke data source dilakukan dengan menggunakan methodgetConnection.

(9)

3.java.sql.Driver

Interface yang merepresentasikan JDBC driver, implementasinya bergantung pada database. Sebelum pembentukan koneksi ke database, Driver harus

di-load dan di-register ke DriverManager terlebih dahulu dengan menggunakan

method Class.forName. Untuk membentuk koneksi database ke suatu URL, digunakan method connect yang akan mengembalikan objek Connection

atau null jika driver tersebut tidak sesuai.

4. java.sql.Connection

Interface yang merepresentasikan suatu koneksi (session) ke database. Eksekusi dan pengembalian hasil eksekusi statement SQL hanya dapat dilakukan dalam konteks ini dengan menggunakan methodcreateStatement.

5. java.sql.Statement

Interface yang mendukung eksekusi statement SQL ke database. Untuk mengeksekusi statement SELECT, dapat digunakan method executeQuery

yang menerima parameter statement SQL dan mengembalikan objek

ResultSet. Method executeUpdate yang menerima parameter statement

DML (Data Manipulation Language) SQL atau statement DDL (Data Definition Language) SQL dapat digunakan untuk mengeksekusi statement INSERT, UPDATE, atau DELETE.

6. java.sql.ResultSet

Interface yang merepresentasikan sebuah tabel data hasil eksekusi sebuah

statement SQL. ResultSet memiliki sejumlah method getter yang dapat digunakan untuk me-retrieve data dari setiap baris tabel.

2.3.2 JDBC Driver

Agar suatu program Java yang menggunakan JDBC dapat berkomunikasi dengan

database diperlukan suatu driver yang berfungsi mengubah request dari program menjadi format yang sesuai dengan protokol yang dimengerti oleh database.

Translation layer inilah yang mendukung dependensi suatu aplikasi terhadap

database. Jika database di back-end berubah, hanya diperlukan penggantian driver

JDBC dengan driver yang sesuai dan sedikit perubahan pada kode aplikasi. Terdapat empat tipe implementasi driver JDBC, yaitu:

(10)

1. JDBC-ODBC Bridge plus ODBC Driver

Driver tipe 1 ini menyediakan akses JDBC melalui driver ODBC (Open Database Connectivity). Pada driver tipe ini, method call JDBC akan dikonversi menjadi function call ODBC. JDBC-ODBC Bridge plus ODBC

Driver bersifat platform-independent, namun sangat bergantung pada native library dari sistem operasi.

2. Native-API Partly-Java Driver

Driver tipe 2 ini mengubah JDBC call menjadi database specific call dengan memanfaatkan client-side library dari database. Driver tipe ini bersifat

platform-dependent.

3. JDBC-Net Pure Java Driver

Driver tipe 3 ini mengubah JDBC call menjadi format yang sesuai dengan suatu protokol network yang independen terhadap DBMS untuk selanjutnya diubah menjadi format yang sesuai protokol DBMS oleh middleware server. JDBC-Net Pure Java Driver merupakan tipe driver yang paling fleksibel karena dapat menghubungkan client ke berbagai database berbeda.

4. Native-Protocol Pure Java Driver

Driver tipe 4 ini mengubah JDBC call menjadi format yang sesuai protokol

network yang digunakan oleh DBMS. Implementasi seperti ini memungkinkan

client berhubungan langsung dengan database server, sehingga lebih cepat dibandingkan driver tipe lainnya. Kekurangannya, Native-Protocol Pure Java

Driver merupakan tipe driver yang sangat bergantung kepada database.

2.3.3 Connection

Connection merupakan sebuah objek pada JDBC yang merepresentasikan koneksi ke sebuah database, yaitu metode yang memungkinkan client software berkomunikasi dengan database server pada mesin yang sama atau berbeda. Koneksi fisik ke

database umumnya menggunakan socket atau pipe. Suatu aplikasi dapat memiliki beberapa koneksi sekaligus ke sebuah database atau ke sejumlah database berbeda.

Untuk menghidupkan objek Connection, biasanya digunakan method com.mysql.jdbc.DriverManager.getConnection. Sebelumnya, driver JDBC yang

(11)

sesuai harus di-load dan di-register terlebih dahulu dengan mengeksekusi method Class.forName. Method tersebut menerima parameter sebuah nama driver dan mengembalikan objek com.mysql.jdbc.Driver.

// load MySQL Connector/J Driver

Class.forName(“com.mysql.jdbc.Driver”).newInstance();

Kode II-1 Proses load dan register MySQL Connector/J driver

Terdapat tiga overload methodgetConnection yang dapat digunakan, yaitu:

1. getConnection(String url) yang menerima parameter JDBC URL

(Uniform Resource Locator).

2. getConnection(String url, Properties info) yang menerima

parameter JDBC URL dan properti.

3. getConnection(String url, String user, String password) yang

menerima parameter JDBC URL, username, dan password.

// connection to MySQL using DriverManager Connection conn =

DriverManager.getConnection(“jdbc:mysql://hostname/databasename”, “username”, “password”);

Kode II-2 Pembentukan koneksi ke MySQL dengan DriverManager

JDBC URL merupakan metode pengalamatan data source yang memiliki sintaks standar sebagai berikut.

jdbc:[subprotocol]://[host][,failoverhost…][:port]/[database][?proper tyName1=propertyValue1][&propertyName2=propertyValue2]…

Tabel II-1 Komponen JDBC URL

Komponen Fungsi

subprotocol menspesifikasikan nama driver atau nama

mekanisme konektivitas database

host menspesifikasikan nama host (localhost

(12)

Komponen Fungsi

failoverhost

menspesifikasikan nama host opsional yang akan digunakan jika koneksi ke host

sebelumnya tidak berhasil

:port menspesifikasikan nomor port (portdefault

adalah 3306)

/database menspesifikasikan nama databasedefault

?propertyName1=propertyValue1

menspesifikasikan parameter opsional terkait koneksi dan otentikasi seperti user,

password, useCompression; terkait jaringan seperti tcpRcvBuf, tcpSndBuf; terkait availabilitas dan clustering seperti

autoReconnect, roundRobinLoadBalance; terkait keamanan seperti

allowMultiQueries, useSSL; terkait performansi seperti metadataCacheSize,

useFastIntParsing; terkait debugging dan

profiling seperti logger,

maxQuerySizeToLog; atau lainnya seperti

useUnicode, maxRows. Seluruh parameter opsional beserta nilai default-nya

dilampirkan di lampiran A.

&propertiName2=propertyValue2 menspesifikasikan parameter opsional

tambahan

Selanjutnya, kelas DriverManager yang merupakan management layer pada JDBC akan memeriksa setiap driver pada list jdbc.drivers yang dikelolanya sampai menemukan driver yang mampu membentuk koneksi ke database yang direpresentasikan oleh JDBC URL tersebut. Pembentukan koneksi dilakukan dengan memanggil methodconnect dari setiap objek Driver pada list tersebut.

Selain menggunakan kelas DriverManager, objek Connection dapat diperoleh dengan menggunakan interface javax.sql.DataSource. DataSource merupakan

(13)

metode pembentukan koneksi untuk mendukung fungsi yang lebih rumit seperti

connection pooling1 dan transaksi terdistribusi. Berbeda dengan DriverManager,

DataSource memiliki properti yang mengidentifikasikan dan mendeskripsikan data source yang direpresentasikannya, sehingga meningkatkan portabilitas data source

tanpa perlu melakukan perubahan pada kode yang mengakses data source tersebut. Dari properti yang telah di-set, DataSource akan membentuk JDBC URL yang terdiri dari serverName, portNumber, dan databaseName. JDBC URL tersebut, bersama dengan user dan password, akan digunakan sebagai parameter methodconnect dari JDBC driver.

Penggunaan DataSource pada MySQL dilakukan pertama kali dengan menginstansiasi kelas com.mysql.jdbc.jdbc2.optional.MysqlDataSource, lalu memanggil method untuk menspesifikasikan properti data source seperti

setServerName dan setDatabaseName. Koneksi akan dibentuk setelah pemanggilan

method getConnection yang menerima parameter username dan password dan mengembalikan objek Connection.

// connection to MySQL using DataSource

com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds; Connection conn;

ds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource(); ds.setServerName(“hostname”);

ds.setDatabaseName(“databasename”);

conn = ds.getConnection(“username”, “password”);

Kode II-3 Pembentukan koneksi ke MySQL dengan DataSource

Tabel II-2 Properti standar data source

Nama properti Tipe Deskripsi

databaseName String nama database

dataSourceName String

nama lojik yang digunakan pada implementasi connectionpooling atau transaksi terdistribusi

1Connection pooling merupakan me kanis me mana je men seju mlah koneksi yang me mungkin kan suatu koneksi yang sedang idle dimanfaatkan oleh thread yang me me rlu kan.

(14)

Nama properti Tipe Deskripsi

description String deskripsi datasource

networkProtocol String protokol network yang digunakan untuk

berkomunikasi dengan server

password String passworduser

portNumber int nomor port yang digunakan server untuk

menangani request koneksi

roleName String nama role

serverName String nama databaseserver

user String nama user

Konfigurasi objek Connection dapat dilakukan melalui method yang tersedia, seperti

setAutoCommit atau setTransactionIsolation. Aktifnya mode autocommit dari objek Connection akan mengakibatkan setiap statement SQL dieksekusi dan

di-commit seakan-akan sebuah transaksi individual. Sebaliknya, pada objek Connection

yang tidak autocommit, seluruh statement SQL pada konteks tersebut dianggap sebagai sebuah transaksi yang hanya akan berakhir setelah pemanggilan method commit atau method rollback. Method commit akan menjadikan seluruh perubahan pada konteks tersebut menjadi permanen, sedangkan method rollback akan membatalkan seluruh perubahan. Kedua method tersebut akan melepaskan lock

terhadap database yang digunakan oleh objek Connection terkait.

2.3.4 Session

Eksekusi statement SQL terhadap database hanya bisa dilakukan dalam suatu session. Oleh karena itu, user perlu membuka session dari suatu koneksi yang telah terbentuk dengan cara melakukan login ke database. JDBC merepresentasikan koneksi dan

session sebagai objek Connection, yang didapat dengan memanggil method getConnection. Setelah user memperoleh objek Connection, maka secara otomatis

session untuk user tersebut telah terbentuk. Session dapat diakhiri secara manual oleh

(15)

Setelah terbentuk session atas nama suatu user, user tersebut dapat mengirimkan

statement SQL ke database dengan menggunakan salah satu dari tiga interface

berikut:

1. Statement, dihidupkan dengan method Connection.createStatement.

Objek Statement digunakan untuk mengirim statement SQL tanpa parameter.

2. PreparedStatement, dihidupkan dengan method

Connection.prepareStatement. Objek PreparedStatement digunakan untuk statement SQL yang precompiled.

3. CallableStatement, dihidupkan dengan methodConnection.prepareCall.

Objek CallableStatement digunakan untuk mengeksekusi stored procedures.

Untuk setiap session umumnya DBMS akan menyimpan data terkait transaksi,

database yang digunakan, koneksi, lock terhadap data, dan query. MySQL menyimpan data tersebut pada objek THD.

2.4 Interaksi

MySQL

Connector/J

dan

MySQL

pada

Pembentukan Koneksi

Gambar II-4 Interaksi MySQL Connector/J dan MySQL pada pembentukan koneksi

Client Authentication Packet

Hands hake Initialization Packet

JDBC4C onnection My sqlIO my sqld sql_parse

1 : handle_connections_sockets() 2 : createNewIO () 3 : My sqlIO () <<create>> 4 : create_new _thread 5 : handle_one_connectio n() 6 : check_connection 7 : doHandshake 8 : check_user

(16)

Pembentukan koneksi ke database MySQL melalui MySQL Connector/J dilakukan melalui mekanisme berikut.

1. Program utama MySQL server yaitu mysqld mengeksekusi fungsi

handle_connections_socket untuk menangani pembentukan koneksi dari

client.

2. Objek Connection dari MySQL Connector/J membentuk channel Input/Output ke MySQL server melalui pemanggilan methodcreateNewIO. 3. Method createNewIO menghidupkan objek MysqlIO yang bertanggung jawab

terhadap pembentukan koneksi TCP melalui java.net.Socket.

4. Setelah mendeteksi adanya koneksi dari client, MySQL server akan menyediakan sebuah thread untuk menangani koneksi tersebut dengan memanggil fungsi create_new_thread. Setiap koneksi yang telah terbentuk selanjutnya akan ditangani oleh fungsi handle_one_connection.

5. Fungsi handle_one_connection akan mengeksekusi fungsi

check_connection yang bertugas melakukan handshaking dan otentikasi koneksi dari client.

6. Pada fungsi check_connection, MySQL server akan mengirimkan

Handshake Initialization Packet ke client sebagai identifikasi server.

7. Objek Connection akan memanggil method doHandshake untuk menerima

Handshake Initialization Packet dari server dan mengirimkan Client AuthenticationPacket ke server.

8. Setelah MySQL server menerima Client Authentication Packet, akan dilakukan parsing terhadap paket tersebut dan otentikasi client dengan mengeksekusi fungsi check_user.

9. Koneksi yang berhasil diotentikasi selanjutnya siap digunakan untuk mengirimkan perintah ke database.

Tabel II-3 Body dari Handshake Initialization Packet

Bytes Nama Deskripsi

1 protocol_version

Versi protokol, diambil dari

PROTOCOL_VERSION pada

(17)

Bytes Nama Deskripsi

n (null terminated)

server_version

Versi MySQL server, diambil dari

MYSQL_SERVER_VERSION pada

/include/mysql_version.h, diakhiri dengan byte 0x00.

4 thread_number Id dari threadserver yang menangani

koneksi ini.

8 scramble_buff Bagian pertama dari salt yang digunakan

pada mekanisme enkripsi password.

1 (filler) always 0x00 -

2 server_capabilities

Kapabilitas server, diambil dari

/include/mysql_com.h, meliputi CLIENT_LONG_PASSWORD, CLIENT_FOUND_ROWS, CLIENT_LONG_FLAG, CLIENT_CONNECT_WITH_DB, CLIENT_NO_SCHEMA, CLIENT_COMPRESS, CLIENT_ODBC, CLIENT_LOCAL_FILES, CLIENT_IGNORE_SPACE, CLIENT_PROTOCOL_41, CLIENT_INTERACTIVE, CLIENT_SSL, CLIENT_IGNORE_SIGPIPE, CLIENT_TRANSACTIONS, CLIENT_RESERVED, CLIENT_SECURE_CONNECTION, CLIENT_MULTI_STATEMENTS, dan CLIENT_MULTI_RESULTS.

1 server_language Characterset yang digunakan.

2 server_status

Status autocommit server, meliputi

SERVER_STATUS_IN_TRANS dan

SERVER_STATUS_AUTOCOMMIT.

13 (filler) always 0x00 -

13 rest of scramble_buff Bagian terakhir dari salt.

Tabel II-4 Body dari Client Authentication Packet

Bytes Nama Deskripsi

4 client_flags

Kapabilitas server yang ingin digunakan oleh client, meliputi

server_capabilities pada Handshake Initialization Packet.

(18)

Bytes Nama Deskripsi

4 max_packet_size Jumlah byte maksimum dalam setiap

paket untuk client.

1 charset_number Characterset yang digunakan.

23 (filler) always 0x00 -

n (null terminated)

user Identifikasi, maksimal 16 byte, diakhiri

dengan byte 0x00.

(1 + x) scramble_buff Password yang telah dienkripsi dengan salt dari server (opsional).

1 (filler) always 0x00 -

y (null terminated)

databasename

Nama database yang akan digunakan (opsional), maksimal 64 byte, diakhiri dengan byte 0x00.

2.4.1 Implementasi Pembentukan Koneksi pada MySQL Connector/J

Pada MySQL Connector/J yang merupakan connector untuk program Java ke

database MySQL, mekanisme pembentukan koneksi secara garis besar adalah sebagai berikut.

1. Kelas com.mysql.jdbc.Driver akan memanggil method connect untuk menginstansiasi kelas com.mysql.jdbc.ConnectionImpl yang merepresentasikan koneksi ke MySQL server.

2. Pada instansiasi tersebut, dilakukan pula instansiasi kelas turunannya, yaitu

com.mysql.jdbc.JDBC4Connection. Kelas ini mencakup fitur tambahan yang disediakan oleh JDBC 4.0.

3. Selanjutnya dilakukan pembentukan koneksi TCP ke MySQL server oleh kelas com.mysql.jdbc.MysqlIO. Kelas ini juga menangani handshaking

antara client dan MySQL server, dengan menerima Handshake Initialization Packet dari MySQL server dan merespon dengan Client Authentication Packet.

(19)

Penjelasan mekanisme pembentukan koneksi pada MySQL Connector/J secara detil terdapat pada lampiran B.

2.4.2 Penanganan Koneksi pada MySQL

Penanganan koneksi dari client pada MySQL dilakukan oleh program utama yang bernama mysqld. Mekanisme penanganan koneksi tersebut secara garis besar adalah sebagai berikut.

1. Program utama melakukan initial check, menginisialisasi komponen, melakukan listen di port yang ditentukan, serta menunggu koneksi dari client. 2. Setiap mendeteksi koneksi dari client, akan dibuat thread baru dan objek THD

yang akan mengelola informasi mengenai thread tersebut.

3. Selanjutnya dilakukan handshaking dengan mengirimkan Handshake Initialization Packet dan otorisasi client dengan membaca respon dari client

berupa Client Authentication Packet.

4. Setelah handshaking berhasil, akan dilakukan pemeriksaan user dan password

yang diberikan oleh client.

Penjelasan mekanisme penanganan koneksi oleh MySQL secara detil terdapat pada lampiran C.

Gambar

Gambar II-1 Komunikasi aplikasi client dan database server [BEL07]
Gambar II-2 State diagram transaksi [SIL02]
Gambar II-3 Arsitektur JDBC [HAE02]
Tabel II-1 Komponen JDBC URL
+5

Referensi

Dokumen terkait

Alasan masuk S1 Pendidikan Bahasa Inggris FKIP-UT karena tidak perlu meninggalkan tugas/fleksibel merupakan pilihan terbanyak yang di pilih oleh responden

Untuk menghasilkan telur dengan berat yang optimal diperlukan pakan dengan kandungan protein pakan yang tinggi, Menurut IP2TP Jakarta (2000) untuk itik periode bertelur,

Dengan diketahuinya gambaran MRSA pada penderita infeksi kaki diabetik di Poliklinik Kaki Diabetik RSUD Ulin Banjarmasin, maka dapat memberikan informasi mikrobiologis

Berdasarkan uraian yang dikemukakan di atas, maka dapat disimpulkan bahwa inti dari kerajinan terletak pada besarnya peran keterampilan tangan pengrajin dalam

Berdasarkan uraian yang telah dijelaskan sebelumnya, maka dapat disimpulkan bahwa bahan ajar berupa buku siswa menggunakan konteks bahan bakar minyak dengan pendekatan

komponen public key system (PKS) diantaranya certification authority (CA) merupakan sebuah body/entity yang memberikan dan mengelola sertifikat digital yang dibutuhkan

Berdasarkan uraian diatas, Balai Irigasi Pusat Litbang Sumber Daya Air merasa perlu melakukan percobaan penerapan model jaringan irigasi perpipan pada skala lapangan,

Kegiatan perikanan tangkap yang dilakukan nelayan Desa Batilap menggunakan berbagai jenis alat tangkap namun mayoritas yang digunakan adalah selambau, rengge, tempirai dan