Contoh Program Serialisasi pada Java dan Hasil Programnya

Contoh Program Serialisasi pada Java dan Hasil Programnya


Class GameCharacter

import java.io.*;
public class GameCharacter implements Serializable
//merupakan kelas yang akan diserialisasi
{
    int power;
    //membuat variabel power dengan tipe data integer
    String type;
    //membuat variabel type dengan tipe data string
    String[] weapons;
    //membuat array weapns dengan tipe data string
   
    public GameCharacter(int p, String t, String[] w)
    //pengkapsulan method untuk mencegah crash jika terjadi kesalahan
    {
        power = p;
        //Memasukkan nilai variabel p ke power
        type = t;
        //Memasukkan nilai variabel t ke type
        weapons = w;
        //Memasukkan nilai variabel w ke weapons
    }
   
    public int getPower(){
        return power;
        //mengembalikan nilai power agar dapat ditampilkan
    }
   
    public String getType(){
        return type;
        //mengembalikan nilai type  agar dapat ditampilkan
    }
   
    public String getWeapons(){
        String weaponList = "";
        for(int i = 0; i < weapons.length; i++)
        //perulangan yang dilakukan selama nilai i lebih kecil dari weapon.length
        {
            weaponList += weapons[i]+" ";
        }
        return weaponList;
        //mengembalikan nilai weaponList
    }
}

Class  SerializedWriter

import java.io.*;
public class SerializedWriter
//kelas yang berfungsi penulis serialisasi
{
    public static void main (String[]args){
        GameCharacter one = new GameCharacter(50, "Elf", new String[] {"bow", "sword", "dust"});
        //membuat instansiasi Game Character dengan objek one beserta isi konstruktornya
        GameCharacter two = new GameCharacter(200, "Troll", new String[] {"bare hand", "big axe"});
        //membuat instansiasi Game Character dengan objek two beserta isi konstruktornya
        GameCharacter three = new GameCharacter(120, "Magician", new String[] {"spells", "invisibility"});
        //membuat instansiasi Game Character dengan objek three beserta isi konstruktornya
       
        try{
            //pengkapsulan method untuk mencegah crash jika terjadi kesalahan
            ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("Game.ser"));
            //membuat object output stream dengan nama os.
           
            os.writeObject(one);
            //menulis objek one pada game.ser
            os.writeObject(two);
            //menulis objek two pada game.ser
            os.writeObject(three);
            //menulis objek three pada game.ser
            os.close();
            //menutup objectoutputstream
        }
        catch(IOException ex){
            ex.printStackTrace();
            //hasil yang ditampilkan jika terjadi error
        }
    }
}

Class  SerializedReader

 import java.io.*;
public class SerializedReader
//kelas yang berfungsi sebagai pembaca kelas serialisasi
{
    public static void main (String[] args){
        try{
            //pengkapsulan method untuk mencegah crash jika terjadi kesalahan
            ObjectInputStream is = new ObjectInputStream(new FileInputStream("Game.ser"));
            //membuat objek objectinputstream dengan nama is
            GameCharacter oneRestore = (GameCharacter) is.readObject();
            //membuat instasiasi objek oneRestore character untuk menampung objek pertama serialisasi
            GameCharacter twoRestore = (GameCharacter) is.readObject();
            //membuat instasiasi objek twoRestore character untuk menampung objek kedua serialisasi
            GameCharacter threeRestore = (GameCharacter) is.readObject();
            //membuat instasiasi objek oneRestore character untuk menampung objek ketiga serialisasi
           
            System.out.println("One's type: " + oneRestore.getType());
            //memanggil method gettype dari class GameCharacter
            System.out.println("One's power: " + oneRestore.getPower());
            //memanggil method getpower dari class GameCharacter
            System.out.println("One's weapons: " + oneRestore.getWeapons());
            //memanggil method getweapon dari class GameCharacter
            System.out.println("two's type: " + twoRestore.getType());
            //memanggil method gettype dari class GameCharacter
            System.out.println("three's type: " + threeRestore.getType());
            //memanggil method gettype dari class GameCharacter
        }
        catch (Exception ex){
            ex.printStackTrace();
            //hasil yang ditampilkan jika terjadi error
        }
    }
}

class SerializedReaderCont

 import java.io.*;
public class SerializedReaderCont
//kelas yang berfungsi sebagai pembaca kelas serialisasi
{
    public static void main (String[] args){
        try{
            //pengkapsulan method untuk mencegah crash jika terjadi kesalahan
            ObjectInputStream is = new ObjectInputStream(new FileInputStream("Game.ser"));
            //membuat objek objectinputstream dengan nama is
           
            boolean check = true;
            //membuat boolean check yang nilainya true
            int cnt = 1;
            //membuat variabel cnt yang bernilai 1
           
            while(check){ //selama keadaan benar makan..
                try{ //pengkapsulan method untuk mencegah crash jika terjadi kesalahan
                    GameCharacter obj = (GameCharacter)is.readObject();
                    //membuat objek obj untuk menampung hasil pembacaan object.
                    System.out.println("Character "+cnt);
                    //menampilkan nilai cnt pada layar
                    System.out.println("Character's type "+obj.getType());
                    //menampilkan nilai type pada layar
                    System.out.println("Character's power "+obj.getPower());
                    //menampilkan nilai power pada layar
                    System.out.println("Character's weapon "+obj.getWeapons());
                    //menampilkan nilai weapons pada layar
                    cnt = cnt +1;
                }catch(EOFException ex){
                    check = false;
                    //hasil yang ditampilkan jika terjadi error
                }
            }
        }
        catch (Exception ex){
            ex.printStackTrace();
            //hasil yang ditampilkan jika terjadi error
        }
    }
}

• Hasil Running
serializewriter
 
Contoh Program Serialisasi pada Java dan Hasil Programnya


Serializereader

Contoh Program Serialisasi pada Java dan Hasil Programnya

Serializereader

Contoh Program Serialisasi pada Java dan Hasil Programnya


Langkah dan Cara Install Linux, DNS dan Web Server 2018

Langkah dan Cara Install Linux, DNS dan Web Server 2018



Install linux, dns, web server dengan ketentuan : nama domain adalah www.namaanda.responsi.net dan tugas.nama-anda.responsi.net

Langkah-Langkah Kerja:
1. Membuat mesin virtual :

a. Menentukan nama dan tipe sistem operasi
Name : responsi17b
Type : linux
Version : redhat 32 bit
b. Menentukan besar memori yang akan dialokasikan untuk mesin virtual
Memory : 768 MB
c. Buat harddisk baru dengan type : vdi(virtual disk image)
d. Klik create untuk membuat mesin virtual

2. Instalasi Linux 

a. Jalankan mesin virtual
b. Masuk cd centos 6 i386.iso
c. Ikuti perintah install dari awal hingga akhir.
d. Keterangan:
Nama mesin virtual  : responsi17b
Hostname   : responsi17b
user    : root
password   : responsi17b
paket instalasi  : minimal

3. Mensetting IP Adress sebagai nat

a. Pada network adapter 1 setting menjadi mode nat
b. Kemudian setting ip eth1 pada centos menjadi dhcp dengan perintah : #vi /etc/sysconfig/network-script/ifcfg-eth0
c. Tambahkan :
BOOTPROTO="dhcp"
ENABLEBOOT="yes"
d. Jalankan #service network restart, untuk menerapkan perubahan yang telah dibuat.
e. Jalankan perintah ping 8.8.8.8 untuk tes koneksi internet

4. Menginstall paket yang diperlukan (DNS dan Web Server)

a. Setelah terkoneksi internet jalankan perintah:
#Yum install bind bind utils httpd mysql nmap nano
b. Tunggu hingga instalasi semua paketnya selesai.

5. Mensetting ip menjadi static untuk setting DNS
a. Ubah adapter menjadi mode terbridge
b. Setting ip menjadi static :
IP : 10.33.108.180
NETMASK : 255.255.255.0
c. Jalankan service network restart untuk menerapkan perubahan yang telah dibuat.

6. Mensetting DNS server:

a. Setting resolv.conf dengan perintah #nano /etc/resolv.conf
Tambahkan nameserver 10.33.108.180
b. Setting named.conf dengan perintah #nano /etc/named.conf
Beberapa parameter yang ditambahkan antara lain:

listen-on port 53 { 127.0.0.1; any;};
allow-query { localhost; any;};
recursion no;
dnssec-lookaside auto;
zone "anam.responsi.net" IN {
type master;
file "anam.responsi.net.zone";
allow-update { none; };
};

c. Masuk kedalam directori /var/named dengan perintah cd /var/named
d. Membuat file database Zone “anam.responsi.net.zone”
e. Konfigurasi agar service DNS Server otomatis berjalan saat PC server hidup dengan perintah chkconfig named on
f. Merestart dns server dengan perintah : #service named restart

7. Pengujian DNS Server:

a. Setelah dns selesai di setting dan telah di restart maka perlu dilakukan pengujian
b. Nslookup anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

c. Nslookup www.anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

d. Nslookup tugas.anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

8. Setting WebServer

a. Setelah setting dns selesai selanjutnya adalah setting webserver
b. Jalankan perintah : nano /etc/httpd/conf/httpd.conf
Tambahkan baris script berikut ini :

ServerAdmin webmaster@anam.responsi.net
ServerName www.anam.responsi.net:80

NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.anam.responsi.net
ServerAdmin webmaster@anam.responsi.net
DocumentRoot /var/www/html/komjar/
</VirtualHost>
<VirtualHost *:80>
ServerName tugas.anam.responsi.net
ServerAdmin webmaster@tugas.anam.responsi.net
DocumentRoot /var/www/html/tugas
</VirtualHost>
c. Membuat folder untuk meletakkan file tugas.anam.responsi.net dan www.anam.responsi.net dengan perintah :

Cd /var/www/html
Mkdir anam
Mkdir tugas

d. Selanjutanya adalah membuat file index untuk tugas.anam.responsi.net dan www.anam.responsi.net.

9. Pengujian web server

a. Setting ip address pada client :
IP : 10.33.108.176

Langkah dan Cara Install Linux, DNS dan Web Server 2018

b. Lakukan nslookup anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

c. Lakukan nslookup www.anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

d. Lakukan nslookup www.anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

e. Akses pada browser client:  www.anam.responsi.net

Langkah dan Cara Install Linux, DNS dan Web Server 2018

f. Akses pada browser client:  www.anam.responsi
Langkah dan Cara Install Linux, DNS dan Web Server 2018


g. Setting DNS dan Web Server telah selesai.

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


Implementasi transaksi pada aplikasi pemesanan maskapai penerbangan online. Dalam pemesanan kita perlu melakukan tiga operasi:

• Pemesanan tiket(seat_collection)
• Pembayaran (payment_collection)
• Update jumlah kursi dan penjualan yang dipesan (audit_collection)

Untuk aplikasi ini, menggunakan tiga koleksi terpisah, seperti yang dijelaskan diatas. Kode program ‘transaction_main.py’ digunakan untuk memperbarui koleksi yang terhubung dengan driver (Pymongo 3.7.1).

Buatlah program dengan pymongo untuk update dan melihat action saat  menggunakan transaksi meliputi
• untuk menyimpan perubahan data dengan commit
• untuk menghapus perubahan data dengan abortTransaction
• untuk transaksi tanpa write konflik dapat dilakukan
• transaksi dengan write konflik dibatalkan


Persiapan Server :
A. Persiapan Server Menggunakan Windows:

1. Pastikan mongodb telah terinstall pada komputer. Disarankan untuk install versi 4.0
2. Install python 3.71 dan tambahkan path pada system variabel windows.
C:\Users\Anam\AppData\Local\Programs\Python\Python371-32\Scripts\;
C:\Users\Anam\AppData\Local\Programs\Python\Python371-32\;
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


3. Install pymongo dengan pip disarankan pymongo 3.71
Syntaks : pip install pymongo   / pip install –upgrade pymongo
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


4. Install mtools dengan pip .
Syntaks : pip install mtools
MTools adalah kumpulan skrip pembantu untuk mengurai, menyaring, dan memvisualisasikan file log MongoDB (mongod, mongos). mtools juga termasuk mlaunch, utilitas untuk dengan cepat mengatur lingkungan pengujian MongoDB yang kompleks pada mesin lokal. Untuk demo ini kita hanya akan menggunakan program mlaunch.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


5. Install psutil dengan pip. Psutils dibutuhkan sebagai pendukung mtools.
Sysntaks : pip install psutil
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

Psutil merupakan modul yang menyediakan sebuah interface untuk mengambil informasi tentang proses yang berjalan dan sistem utilitas secara portable dengan menggunakan python, menerapkan banyak fungsi yang ditawarkan oleh tools ( mtools).

6. Install virtualenv untuk virtualisasi environment
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


7. Buka command prompt di tempat projeck berada. Kemudian jalankan 2 perintah berikut.
Sysntaks : virtualenv env
env\Scripts\activate.bat
Virtualenv membuat lingkungan python virtual yang terisolasi,sehinggga program Python yang berjalan di dalam virtualenv memiliki modul-modulnya sendiri, sehingga dapat menghindari bentrokan antar library dan program dari luar tidak bisa mengaksesnya. Misal, kita mempunyai dua proyek python, yang satu menggunakan Library X1.6 dan satu lagi menggunakan Library X1.9 , hal ini memerlukan virtual environment agar dua proyek ini dapat berjalan bersamaan pada satu mesin.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



8. Jalankan server dengan mlaunch. Ketika perintah ini dijalankan maka otomatis akan tercipta 3 server. Dengan port 27100, 27101, 27102 dan men set primary dan secondary secara otomatis.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

Mlaunch adalah skrip untuk dapat melakukan pengujian local environment secara cepat termasuk dalam set replica dan sistem yang sharded.


9. Masih di lanjutan dari menjalankan server. Jalankan program transaction_main.py. program ini akan mengenerate daftar secara otomatis.
Syntak : python transaction_main.py
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


10. Untuk melihat perubahan secara live pada daftar collection seat dapat menggunakan watch_transaction.py. (catatan transaction_main.py harus berjalan)
Syntaks: python watch_transactions.py --database SEATSDB --collection seats
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


11. Untuk melihat perubahan secara live pada daftar collection payment dapat menggunakan watch_transaction.py. (catatan transaction_main.py harus berjalan)
Syntaks: python watch_transactions.py --database PAYMENTSDB --collection payments
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


12. Data base yang terbentuk pada server antara lain : AUDITDB, PAYMENTSDB, SEATSDB
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


13. Isi masing-masing database sebagai berikut :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



B. Persiapan Server Menggunakan Linux(Ubuntu 16 64 bit)

1. Menginstall mongoDB versi 4 pada server ubuntu
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




2. Mengecek apakah mongoDB sudah dapat dijalankan dengan menjalankan perintah mongo.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


3. Menginstall pip yang nantinya akan digunakan untuk menginstall paket python lainnya. Berbeda dengan windows yang pip sudah terbawa langsung dengan pythonnya. Di linux pip harus diinstall secara terpisah.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


4. Menginstall dan mengupgrade pymongo. Pymongo adalah antarmuka antara python dan mongoDB (API). Agar perintah di mongo dapat dikenali didalam python.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


5. Selanjutnya menginstall mtools menggunakan pip.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


6. Paket selanjutnya yang diinstall adalah pseutil.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


7. Selanjutnya adalah menginstall virtualenv. Virtualenv berfungsi untuk membuat virtual environment.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


8. Setelah semua paket yang dibutuhkan terinstal buat folder di :/root/ dengan perintah mkdir pymongo-transactions. Folder ini akan kita gunakan menyimpan file-file project.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


9. Selanjutnya adalah copy atau upload file transaction_main.py dan program 1 sampai 4 yang telah dibuat ke dalam server.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



10. Masih dari dalam folder /root/pymongo_transaction jalankan virtual environmet. Dengan perintah : source venv/bin/activate
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


11. Selanjutnya adalah menjalankan server mongo db pada port 27100, 27101 dan 27102 menggunaan perintah  : mlaunch init --port 27100 --replicaset --name "txntest"
Perintah tersebut otomatis membuat 3 buath server dengan settingan replica setnya.
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


12. Berikutnya jalankan program transaction_main.py untuk memulai mengenerate database SEATSDB, PAYMENTSDB dan AUDITDB. Dengan menggunakan perintah : python transaction_main.py
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




Hasil Running Program dan Analisa :

A. Program untuk menyimpan perubahan data dengan commit

Sourcecode Program :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)





Hasil Running Program :
Di  windows :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


Di Linux
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




Analisa Program :
Program diatas berfungsi untuk menambahkan data seat 7A pada collection seats pada database SEATSDB dan collection payments pada database PAYMENTSDB.  Dengan melakukan commit pada sesi.
#import library yang dibutuhkan
from argparse import ArgumentParser
import datetime
import time
import sys
import random
import pymongo
import pymongo.errors
from pymongo import MongoClient
import urllib.parse
Analisa : pertama adalah import librari yang akan digunakan didalam program

#membuat koneksi ke mongo DB
parser = ArgumentParser()
parser.add_argument("--host", default="mongodb://localhost:27100,localhost:27101,localhost:27102/?replicaSet=txntest&retryWrites=true",
help="MongoDB URI [default: %(default)s]")
parser.add_argument("--usetxns", default=False, action="store_true", help="Use transactions [default: %(default)s]")
parser.add_argument("--delay", default=1.0, type=float,
help="Delay between two insertion events [default: %(default)s]")
parser.add_argument("--iterations", default=0, type=int, help="Run  N iterations. O means run forever")
parser.add_argument("--randdelay", type=float, nargs=2,
help="Create a delay set randomly between the two bounds [default: %(default)s]")
args = parser.parse_args()
Analisa : setelah import library selanjutnya adalah membuat koneksi mongo DB. Terdapat 3 server localhost dengan port 27100, 27101, dan 27101

client = pymongo.MongoClient(host=args.host)
seatsdb = client["SEATSDB"]
paymentsdb = client["PAYMENTSDB"]
auditdb = client[ "AUDITDB"]
payments_collection = paymentsdb["payments"]
seats_collection = seatsdb["seats"]
audit_collection = auditdb["audit"]
Analisa : setelah terkoneksi dengan server selanjutnya mengkoneksikan ke database SEATSDB, PAYMENTSDB, DAN AUDITDB.

x = seats_collection.count()
Analisa : membuat variable x untuk menghitung jumlah dokumen dalam collection seat

audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : membuat update isi database audit

price = random.randrange(200, 500, 10)
Analisa : membuat perintah untuk mengacak isi price

session1 = client.start_session()
Analisa : membuat session 1

session1.start_transaction()
Analisa : memulai session 1

#fungsi insert (one / many)
seats_collection.insert_one({"flight_no":"Anam", "seat":"7A", "date" : datetime.datetime.utcnow()}, session=session1)
payments_collection.insert_one({"flight_no":"Anam", "seat":"7A", "date" : datetime.datetime.utcnow(), "price" : price}, session=session1)
Analisa : melakukan insert seat 7A ke collection seats dan payments dengan menggunakan sesi 1

print ("============================================ ")
print ("DAFTAR SEATSDB SEBELUM COMMIT")
for x in seats_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB SEBELUM COMMIT")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB SEBELUM COMMIT")
for x in audit_collection.find():
  print(x)

print ("============================================ ")
Analisa : menampilkan isi collection seats, payments dan audit sebelum sesi di commit.

#commit / abort sesi
session1.commit_transaction()
Analisa : melakukan commit session1 dan menyimpan hasil transaksi.

x = seats_collection.count()
audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : melakukan update x untuk menghitung jumlah dokumen seats dan melakukan update pada collection audit.

print ("============================================ ")
print ("DAFTAR SEATSDB")
for x in seats_collection.find().sort("seat",1):
  print(x)
  #cara 2 : print ("data : %s" % x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB")
for x in audit_collection.find():
                  print(x)
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi.



B. Program untuk menghapus perubahan data dengan abortTransaction

Sourcecode Program :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)





Hasil Running Program :
Di Windows :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

Di Linux:
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



Analisa Program :
Program diatas berfungsi untuk menambahkan data seat 7A pada collection seats pada database SEATSDB dan collection payments pada database PAYMENTSDB.  Kemudian program menampilkan isi database ketika terjadi transaksi sebelum dicommit. Perbedaan dengan program nomor 1 adalah bahwa pada program nomor 1 transaksi di commit sehingga perubahan tersimpan. Sedangkan pada program 2 ini transaksi tidak di commit sehingga perubahan tidak disimpan. Dapat dilihat database sebelum diabort dan sesudah di abort tidak mengalami perubahan.
#import library yang dibutuhkan
from argparse import ArgumentParser
import datetime
import time
import sys
import random
import pymongo
import pymongo.errors
from pymongo import MongoClient
import urllib.parse
Analisa : pertama adalah import librari yang akan digunakan didalam program

#membuat koneksi ke mongo DB
parser = ArgumentParser()
parser.add_argument("--host", default="mongodb://localhost:27100,localhost:27101,localhost:27102/?replicaSet=txntest&retryWrites=true",
help="MongoDB URI [default: %(default)s]")
parser.add_argument("--usetxns", default=False, action="store_true", help="Use transactions [default: %(default)s]")
parser.add_argument("--delay", default=1.0, type=float,
help="Delay between two insertion events [default: %(default)s]")
parser.add_argument("--iterations", default=0, type=int, help="Run  N iterations. O means run forever")
parser.add_argument("--randdelay", type=float, nargs=2,
help="Create a delay set randomly between the two bounds [default: %(default)s]")
args = parser.parse_args()
Analisa : setelah import library selanjutnya adalah membuat koneksi mongo DB. Terdapat 3 server localhost dengan port 27100, 27101, dan 27101

client = pymongo.MongoClient(host=args.host)
seatsdb = client["SEATSDB"]
paymentsdb = client["PAYMENTSDB"]
auditdb = client[ "AUDITDB"]
payments_collection = paymentsdb["payments"]
seats_collection = seatsdb["seats"]
audit_collection = auditdb["audit"]
Analisa : setelah terkoneksi dengan server selanjutnya mengkoneksikan ke database SEATSDB, PAYMENTSDB, DAN AUDITDB.

x = seats_collection.count()
Analisa : membuat variable x untuk menghitung jumlah dokumen dalam collection seat

audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : membuat update isi database audit

price = random.randrange(200, 500, 10)
Analisa : membuat perintah untuk mengacak isi price

session1 = client.start_session()
Analisa : membuat session 1

session1.start_transaction()
Analisa : memulai session 1

#fungsi insert (one / many)
seats_collection.insert_one({"flight_no":"Anam", "seat":"8A", "date" : datetime.datetime.utcnow()}, session=session1)
payments_collection.insert_one({"flight_no":"Anam", "seat":"8A", "date" : datetime.datetime.utcnow(), "price" : price}, session=session1)
Analisa : melakukan insert seat 8A ke collection seats dan payments dengan menggunakan sesi 1

print ("============================================ ")
print ("DAFTAR SEATSDB SEBELUM COMMIT")
for x in seats_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB SEBELUM COMMIT")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB SEBELUM COMMIT")
for x in audit_collection.find():
  print(x)

print ("============================================ ")
Analisa : menampilkan isi collection seats, payments dan audit sebelum sesi di commit.

#commit / abort sesi
session1.abort_transaction()
Analisa : melakukan abort session1 dan mengagalkan penyimpanan transaksi.

x = seats_collection.count()
audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : melakukan update x untuk menghitung jumlah dokumen seats dan melakukan update pada collection audit.

print ("============================================ ")
print ("DAFTAR SEATSDB")
for x in seats_collection.find().sort("seat",1):
  print(x)
  #cara 2 : print ("data : %s" % x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB")
for x in audit_collection.find():
                  print(x)
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi.



C. Program untuk transaksi tanpa write konflik dapat dilakukan

Sourcecode Program :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




Hasil Running Program :
Di Windows :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



Di Linux:
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)



Analisa Program :
Program diatas berfungsi untuk menambahkan data seat 9A dan seat 10A pada collection seats pada database SEATSDB dan collection payments pada database PAYMENTSDB. Serta mengupdate collection audit sesuai jumlah collection setelah ditambahkan.  Penambahan collection dibagi menjadi 2 sesi yang berjalan bersamaan. Namun tidak ada write conflik diantara keduanya.
#import library yang dibutuhkan
from argparse import ArgumentParser
import datetime
import time
import sys
import random
import pymongo
import pymongo.errors
from pymongo import MongoClient
import urllib.parse
Analisa : pertama adalah import librari yang akan digunakan didalam program

#membuat koneksi ke mongo DB
parser = ArgumentParser()
parser.add_argument("--host", default="mongodb://localhost:27100,localhost:27101,localhost:27102/?replicaSet=txntest&retryWrites=true",
help="MongoDB URI [default: %(default)s]")
parser.add_argument("--usetxns", default=False, action="store_true", help="Use transactions [default: %(default)s]")
parser.add_argument("--delay", default=1.0, type=float,
help="Delay between two insertion events [default: %(default)s]")
parser.add_argument("--iterations", default=0, type=int, help="Run  N iterations. O means run forever")
parser.add_argument("--randdelay", type=float, nargs=2,
help="Create a delay set randomly between the two bounds [default: %(default)s]")
args = parser.parse_args()
Analisa : setelah import library selanjutnya adalah membuat koneksi mongo DB. Terdapat 3 server localhost dengan port 27100, 27101, dan 27101

client = pymongo.MongoClient(host=args.host)
seatsdb = client["SEATSDB"]
paymentsdb = client["PAYMENTSDB"]
auditdb = client[ "AUDITDB"]
payments_collection = paymentsdb["payments"]
seats_collection = seatsdb["seats"]
audit_collection = auditdb["audit"]
Analisa : setelah terkoneksi dengan server selanjutnya mengkoneksikan ke database SEATSDB, PAYMENTSDB, DAN AUDITDB.

x = seats_collection.count()
Analisa : membuat variable x untuk menghitung jumlah dokumen dalam collection seat

audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : membuat update isi database audit

price = random.randrange(200, 500, 10)
Analisa : membuat perintah untuk mengacak isi price

session1 = client.start_session()
session2 = client.start_session()
Analisa : membuat session 1 dan session 2

session1.start_transaction()
session2.start_transaction()
Analisa : memulai transaksi pada session 1 dan session 2

#fungsi insert (one / many)
seats_collection.insert_one({"flight_no":"Anam", "seat":"9A", "date" : datetime.datetime.utcnow()}, session=session1)
payments_collection.insert_one({"flight_no":"Anam", "seat":"9A", "date" : datetime.datetime.utcnow(), "price" : price}, session=session1)
seats_collection.insert_one({"flight_no":"Anam", "seat":"10A", "date" : datetime.datetime.utcnow()}, session=session2)
payments_collection.insert_one({"flight_no":"Anam", "seat":"10A", "date" : datetime.datetime.utcnow(), "price" : price}, session=session2)
Analisa : melakukan insert seat 9A ke collection seats dan payments dengan menggunakan sesi 1 dan melakukan insert seat 10A ke collection seats dan payments dengan menggunakan sesi 2.

print ("============================================ ")
print ("DAFTAR SEATSDB SEBELUM COMMIT")
for x in seats_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB SEBELUM COMMIT")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB SEBELUM COMMIT")
for x in audit_collection.find():
  print(x)

print ("============================================ ")
Analisa : menampilkan isi collection seats, payments dan audit sebelum sesi di commit.

#commit / abort sesi
session1.commit_transaction()
session2.commit_transaction()
Analisa : melakukan commit session1  dan session2 sehingga transaksi menjadi tersimpan.

x = seats_collection.count()
audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : melakukan update x untuk menghitung jumlah dokumen seats dan melakukan update pada collection audit.

print ("============================================ ")
print ("DAFTAR SEATSDB")
for x in seats_collection.find().sort("seat",1):
  print(x)
  #cara 2 : print ("data : %s" % x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB")
for x in audit_collection.find():
                  print(x)
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi.


D.  Program transaksi dengan write konflik dibatalkan

Sourcecode Program :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




Hasil Running Program :
Di Windows :
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


Di Linux:
5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


Analisa Program :
Program diatas berfungsi untuk menghapus data seat 3A pada collection seats pada database SEATSDB dan collection payments pada database PAYMENTSDB. Serta mengupdate collection audit sesuai jumlah collection setelah ditambahkan.  Namun didalam program seat 3 A di hapus 2X pada session yang berbeda sehingga terjadi write conflik dan program mengalami error. Atau dibatalkan.
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi.#import library yang dibutuhkan
from argparse import ArgumentParser
import datetime
import time
import sys
import random
import pymongo
import pymongo.errors
from pymongo import MongoClient
import urllib.parse
Analisa : pertama adalah import librari yang akan digunakan didalam program

#membuat koneksi ke mongo DB
parser = ArgumentParser()
parser.add_argument("--host", default="mongodb://localhost:27100,localhost:27101,localhost:27102/?replicaSet=txntest&retryWrites=true",
help="MongoDB URI [default: %(default)s]")
parser.add_argument("--usetxns", default=False, action="store_true", help="Use transactions [default: %(default)s]")
parser.add_argument("--delay", default=1.0, type=float,
help="Delay between two insertion events [default: %(default)s]")
parser.add_argument("--iterations", default=0, type=int, help="Run  N iterations. O means run forever")
parser.add_argument("--randdelay", type=float, nargs=2,
help="Create a delay set randomly between the two bounds [default: %(default)s]")
args = parser.parse_args()
Analisa : setelah import library selanjutnya adalah membuat koneksi mongo DB. Terdapat 3 server localhost dengan port 27100, 27101, dan 27101

client = pymongo.MongoClient(host=args.host)
seatsdb = client["SEATSDB"]
paymentsdb = client["PAYMENTSDB"]
auditdb = client[ "AUDITDB"]
payments_collection = paymentsdb["payments"]
seats_collection = seatsdb["seats"]
audit_collection = auditdb["audit"]
Analisa : setelah terkoneksi dengan server selanjutnya mengkoneksikan ke database SEATSDB, PAYMENTSDB, DAN AUDITDB.

x = seats_collection.count()
Analisa : membuat variable x untuk menghitung jumlah dokumen dalam collection seat

audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : membuat update isi database audit

price = random.randrange(200, 500, 10)
Analisa : membuat perintah untuk mengacak isi price

session1 = client.start_session()
session2 = client.start_session()
Analisa : membuat session 1 dan session 2

session1.start_transaction()
session2.start_transaction()
Analisa : memulai transaksi pada session 1 dan session 2

seats_collection.delete_many({"seat":"3A"}, session=session1)
payments_collection.delete_one({"seat":"3A"}, session=session1)
seats_collection.delete_many({"seat":"3A"}, session=session2)
payments_collection.delete_one({"seat":"3A"}, session=session2)
Analisa : melakukan delete seat 3A ke collection seats dan payments dengan menggunakan sesi 1 dan melakukan delete seat 3A ke collection seats dan payments dengan menggunakan sesi 2. Terjadi write conflik karena menghapus 1 dokumen sebanyak 2 x.

print ("============================================ ")
print ("DAFTAR SEATSDB SEBELUM COMMIT")
for x in seats_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB SEBELUM COMMIT")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB SEBELUM COMMIT")
for x in audit_collection.find():
  print(x)

print ("============================================ ")
Analisa : menampilkan isi collection seats, payments dan audit sebelum sesi di commit. Dibatalkan otomatis karena terjadi write conflik.

#commit / abort sesi
session1.commit_transaction()
session2.commit_transaction()
Analisa : melakukan commit session1  dan session2 sehingga transaksi menjadi tersimpan. Dibatalkan otomatis karena terjadi write conflik.

x = seats_collection.count()
audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : melakukan update x untuk menghitung jumlah dokumen seats dan melakukan update pada collection audit. Dibatalkan otomatis karena terjadi write conflik.

print ("============================================ ")
print ("DAFTAR SEATSDB")
for x in seats_collection.find().sort("seat",1):
  print(x)
  #cara 2 : print ("data : %s" % x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB")
for x in audit_collection.find():
                  print(x)
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi. Dibatalkan otomatis karena terjadi write conflik.


Perbaikan Soal 3 :
Kasus : Pembatalan Insert Seat jika nomor seats telah ditemukan !.

Sourcecode Program :

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)




Hasil Running Program :
Di Windows :

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)

5 Contoh Program Menggunakan Session di MongoDB Dengan Python (Pymongo)


Analisa Program :
Program diatas berfungsi untuk menambahkan data seat 1A pada collection seats pada database SEATSDB dan collection payments pada database PAYMENTSDB. Serta mengupdate collection audit sesuai jumlah collection setelah ditambahkan. Jika seat 1 A telah ada di database maka transaksi akan dibatalkan (abort_commit) tapi jika seat 1A belum terdapat di database maka seat 1A dapat ditambahkan.
#import library yang dibutuhkan
from argparse import ArgumentParser
import datetime
import time
import sys
import random
import pymongo
import pymongo.errors
from pymongo import MongoClient
import urllib.parse
Analisa : pertama adalah import librari yang akan digunakan didalam program

#membuat koneksi ke mongo DB
parser = ArgumentParser()
parser.add_argument("--host", default="mongodb://localhost:27100,localhost:27101,localhost:27102/?replicaSet=txntest&retryWrites=true",
help="MongoDB URI [default: %(default)s]")
parser.add_argument("--usetxns", default=False, action="store_true", help="Use transactions [default: %(default)s]")
parser.add_argument("--delay", default=1.0, type=float,
help="Delay between two insertion events [default: %(default)s]")
parser.add_argument("--iterations", default=0, type=int, help="Run  N iterations. O means run forever")
parser.add_argument("--randdelay", type=float, nargs=2,
help="Create a delay set randomly between the two bounds [default: %(default)s]")
args = parser.parse_args()
Analisa : setelah import library selanjutnya adalah membuat koneksi mongo DB. Terdapat 3 server localhost dengan port 27100, 27101, dan 27101

client = pymongo.MongoClient(host=args.host)
seatsdb = client["SEATSDB"]
paymentsdb = client["PAYMENTSDB"]
auditdb = client[ "AUDITDB"]
payments_collection = paymentsdb["payments"]
seats_collection = seatsdb["seats"]
audit_collection = auditdb["audit"]
Analisa : setelah terkoneksi dengan server selanjutnya mengkoneksikan ke database SEATSDB, PAYMENTSDB, DAN AUDITDB.

x = seats_collection.count()
Analisa : membuat variable x untuk menghitung jumlah dokumen dalam collection seat

audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : membuat update isi database audit

price = random.randrange(200, 500, 10)
Analisa : membuat perintah untuk mengacak isi price

seatno = "1A"
flightno = "EI178"
Analisa : membuat variabel yang akan menyimpan memuat data seat dan flight yang akan di tambahkan.

session1 = client.start_session()
Analisa : membuat session 1

session1.start_transaction()
Analisa : memulai session 1

#fungsi insert (one / many)
seats_collection.insert_one({"flight_no":" flightno ", "seat":"seatno", "date" : datetime.datetime.utcnow()}, session=session1)
payments_collection.insert_one({"flight_no":" flightno ", "seat":"seatno", "date" : datetime.datetime.utcnow(), "price" : price}, session=session1)
Analisa : melakukan insert nilai variabel seatno dan flightno ke collection seats dan payments dengan menggunakan sesi 1

print ("============================================ ")
print ("DAFTAR SEATSDB SEBELUM COMMIT")
for x in seats_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB SEBELUM COMMIT")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB SEBELUM COMMIT")
for x in audit_collection.find():
  print(x)

print ("============================================ ")
Analisa : menampilkan isi collection seats, payments dan audit sebelum sesi di commit.

#seleksi kondisi jika seat telah ada maka transaksi dibatalkan.
y = seats_collection.count({"seat":seatno, "flight_no":flightno})
if y>0:
 session1.abort_transaction()
 print(" ")
 print ("==============================================================" )
 print ("TRANSAKSI DIBATALKAN KARENA SEAT : ",seatno," SUDAH DIPESAN!!!!" )
 print ("==============================================================" )
 print(" ")
else:
 session1.commit_transaction()
 print(" ")
 print ("==============================================================" )
 print ("SEAT TELAH DITAMBAHKAN" )
 print ("==============================================================" )
 print(" ")
Analisa : seleksi kondisi untuk menentukan apakan transaksi dapat disimpan atau tidak. Dalam contoh hasil program diatas telah terdapat data seat 1 A. Jadi ketika program dijalankan program menghitung jumlah seat 1A dan hasilnya tidaklah 0. Maka transaksi akan dibatalkan.

x = seats_collection.count()
audit_collection.update_one({ "audit" : "seats"}, {"$set":{"count" : x}})
Analisa : melakukan update x untuk menghitung jumlah dokumen seats dan melakukan update pada collection audit.

print ("============================================ ")
print ("DAFTAR SEATSDB")
for x in seats_collection.find().sort("seat",1):
  print(x)
  #cara 2 : print ("data : %s" % x)

print ("============================================ ")
print ("DAFTAR PAYMENTSDB")
for x in payments_collection.find().sort("seat",1):
  print(x)

print ("============================================ ")
print ("DAFTAR AUDITDB")
for x in audit_collection.find():
                  print(x)
Analisa : menampilkan isi collection seats , payments dan audit setelah melakukan transaksi.



Kesimpulan :

• MongoDB mendukung berbagai bahasa pemrograman: RUBY, PYTHON, JAVA, C ++, PHP, C#.
• Pymongo Adalah library yang menjembatani MongoDB dan Python. sehingga perintah-perintah dalam mongoDB dapat di tranlasikan dalam python.
• Di dalam mongoDB dapat dibuat banyak sesi sekaligus. Untuk memulai transaksi harus dimulai dengan start_transaction() dan untuk menyimpan hasil transaksi dapat menggunakan commit_transaction() sedangkang untuk mendiscard hasil transaksi dapat dengan abort_transaction().
• Sesi-sesi yang diciptakan dalam mongoDB dapat melakukan read dan write secara bersamaan tanpa mengganggu satu sama lain.
• Apabila terdapat 2 sesi yang memiliki write konflik. Misal menghapus 1 objek yang sama. Maka transaksi akan otomatis dibatalkan.


Referensi :

• http://api.mongodb.com/python/current/api/pymongo/client_session.html

• http://api.mongodb.com/python/current/api/pymongo/client_session.html#pymongo.client_session.ClientSession.start_transaction

• http://api.mongodb.com/python/current/api/pymongo/client_session.html#pymongo.client_session.TransactionOptions

• http://api.mongodb.com/python/current/api/pymongo/database.html

• http://api.mongodb.com/python/current/api/pymongo/read_concern.html#pymongo.read_concern.ReadConcern

• http://api.mongodb.com/python/current/api/pymongo/write_concern.html

• http://api.mongodb.com/python/current/api/pymongo/write_concern.html#pymongo.write_concern.WriteConcern

• http://api.mongodb.com/python/current/api/pymongo/write_concern.html#pymongo.write_concern.WriteConcern

• http://api.mongodb.com/python/current/tutorial.html#getting-a-database

• http://www.w3big.com/id/mongodb/mongodb-replication.html

• https://askubuntu.com/questions/766131/set-static-ip-ubuntu

• https://docs.mongodb.com/manual/installation/

• https://docs.mongodb.com/manual/reference/read-concern/#read-concern-levels

• https://docs.mongodb.com/manual/reference/write-concern/

• https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

• https://docs.mongodb.com/master/core/transactions/?_ga=2.5877171.1029531569.1543461561-206042806.1536800450

• https://dzone.com/articles/mongodb-transactions-your-very-first-transaction-w

• https://dzone.com/articles/multi-document-transactions-on-mongodb-40

• https://github.com/jdrumgoole/pymongo-transactions

• https://linuxize.com/post/how-to-install-pip-on-ubuntu-18.04/

• https://programwithus.com/learn-to-code/Pip-and-virtualenv-on-Windows/

• https://servernesia.com/2977/cara-install-python-linux/

• https://solarianprogrammer.com/2017/06/30/building-python-ubuntu-wsl-debian/

• https://stackoverflow.com/questions/45072617/default-values-of-path-variables-in-windows-10

• https://stackoverflow.com/questions/51705212/how-to-get-a-database-and-collection-from-mongodb-clientsession

• https://www.mongodb.com/blog/post/introduction-to-mongodb-transactions-in-python

• https://www.mongodb.com/transactions

• https://www.petanikode.com/python-list/

• https://www.tecmint.com/command-line-web-browsers/