V Pengaksesan Jaringan
V.2 Generic Connection Framework (GCF)
V Pengaksesan Jaringan
V.1 Lingkungan Perangkat Mobile
Salah satu kelebihan dari perangkat mobile adalah kemampuannya untuk membentuk koneksi ke suatu jaringan. Kemampuan untuk membentuk koneksi ditambah dengan kemampuan untuk mengirim dan menerima data memberikan peluang bagi pengembang untuk mengembangkan suatu aplikasi bergerak yang menarik.
Perancang J2ME platform mempertimbangkan berbagai protokol dan teknologi yang saat ini sedang berkembang. Teknologi J2ME mengembangkan sebuah lingkup pengembangan sehingga teknologi ini dapat berintegrasi dengan aplikasi berbasis web yang saat ini ada atau aplikasi lain yang mendukung protokol HTTP. Gambar V‐1 menunjukkan lingkungan MIDP yang berintegrasi dengan jaringan saat ini ada untuk mempertukarkan informasi.
Gambar V‐1 Arsitektur jaringan perangkat mobile
V.2 Generic Connection Framework (GCF)
MIDP menyediakan sekumpulan kelas dan interface bernama Generic Connection Framework (GCF) untuk membentuk koneksi. Pada MIDP 1.0 koneksi yang dapat digunakan hanyalah HTTP. Pada MIDP 2.0 koneksi HTTP diperluas dengan menambah suatu fitur koneksi HTTP yang aman bernama HTTPS (HTTP Secure). HTTPS ini memungkinkan pertukaran data melalui jalur yang aman. Selain HTTPS ada beberapa koneksi yang didefinisikan pada MIDP 2.0.
70
Paket J2SE seperti paket java.net dan java.io menawarkan kelas‐kelas untuk jaringan yang sangat lengkap. Namun, API ini terlalu besar untuk diterapkan di lingkungan J2ME. Untuk itu, CLDC menawarkan sebuah subset kelas J2SE java.io yang dapat diterapkan di lingkungan perangkat bergerak.
Di MIDP paket javax.microedition.io melengkapi paket java.io CLDC dan mengimplementasikan GCF yang didefinisikan oleh CLDC. Paket tersebut terdiri dari kelas Connector, kelas ConnectionNotFoundException, dan hirarki interface berikut ini.
Gambar V‐2 Interface inti GCF
Interface di atas diimplementasikan oleh kelas‐kelas spesifik implementasi MIDP perangkat bergerak.
Setiap vendor perangkat mobile mengimplementasikan interface tersebut secara berbeda. Berikut gambar yang menunjukkan interface GCF dan kelas‐kelasnya.
71
Gambar V‐3 Interface dan kelas GCF
Interface GCF juga mendukung subset TCP/IP, Wireless Application Protocol (WAP) dan socket. Kelas yang
memegang peranan sentral pada paket javax.microedition.io adalah kelas Connector. Kelas ini bertanggung jawab sebagai intrepeter URL, instantiator kelas, dan mengembalikan interface yang tepat ke pemanggilnya.
Interface GCF menyediakan tingkat fungsionalitas yang beragam. Ketika menulis aplikasi perlu ditentukan interface mana yang dibutuhkan aplikasi. Sebagai contoh, jika aplikasi hanya memerlukan kemampuan
untuk membuat output stream saja tanpa memerlukan pembacaan input, maka interface OutputConnection merupakan interface yang tepat untuk digunakan. Tabel berikut ini menunjukkan daftar interface GCF yang didefinisikan CLDC.
Tabel V‐1 Daftar Interface GCF
Interface Deskripsi
Connection Merupakan kelas dasar untuk semua interface GCF dan mendefinisikan method close()
DatagramConnection Menangani input dan output (I/O) berbasis paket InputConnection Menangani koneksi input stream
OutputConnection Menangani koneksi output stream
StreamConnectionNotifier Menangani koneksi inputstream yang asinkron
StreamConnection Mengkombinasikan koneksi I/O ke dalam satu interface ContentConnection Menangani sebuah koneksi yang dapat menentukan informasi
tipe content
72
GCF didefinisikan sebagai bagian dari konfigurasi CLDC. Namun, agar lebih fleksibel, CLDC tidak mendefinisikan protokol yang diperlukan oleh profile. Berdasarkan keinginan para pengembang, setidaktidaknya MIDP harus mendukung protokol HTTP dan HTTPS.
Perusahaan pembuat perangkat bergerak dapat menambahkan protokol yang sesuai dengan kebutuhannya. Saat ini perangkat yang mendukung MIDP sudah mendukung protokol berikut ini. a.
Datagram
b. Komunikasi serial
c. Short Message Service (SMS) d. Multimedia Message Service (MMS) e. Cell Broadcast Service (CBS)
f. Socket
g. Secure Socket Layer (SSL) h. Server Socket
Untuk mengetahui protokol yang didukung oleh suatu perangkat bergerak beserta kapabilitasnya, pengembang harus membaca dokumentasi perangkat tersebut.
V.3 Connector
Kelas Connector merupakan inti dari GCF. Kelas Connector merupakan kelas factory yang digunakan untuk membuat koneksi ke suatu jaringan. Koneksi yang dikembalikan dari berbagai static method disebut
polymorphic karena obyek yang dikembalikan dapat di‐casting ke beberapa interface yang beragam. Kelas Connector digunakan untuk hal berikut :
a. Koneksi ke suatu jaringan dan mendapatkan informasi tentang jaringan tersebut.
b. Mengembalikan obyek InputStream sehingga aplikasi dapat segera mulai menerima data. c. Mengembalikan obyek OutputStream sehingga aplikasi dapat segera mulai mengirim data. Salah satu dari koneksi‐koneksi tersebut dapat mendukung beberapa protokol, salah satu protokol yang harus didukung oleh koneksi tersebut adalah protokol HTTP atau HTTPS. Vendor perangkat mobile dapat menambah protokol tambahan yang menurut mereka sangat diperlukan. Sebagai contoh, beberapa perusahaan pembuat perangkat bergerak mengijinkanpembentukan koneksi socket atau menggunakan
interface GCF untuk koneksi melalui port infra merah. Namun, penggunaan protokol tersebut dalam
sebuah aplikasi akan menyebabkan aplikasi tersebut tidak fleksibel dan mungkin terbatas pada perangkat yang mendukung protokol tersebut.
Untuk menyediakan berbagai tingkatan dukungan protokol, interface GCF memberikan format URL untuk menentukan protokol apa yang akan digunakan untuk sebuah koneksi.
73
Kelas Connector merupakan kelas berbasis pada factory design pattern. Informasi yang relevan tentang konstruksi sebuah obyek dikirim ke factory. Berdasarkan informasi tersebut, factory mengembalikan sebuah obyek yang diperlukan dalam aplikasi dan informasi yang diperlukan GCF adalah URI. Untuk membuat obyek Connection, digunakan satu dari berbagai bentuk metod open(). Setelah koneksi dibuka dapat dibentuk stream yang didefinisikan dalam paket java.io untuk mengirim atau menerima
content. Tipe interface Connection yang dikembalikan bergantung dari tipe koneksinya. Contoh berikut
ini menunjukkan satu bentuk method open().
public static Connection open(String url, int mode, boolean timeOuts) throws IOException
Tabel V‐2 menunjukkan parameter yang dapat diisikan pada method Connector.open(). Tabel
V‐2 Parameter dalam Connector.open()
Parameter Deskripsi
String url URL
int mode Mode akses, seperti READ, WRITE dan
READ_WRITE
boolean timeouts Sebuah flag yang memberitahu bahwa koneksi perlu mengaktifkan eksepsi time‐out
Method open()merupakan metod yang di‐overload dan tidak semua parameter di atas selamanya
diperlukan, bergantung kebutuhan. Contoh berikut ini menunjukkan penggunaan method open() untuk beberapa tingkat aksesibilitas, mode, dan nilai time‐out.
a. Membaca/menulis koneksi menggunakan HTTP
Connector.open("http://www.jcc-itb.com/myData"); b. Membaca koneksi menggunakan HTTPS
Connector.open("https://www.jcc.com/Data",Connector.READ); c. Koneksi input menggunakan HTTP
Connector.openInputStream("http://www.jcc.com/data.txt");
Kelas Connector mengembalikan obyek Connection. Obyek yang dikembalikan tersebut dapat dicasting ke beberapa tipe interface yang didefinisikan GCF. Jika casting ke interface yang tipe protokolnya tidak valid, maka sebuah exception akan terjadi.
Informasi tentang koneksi yang terbentuk bisa didapatkan, namun GCF tidak dapat digunakan untuk mengirim dan menerima data tanpa membentuk obyek stream. Untuk itu, digunakan interface Connection yang mendefinisikan method‐method untuk mengakses interface InputStream dan OutputStream. Penggalan kode program berikut ini menunjukkan penggunaan kelas yang didefinisikan
74
GCF dan membuat sebuah koneksi, menerima informasi, dan menutup koneksi menggunakan standar
stream I/O.
Listing V‐1 Contoh penggunaan GCF untuk membentuk koneksi
import javax.microedition.io.*; import java.io.*;
...
try{
InputConnection in = (InputConnection)Connector.open(
"http://www.jcc.com/data.txt",Connector.READ);
InputStream input = in.OpenInputStream();
StringBuffer data = new StringBuffer(); char ch; while((ch=input.read()) != -1){ data.append((char)ch); } input.close(); in.close(); }catch(IOException ioe){
//tangani error di sini
}
...