Makalah Basis Data Java

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Makalah Basis Data Java as PDF for free.

More details

  • Words: 2,304
  • Pages: 9
1. KONKURENSI PADA JAVA Konkuren adalah Melakukan 2 atau lebih aktivitas pada saat bersamaan • Dalam konteks komputer, aktivitas konkuren: – Sistem operasi mampu menjalankan beberapa program bersama-sama – Sebuah aplikasi dapat melakukan aktivitas bersamaan: menunggu event dari user (keyboard, mouse), melakukan penyimpanan file ke hard disk, melakukan pencarian teks a. Tread Pada Java Dalam sebuah pemrograman berorientasi object seperti halnya Program Java, kita mengenal sebuah pengontrol aliran program yang akan dieksekusi oleh komputer (Threads). Dengan adanya threads dalam pemrograman java kita dapat membuat program yang saling berurutan (sekuensial). Thread merupakan kemampuan yang disediakan oleh Java untuk membuat aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber daya secara konkuren. Secara konkrit, konsep threads dapat dilihat ketika kita mengetik sebuah dokumen di komputer dengan menggunakan text editor, dalam waktu yang bersamaan kita juga dapat mendengarkan musik, dan surfing lewat internet pada PC. Sistem operasi yang telah terinstal dalam komputer kita memperbolehkan untuk menjalankan multitaskting. Seperti itu juga sebuah program, ia juga dapat mengeksekusi beberapa proses secara bersama-sama (ibaratkan beberapa aplikasi berbeda yang bekerja pada sebuah PC). Contoh aplikasi adalah HotJava browser yang memperbolehkan untuk browsing terhadap suatu page, bersamaan dengan mendownload object yang lain, misalnya gambar, memainkan animasi, dan juga file audio pada saat yang bersamaan. Sedangkan ketika kita melakukan penulisan dan pembacaan data sering kita sebut dengan proses input dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau mendapatkan data dari input. Kita mengenal, dua macam stream yaitu Stream Input dan Stream output. Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Sedangkan untuk operasi penulisan berarti menulis data pada output stream. Package Java I/O mendukung dua tipe stream, yaitu binari dan karakter stream. Binari merupakan data berupa bit atau data binari, sedangkan karakter adalah tipe khusus untuk pembacaan dan penulisan teks/karakter. Thread merupakan kemampuan yang disediakan oleh Java untuk membuat aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber

daya secara konkuren. Ada dua cara yang bisa digunakan dalam membuat sebuah thread, yaitu : • Membuat subclass dari thread Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah : ClassThread namavar = new ClassThread(); Namavar.start(); Atau dapat juga langsung dengan cara: New ClassThread().start(); •

Mengimplementasikan interface Runnable Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah : ObjekRunnable objek = new ObjekRunnable(); Thread namavar = new Thread(Objek Runnable); Atau dengan cara singkat seperti : New Thread(new ObjekRunnable()); Dalam pemrograman java ada dua threads, yaitu daemon dan user thread. Daemon thread merupakan thread yang siklus hidupnya tergantung pada thread utama atau induk, sehingga apabila thread induk berakhir, maka otomatis thread-thread daemon juga ikut berakhir. Sedangkan user thread memiliki sifat berbeda, dimana apabila thread utama sudah selesai, maka user thread akan terus dijalankan. Macam-macam state pada streads: 1. Running Sebuah thread yang pada saat ini sedang dieksekusi dan didalam control dari CPU. 2. Ready to run Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya. 3. Resumed Setelah sebelumnya di block atau diberhentikan sementara, state ini kemudian siap untuk dijalankan. 4. Suspended Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain bekerja 5. Blocked Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan, karena ia akan menunggu sebuah resource tersedia atau sebuah event terjadi

Untuk menentukan thread mana yang akan menerima control dari CPU dan akan dieksekusi pertama kali, setiap thread akan diberikan sebuah prioritas. Sebuah prioritas adalah sebuah nilai integer dari angka 1 sampai dengan 10, dimana semakin tinggi prioritas dari sebuah thread, berarti semakin besar kesempatan dari thread tersebut untuk dieksekusi terlebih dahulu. Sebagai contoh, asumsikan bahwa ada dua buah thread yang berjalan bersama-sama. Thread pertama akan diberikan prioritas nomor 5, sedangkan thread yang kedua memiliki prioritas 10. Anggaplah bahwa thread pertama telah berjalan pada saat thread kedua dijalankan. Thread kedua akan menerima control dari CPU dan akan dieksekusi pada saat thread kedua tersebut memiliki prioritas yang lebih tinggi dibandingkan thread yang pada saat itu tengah berjalan. Salah satu contoh dari skenario ini adalah context switch. Sebuah context switch terjadi apabila sebagian dari thread telah dikontrol oleh CPU dari thread yang lain. Ada beberapa skenario mengenai bagaimana cara kerja dari context switch. Salah satu skenario adalah sebuah thread yang sedang berjalan memberikan kesempatan kepada CPU untuk mengontrol thread lain sehingga ia dapat berjalan. Dalam kasus ini, prioritas tertinggi dari thread adalah thread yang siap untuk menerima kontrol dari CPU. Cara yang lain dari context switch adalah pada saat sebuah thread yang sedang berjalan diambil alih oleh thread yang memiliki prioritas tertinggi seperti yang telah dicontohkan sebelumnya. Hal ini juga mungkin dilakukan apabila lebih dari satu CPU tersedia, sehingga lebih dari satu prioritas thread yang siap untuk dijalankan. Untuk menentukan diantara dua thread yang memiliki prioritas sama untuk menerima kontrol dari CPU, sangat bergantung kepada sistem operasi yang digunakan. Windows 95/98/NT menggunakan time-slicing dan round-robin untuk menangani kasus ini. Setiap thread dengan prioritas yang sama akan diberikan sebuah jangka waktu tertentu untuk dieksekusi sebelum CPU mengontrol thread lain yang memiliki prioritas yang sama. Sedangkan Solaris, ia akan membiarkan sebuah thread untuk dieksekusi sampai ia menyelesaikan tugasnya atau sampai ia secara suka rela membiarkan CPU untuk mengontrol thread yang lain.

b. Mekanisme Sinkronisasi Pada Java Sinkronisasi – Bagaimana 2 atau lebih dapat berkoordinasi satu sama lain, sehingga dapat menjamin kebenaran program. – Dua jenis tipe sinkronisasi: Akses eksklusif dan sinkronisasi kondisi • Akses eksklusif (mutual exclusion) – Resource (memori, external device) hanya boleh digunakan oleh 1thread saja pada suatu saat tertentu – Jika ada 2 atau lebih thread mengakses resource yang sama, mengakibatkan terjadinya race condition: update lost • Sinkronisasi kondisi (condition synchronization) – Sebuah thread baru boleh melanjutkan aktivitasnya setelah kondisi tertentu terpenuhi



Buffer management: pembaca buffer baru bisa membaca buffer jika telah ada thread lain yang menuliskan data ke buffer tersebut

Contoh masalah sinkronisasi: akses eksklusif • Ada 2 buah thread yang menggunakan printer yang sama untuk mencetak sebuah halaman yang terdiri atas header, isi dan footer. Ketiga bagian ini harus dicetak berurutan untuk setiap threadnya, tidak boleh selang seling. public class Printer { public void cetak(String nmThread) { System.out.println("cetak header untuk"+nmThread); System.out.println("cetak isi untuk"+nmThread); System.out.println("cetak footer untuk"+nmThread); System.out.println(); // baris kosong }

}

2. JAVA SOCKETS a. TCP/IP b. Sockets c. Stream Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau komputer remote. Sedangkan untuk operasi penulisan berarti menulis data pada output stream. Package java.IO mendukung dua tipe stream, yaitu binari dan karakter stream. Binari merupakan data berupa bit atau data binari, sedangkan karakter adalah tipe khusus untuk pembacaan dan penulisan teks/karakter. A. Input Stream Subclass-subclass dari input Stream adalah: Audio Input Stream, Byte Array Input Stream, File Input Stream, Filter Input Stream, Piped Input Stream, Sequence Input Stream, dan String Buffer Input Stream. Dua method utama dari InputStream adalah: a. Read : Method ini digunakan untuk membaca stream b. Close : Method ini digunakan untuk menutup koneksi input stream. B. Output Stream Subclass-subclass dari outputStream adalah : • ByteArray Output Stream : digunakan untuk menuliskan stream menjadi byte array; • File Output Stream : digunakan untuk menulis pada file; • Filter Output Stream : merupakan superclass dari subclass-subclass seperti Data Output Stream, Buffer Output Stream, Print Stream, Checked Output Stream; • Object Output Stream : digunakan untuk menuliskan objek pada Output Stream. • Piped Output Stream : digunakan untuk menjadi output dari Piped Input Stream.

Sebagian method-method Output Stream adalah : #Voidclose() Menutup output stream yang aktif dan melepaskan sumber daya terkait dengan stream tersebut; #Void flush() Melakukan flush output stream dan memaksa semua byte buffer untuk dituliskan keluar; #Void write(byte[] b) Menulis sebanyak b.length dari byte array ke output stream; #Void write(byte[] b, int off, int len) Menuliskan sebanyak len byte dari byte array b dimulai dari index off. class ThreadBaru extends Thread { public ThreadBaru(String id) { super(id); start(); //Mulai eksekusi thread baru } public void run() { for(int i=0;i<5;i++){ try{ Thread.sleep(100); }catch(InterruptedException e) {} } } } class DemoThread { public static void main(String[] args) { ThreadBaru thread1 = new ThreadBaru("Thread1"); ThreadBaru thread2 = new ThreadBaru("Thread2"); ThreadBaru thread3 = new ThreadBaru("Thread3"); System.out.println("Thread1 masih dieksekusi : " + thread1.isAlive()); System.out.println("Thread2 masih dieksekusi : " + thread2.isAlive()); System.out.println("Thread3 masih dieksekusi : " + thread3.isAlive()); //tunggu hingga semua child thread selesai dieksekusi try{ thread1.join(); System.out.println("Thread1 selesai dieksekusi"); thread2.join(); System.out.println("Thread2 selesai dieksekusi"); thread3.join(); System.out.println("Thread3 selesai dieksekusi"); }catch(InterruptedException e) { System.out.println("Thread utama diinterupsi " + e); } System.out.println("Thread utama selesai dieksekusi"); } } }

class TestSinkronisasi { private java.util.Random random = new java.util.Random(); public void callMe(String data) { System.out.print("["); try{ Thread.sleep(random.nextInt(200)); }catch(InterruptedException e) { e.printStackTrace(); } System.out.print(data); try{ Thread.sleep(random.nextInt(200)); }catch(InterruptedException e) { e.printStackTrace(); } System.out.println("]"); } } class ThreadBaru extends Thread { private String data; private TestSinkronisasi obj; public ThreadBaru(TestSinkronisasi obj,String data) { this.obj = obj; this.data = data; start(); } public void run() { obj.callMe(data); } } class DemoThread { public static void main(String[] args) { TestSinkronisasi obj = new TestSinkronisasi(); ThreadBaru thread1 = new ThreadBaru(obj,"Superman"); ThreadBaru thread2 = new ThreadBaru(obj,"Batman"); ThreadBaru thread3 = new ThreadBaru(obj,"Spiderman"); //tunggu hingga semua child thread selesai dieksekusi try{ thread1.join(); thread2.join(); thread3.join(); }catch(InterruptedException e) { System.out.println("Thread utama diinterupsi " + e); } } }

3. RMI a. Arsitektur RMI Untuk membuat sebuah kelas yang method-method-nya dapat diakses secara remote, pertama-tama kita harus membuat sebuah interface, di mana interfaceinterface ini harus mendeklarasikan method-method tersebut. Sementara untuk pengiriman dan penerimaan data sudah pun ditangani secara otomatis oleh objek stream. Kelas ini nantinya harus mengimplementasikan interface tersebut. Stub dan skeleton adalah objek yang berfungsi untuk melakukan proses pengiriman dan penerimaan data dari suatu aplikasi RMI. Skeleton adalah sebuah kelas yang merupakan pasangan dari kelas stub yang berada pada mesin yang sama dengan objek remote. Kelas ini juga yang akan menerima koneksi dari kelas stub dan menerjemahkannya ke dalam pemanggilan method pada objek remote. Untuk lebih jelasnya mengenai proses ini ditunjukkan oleh Gambar 2.

Gambar 2. Arsitektur RMI Untuk memanggil objek remote, pertama-tama client harus mencari objek tersebut dengan layangan naming. Layanan ini akan menginformasikan objek remote bahwa ada sebuah client yang melakukan koneksi. Koneksi client pada layanan Naming ini dapat dilihat pada Gambar 3.

Gambar 3. Layanan Naming a. Objek Remote Objek remote ini sendiri dapat dikategorikan menjadi dua bagian, yaitu: • Interface yang menggambarkan tentang method dari objek ini yang dapat dipanggil secara remote. • Objek yang mengimplementasikan interface tersebut. b. Stub dan Skeleton Fungsi utama dari kedua kelas ini adalah untuk melakukan pengiriman dan penerimaan data baik di sisi server dan di sisi client. c. Penyusunan dan Pengiriman Data Baik kelas stub maupun kelas skeleton akan melakukan hal-hal yang berhubungan dengan komunikasi RMI secara otomatis. Sehingga kita tidak akan direpotkan lagi dalam hal pengiriman data dari dan ke server ataupun client.

d. Remote Exception RemoteException merupakan kelas induk dari segala macam kegagalan atau eksepsi yang dapat terjadi pada aplikasi RMI. Eksepsi ini akan dilemparkan jika pemanggilan terhadap method remote gagal. Semua method yang terdapat pada interface remote harus melemparkan eksepsi ini. e. Mekanisme Naming Client hanya bisa menggunakan atau meminta method pada objek remote jika client telah memiliki referensi ke objek tersebut. Client akan melakukan koneksi ke registry dan mendapatkan lokasi objek remote berdasarkan namanya. Untuk proses penentuan lokasi ataupun objek remote oleh client ditunjukkan oleh Gambar 4.

Gambar 4. Menentukan alamat objek remote dengan layanan Naming b. Client Server dengan RMI Aplikasi Client/Server merupakan suatu aplikasi di mana ada satu aplikasi yang bertindak sebagai Server dan ada yang bertindak sebagai Client. Java memberikan banyak pilihan untuk membuat aplikasi Client/Server salah satunya yaitu dengan menggunakan Remote Method Invocation (RMI). Remote Method Invocation (RMI) pada bahasa Java menyediakan semua lapisan yang dibutuhkan oleh objek Java untuk berkomunikasi dengan objek Java lainnya menggunakan pemanggilan method secara normal. Proses ini bisa terjadi jika sistem baik yang menjadi server dan Client bisa berkomunikasi melalui TCP/IP, sehingga aplikasi Client/Server bisa dikembangkan tanpa streaming dan socket. c. Aplikasi dengan RMI Ketika menggunakan RMI untuk membuat sebuah aplikasi, ada beberapa langkah yang harus diikuti. Adapun langkah-langkah tersebut seperti berikut: • Desain dan implementasi komponen-komponen aplikasi dalam hal ini adalah Interface remote, objek Remote dan Client; • Langkah selanjutnya adalah proses kompilasi semua kode program dan menghasilkan stubs serta skeleton. • Membuat kelas-kelas yang berhubungan dengan jaringan dapat diakses oleh client. • Menjalankan aplikasi. 1. Unified Modeling Language (UML) Unified Modelling Language (UML) adalah sebuah bahasa untuk menentukan, visualisasi, konstruksi dan mendokumentasi informasiinformasi dari sistem aplikasi, untuk memodelkan bisnis dan sistem nonaplikasi lainnya. UML merupakan suatu kumpulan teknik terbaik yang telah terbukti sukses dalam memodelkan sistem yang besar dan kompleks.

4. CORBA a. Struktur OMG b. Standarisasi Proses 5. Voyager dan Mobile Agents a. Lingkungan Voyager b. Remote Object

Related Documents

Basis Data
December 2019 50
Basis Data
May 2020 26
Basis Data
July 2020 34
Basis Data
April 2020 24