Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Pembuatan Aplikasi Client Server Dengan Arsitektur 3-tier Part 3

| Comments

Melanjutkan postingan sebelumnya, kita langsung saja menambahkan kode untuk membuat koneksi ke database dalam hal ini sy menggunakan database Ms Access.

Aktifkan class BukuDao setelah itu tambahkan kode berikut dibagian constructor default (constructor tanpa parameter).

1
2
3
4
5
6
7
8
// constructor
public BukuDao()
{
    string appDir = System.IO.Directory.GetCurrentDirectory();
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appDir + "\\DbPerpus.mdb;User Id=admin;Password=;";
    conn = new OleDbConnection(strConn);
    conn.Open();
}

Alasan sy menggunakan constructor default untuk membuat koneksi ke database adalah karena remote object dari class BukuDao akan diaktifkan menggunakan mode SingleCall, dengan kata lain mode SingleCall hanya bisa memanggil constructor default.

Penjelasan tentang mode┬áSingleCall bisa anda cek disini di bagian “Server Side Object Activation. SingleCall”.

Sebelumnya kita akan melakukan testing terlebih untuk memastikan bahwa class BukuDao sudah bekerja dengan baik.

Untuk melakukan testing ada beberapa cara yang bisa kita lakukan, yang pertama dan sangat dianjurkan kita bisa menggunakan tool testing semisal NUnit, atau dengan cara yang lebih simple dengan memanfaatkan program console.

Untuk menyederhanakan pembahasan sy memilih opsi kedua tetapi sebelumnya kita harus mengeset terlebih dulu agar project SmartLibraryServer sebagai StartUp Project.

Caranya dengan mengklik kanan project SmartLibraryServer -> Set as StartUp Project.

Aktifkan class Program, setelah itu kita akan melakukan testing satu persatu semua method yang dimiliki oleh class BukuDao, berikut kode lengkapnya.

1
2
using SmartLibraryLib.Model;
using SmartLibraryServer.Dao;

Menambahkan data buku

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int result = 0;

// buat objek buku
Buku buku = new Buku();
buku.ISBN = "12345";
buku.Judul = "Bahasa Indonesia";
buku.Edisi = "I";
buku.Bahasa = "Indonesia";
buku.Penerbit.PenerbitID = 1;

BukuDao bukuDao = new BukuDao();
result = bukuDao.Save(buku);
if (result > 0)
{
    Console.WriteLine("Data buku berhasil ditambahkan");
}
else
{
    Console.WriteLine("Data buku gagal ditambahkan");
}

Mengedit data buku

Untuk mengedit data buku sama seperti menambahkan buku baru, hanya saja yang dipanggil adalah method Update

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// buat objek buku
Buku buku = new Buku();
buku.ISBN = "12345";
buku.Judul = "Bahasa Indonesia";
buku.Edisi = "I";
buku.Bahasa = "Indonesia";
buku.Penerbit.PenerbitID = 1;

BukuDao bukuDao = new BukuDao();
result = bukuDao.Update(buku); // bedanya cuma disini
if (result > 0)
{
    Console.WriteLine("Data buku berhasil diupdate");
}
else
{
    Console.WriteLine("Data buku gagal diupdate");
}

Menghapus data buku

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// buat objek buku
Buku buku = new Buku();
buku.ISBN = "12345";

BukuDao bukuDao = new BukuDao();
result = bukuDao.Delete(buku);
if (result > 0)
{
    Console.WriteLine("Data buku berhasil dihapus");
}
else
{
    Console.WriteLine("Data buku gagal dihapus");
}

Menampilkan data buku

Sedikit beda dengan method Save, Update dan Delete untuk menampilkan data buku kita membutuhkan class Collection menampung kumpulan objek buku.

1
2
3
4
5
6
BukuDao bukuDao = new BukuDao();
List<Buku> daftarBuku = bukuDao.GetAll();
foreach (Buku buku in daftarBuku)
{
    Console.WriteLine(buku.ISBN + ", " + buku.Judul);
}

Semua kode diatas diketik pada method Main dari class Program

Menjadikan project RetailManagerServer sebagai host untuk menghandle remote object

Setelah selesai melakukan testing terhadap class BukuDao saatnya untuk menghostkan remote object dari class ini.

Remote object tidak bisa berdiri sendiri sehingga membutuhkan aplikasi lain yang bertindak sebagai host yang akan mengekspose remote object sehingga bisa diakses secara remote (diluar domainnya).

Ada beberapa cara untuk bisa menghostkan remote object bisa menggunakan aplikasi console, aplikasi windows form, mendaftarakan sebagai windows service atau menggunakan web service IIS.

Pada postingan ini sy menggunakan solusi termudah yaitu menggunakan aplikasi console :D.

Tapi sebelumnya karena class Program akan mengakses class-class yang berhubungan dengan fitur .NET Remoting maka kita harus menambahkan terlebih dulu referensi library .NET Remoting.

  1. Klik kanan node References -> Add Reference …

  1. Aktifkan tab .NET kemudian pilih System.Runtime.Remoting

  1. Jika langkah sebelumnya berhasil akan ketambahan 1 buah node dengan nama System.Runtime.Remoting pada folder References.

Kembali ke class Program kemudian lengkapi kodenya seperti gambar berikut :

Perhatikan gambar diatas terutama yang diberi penanda merah, kode tersebut akan menjadi alamat dari remote object.

Ketika aplikasi klien ingin mengakses remote object yang ada di server, maka alamat url yang harus diakses menggunakan format berikut :

Dan berdasarkan kasus yang kita bahas maka nilai-nilai diatas disesuaikan seperti berikut :

  • Channel/protocol = tcp

  • Machine Name = localhost

  • Port = 1234

  • Object URI = SmartLibraryServer.BukuDao atau SmartLibraryServer.PenerbitDao

Sampai disini selesai sudah pembahasan tentang project SmartLibraryServer, kita bisa mencoba project ini dengan menekan tombol F5

Project terakhir yaitu SmartLibraryClient akan kita bahas pada kesempatan berikutnya insyaAllah :)

Selamat MENCOBA :)

Comments