Kelompok Advanced Enterprise Java Bean I Chapter 10 dan 11 Anthony Steven Anwar Chandra Edwin Richardo Hendrik GandaWijaya Johanes Yanuar Widjaja
Masalah Suatu program yang menangani banyak operasi yang terpisah namun saling terkait sering kali menghadapi banyak kendala. Kendala – kendala yang muncul itu tidak jarang susah untuk diatasi jika makanisme penanganan kesalahan dilakukan hanya secara umum
Solusi T R A N S A C T I O N Transaction adalah seri operasi yang dijalankan sebagai satu kesatuan yang besar namun memiliki atomic operation.Dengan transaction, konsep all-or-nothing dapat terjamin.
Jaminan Transaction Atomicity. Consistency. Isolation. Durability.
Jenis Transaction (1) Flat Transaction. Flat transaction adalah suatu model transaction yang paling sederhana. Flat transaction adalah suatu adalah suatu seri operasi yang dibentuk secara unti atomik yang merupakan suatu untuk kerja sendiri.
Jenis Transaction (2) Nasted Transaction. Nasted Transaction adalah suatu konsep transaction yang memperbolehkan pemrogram untuk menaruh/menambahkan suatu unit atomic ke unit atomic lainnya.
Contained-managed Transactions Transaction Attributes The Different Between Transaction and Messages driven beans
EJB Transactions Attribute Values Required RequiresNew Supports Mandatory Not Supported Never
Programmatic Transactions in EJB CORBA’s Object Transactions Services (OTS) Java Transaction Service (JTS) Java Transaction API (JTA)
Transactional Isolation Isolation merupakan suatu cara untuk menjamin agar concurrent user ‘terisolasi’ walaupun mereka mengakses database yang sama. Caranya adalah dengan ‘locking’. Maksudnya adalah akses ke suatu database hanya bisa dilakukan oleh satu transaksi saja. Transaksi berikutnya harus menunggu setelah lock dilepas. EXAMPLE?? Isolation tersebut dapat kita atur sesuai kebutuhan kita. Inilah yang dinamakan concurrency control.
Jenis Transactional Isolation READ UNCOMMITTED mode tidak memberikan jaminan isolasi apapun(paling cepat) READ COMMITTED mode Menyelesaikan dirty read problem REPEATABLE READ mode Menyelesaikan masalah sebelumnya sekaligus unrepeatable read problem SERIALIZABLE Menyelesaikan masalah sebelumnya sekaligus phantom problem EXAMPLE??
Beberapa istilah Dirty read problem terjadi apabila aplikasi kita membaca data dari database yang belum dicommit. Unrepeatable read problem terjadi apabila ketika suatu aplikasi read data di database, namun sewaktu ingin reread data tersebut, data tersebut telah berubah. Phantom problem Kumpulan data baru yang tiba-tiba muncul di database di antara 2 operasi read database. EXAMPLE??
Tabel perbandingan transactional isolation Isolation level Dirty reads Unrepeatable reads Phantom read Read Uncommitted Yes Read Committed No Repeatable read Serializable
Jenis Concurrency Control Pessimistic concurrency control Suatu algoritma di mana kita berasumsi bahwa ketika kita menggunakan lock dalam transaksi maka tidak akan ada orang lain yang mengakses data tersebut sebelum locknya dilepas Optimistic concurrency control Kita berasumsi bahwa everything is OK sehingga tidak diperlukan lock. Keuntungan VS Kerugian???
Distributed Transaction Distributed transaction merupakan transaksi yang dilakukan oleh berbagai partisipan transaksi. Flat transaction yang paling dasar bisa dilakukan dengan mengakaitkan 1 server aplikasi dengan 1 database. Distributed flat transaction memiliki sifat yang sama dengan flat transaction yaitu 1 komponen dalam 1 transaksi membatalkan transaksi, maka semua transaksi batal. Namun, perbedaannya adalah distributed flat transaction memungkinkan berbagai partisipan transaksi untuk bekerja sama dalam 1 transaksi.
Durability and two-phase commit protocol Durability menjamin semua resource updates yang dicommit dibuat permanen. Salah satu cara menjamin durability adalah dengan mendaftarkan semua operasi di database sebelum dilakukan, sehingga apabila terjadi crash, data bisa direcover. Untuk melakukannya transaksi melewati 2 fase: 1. Mengirim before commit message ke semua resources yang terlibat dalam transaksi. 2. Semua resources manager mengupdate data yang sebenarnya.(hanya terjadi apabila no1 dilakukan tanpa ada abort). Inilah yang dinamakan two phase commit protocol(2PC).
Transactional communication Merupakan mekanisme komunikasi yang harus disetujui transaction managers di dalam menjalankan 2PC. Transaction context merupakan object yang menampung informasi tentang system’s current transactional state. Designing conversation conversation Method afterBegin() Method beforeCompletion() Method afterCompletion(boolean) Kapan method tersebut dipakai???
Cardinality One-to-One relationship One-to-Many relationship Many-to-Many relationship
One-to-one relationship Definisi Contoh-contoh orderPK OrderName ShipmentforeignPK 12345 Software order 10101 ShipmentPK City ZipCode 10101 Austin 23423
Implementasi berdasarkan BMP EJB load method EJB store method Implementasi berdasarkan CMP EJB load Ejb store
1:Many relationship Implementasi BMP EjbLoad and EjbStore companyPK Name 12345 Middleware company employeePK Name Sex Company 20202 ED M 12345 20203 Floyd Implementasi BMP EjbLoad and EjbStore Implementasi CMP
Many-to-many relationship Fake M:N relationship True M:N relationship StudentPK StudentName 10101 JoeStudent EnrollmentPK StudentPK CoursePK 12345 10101 20202 CoursePK CourseName 20202 EJB
Implementasi dengan BMP Implementasi dengan CMP Directionality Implementasi dengan BMP Implementasi dengan CMP
Implementasi dengan BMP // implementasi bidirectional public class BeanPermintaan implements EntityBean{ private String permintaanPK; private String namaPermintaan; /* perhatikan kode dibawah ini, object penawaran yang harus dikirim/diload */ private Penawaran penawaran; public Penawaran getPenawaran(){return penawaran;} public void setPenawaran(Penawaran p){this.penawaran = p;} ………… } public class BeanPenawaran implements EntiyBean{ private String penawaranPK; private String namaPenawaran; /* perhatikan kode dibawah ini, object yang harus dikirim/diload*/ private Permintaan permintaan; public Permintaan getPermintaan(){return permintaan;} public void setPermintaan(Permintaan p){this.permintaan = p;}
Implementasi dengan BMP // implementasi bidirectional public class BeanPermintaan implements EntityBean{ private String permintaanPK; private String namaPermintaan; /* perhatikan kode dibawah ini, object penawaran yang harus dikirim/diload */ private Penawaran penawaran; public Penawaran getPenawaran(){return penawaran;} public void setPenawaran(Penawaran p){this.penawaran = p;} ………… } public class BeanPenawaran implements EntiyBean{ private String penawaranPK; private String namaPenawaran; /* perhatikan kode dibawah ini, object yang harus dikirim/diload*/ private Permintaan permintaan; public Permintaan getPermintaan(){return permintaan;} public void setPermintaan(Permintaan p){this.permintaan = p;}
Implementasi dengan BMP(2) // Implementasi dengan unidirectional public class BeanPermintaan implements EntiyBean{ private String permintaanPK; private String namaPermintaan; // perhatikan kode dibawah ini, object yang harus dikirim/diload private Penawaran penawaran; public Penawaran getPenawaran(){return penawaran;} public void setPenawaran(Penawaran p){this.penawaran = p;} ………… } public class BeanPenawaran implements EntiyBean{ private String penawaranPK; private String namaPenawaran; // tidak ada penanda, method set/get dari permintaan disini ???
Implementasi dengan CMP // implementasi bidirectional public abstract class BeanPermintaan implements EntityBean{ // no field public abstract Penawaran getPenawaran(); public abstract void setPenawaran(Penawaran p); ……… public void ejbLoad(){}; // kosong public void ejbStore(){}; // kosong } public abstract class BeanPenawaran implements EntityBean{ public abstract Permintaan getPermintaan(); public abstract void setPermintaan (Permintaan p);
Two Kinds Of Entity Beans Loading : Aggressive Loading Load all the other entity beans that has a relationship with the one that is being loaded. Lazy Loading Load the only related beans when we need to access those beans
Coding Example : (Lazy Loading) public class OrderBean implements EntityBean{ private String orderPK; private String orderName; private String shipmentFK; // Foreign Key to Shipment private Shipment shipment; // EJB Local Object Stub public void ejbLoad(){ //1. SQL SELECT order, loading the shipment foreign key //2. Set shipmentFK field to the loaded key. }
public shipment getShipment(){ // 1. JDNI lookup of Shipment Beans // 2. Call ShipmentHome.findPrimaryKey(shipmentFK) return shipment; } // do something
Two Kinds of Relationships Within Two Entity Beans : Aggregation a Uses Relationship. e.g: Student “Uses” courses, if the courses are deleted…. the student didn’t dead also! Composition a is-assembled-of Relationship. e.g: Orders are assembled of line items. Deleting an order deletes all line items.
Relationships and EJB-QL When setting up CMP relationships, we can also set up special queries using the EJB Query Language (EJB-QL) In this EJB-QL, we returning all customers that have placed orders. We are navigating from the order entity bean to the customer entity bean easily using a dot notation. Therefore, a bean provider don’t need to know about table or columns! They merely need to understand the relationships between the entity beans they’ve authored.
Recursive Relationship Recursive Relationship is one in which an entity bean instance has a relationship with another instance of the same entity bean class.
Circular Relationship Circular Relationship is similar to recursive relationship except that it involves several entity beans (not just a single entity).
Referential Integrity Referential Integrity is the assurance that a reference from one entity to another entity is valid. e.g : Let’s say a company, department, and position each have a relationships with an employee. If the employee removed, all references to it must also be removed, or your system must not allow the removal
Relationships, Referential Integrity, and Client Code There are many fascinating relationships that also involves collection. In a code that the container is responsible for providing an implementation of the Collection interface, a smart collection that understands how to preserve referential integrity behind the scenes is needed.