BAB II
2
JAVA, AGENT, JADE, DAN MYSQL
2.1 JAVA
Java merupakan sebuah bahasa pemrograman tingkat tinggi yang berorientasi objek yang dikembangkan oleh Sun Microsystems. Kemampuannya untuk dijalankan pada berbagai jenis arsitektur komputer dan ketersediannya sebagai perangkat lunak gratis membuat bahasa pemrograman Java lebih banyak dikenal dan digunakan daripada bahasa pemrograman berorientasi objek lainnya.
2.1.1 Sejarah Bahasa Pemrograman Java
Pada tahun 1991, James Gosling dan Patrick Naughton membentuk Green
Project yang bertujuan untuk menemukan cara agar peralatan elektronik dapat saling berkomunikasi satu dengan lainnya. Mereka menyadari bahwa peralatan elektronik konsumen memiliki CPU yang berbeda-beda dan memori yang terbatas. Untuk mengatasi masalah tersebut, James Gosling mulai mengembangkan bahasa pemrograman baru yang diberi nama Oak pada bulan April 1991.
Bahasa pemrograman Oak dibuat berdasarkan bahasa pemrograman C++. Agar Oak dapat digunakan pada peralatan elektronik konsumen, maka James Gosling memangkas fitur-fitur bahasa pemrograman C++ menjadi seminimal mungkin. Selain itu Oak juga memiliki kemampuan untuk berjalan di berbagai jenis CPU.
Pada bulan Agustus 1991, Oak berhasil menjalankan program pertamanya, dan pada Oktober 1992, Green Project berhasil menciptakan *7 (Gambar 2.1) yang berfungsi untuk mengatur berbagai peralatan rumah tangga secara nirkabel.
Karena industri video-on-demand yang menjadi sasaran pemasaran *7 masih merupakan industri yang baru berkembang, maka pasar tanggapan terhadap *7 tidak terlalu baik. Kegagalan tersebut menyebabkan Green Project beralih ke pengembangan aplikasi on-line dan CD-ROM berbasis Oak. Seiring dengan peralihan ini, nama bahasa pemrograman Oak dan GreenProject mengalami perubahan menjadi Java, dan FirstPerson.
Gambar 2.1. Perangkat *7 dengan user interface eksperimental
Akhirnya pada Maret 1995, FirstPerson meluncurkan Java 1.0a kepada publik dengan slogan WORA (Write Once, Run Anywhere). Setelah peluncuran pertama ini, bahasa pemrograman Java semakin dikenal dan digunakan secara luas. Banyak web browser segera mengimplementasikan kemampuan untuk menjalakan Java applet yang aman. Dengan datangnya Java 2, ditambahkan beberapa konfigurasi untuk menjalankan Java di platform yang berbeda. Sebagai contoh J2EE diperuntukkan bagi aplikasi di tingkat perusahaan, dan J2ME dikhususkan bagi aplikasi pada perangkat bergerak.
2.1.2 Fitur-fitur Bahasa Pemrograman Java
Persyaratan dari bahasa pemrograman Java berasal dari lingkungan komputasi dimana perangkat lunak harus dijalankan. Perkembangan internet dan
World-Wide Web yang pesat telah membawa kita kepada cara baru dalam memandang pengembangan dan pendistribusian perangkat lunak. Oleh sebab itu, teknologi Java harus memungkinkan pengembangan aplikasi yang aman, berkinerja tinggi, dan tangguh yang dapat bekerja pada beberapa platform dalam jaringan yang heterogen dan terditribusi [2].
Persyaratan-persyaratan di atas terdiri dari beberapa kata kunci. Kata-kata kunci tersebut akan dijelaskan dalam sub-sub bab berikut ini [2] [3].
2.1.2.1 Sederhana, Berorientasi Objek, dan Dikenal
Sederhana berarti bahasa pemrograman Java dapat dilakukan tanpa membutuhkan pelatihan pemrogram yang ekstensif. Konsep dasar bahasa pemrograman Java adalah dapat dimengerti dengan cepat, sehingga seorang pemrogram dapat menjadi produktif sejak awal.
Sistem Java menyediakan platform pengembangan berorientasi objek yang bersih dan efisien agar perangkat lunak dapat berfungsi pada lingkungan jaringan yang semakin rumit.
Pengembangan bahasa pemrograman Java yang menyerupai C++ membuat bahasa pemrograman Java menjadi bahasa yang dikenal. Dengan digunakannya fitur-fitur dari C++, pemrogram dapat berpindah ke Java platform dengan cepat dan segera menjadi produktif.
2.1.2.2 Tangguh dan Aman
Bahasa pemrograman Java dirancang untuk membuat perangkat lunak yang dapat diandalkan. Bahasa pemrograman ini menyediakan pemeriksaan pada proses compile, dan pemeriksaan tingkat kedua di saat menjalankan program.
Teknologi Java dirancang untuk beroperasi di lingkungan yang terdistribusi dimana keamanan menjadi faktor yang sangat penting. Dengan adanya fitur keamanan, teknologi Java memungkinkan pemrogram membangun aplikasi yang tidak dapat diserang dari luar.
2.1.2.3 Tidak Tergantung Arsitektur dan Mudah Dibawa
Teknologi Java dirancang untuk mendukung aplikasi yang akan dijalankan dalam lingkungan jaringan yang heterogen. Pada lingkungan semacam itu, aplikasi harus memiliki kemampuan untuk dieksekusi pada berbagai jenis arsitektur perangkat keras. Di dalam berbagai jenis platform perangkat keras ini, aplikasi harus dapat dieksekusi di atas berbagai sistem operasi dan berkomunikasi dengan berbagai antarmuka bahasa pemrograman.
Ketidak-tergantungan terhadap arsitektur merupakan salah satu bagian dari sistem yang sepenuhnya mudah dibawa. Program yang dibuat dengan bahasa pemrograman Java akan memiliki arti yang sama di setiap platform. Dalam teknologi bahasa pemrograman Java, platform yang tidak tergantung arsitektur dan mudah dibawa dikenal dengan nama Java Virtual Machine.
2.1.2.4 Berkinerja Tinggi
Kinerja selalu menjadi pertimbangan dalam pemrograman. Java platform mencapai kinerja yang tinggi dengan menggunakan skema dimana interpreter dapat bekerja dengan kecepatan penuh tanpa perlu memeriksa run-time
environment. Sebuah garbage collector bekerja sebagai background thread dengan prioritas rendah untuk memastikan tersedianya memori pada saat dibutuhkan.
2.1.2.5 Interpreted, Threaded, dan Dinamis
Java interpreter dapat mengeksekusi bytecodes secara langsung pada semua jenis peralatan dimana interpreter dan sistem runtime dijalankan. Selain itu teknologi Java juga memiliki kemampuan multithreading yang memungkinkan pemrogram untuk membangun aplikasi dengan banyak aktifitas thread yang berjalan bersamaan.
Jika Java Compiler bersifat ketat dalam pemeriksaan kesalahan, sistem bahasa dan runtime Java bersifat dinamis pada tahap penghubungan. Class hanya dihubungkan seperlunya saja. Modul kode baru dapat dihubungkan sesuai permintaan dari berbagai sumber, termasuk dari sumber antar jaringan.
2.1.3 Java Platform
Sebuah platform adalah lingkungan perangkat keras atau lunak dimana program berjalan [3]. Sebagian besar platform dapat dijelaskan sebagai kombinasi dari sistem operasi dan perangkat keras di bawahnya. Java platform berbeda dari sebagian besar platform lainnya karena hanya terdiri dari perangkat lunak yang berjalan di atas platform perangkat keras lain. Java platform terdiri dari 2 bagian:
• Java Virtual Machine
• Java Application Programming Interface (API)
Pada bahasa pemrograman Java, semua kode sumber pertama-tama ditulis dalam file teks dangan ekstensi .java. Kode sumber tersebut kemudian diterjemahkan ke dalam file .class oleh javac compiler. Sebuah file .class
bytecodes yang merupakan bahasa dari Java Virtual Machine (Java VM). Urutan proses pengembangan perangkat lunak pada Java diilustrasikan pada Gambar 2.2.
Gambar 2.2. Urutan proses pengembangan perangkat lunak dengan
menggunakan Java
Karena Java VM tersedia pada banyak sistem operasi yang berbeda, maka file .class yang sama dapat dijalankan pada berbagai sistem operasi yang
berbeda. Kemampuan ini diilustrasikan pada Gambar 2.3.
Gambar 2.3. Kemampuan Java untuk menjalankan aplikasi yang sama di
beberapa platform yang berbeda
API merupakan sekumpulan perangkat lunak yang siap digunakan yang menyediakan banyak kegunaan. API dikelompokkan lagi menjadi kumpulan dari
class dan antarmuka yang berhubungan yang disebut package.
Sebagai lingkungan yang tidak tergantung pada platform, Java dapat menjadi sedikit lebih lambat daripada bahasa pemrograman lain. Namun
perkembangan pada compiler dan virtual machine semakin membawa kinerja
Java mendekati bahasa pemrograman lainnya dengan tidak mengurangi kemudahannya untuk dipindahkan. Susunan dari Java platform ditunjukkan pada Gambar 2.4.
Gambar 2.4. API dan Java Virtual Machine memisahkan program dari perangkat
keras dibawahnya
2.2 PENGERTIAN AGENT
Dalam bidang ilmu komputer, istilah agent atau agent perangkat lunak adalah sebuah perangkat lunak yang bertindak untuk seorang pengguna atau program lainnya dalam hubungan perwakilan [4]. Tindakan sebagai perwakilan dari pangguna atau program lainnya berarti agent memiliki kuasa untuk menentukan apakah tindakannya tersebut benar. Sebuah agent dapat menentukan apakah dirinya akan bekerja sama dengan agent lain, atau berkompetisi untuk mencapai tujuannya sendiri.
Dari konsep di atas, sebuah agent memiliki sifat-sifat sebagai berikut [5]: • otomatis:
Sebuah agent harus dapat bekerja tanpa campur tangan secara langsung dari manusia, dan memiliki kemampuan untuk mengatur keadaan internalnya.
• sosial:
Sebuah agent dapat bekerja sama dengan manusia atau agent lainnya dalam mencapai tujuannya,
• reaktif:
Agent harus dapat mempelajari lingkungannya dan merespon secara berkala terhadap perubahan di lingkungannya,
• proaktif:
Agent tidak hanya bertindak untuk merespon keadaan lingkungannya, tetapi juga dapat beringkah laku dalam mencapai suatu tujuan dengan mengambil inisiatif,
• bergerak:
Agent dapat memiliki kemampuan untuk berpindah antara simpul yang berbeda pada jaringan komputer,
• rasional:
Agent selalu bertindak untuk mencapai tujuannya dan tidak pernah mencegah pencapaian tujuannya,
• dapat belajar:
Agent dapat menyesuaikan dirinya dengan lingkungannya dan dengan keinginan dari penggunanya.
2.3 JADE
JADE (Java Agent DEvelopment Framework) merupakan sebuah kerangka kerja perangkat lunak yang diimplementasikan sepenuhnya dalam bahasa Java. JADE memudahan implementasi dari Multi-Agent System (MAS) melalui
middle-ware yang bekerja sesuai spesifikasi FIPA (Foundation for Intelligent Physical
Agent).
Karena sepenuhnya diimplementasikan dalam bahasa pemrograman Java, maka JADE juga mendapatkan seluruh keuntungan dari bahasa pemrograman tersebut, termasuk ketidak-tergantungan pada arsitektur platform. Agent platform pada JADE dapat didistribusikan di beberapa mesin yang berbeda, dan tidak perlu menggunakan sistem operasi yang sama.
Secara umum, JADE terdiri dari beberapa bagian, yaitu:
• sebuah runtime environment sebagai tempat hidupnya agent JADE yang harus diaktifkan terlebih dahulu sebelum satu atau lebih agent dapat dijalankan pada sebuah host,
• sekumpulan class (library) yang dapat digunakan oleh para pemrogram dalam mengembangkan agent, dan
• seperangkat peralatan dengan GUI (Graphical User Interface) untuk mengatur dan memantau aktifitas dari agent yang sedang berjalan.
Salah satu peralatan penting yang disediakan JADE adalah RMA (Remote
Monitoring Agent) dan Introspector Agent. RMA berfungsi untuk mengawasi keadaan semua agent pada platform lokal maupun remote dan menyediakan beberapa pilihan untuk mengubah keadaan dan memindahkan agent. Sedangkan
Introspector Agent berfungsi untuk menampilkan keadaan agent beserta seluruh
behaviour yang aktif, dan pesan yang dikirim dan diterima. Tampilan RMA dan Introspector Agent ditunjukkan pada Gambar 2.5 dan 2.6.
Gambar 2.6. Tampilan Introspector Agent
2.3.1 Container dan Platform
Setiap bagian dari JADE runtime environment disebut container, karena dapat menampung beberapa agent. Sedangkan sekumpulan container yang aktif disebut platform [5]. Sebuah main container harus selalu aktif di dalam sebuah
platform. Semua container lainnya pada platform yang sama akan mendaftar pada
main container segera setelah semua container tersebut dijalankan. Oleh karena itu, main container harus menjadi container pertama yang dijalankan pada sebuah
platform JADE.
Jika terdapat main container lain yang dijalankan di suatu tempat, maka
main container tersebut akan membentuk pada platform yang berbeda. Agent pada JADE diidentifikasi oleh sebuah nama yang unik, dan dengan mengetahui nama agent lainnya maka agent tersebut dapat saling berkomunikasi meskipun terletak di container maupun platform yang berbeda. Ilustrasi mengenai container dan platform ditunjukkan pada Gambar 2.7.
2.3.2 AMS dan DF
Perbedaan lain yang dimiliki main container dibandingkan dengan
dijalankan secara otomatis saat main container dijalankan. Kedua agent tersebut adalah AMS (Agent Management System) dan DF (Directory Facilitator).
AMS menyediakan layanan penamaan untuk menjamin keunikan nama dari setiap agent, dan merepresentasikan pihak yang berwenang di dalam sebuah
platform.
DF menyediakan layanan Yellow Pages dimana setiap agent dapat menemukan agent lainnya yang menyediakan layanan yang dibutuhkannya.
Gambar 2.7. Container dan Platform
2.3.3 Agent Class
Membuat sebuah agent pada JADE dapat dilakukan dengan mendefinisikan sebuah class dengan extends jade.core.Agent, dan mengimplementasikan setup() method seperti contoh di bawah ini.
import jade.core.Agent;
public class ContohAgent extends Agent { protected void setup() {
// Mulai inisialisasi agent pada bagian ini }
Method setup() dimaksudkan untuk menginisialisasi agent. Sedangkan
tugas agent yang sebenarnya terdapat pada behaviour.
2.3.4 Menjalankan agent JADE melalui terminal
Cara menjalankan agent pada platform JADE melalui terminal tidak jauh berbeda dengan cara menjalankan program Java pada umumnya.
Kode sumber dari agent dapat di-compile dengan perintah:
javac –classpath <JADE-CLASSES> ContohAgent.java
dimana ContohAgent.java adalah kode sumber dari agent yang akan dijalankan. Untuk menjalankan agent yang telah di-compile, maka JADE runtime harus dijalankan terlebih dahulu, dan nama dari agent harus dipilih dengan perintah:
java –classpath <JADE-CLASSES>;. jade.Boot agent1:ContohAgent
Perintah di atas menjalankan JADE runtime dan agent ContohAgent dengan nama agent1.
Perintah di atas dapat digabung dengan beberapa perintah tambahan seperti:
• -container
Digunakan untuk membuat container biasa yang akan bergabung dengan
platform yang sudah ada.
• -host <nama/alamat host>
Digunakan untuk menentukan nama host dari main container tujuan.
• -port <nomor port>
Digunakan untuk menentukan nomor port yang digunakan oleh main
container tujuan.
• -local-host
Digunakan untuk menentukan host dimana container ini akan dijalankan. Nilai awalnya adalah localhost.
• -local-port
Digunakan untuk menentukan nomor port dimana container ini dapat dihubungi. Nilai awalnya adalah 1099.
Daftar lengkap mengenai perintah yang dapat digunakan terdapat pada [6] beserta penjelasan masing-masing perintah.
2.3.5 Agent Behaviour
Sebuah behaviour merepresentasikan tugas yang dapat dilakukan oleh sebuah agent yang diimplementasikan sebagai object dari sebuah class dengan
extends jade.core.behaviours.Behaviour. Method addBehaviour()
digunakan pada agent class untuk menambahkan sebuah behaviour ke daftar tugas yang harus dilakukan oleh sebuah agent. Behaviour dapat ditambahkan setiap saat, baik saat agent baru dijalankan, maupun dari dalam behaviour lain.
Setiap class yang menggunakan behaviour harus mengimplementasikan
method action() yang mendefinisikan kegiatan yang harus dilakukan ketika behaviour tersebut dijalankan. Method done() mengembalikan sebuah nilai
boolean untuk menunjukkan apakah behaviour sudah selesai dijalankan dan
dapat dikeluarkan dari daftar behaviour yang harus dilakukan oleh agent.
Behaviour pada JADE dibagi menjadi 3 jenis utama, yaitu: one-shot
behaviour, cyclic behaviour, dan generic behaviour [5].
2.3.5.1 One-shot Behaviour
Behaviour ini dirancang untuk selesai dalam 1 fase eksekusi, dimana
method action() hanya dieksekusi sekali saja. Pada behaviour ini method done() telah diimplementasikan dengan mengembalikan nilai true.
2.3.5.2 Cyclic Behaviour
Behaviour ini dirancang agar tidak pernah selesai dengan method
action() yang terus menjalankan operasi yang sama secara berulang-ulang. Pada
behaviour ini method done() akan selalu mengembalikan nilai false.
2.3.5.3 Generic Behaviour
Behaviour ini menggunakan pemicu keadaan dan menjalankan operasi yang berbeda tergantung dari nilai keadaannya. Kondisi yang harus dipenuhi diletakkan pada method done() sehingga behaviour ini selesai jika kondisi yang
2.3.6 Komunikasi Agent
Kemampuan berkomunikasi merupakan salah satu fitur paling penting yang dimiliki oleh agent. Paradigma komunikasi yang digunakan didasarkan pada
asynchronous message passing (Gambar 2.8.), dimana setiap agent memiliki kotak surat (message queue) sebagai tempat JADE runtime meletakkan surat yang dikirim oleh agent lain. Setiap message queue menerima pesan, agent yang bersangkutan akan diberitahu. Tetapi kapan dan bagaimana agent mengambil surat dari message queue ditentukan sepenuhnya oleh pemrogram.
Gambar 2.8. Asynchronous message passing pada JADE
Format pesan yang digunakan pada JADE mengikuti ketentuan yang didefinisikan pada struktur pesan FIPA-ACL (Agent Communication Language). Parameter-parameter yang terdapat pada setiap pesan ACL ditunjukkan pada Tabel 2.1.
Tabel 2.1. Parameter pada pesan ACL Parameter Deskripsi
Performative Jenis tindakan komunikatif dari pesan
sender Identitas dari pengirim pesan
receiver Identitas dari penerima pesan
reply-to Agent yang menjadi tujuan diteruskannya pesan dalam urutan percakapan
content Isi dari pesan
language Bahasa yang digunakan untuk mengekspresikan parameter pada isi
encoding Pengkodean spesifik dari isi pesan
ontology Referensi dari ontology yang memberi arti dai simbol di isi pesan
protocol Protokol interaksi yang digunakan untuk membentuk pecakapan
conversation-id Identitas unik dari sebuah percakapan
reply-with Ekspresi yang digunakan oleh agent yang merespon untuk mengidentifikasi
pesan
in-reply-to Referensi dari kegiatan sebelumnya yang menjadi penyebab pesan balasan
2.3.6.1 Mengirim Pesan
Mengirim pesan kepada agent lain dilakukan dengan mengisi parameter yang terdapat pada objek ACLMessage, dan memanggil method send() dari class Agent. Contoh kode yang digunakan untuk mengirimkan pesan adalah sebagai berikut:
ACLMessage pesan = new ACLMessage(); pesan.setPerformative(ACLMessage.INFORM);
pesan.addReceiver(new AID(“AgentTujuan”, AID.ISLOCALNAME)); pesan.setContent(“Isi Pesan”);
send(pesan);
2.3.6.2 Menerima Pesan
Sebuah agent dapat mengambil pesan yang tedapat dalam message queue dengan menggunakan method receive(). Method ini mengembalikan pesan
pertama yang terdapat di dalam message queue, atau null jika tidak terdapat pesan.
ACLMessage terima = receive(); If (terima != null) {
// Proses pesan yang diterima }
2.3.6.3 Memilih Pesan dari Message Queue
Sebuah agent dapat memilih pesan yang akan diambil dari message queue dengan menggunakan template bersama dengan method receive(). Ketika
sebuah template ditentukan, maka method receive() akan mengembalikan pesan pertama yang sesuai dengan template, dan membiarkan pesan yang lain yang tidak sesuai. Template untuk menerima pesan diimplementasikan sebagai objek dari
classjade.lang.acl.MessageTemplate yang menyediakan sekumpulan method untuk membentuk template secara sederhana dan fleksibel.
Contoh di bawah ini mengaplikasikan template untuk menerima pesan dengan performative CFP, dan membiarkan pesan-pesan lainnya:
Private MessageTemplate mt =
Public void action() {
ACLMessage terima = myAgent.receive(mt); if (terima != null) {
// Pesan CFP diterima dan diproses }
else {
block(); }
}
2.3.7 Layanan Yellow Pages
Layanan yellow pages pada JADE memungkinkan agent untuk menemukan agent lain yang tersedia pada suatu saat secara dinamis.
2.3.7.1 Agent DF
Layanan yellow pages memungkinkan agent untuk mengumumkan deskripsi dari satu atau lebih layanan yang disediakannya agar dapat ditemukan dan digunakan oleh agent lain.
Setiap agent dapat mengumumkan layanannya dan mencari layanan yang disediakan oleh agent lain. Pendaftaran, pembatalan, perubahan, dan pencarian dapat dilakukan setiap saat selama agent hidup.
Layanan yellow pages pada JADE disediakan oleh sebuah agent khusus, yaitu DF (Directory Facilitator). Setiap platform JADE harus memiliki sebuah
agent DF awal dengan nama ‘df@<nama-platform>’. Agent DF lainnya dapat dijalankan jika dibutuhkan, dan beberapa agent DF dapat disatukan untuk menyediakan katalog yellow pages tunggal.
2.3.7.2 Berinteraksi dengan DF
Karena DF merupakan agent, maka DF dapat berkomunikasi dengan agent lainnya dengan saling bertukar pesan ACL. Untuk mempermudah proses interaksi ini, JADE menyediakan jade.domain.DFService class yang memungkinkan
2.3.7.3 Mengumumkan layanan
Sebuah agent yang ingin mengumumkan layannya harus menyediakan AID, daftar layanannya, dan, jika diperlukan, juga daftar bahasa dan ontology yang harus digunakan oleh agent lain untuk berinteraksi dengannya.
Untuk mengumukan layanan, agent harus membuat deskripsi yang sesuai dan memanggil static method register() dari DFService class. Contoh
pengumuman layanan ditunjukkan pada kode di bawah ini:
protected void setup() {
DFAgentDescription dfd = new DFAgentDescription(); dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription(); sd.setType(“Jenis Layanan”); sd.setName(“Nama Layanan”); dfd.addService(sd); try { DFService.register(this, dfd); }
catch (FIPAException fe) { fe.printStackTrace(); }
Saat agent diberhentikan, layanan yang terdaftar pada DF harus diberhentikan. Contoh kode untuk pemberhentian pengumuman layanan adalah sebagai berikut:
protected void takedown() { try {
DFService.deregister(this); }
catch (FIPAException fe) { fe.printStackTrace(); }
2.3.7.4 Mencari layanan
Sebuah agent yang ingin mencari layanan harus menyediakan deskripsi layanan kepada DF berupa template. Hasil dari pencarian adalah daftar semua deskripsi yang sesuai dengan template.
Static method search() dari DFService class dapat digunakan seperti
pada contoh berikut:
private Vector daftarAgent; protected void setup() {
addBehaviour(new TickerBehaviour(this, 60000) { protected void onTick( {
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription(); sd.setType(“Jenis Layanan”);
template.addService(sd); try {
DFAgentDescription[] hasil = DFService.search(myAgent, template);
daftarAgent.clear();
for (int I = 0; I < hasil.length; ++i) {
daftarAgent.addElement(hasil[i].getName()); }
}
catch (FIPAException fe) { fe.printStacktrace(); }
} }); }
Pada contoh di atas, mekanisme pencarian layanan dilakukan pada class
TickerBehaviour, sehingga pencarian dilakukan secara berulang-ulang pada selang waktu yang telah ditentukan.
2.4 MYSQL
MySQL merupakan sebuah relational database management system (RDBMS) yang mendukung multi-thread, multi-user, dan SQL (Structured Query
Language) database server [7].
MySQL dimiliki dan disponsori oleh perusahaan MySQL AB yang merupakan bagian dari Sun Microsystems. Kode sumber dari proyek MySQL
tersedia di bawah lisensi GPL (GNU General Public License), dan berbagai perjanjian proprietary lainnya.
2.4.1 Konsep Relational Model
Konsep relational model pertama kali diusulkan oleh Dr. Edgar F. Codd pada tahun 1970. Model ini kemudian dijelaskan dalam 12 peraturan yang dikenal dengan nama Codd’s Twelve Rules.
Sebuah database management system (DBMS) yang ideal akan memenuhi semua peraturan tersebut. Tetapi, pada saat melakukan perancangan database, peraturan yang dianggap paling penting adalah peraturan pertama dan kedua saja [8]. Di bawah ini dijelaskan ringkasan dari kedua peraturan tersebut.
1) Peraturan 1
Peraturan ini menyatakan bahwa data terletak di dalam tabel-tabel. Sebuah tabel mengelompokan informasi mengenai subyek tertentu. Baris mendeskripsikan informasi mengenai sebuah hal, sedangkan kolom mendeskripsikan karakteristik dari setiap hal. Perpotongan antara baris dan kolom berisi sebuah nilai dari atribut spesifik sebuah hal tunggal.
2) Peraturan 2
Data tidak diambil atau direferensikan oleh lokasi fisik. Data harus diperoleh dengan mereferensikan tabel, key yang unik, dan satu atau beberapa nama kolom.
2.4.2 Instalasi MySQL Community Server
Untuk menjalankan MySQL Community Server sebagai service pada
Windows dilakukan dengan membuat sebuah file konfigurasi dengan nama
my.ini, atau menggunakan file konfigurasi awal yang sudah disediakan oleh
MySQL. Untuk memudahkan proses instalasi, masukkan lokasi folder bin pada direktori mysql ke dalam PATH pada environment variable Windows.
Setelah file konfigurasi ditentukan, masukkan perintah:
Setelah server MySQL ter-install sebagai service, maka server MySQL akan dijalankan secara otomatis setiap kali sistem operasi dijalankan. Server MySQL sebagai service dapat dihentikan dengan menggunakan perintah:
mysqld --remove.
Untuk mengakses server MySQL dengan menggunakan command prompt, dapat digunakan perintah:
mysql -u <user> -p <password>.
2.4.3 MySQL Administrator
MySQL Administrator merupakan sebuah program tambahan yang disediakan oleh MySQL untuk mempermudah pengawasan dan pengaturan lingkungan MySQL dengan menampilkan data secara grafis. Tampilan dari MySQL Administrator ditunjukkan pada Gambar 2.9.
Gambar 2.9. Tampilan MySQL Administrator
MySQL Administrator juga menyertakan MySQL Query Browser yang berguna untuk memasukkan, membaca, dan mengubah hasil query MySQL secara grafis. Tampilan MySQL Query Browser ditunjukkan pada Gambar 2.10.
Gambar 2.10. Tampilan MySQL Query Browser
2.4.4 JDBC
JDBC (Java Database Connectivity) merupakan API untuk bahasa pemrograman Java yang mendefinisikan cara megakses database. JDBC menyediakan beberapa method untuk mengambil dan mengubah data di dalam
database.
2.4.4.1 Menghubungkan Java dengan MySQL
Untuk menghubungkan Java dengan MySQL, dibutuhkan driver
Connector-J yang disediakan oleh MySQL. Sampai tulisan ini dibuat,
Connector-J sudah tersedia sampai versi 5.2 secara gratis.
Mendefinisikan driver Connector-J dapat dilakukan dengan menggunakan perintah:
Class.forName(“com.mysql.jdbc.driver”).newInstance();
Hubungan antara Java dengan MySQL direpresentasikan sebagai objek dari Connection class pada paket java.sql. Objek Connection dapat diinisialisasi dengan menggunakan perintah:
Connection conn =
DriverManager.getConnection(url,username,password);
2.4.4.2 Connection pooling
Proses inisialisasi dan autentikasi hubungan pada MySQL memakan waktu yang cukup lama, sehingga dapat menurunkan kinerja pada sistem yang banyak melakukan akses terhadap database MySQL.
Untuk mengatasi masalah tersebut dapat digunakan connection pooling.
Connection pooling merupakan teknik pemrograman yang menggunakan sebuah penampungan yang berisi objek-objek dari Connection class yang telah diibuat
sebelumnya. Setiap program yang ingin mengakses database dapat mengambil objek Connection dari penampungan. Dengan cara ini waktu yang diperlukan
untuk proses inisialisasi dan autentikasi saat pembentukan objek Connection
dapat dihilangkan. Prinsip kerja connection pooling diiliustrasikan pada Gambar 2.11.