BAB II KAJIAN TERKAIT
II.1 Application Programming Interface Pada bagian ini akan diberikan penjelasan mengenai Application Programming Interface (API) untuk menunjang pengerjaan Tugas Akhir ini. Penjelasan ini meliputi deskripsi dan tujuan API serta bagaimana menghasilkan API yang baik. II.1.1 Deskripsi dan Tujuan API Application Programming Interface (API) adalah sebuah teknologi yang memfasilitasi pertukaran informasi atau data antara dua atau lebih aplikasi perangkat lunak [BRA97]. API adalah antarmuka virtual antara dua fungsi perangkat lunak yang saling bekerja sama, seperti antara sebuah word processor dan sebuah spreadsheet. Sebuah API mendefinisikan bagaimana cara programmer memanfaatkan suatu fitur tertentu dari sebuah komputer. API tersedia untuk sistem windowing, sistem file, sistem basisdata, serta sistem jaringan[FRE07]. Perkembangan teknologi API berawal dari penciptaan sebuah subrutin sederhana yang menyediakan kemampuan interoperability dan system modifiability untuk mendukung pertukaran data antar beberapa aplikasi. Subrutin tersebut hanya mampu melaksanakan perhitungan matematis sederhana hingga terbentuk sebuah API pustaka penghitungan yang hampir selalu ada pada setiap bahasa pemrograman. Dari sebuah subrutin sederhana tersebut mulai bermunculan gagasan-gagasan bagaimana API harus dikembangkan khususnya sejalan dengan berkembangnya paradigma pemrograman berorientasi objek yang mengakibatkan sekumpulan subrutin sejenis dapat dikumpulkan menjadi sebuah kelas pembungkus subrutin-subrutin tersebut [HIN96]. Dengan berkembangnya sebuah perangkat lunak menjadi sebuah sistem yang terdiri dari beberapa perangkat lunak lain (subsistem-subsistem) maka API juga berkembang untuk tetap mewujudkan tujuannya yaitu sebagai jembatan penghubung antar perangkat lunak. Perkembangan API diwujudkan dengan bertambahnya sifat API yakni mampu mendukung interoperability antar perangkat lunak. API tidak hanya lagi bertugas mempertukarkan data dan informasi antar subrutin dalam satu perangkat lunak namun juga mempertukarkan data dan informasi antar perangkat lunak. Dalam kasus ini API harus memiliki kemampuan komunikasi antar proses baik melalui perantara file, socket, atau layanan IPC lainnya. Pada pengembangan sebuah sistem yang lebih luas, kadang sebuah API dapat menjadi sebuah middleware, yaitu sebuah subsistem tersendiri yang memiliki fungsi-fungsi yang berguna oleh
II-1
II-2 subsistem lain dan untuk mengakses fungsi-fungsi tersebut diperlukan koneksi tersendiri ke middleware tersebut. Koneksi ke middleware umumnya dilakukan dengan menggunakan socket. Ada beberapa standar protokol pengaksesan middleware tersebut. Contoh-contoh protokol pengaksesan middleware antara lain adalah: •
Remote Procedure Calls (RPC) – sebuah perangkat lunak pengguna memanggil prosedur atau subrutin yang berjalan pada sebuah middleware jarak jauh, pemanggilan prosedur dapat berupa sinkron maupun asinkron.
•
Message Oriented Middleware (MOM) – sistem yang melakukan pooling data dan informasi ke sebuah middleware, data yang menunggu untuk diproses oleh subsistem-subsitem yang terdapat di sistem keseluruhan disimpan pada suatu middleware tersebut.
•
Object Request Broker (ORB) – protokol ini memungkinkan suatu perangkat lunak mengirim dan menerima objek dan meminta servis pada sebuah middleware berbasis objek.
•
Structured Query Language (SQL) – protokol (dan juga sebuah bahasa) pembacaan dan penulisan data yang tersimpan pada sebuah middleware basis data.
II.1.2 Pengembangan API Pada proses pengembangan sebuah perangkat lunak baik API pada khususnya maupun perangkat lunak lain memerlukan kaidah-kaidah yang perlu dipahami dan diterapkan. API yang baik adalah API yang memiliki sifat-sifat sebagai berikut [BLO04]: 1. Mudah untuk dipelajari. 2. Mudah untuk digunakan, bahkan bila tanpa dokumentasi yang menyertainya. 3. Susah untuk disalahgunakan. 4. Berkinerja tinggi dalam menyelesaikan tugasnya. 5. Mudah untuk dikembangkan lebih lanjut. Garis besar langkah-langkah dalam pengembangan API agar dapat menjadi API yang baik adalah sebagai berikut [BLO04]: 1. Kumpulkan kebutuhan API secara umum. Dimulai dengan pembangkitan spesifikasi sederhana, yang kemudian dikembangkan secara bertahap. Dari spesifikasi tersebut harus terlihat jelas kebutuhan fungsionalitas dari API yang akan dikembangkan. 2. Perhatikan prinsip-prinsip umum. Prinsip-prinsip umum yang harus diperhatikan selama pengembangan API adalah: a. Fungsionalitas dari API harus mudah untuk dijelaskan dengan kata-kata. b. Semakin kecil ukuran API yang dikembangkan semakin baik, namun tetap memenuhi semua spesifikasi teknis yang dijadikan acuan. c. API tersedia sebelum proses penggunaan API tersebut pada sebuah perangkat lunak.
II-3 d. Minimumkan aksesibilitas keseluruhan dengan menggunakan metode enkapsulasi. 3. Desain API. Pada tahap ini dilakukan desain API dengan dasar spesifikasi teknis yang telah dibangkitkan pada tahap sebelumnya. Pada tahap ini dibantu dengan penggambaran diagram UML masing-masing desain. Beberapa hal yang harus didesain: a. Desain kelas. b. Desain metoda. c. Desain exception. d. Desain API agar dapat di refactoring. 4. Dokumentasi API. Setelah dilakukan desain terhadap API, maka langkah selanjutnya adalah membuat dokumentasi lengkap terhadap API tersebut, dengan cara langsung memberikan baris-baris komentar di setiap baris header yang membutuhkan penjelasan. Selain dokumentasi kode program hal lain yang perlu diperhatikan adalah dokumentasi diagram. Diagram UML yang disertakan hendaknya diberikan penjelasan yang mengacu ke kode program yang bersesuaian. 5. Implementasi API. Pada tahap ini dilakukan implementasi terhadap desain API pada tahap 3 dan sesuai dengan dokumentasi API yang dilakukan pada tahap 4. Implementasi dilakukan dengan memperhatikan spesifikasi masing-masing modul hingga masing-masing metoda yang akan diimplementasikan. II.1.3 Sifat Utama Pembentuk Kualitas API Terdapat dua sifat utama yang menjadi inti dari kualitas sebuah API [BRA97]. Sifat tersebut adalah: 1. Maintainability. API yang berkualitas adalah API yang berciri-ciri maintainable (dapat dikembangkan lebih lanjut). Ciri-ciri ini sangat diperlukan karena API dapat dan mungkin akan sering berubah mengikuti perkembangan spesifikasi sistem atau perangkat lunak di tempat API tersebut digunakan. Tingkat kualitas API ditentukan dengan tingkat maintanibility, suatu API yang berkualitas dapat terus dimaintain mengikuti perkembangan kebutuhan spesifikasi perangkat lunak. Sedangkan API yang tidak berkualitas ditandai dengan ketidakmampuan API tersebut bertahan seiring dengan perubahan spesifikasi perangkat lunak. 2. Interoperability. API yang berkualitas juga bersifat interoperability (kemampuan perangkat lunak untuk berjalan beriringan dan saling bekerja sama). API dengan kualitas tinggi ditandakan dengan tingkat kemampuan API dalam menghubungkan beberapa perangkat lunak dalam suatu sistem dengan baik.
II-4
II.2 Sistem Basisdata Pada bagian ini akan diberikan penjelasan mengenai teori dasar basis data yang meliputi Database Management System (DBMS) dan Structured Query Language (SQL). II.2.1 Database Management System Basisdata adalah sebuah koleksi data yang diorganisir sedemikian rupa sehingga dapat diakses, dikelola, dan dirubah dengan mudah[LAN07]. Sedangkan perangkat lunak yang didesain untuk mengelola basisdata disebut Database Management System (DBMS) [MED07a]. Alternatif lain untuk menyimpan data adalah dengan menggunakan file system. DBMS dibangun untuk mengatasi masalah-masalah di atas dalam penyimpanan data. Sebuah DBMS meliputi: 1. Sebuah bahasa pemodelan untuk mendefinisikan skema dari setiap basisdata sesuai dengan model data dari DBMS. Model data adalah model abstrak yang menjelaskan bagaimana data direpresentasikan dan digunakan. Istilah model data secara umum dapat diartikan sebagai teori model data atau instance model data. Teori model data atau model basisdata adalah deskripsi formal mengenai bagaimana data terstruktur dan digunakan. Sedangkan instance model data adalah pengaplikasian sebuah teori model data untuk membuat sebuah instance model data praktikal untuk aplikasi tertentu. Model data yang biasa digunakan adalah model hierarki, jaringan, dan relasional. Sebuah DBMS dapat mengimplementasikan satu atau lebih model data. 2. Struktur data yang dioptimalkan untuk menangani penyimpanan data dalam jumlah yang sangat banyak pada sebuah perangkat penyimpanan data permanen. 3. Sebuah bahasa query basisdata yang memungkinkan pengguna untuk berinteraksi, menganalisis, dan melakukan perubahan pada data di dalam basisdata sesuai dengan hak aksesnya. 4. Sebuah mekanisme transaksi yang menangani pengaksesan sistem oleh banyak pengguna secara konkuren sehingga integritas data dapat terjaga. Model basisdata yang sering digunakan saat ini adalah model relasional. Model relasional adalah model basisdata yang berdasarkan pada logika predikat dan teori himpunan. Pertama kali diformulasikan dan diajukan pada tahun 1969 oleh Edgar Codd dengan tujuan menghindari kebutuhan menulis program untuk mengekspresikan query basisdata dan menerapkan integrity constraint basisdata. DBMS yang berdasarkan pada model relasional disebut dengan Relational Database Management System (RDBMS). RDBMS menyimpan data dan relasinya dalam bentuk tabel. Hampir semua RDBMS menggunakan Structured Query Language sebagai bahasa query-nya.
II-5 II.2.2 Structured Query Language Structured Query Language atau SQL adalah sebuah bahasa komputer yang didesain untuk melakukan pengambilan dan manajemen data, pembuatan dan perubahan skema basisdata, serta manajemen pengontrolan akses objek basidata dalam RDBMS [CHA07]. Versi pertama dari SQL dikembangkan di IBM oleh Donald D. Chamberlin dan Raymond F. Boyce pada awal tahun 1970-an. Versi ini, yang awalnya disebut dengan SEQUEL, didesain untuk memanipulasi dan memperoleh data yang tersimpan di dalam produk basisdata relasional IBM, System R. Selanjutnya bahasa SQL distandarisasi oleh American National Standards Institute (ANSI) dan International Organization for Standardization (ISO). Pada awalnya SQL didesain sebagai sebuah declarative query dan data manipulation language. Tapi beberapa vendor DBMS menambahkan procedural constructs, control-of-flow statements, tipe data user-defined, dan ekstensi bahasa lainnya. Dengan ditetapkannya standar SQL:1999, banyak ekstensi yang secara formal diadopsi sebagai bagian dari bahasa SQL melalui bagian SQL Persistent Stored Modules (SQL/PSM) dari standar. Bahasa SQL terdiri atas beberapa bagian, meliputi: 1. Data Definition Language (DDL). Bagian ini menyediakan perintah untuk mendefinisikan skema relasi, menghapus relasi, dan memodifikasi skema relasi. 2. Data Manipulation Language (DML). Bagian ini menyediakan perintah untuk menambahkan, menghapus, dan memodifikasi data dalam basidata. 3. View definition. Bagian ini menyediakan perintah untuk mendefinisikan view. 4. Transaction control. Bagian ini menyediakan perintah untuk menspesifikasikan awal dan akhir dari transaksi. 5. Embedded SQL dan dynamic SQL. Bagian ini mendefinisikan bagaimana statement SQL dapat digunakan di dalam bahasa pemrograman seperti C, C++, Java, PL/I, Cobol, Pascal, atau Fortran. 6. Integrity. Bagian ini menyediakan perintah untuk menspesifikasikan integrity constraints yang harus dipenuhi oleh data yang disimpan. 7. Authorization atau Data Control Language (DCL). Bagian ini menyediakan perintah untuk menspesifikasikan hak akses pengguna terhadap basisdata. Berikut ini akan dijelaskan beberapa bagian di atas yang akan mendukung Tugas Akhir ini.
II-6 II.2.2.1 Data Definition Language (DDL) DDL berguna tidak saja untuk menspesifikasikan relasi tetapi juga untuk menspesifikasikan informasi dari setiap relasi yang meliputi: •
Skema dari tiap relasi
•
Domain dari nilai yang diasosiasikan dengan setiap atribut
•
Integrity constraints
•
Index dari setiap relasi
•
Tingkat keamanan dan authorization dari setiap relasi
•
Struktur physical storage dari setiap relasi
SQL standard mendukung tipe domain built-in yang bervariasi yang meliputi: •
char(n): character string dengan panjang n.
•
varchar(n): character string dengan panjang maksimum n.
•
int: integer.
•
smallint: small integer.
•
numeric(p,d): bilangan desimal dengan presisi yang dispesifikasikan oleh user. Bilangan ini terdiri dari p digit dan d bilangan di belakang koma.
•
real, double precision: bilangan floating-point dan double floating-point dengan presisi machine-dependent.
•
float(n): sebuah bilangan floating-point dengan presisi minimal n digit.
•
date: terdiri dari tahun (4 digit), bulan, dan tanggal.
•
time: terdiri dari jam, menit, dan detik.
•
timestamp: kombinasi dari date dan time.
Beberapa statement dasar yang termasuk dalam DDL adalah: 1. CREATE yang berguna untuk membuat objek, relasi misalnya, dalam basisdata. Untuk mendefinisikan sebuah relasi digunakan perintah yang ada pada Kode II-1. create table r(A1D1,A2D2,…,AnDn,
, … ) Kode II-1 - Perintah mendefinisikan relasi
II-7 dimana r adalah nama dari relasi (tabel), Ai adalah nama atribut, dan Di adalah domain dari Ai. Integrity constraint yang dapat dipergunakan meliputi: •
primary key (Aj1, Aj2, …, Ajm): constraint ini menspesifikasikan atribut Aj1, Aj2, …, Ajm membentuk primary key dari relasi.
•
unique (Aj1, Aj2, …, Ajm): constraint ini menspesifikasikan atribut Aj1, Aj2, …, Ajm membentuk candidate key dari relasi.
•
check (P): klausa ini menspesifikasikan sebuah predikat P yang harus dipenuhi oleh setiap tupel dalam relasi.
create table customer (customer-name char(20), customer-street char(30), customer-city char(30), primary key (customer-name)) Kode II-2 - Contoh penggunaan statement CREATE
2. DROP yang berguna untuk menghapus objek yang ada pada basisdata. Untuk menghapus relasi (tabel) dari basisdata, digunakan perintah yang ada pada Kode II-3. drop table r Kode II-3 - Perintah untuk menghapus tabel
dimana r adalah nama relasi yang ingin dihapus. Contohnya dapat dilihat pada Kode II-4. drop table customer Kode II-4 - Contoh penggunaan statement DROP
3. ALTER yang berguna untuk memodifikasi sebuah objek yang sudah ada. Untuk menambahkan atribut pada suatu relasi digunakan perintah yang ada pada Kode II-5. alter table r add A D Kode II-5 - Perintah untuk memodifikasi objek
dimana r adalah nama relasi yang sudah ada, A adalah nama atribut yang ingin ditambahkan, dan D adalah domain dari atribut A. Sedangkan untuk menghapus atribut pada suatu relasi digunakan perintah yang ada pada Kode II-6. alter table r drop A Kode II-6 - Contoh penggunaan statement ALTER
II-8 II.2.2.2 Data Manipulation Language (DML) Data Manipulation Language (DML) terdiri dari beberapa statement, berikut yang umum dan sering digunakan: 1. INSERT Statement ini digunakan untuk menambahkan tupel ke dalam relasi yang sudah ada. INSERT INTO my_table (field1, field2, field3) VALUES ('test', 'N', NULL); Kode II-7 - Contoh penggunaan statement INSERT
2. UPDATE Statement ini digunakan untuk memodifikasi nilai dari himpunan tupel pada relasi yang sudah ada. UPDATE my_table SET field1 = 'updated value' WHERE field2 = 'N'; Kode II-8 - Contoh penggunaan statement UPDATE
3. DELETE Statement ini digunakan untuk menghapus tupel yang ada dari sebuah relasi. Contoh dapat dilihat pada Kode II-9. DELETE FROM my_table WHERE field2 = 'N'; Kode II-9 - Contoh penggunaan statement DELETE
4. SELECT Statement ini digunakan untuk mengambil tupel dari sebuah relasi atau banyak relasi yang berhubungan di dalam sebuah basisdata. Walaupun sering dikategorikan sebagai statement Data Manipulation Language (DML), SELECT dipertimbangkan untuk dipisahkan dari DML SQL karena sifatnya yang tidak dapat merubah data yang tersimpan di dalam basisdata. Statement ini memungkinkan penggunanya untuk membuat sebuah deskripsi dari result set yang diinginkan dan kemudian menyerahkan kepada DBMS untuk merencanakan, mengoptimalisasi, dan melakukan operasi fisik yang dibutuhkan untuk menghasilkan result set tersebut dengan cara yang seefisien mungkin. SELECT adalah statement yang paling kompleks di dalam SQL, dengan beberapa kata kunci dan klausa opsional yang meliputi: 1. Klausa FROM yang menspesifikasikan satu atau banyak relasi dimana data yang diinginkan berada. Klausa FROM dapat menyertakan klausa JOIN untuk melakukan operasi join (penggabungan) pada relasi-relasi yang berhubungan sesuai dengan kriteria dari penggunanya. 2. Klausa WHERE yang diikuti oleh comparison predicate, yang digunakan untuk membatasi jumlah tupel yang dihasilkan oleh query. Klausa WHERE digunakan sebelum klausa GROUP BY.
II-9 3. Klausa GROUP BY yang digunakan untuk menggabungkan atau mengelompokkan tupeltupel dengan nilai yang berhubungan menjadi himpunan tupel yang lebih kecil. GROUP BY sering digunakan bersamaan dengan fungsi agregasi atau untuk menghapus duplikasi tupel dalam sebuah result set. 4. Klausa HAVING yang mengikuti sebuah comparison predicate, digunakan untuk mengeliminasi tupel-tupel setelah klausa GROUP BY yang diaplikasikan pada sebuah result set. 5. Klausa ORDER BY yang digunakan untuk mengidentifikasi atribut mana yang akan digunakan untuk mengurutkan data yang dihasilkan dan menspesifikasikan metode pengurutan yang digunakan. Kode II-10 adalah contoh dari query SELECT yang menghasilkan sebuah daftar bukubuku dengan harga di atas 100.00. Query akan mendapatkan semua tupel dari relasi buku dimana atribut harga nya mengandung nilai lebih dari 100.00. Hasilnya diurutkan secara menaik berdasarkan atribut judul. Tanda asterisk (*) setelah SELECT mengindikasikan bahwa semua atribut dari relasi buku disertakan ke dalam result set. SELECT * FROM buku WHERE harga > 100.00 ORDER BY judul; Kode II-10 - Contoh penggunaan klausa ORDER BY
Kode II-11 adalah contoh yang mendemonstrasikan penggunaan lebih dari satu relasi pada operasi join, grouping, dan aggregation di dalam sebuah query SQL. Query ini akan menghasilkan daftar buku dan nomor penulis dari tiap buku tersebut. SELECT buku.judul, count(*) AS Penulis FROM buku JOIN penulis_buku ON buku.isbn = penulis_buku.isbn GROUP BY buku.judul; Kode II-11 - Contoh penggunaan statement SELECT
Contoh result set dari query di atas adalah sebagai berikut: Tabel II-1 - Contoh result set
Judul SQL Examples and Guide The Joy of SQL How to use Wikipedia Pitfalls of SQL How SQL Saved my Cat
Penulis 3 1 2 1 1
II-10 II.2.2.3 Data Control Language (DCL) Bagian ketiga dari SQL adalah Data Control Language (DCL). DCL menangani aspek otoritas dari data dan mengijinkan pengguna untuk mengontrol siapa saja yang memiliki akses untuk melihat atau memanipulasi data yang ada di dalam basisdata. Dua statement utama dalam DCL adalah: 1. GRANT yang berguna untuk memberikan otoritas kepada satu atau lebih pengguna agar dapat melakukan satu atau lebih operasi pada sebuah objek. Kode II-12 adalah contoh pemberian otoritas select pada relasi buku kepada user U1, U2, dan U3. GRANT SELECT ON buku TO U1, U2, U3 Kode II-12 - Contoh penggunaan statement GRANT
2. REVOKE yang berguna untuk menghapus atau membatasi kemampuan dari seorang pengguna untuk melakukan satu atau lebih operasi. Kode II-13 adalah contoh penghapusan otoritas select pada relasi buku dari user U1, U2, dan U3. REVOKE SELECT ON buku FROM U1, U2, U3 Kode II-13 - Contoh penggunaan statement REVOKE
II.3 MySQL MySQL adalah RDBMS yang menggunakan Structured Query Language (SQL) sebagai bahasa query nya dan merupakan perangkat lunak open source yang menggunakan lisensi GNU General Public License (GPL) [DUB05]. MySQL terdiri atas MySQL Server, MySQL Client, tools administratif, dan programming interface [DUB05]. Lahirnya MySQL berawal pada tahun 1979 saat tool basisdata UNIREG dibuat oleh Michael “Monty” Widenius untuk perusahaan Swedia, TcX. Pada tahun 1994, TcX mulai mencari sebuah RDBMS dengan sebuah interface SQL untuk digunakan dalam pengembangkan aplikasi Web. Mereka melakukan pengetesan beberapa server basisdata komersial, tapi semuanya masih terlalu lambat untuk tabel TcX yang besar. Akhirnya Monty mulai mengembangkan sebuah server baru. Programming interface nya didesain secara eksplisit agar mirip dengan yang digunakan oleh mSQL. Pada tahun 1995, David Axmark dari Detron HB mulai mendorong TcX untuk meluncurkan MySQL. David juga mengerjakan dokumentasinya dan mengusahakan agar MySQL dibangun dengan GNU configure utility. MySQL 3.11.1 diluncurkan di dunia pada tahun 1996 dalam bentuk binary distribution untuk Linux dan Solaris. Saat ini MySQL dimiliki dan disponsori oleh perusahaan Swedia, MySQL AB, yang memiliki copyright dari sebagian besar codebase-nya. MySQL AB didirikan oleh David Axmark, Allan Larsson, dan Michael “Monty” Widenius. MySQL telah tersedia untuk berbagai macam sistem
II-11 operasi dan pada berbagai arsitektur komputer. Hingga saat ini MySQL mendukung sistem operasi Linux, Windows 95/98/NT/2000/XP/Vista, Solaris, FreeBSD, MacOS X, HP-UX, AIX, SCO, SCI Irix, Dec OSF, dan BSDi. Versi Linux dapat berjalan pada berbagai arsitektur termasuk Intel libc6, Alpha, IA64, SPARC, dan S/390. Awalnya, MySQL menjadi populer karena kecepatan dan kesederhanaannya. Tetapi ada yang mengkritik MySQL karena tidak memiliki fitur-fitur tertentu seperti transactions dan dukungan foreign key. Kemudian MySQL terus berkembang, menambahkan berbagai macam fitur baru seperti row-level locking, replication, subqueries, stored procedures, views, dan triggers. MySQL adalah proyek open source yang dapat digunakan secara bebas dalam berbagai keadaan, dan ini menjadikannya populer di antara komunitas open source.Kepopuleran MySQL tidak hanya terbatas pada kalangan open source, tetapi menyentuh hingga kalangan pengguna komputer pribadi. Ini disebabkan oleh kemampuan MySQL yang dapat berjalan dengan mudah pada komputer yang memiliki spesifikasi rendah sekalipun. MySQL menawarkan banyak fitur menarik yang diantaranya adalah: •
Kecepatan. MySQL diklaim oleh pengembangnya sebagai sistem basisdata yang tercepat.
•
Mudah dalam penggunaan. MySQL secara relatif merupakan sistem basisdata yang sederhana dan tidak terlalu kompleks dalam pengaturannya.
•
Query language support. MySQL menggunakan SQL, bahasa standar yang digunakan sistem basisdata modern.
•
Kapabilitas. MySQL Server adalah multi-threaded, sehingga memungkinkan banyak koneksi dari client dalam satu waktu. Setiap client dapat menggunakan beberapa basisdata secara simultan.
•
Konektifitas dan keamanan. MySQL adalah sistem yang dirancang untuk jaringan, sehingga basisdata dapat diakses dari manapun melalui jaringan Internet. MySQL memiliki access control sehingga kemampuan akses user nya dapat diatur. Selain itu MySQL juga mendukung koneksi terenkripsi menggunakan protokol Secure Sockets Layer (SSL).
•
Portabilitas. MySQL dapat berjalan pada berbagai macam sistem operasi dan arsitektur komputer.
•
Ukuran kecil. MySQL memiliki ukuran distribusi yang relatif kecil dibanding sistem basisdata komersial yang ada.
•
Availability dan biaya. MySQL adalah proyek yang memiliki dua lisensi. Lisensi pertama adalah GPL yang berarti MySQL tersedia dengan tanpa biaya. Dan lisensi kedua adalah lisensi komersial yang diperuntukkan bagi organisasi yang tidak ingin terikat oleh GPL.
•
Open distribution dan open source code.
II-12
II.4 Protokol MySQL Protokol MySQL adalah bagian dari DBMS MySQL. Karena itu protokol MySQL juga jatuh pada lisensi GNU General Public License (GPL). Salinan dari GPL tersedia pada website MySQL dan juga di dalam produk MySQL [FOR07]. Karena ini adalah protokol GPL, produk apapun yang menggunakannya untuk berkomunikasi dengan sebuah server MySQL, atau untuk mengemulasikan sebuah server MySQL, atau untuk tujuan lainnya yang serupa, maka produk tersebut juga terikat oleh lisensi GPL. II.4.1 Elements Dalam protokol MySQL terdapat beberapa jenis elemen untuk merepresentasikan string dan bilangan. Jenis elemen tersebut adalah: 1. Null-Terminated String Digunakan untuk merepresentasikan string karakter dengan panjang tertentu. Karakter ‘\0’ (kadang ditulis dengan 0x00) menjadi tanda akhir dari string. 2. Length Coded Binary Digunakan untuk merepresentasikan bilangan dengan panjang tertentu. Untuk menghitung nilai dari sebuah Length Coded Binary digunakan nilai dari byte pertamanya. Tabel II-2 - Tipe Length Coded Binary
No.
Nilai byte pertama
Jumlah byte selanjutnya
Deskripsi
1 2
0 – 250 251
0 0
3 4 5
252 253 254
2 4 8
= nilai dari byte pertama Nilai kolom = NULL. Hanya digunakan pada paket Row Data. 16-bit word 32-bit word 64-bit word
Sehingga panjang dari sebuah Length Coded Binary, termasuk byte pertama, bervariasi dari 1 sampai 9 byte. Semua angka disimpan dengan byte yang least significant terlebih dahulu. Semua angka adalah unsigned. 3. Length Coded String Digunakan untuk merepresentasikan string karakter dengan panjang tertentu. Berbeda dengan Null-Terminated String, tipe data ini tidak diakhiri dengan karakter ‘\0’. Bagian pertama dari sebuah Length Coded String adalah sebuah angka Length Coded Binary yang merepresentasikan panjang dari string. Dan bagian kedua adalah data yang sebenarnya. Contohnya adalah tiga byte heksadesimal berikut: 02 61 62, yang berarti string dengan panjang 2 dan berisi ‘ab’.
II-13 II.4.2 Header Paket Header paket dari protokol MySQL terdiri dari dua bagian yaitu: 1. Packet Length (panjang paket) Bagian ini mempunyai panjang 3 byte yang merepresentasikan panjang dari paket, tidak termasuk header, dalam satuan byte. Panjang maksimum dari paket adalah 16MB. 2. Packet Number (nomor paket) Sebuah angka untuk memastikan kelengkapan dan keterurutan paket yang dikirimkan. Paket pertama untuk melakukan query dari client akan memiliki nomor paket 0. Untuk setiap statement SQL, nomor paket akan diinisialisasi ulang. II.4.3 Tipe Paket Terdapat dua jenis sesi komunikasi paket yang umum pada protokol MySQL, yaitu: 1. Handshake Ini terjadi ketika client akan membuka koneksi dengan MySQL Server. Yang terjadi adalah: a. Server mengirim Handshake Initialization Packet kepada client. b. Client mengirim Client Authentication Packet kepada server. c. Server mengirim OK Packet atau Error Packet kepada client. 2. Command Ini terjadi ketika client akan meminta server untuk melakukan sesuatu. Yang terjadi adalah: a. Client mengirim Command Packet kepada server. b. Server mengirim OK Packet, Error Packet, atau Result Set Packet kepada client. II.4.3.1 Handshake Initialization Packet Paket yang dikirimkan dari server ke client untuk melakukan inisialisasi handshake. Komposisi dari paket ini dapat dilihat pada Tabel II-13. Tabel II-3 - Komposisi Handshake Initialization Packet
No. 1 2 3 4 5 6 7 8 9
Byte 1 n (Null-Terminated String) 4 9 2 1 2 13 13
Nama protocol_version server_version thread_id scramble_buff (1) server_capabilities server_language server_status filler (selalu 0x00) scramble_buff (2)
Berikut keterangan dari tabel komposisi Handshake Initialization Packet: •
protocol_version: server mengambil nilainya dari konstanta PROTOCOL_VERSION pada file “/include/mysql_version.h” dalam source code MySQL. Contoh nilainya adalah 10.
II-14 •
server_version: server mengambil nilainya dari konstanta MYSQL_SERVER_VERSION pada file “/include/mysql_version.h” dalam source code MySQL. Contoh nilainya adalah “4.1.1-alpha”.
•
thread_id: identitas dari thread server untuk koneksi pada saat itu.
•
scramble_buff: digunakan untuk mekanisme otentikasi.
•
server_capabilities: berisi informasi dari server. Nilai yang mungkin dapat dilihat pada Tabel A-1 Lampiran A.
•
server_language: kode character set dari server.
•
server_status: status dari server. Nilai yang mungkin ada pada Tabel A-2 Lampiran A.
Contoh Handshake Initialization Packet dapat dilihat pada Tabel II-4. Tabel II-4 - Contoh Handshake Initialization Packet
Nama variable protocol_version server_version
thread_id scramble_buff (1)
Hexadecimal 0a 34 2e 31 2e 31 2d 71 6c 70 68 61 2d 64 65 62 75 67 00 01 00 00 00 79 46 2f 57 48 43 57 6a 00
ASCII . 4.1.1-al pha-debu g. …. yF/WHCWj.
sever_capabilities
2c 82
..
server_language server_status Filler
08 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 5b 72 4e 6c 58 52 72 66 2b 3f 3a 00
. .. …….. ….. G[rNlXRr f+?:.
scramble_buff (2)
Keterangan Protokol versi 10 Server versi 4.1.1-alpha-debug
Thread ID = 1 scramble_buff bagian 1 = “yF/WHCWj” MULTI_RESULTS SSL COMPRESS CONNECT_WITH_DB FOUND_ROWS Character set = Latin-1 Server status = AUTOCOMMIT
scramble_buff bagian 2 = “G[rNlXRrf+?:”
II.4.3.2 Client Authentication Packet Paket ini dikirimkan dari client untuk server ketika proses inisialisasi handshake. Komposisi dari paket ini dapat dilihat pada Tabel II-5. Tabel II-5 - Komposisi Client Authentication Packet
No. 1 2 3 4 5 6 7
Byte 4 4 1 23 n (Null-Terminated String) 21 (Length Coded Binary) n (Null-Terminated String)
Nama client_flags max_packet_size charset_number filler (selalu 0x00) User hashed_password database_name
II-15 Berikut keterangan dari komposisi Client Authentication Packet: •
client_flags: berisi informasi dari client. Nilai yang mungkin adalah sama dengan nilai yang mungkin untuk variabel server_capabilities.
•
max_packet_size: jumlah byte maksimum dalam sebuah paket yang diterima oleh client.
•
charset_number: kode character set dari client.
•
user: username dari pengguna sebagai client.
•
hashed_password: password yang telah di-hash jika diperlukan. hashed_password = SHA1(password) XOR SHA1(scramble_buff + SHA1(SHA1(password)))
•
database_name: nama database yang akan digunakan. Variabel ini boleh dikosongkan.
Contoh Client Authentication Packet dapat dilihat pada Tabel II-6. Tabel II-6 - Contoh Client Authentication Packet
Nama variable client_flags
Hexadecimal 85 a6 03 00
ASCII ….
max_packet_size charset_number Filler
00 00 00 01 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 65 64 66 65 72 6e 69 00 14
…. …. …….. …….. ……. redferni .
70 67 75 6c 75 74 7a 61 6e 00
pgulutzan .
User encrypted_passwor d database_name
Keterangan MULTI_RESULTS MULTI_STATEMENTS SECURE_CONNECTION PROTOCOL_41 LOCAL_FILES INTERACTIVE TRANSACTIONS LONG_FLAG LONG_PASSWORD 224 bytes Character set = Latin-1
User = “redferni”
Nama database = “pgulutzan”
II.4.3.3 Command Packet Paket ini dikirimkan oleh client kepada server ketika client menginginkan server untuk melakukan sesuatu. Komposisi dari paket ini dapat dilihat pada Tabel II-7. Tabel II-7 - Komposisi Command Packet
No. 1 2
Byte 1 N
Nama Command Arg
II-16 Berikut keterangan dari komposisi Command Packet: •
command: tipe perintah yang dikirimkan client. Nilai yang biasa digunakan adalah 03 (COM_QUERY), dimana operasi INSERT, UPDATE, DELETE, dan SELECT menggunakan tipe perintah ini. Nilai yang mungkin dapat dilihat pada Tabel A-3 Lampiran A.
•
arg: argumen perintah dalam format tekstual.
Contoh Command Packet dapat dilihat pada Tabel II-8. Tabel II-8 - Contoh Command Packet
Nama variable Command Arg
Hexadecimal 02 74 65 73 74
ASCII . Test
Keterangan COM_INIT_DB Nama database = “test”
II.4.3.4 Result Packet Paket ini adalah paket yang dikirimkan dari server kepada client sebagai respon dari Client Authentication Packet atau Command Packet. Untuk membedakan tipe dari Result Packet, client harus memperhatikan byte pertama dari paket. Selanjutnya byte ini akan disebut dengan “field_count”. Daftar tipe dari Result Packet dapat dilihat pada Tabel II-9. Tabel II-9 - Daftar tipe Result Packet
No. 1 2 3 4 5 6
Tipe OK Packet Error Packet Result Set Header Packet Field Packet Row Data Packet EOF Packet
Nilai heksadesimal dari field_count 00 Ff 1-250 1-250 1-250 Fe
Berikut adalah beberapa aliran paket antara client dan MySQL Server: 1. Ketika client mengirimkan paket Client Authentication kepada MySQL Server, MySQL Server dapat mengembalikan paket OK jika proses otentikasi berhasil atau paket Error jika proses otentikasi gagal. 2. Ketika client mengirimkan paket Command yang tidak membutuhkan kembalian result set kepada MySQL Server, MySQL Server akan mengembalikan paket Error jika terjadi suatu kesalahan, atau paket OK jika MySQL Server berhasil menjalankan perintah dari client. 3. Ketika client mengirimkan paket Command yang dapat mengembalikan result set kepada MySQL Server, MySQL Server akan mengembalikan paket Error jika terjadi suatu kesalahan, atau paket Result Set Header yang diikuti oleh paket Field, paket Row Data, dan paket EOF.
II-17 II.4.3.4.1 OK Packet Paket ini dikirimkan dari server untuk client sebagai respon dari Command Packet jika tidak terjadi error atau tidak ada hasil query yang harus dikembalikan oleh server. Komposisi dari paket ini terdapat pada Tabel II-10. Tabel II-10 - Komposisi OK Packet
No. 1 2 3 4 5 6
Byte 1 (Length Coded Binary) 1 – 9 (Length Coded Binary) 1 – 9 (Length Coded Binary) 2 2 n (Length Coded String)
Nama field_count, selalu 0 affected_rows insert_id server_status warning_count Message
Berikut keterangan dari komposisi OK Packet: •
field_count: selalu 0.
•
affected_rows: jumlah baris yang terpengaruh oleh query.
•
insert_id: nilai dari “last INSERT id”, yaitu nilai dari kolom dengan atribut auto_increment yang dibangkitkan oleh operasi INSERT terakhir.
•
server_status: client dapat menggunakannya untuk mengecek apakah sedang di dalam sebuah transaction.
•
warning_count: jumlah warnings.
•
message: pesan yang dikembalikan berdasarkan perintah yang dikirimkan. Variabel ini adalah opsional.
Contoh OK Packet dapat dilihat pada Tabel II-11. Tabel II-11 - Contoh OK Packet
Nama variable field_count affected_rows insert_id server_status warning_count
Hexadecimal 00 01 00 02 00 00 00
ASCII . . . .. ..
Keterangan Selalu 0 1 baris terpengaruh Tidak ada kolom auto_increment Status = AUTOCOMMIT Tidak ada peringatan
II.4.3.4.2 Error Packet Paket ini dikirimkan dari server kepada client sebagai respon dari Command Packet jika terjadi error. Komposisi dari paket ini dapat dilihat pada Tabel II-12. Tabel II-12 - Komposisi Error Packet
No. 1 2 3 4 5
Byte 1 2 1 5 N
Nama field_count, selalu 0xff Errno Selalu ‘#’ Sqlstate Message
II-18 Berikut keterangan dari komposisi paket di atas: •
field_count: selalu 0xff.
•
errno: kode error.
•
sqlstate: server menerjemahkan nilai errno menjadi nilai sqlstate.
•
message: pesan error.
Contoh Error Packet dapat dilihat pada Tabel II-13. Tabel II-13 - Contoh Error Packet
Nama variable field_count Errno sqlstate marker Sqlstate Message
Hexadecimal Ff 1b 04 23 34 32 53 30 32 55 63 6b 6e 6f 77 6e 20 74 61 62 6c 6c 65 20 27 71 27
ASCII . .. # 42S02 Unknown table ‘ q’
Keterangan Selalu ff BAD_TABLE_ERROR (1051)
“Unknown table ‘q’”
II.4.3.4.3 Result Set Header Packet Paket ini dikirimkan dari server kepada client sebagai respon dari Command Packet jika tidak terjadi error dan terdapat hasil query yang harus dikembalikan oleh server. Result Set Header Packet adalah awal dari beberapa atau banyak paket yang selanjutnya dikirimkan oleh server sebagai result set. Urutan pengiriman paket untuk sebuah result set adalah: 1. Result Set Header Packet: berisi informasi jumlah kolom. 2. Field Packets: berisi descriptor dari kolom. 3. EOF Packet: sebagai penanda akhir dari Field Packets. 4. Row Data Packets: berisi data dari tiap baris. 5. EOF Packet: sebagai penanda akhir dari Row Data Packets. Komposisi dari Result Set Header Packet dapat dilihat pada Tabel II-14. Tabel II-14 - Komposisi Result Set Header Packet
No. 1 2
Byte 1 – 9 (Length Coded Binary) 1 – 9 (Length Coded Binary)
Nama field_count Extra
Berikut keterangan dari komposisi Result Set Header Packet: •
field_count: berisi informasi jumlah kolom.
•
extra: berisi informasi tambahan dan bersifat opsional.
II-19 Contoh Result Set Header Packet dapat dilihat pada Tabel II-15. Tabel II-15 - Contoh Result Set Header Packet
Nama variable field_count
Hexadecimal 03
ASCII .
Keterangan Server akan mengembalikan result set yang terdiri atas 3 kolom.
II.4.3.4.4 Field Packet Paket ini dikirimkan dari server kepada client sebagai bagian dari Result Set Packet sebanyak jumlah kolom yang telah diinformasikan oleh Result Set Header Packet. Komposisi dari Field Packet dapat dilihat pada Tabel II-16. Tabel II-16 - Komposisi Field Packet
No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Byte n (Length Coded String) n (Length Coded String) n (Length Coded String) n (Length Coded String) n (Length Coded String) n (Length Coded String) 1 2 4 1 2 1 2 n (Length Coded Binary)
Nama Catalog Db Table org_table Name org_name Filler Charsetnr Length Type Flags Decimals filler (selalu 0x00) Default
Berikut keterangan dari komposisi Field Packet: •
catalog: berisi informasi catalog.
•
db: nama database atau nama schema.
•
table: identifier tabel yang didefinisikan setelah klausa AS jika ada.
•
org_table: nama tabel yang asli yang disebutkan sebelum klausa AS jika ada.
•
name: identifier kolom yang didefinisikan setelah klausa AS jika ada.
•
org_name: nama kolom yang asli yang disebutkan sebelum klausa AS jika ada.
•
charsetnr: kode character set.
•
length: panjang maksimal dari kolom sesuai yang didefinisikan.
•
type: tipe data dari kolom. Nilai yang mungkin dapat dilihat pada Tabel A-4 Lampiran A.
•
flags: penanda untuk kolom. Nilai yang mungkin dapat dilihat pada Tabel A-5 Lampiran A.
•
decimals: informasi tingkat ketelitian bilangan desimal
•
default: digunakan untuk pendifinisan tabel.
II-20 Contoh Field Packet dapat dilihat pada Tabel II-17. Tabel II-17 - Contoh Field Packet
Nama variable Catalog Db Table org_table Name org_name Filler Charsetnr Length Type Flags Decimal Filler
Hexadecimal 03 73 74 64 03 64 62 31 02 54 37 02 74 37 02 53 31 02 73 31 0c 08 00 01 00 00 00 Fe 01 00 1f 00 00
ASCII .std .db1 .T7 .t7 .S1 .s1 . .. …. . .. . ..
Keterangan Catalog = “std” Database = “db1” Alias tabel = “T7” Nama tabel = “t7” Alias kolom = “S1” Nama kolom = “s1” Selalu 0x0c Char set = Latin-1 Panjang = 1 Tipe = FIELD_TYPE_STRING NOT_NULL_FLAG Decimal = 31 Selalu 0x00 0x00
II.4.3.4.5 EOF Packet Paket ini dikirimkan oleh server untuk client sebagai penanda akhir dari Field Packets dan Row Data Packets. Komposisi dari EOF Packet dapat dilihat pada Tabel II-18. Tabel II-18 - Komposisi EOF Packet
No. 1 2 3
Byte 1 2 2
Nama field_count, selalu 0xfe warning_count status_flags
Berikut keterangan dari komposisi EOF Packet: •
field_count: nilainya selalu 0xfe (254).
•
warning_count: jumlah peringatan.
•
server_status: dapat berisi penanda seperti SERVER_STATUS_MORE_RESULTS.
Contoh EOF Packet dapat dilihat pada Tabel II-19. Tabel II-19 - Contoh EOF Packet
Nama variable field_count warning_count server_status
Hexadecimal Fe 00 00 00 00
ASCII . .. ..
Keterangan Selalu 0xfe Jumlah peringatan = 0
II.4.3.4.6 Row Data Packet Paket ini dikirimkan dari server untuk client yang berisi data dari tiap baris result set. Tabel II-20 - Komposisi Row Data Packet
No. 1 2
Byte n (Length Coded String) (variable seperti di atas dengan jumlah sesuai dengan jumlah kolom yang telah didefinisikan)
Nama column_value
II-21 Berikut keterangan dari komposisi Row Data Packet pada Tabel II-20: •
column_value: merupakan data dari kolom dalam bentuk character string. Jika kolom didefinisikan sebagai non-character string, server akan mengubah nilainya menjadi character string.
Contoh Row Data Packet dapat dilihat pada Tabel II-21: Tabel II-21 - Contoh Row Data Packet
Nama variabel column_value 1 column_value 2
Hexadecimal 01 58 02 35 35
ASCII .X .55
Keterangan Nilai kolom pertama = “X” Nilai kolom kedua = “55”
II.5 Java Database Connectivity Java Database Connectivity (JDBC) adalah sebuah API untuk bahasa pemrograman Java yang mendefinisikan bagaimana cara mengakses suatu basisdata. JDBC merupakan sebuah call-level API untuk mengakses basisdata berbasis SQL [JAV07b]. API ini menyediakan metode untuk melakukan query dan memanipulasi data pada sebuah basisdata. JDBC diorientasikan untuk basisdata relasional. JDBC memungkinkan untuk melakukan tiga hal, yaitu: 1. Membangun sebuah koneksi dengan sebuah basisdata atau mengakses sumber data tabular apapun. 2. Mengirimkan statement SQL. 3. Memproses hasilnya. JDBC telah menjadi bagian dari Java Standard Edition (Java SE) sejak rilis dari JDK 1.1. Kelas-kelas JDBC terdapat pada package java.sql. Mulai dari versi 3.0, JDBC dikembangkan di bawah Java Community Process (JCP). JDBC memungkinkan berbagai macam implementasi untuk dapat digunakan oleh aplikasi yang sama. JDBC menyediakan mekanisme untuk me-load package-package Java yang dibutuhkan secara dinamis dan mendaftarkannya dengan JDBC Driver Manager. Driver Manager tersebut digunakan sebagai connection factory untuk membuat koneksi JDBC. Koneksi JDBC mendukung pembuatan dan pengeksekusian statement. Ada beberapa jenis statement, yaitu: 1. Statement, statement yang dikirimkan ke server basisdata seketika itu juga. 2. PreparedStatement, statement yang di-cached terlebih dahulu dan kemudian pada server basisdata ditentukan execution path. Hal ini memungkinkan statement ini dapat dieksekusi berkali-kali dengan cara yang efisien.
II-22 3. CallableStatement, statement yang digunakan untuk mengeksekusi stored procedures pada basisdata. Statement dapat berupa update statement ataupun query statement. Update statement akan mengembalikan jumlah row yang terpengaruh dalam basisdata. Sedangkan query statement akan mengembalikan sebuah JDBC result set. Result set ini memiliki metadata yang menjelaskan nama dan tipe dari kolom-kolomnya. Kode II-14 adalah contoh penggunaan JDBC [MED07d]. Class.forName( "com.somejdbcvendor.TheirJdbcDriver" ); Connection conn = DriverManager.getConnection( "jdbc:somejdbcvendor:other data ", "myLogin", "myPassword" ); Statement stmt = conn.createStatement(); try { ResultSet rs = stmt.executeQuery( "SELECT * FROM MyTable" ); try { while ( rs.next() ) { int numColumns = rs.getMetaData().getColumnCount(); for ( int i = 1 ; i <= numColumns ; i++ ) { System.out.println("COLUMN " + i + " = " + rs.getObject(i)); } } } finally { rs.close(); } } finally { stmt.close(); } Kode II-14 - Contoh penggunaan JDBC
Pertama kali driver JDBC yang diinginkan harus di-load dengan menggunakan fungsi Class.forName(String).
Kemudian
DriverManager.getConnection().
koneksi
dapat
dibuat
dengan
memanggil
fungsi
Selanjutnya objek Statement dapat dibuat dengan
memanggil fungsi createStatement(). Dan statement SQL dapat dieksekusi dengan memanggil fungsi execute(String)atau executeQuery(String).
II.6 Java ME Sun Microsystems memperkenalkan Java 2, Micro Edition pada konferensi JavaOne bulan Juni 1999. Untuk keperluan marketing, J2ME dirubah namanya menjadi Java Platform, Micro Edition atau disingkat menjadi Java ME pada konferensi JavaOne 2005 (27-30 Juni 2005) [JAV07a]. Java ME adalah lingkungan pengembangan yang didesain untuk meletakkan perangkat lunak Java pada alatalat elektronik dan embedded device. Java ME didesain oleh Sun Microsystems sebagai pengganti teknologi mereka sebelumnya yang mirip, PersonalJava.
II-23 Java ME telah menjadi opsi yang populer untuk membuat aplikasi dan game pada telepon seluler dikarenakan kemampuannya untuk mengemulasikan aplikasi pada sebuah PC dan memasangkannya pada telepon seluler dengan mudah. Ini berbeda dengan platform lain yang memiliki kesulitan dalam melakukan pengetesan dan pemasangan aplikasi pada perangkat kerasnya, bahkan kadang membutuhkan perangkat keras tambahan yang mahal harganya. Sun Microsystems telah memutuskan untuk tidak menyediakan binary implementasi dari Java ME runtime environment untuk perangkat mobile, tetapi menyerahkannya kepada pihak ketiga untuk mengimplementasikannya. Ini berbeda dengan apa yang dilakukan Sun Microsystems pada platform Java yang lain seperti Java SE dan Java EE, dimana mereka sendiri yang menyediakan binary implementasinya. Pada tanggal 22 Desember 2006, Sun Microsystems telah menyediakan source code dari Java ME yang berada dalam lisensi GNU General Public License (GPL). Penyediaan source code ini diberi nama proyek phoneME. Berikut adalah ringkasan dari tujuan yang ingin dicapai dari adanya arsitektur Java ME: •
Menyediakan dukungan untuk berbagai peralatan dengan kemampuan yang berbeda-beda. Yang dimaksud dengan berbeda di sini adalah berbeda pada area user interface, penyimpanan data, keterhubungan jaringan dan bandwith, kapasitas memori, konsumsi tenaga, keamanan, dan pengembangannya.
•
Menyediakan sebuah arsitektur yang dapat dioptimasi untuk lingkungan yang relatif kecil.
•
Mengutamakan pada peralatan yang tinggi tingkat personalisasinya, dan biasanya dimiliki oleh satu orang saja.
•
Menyediakan konektivitas jaringan melalui berbagai jenis kemampuan jaringan dan servis.
•
Menyediakan kemampuan untuk menyampaikan aplikasi dan data melalui koneksi jaringan.
•
Memaksimalkan kemampuan lintas platform dari bahasa Java sementara mengambil keuntungan dari setiap alat yang memiliki kemampuan dan batasan yang unik.
•
Menyediakan kemampuan untuk mengembangkan aplikasi antar device yang memiliki kemampuan dan fitur yang berbeda-beda.
Java ME adalah bagian dari Java Platform, Standard Edition (Java SE), karena itu tidak semua library yang ada pada Java SE dapat digunakan pada Java ME. Namun Java ME memiliki beberapa library khusus yang tidak dimiliki Java SE. Arsitektur Java ME dapat dilihat pada Gambar II-1.
II-24
Gambar II-1 - Arsitektur Java ME [WIL03]
Java ME memperkenalkan dua konsep arsitektur yaitu configuration dan profile. Configuration adalah sebuah bagian yang menyediakan fungsionalitas dasar, sedangkan profile adalah bagian yang dibangun di atas configuration tersebut dan menyediakan banyak fungsionalitas untuk dapat menggunakan kemampuan dari perangkat target. Selain itu, package opsional dapat didefinisikan di atas profile dan configuration. Setiap configuration dapat mendukung satu atau lebih profile serta sebuah configuration dan sebuah profile dapat memiliki satu atau lebih package opsional. Configuration menyusun seperangkat API yang merupakan karakteristik runtime dari sebuah lingkungan Java ME tertentu. Configuration menentukan Core Java Classes, Java Programming Language Feature, dan Virtual Machine Feature. Java ME menyediakan dua buah configuration yaitu CLDC (Connected Limited Device Configuration) dan CDC (Connected Device Configuration). CLDC biasanya digunakan pada perangkat kecil seperti pada telepon seluler, pager, dan PDA. CDC digunakan pada perangkat yang lebih besar seperti internet TV, Nokia Communicator, dan car TV. Profile adalah seperangkat API yang menyediakan fungsionalitas-fungsionalitas dan keunggulan tertentu dari suatu perangkat spesifik. Untuk CLDC, profile yang biasa digunakan untuk perangkat telepon seluler adalah Mobile Information Device Profile (MIDP). Pada saat ini terdapat MIDP 1.0 dan MIDP 2.0. Fitur tambahan pada MIDP 1.0 dibandingkan dengan MIDP 2.0 adalah API untuk membuat lingkungan game, memainkan multimedia, dan membuat koneksi secure. Aplikasi yang ditulis untuk MIDP disebut MIDlet. Aplikasi MIDlet adalah bagian dari kelas javax.microedition.MIDlet yang didefinisikan pada MIDP. MIDlet memiliki beberapa method
yang harus ada yaitu: •
constructor()
•
protected void startApp() throws MIDletStateChangeException
II-25 •
protected void pauseApp()
•
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException.
Ketika device menerima pesan untuk menjalankan MIDlet maka MIDlet diinstansiasi dan method startApp() dipanggil. Pada saat pengguna keluar dari MIDlet maka method destroyApp() akan
dipanggil. Method ini akan melakukan terminasi MIDlet serta membersihkan semua resource yang mengacu pada MIDlet. Siklus hidup MIDlet dapat dilihat pada Gambar II-2.
Gambar II-2 - Siklus Hidup MIDlet [TOP2]