Berkenalan dengan SOA (Service Oriented Architecture)

Posted by: on Nov 18, 2011 | One Comment

Sebagian dari teks ini saya tulis berdasarkan presentasi saya ke manajemen departemen ICT di pabrik yang dilanjutkan dengan workshop singkat kepada teman-teman satu tim di acara Sharing Session, 17 November 2011.

Saya sudah cukup lama meng-eksplorasi ranah teknologi SOA, mungkin sejak artikel XML-RPC ini, tetapi baru akhir-akhir ini saya mendapatkan kesempatan untuk mempraktikkannya di dunia persilatan. Pabrik tempat saya bekerja telah mengakuisisi lisensi Oracle Fusion SOA Suite Middleware dan mencoba mengimplementasikannya dengan proses bisnis yang sudah ada.

Jadi, SOA bukanlah sebuah produk. SOA adalah sebuah pendekatan, atau cara berpikir, dalam melihat sebuah sistem. “Sistem” dalam hal ini tidak melulu teknologi, tetapi juga bisa tentang proses bisnis, organisasi, dll. SOA melihat sistem yang saling berinteraksi dan berkolaborasi dalam menyediakan dan menggunakan “service” (layanan). Untuk memenuhi hal itu, SOA harus memenuhi syarat-syarat: loosely coupled (independen), menggunakan protokol standar yang telah disepakati, dan cross-platform (lintas platform — sistem operasi, bahasa pemrograman, lintas organisasi, bahkan hingga lintas budaya). SOA hanya fokus pada layanan apa yang tersedia, bagaimana cara menggunakannya, dan bagaimana layanan itu bisa bermanfaat. Apa yang ada di balik layanan itu, SOA tidak perlu ambil pusing.

Kita memakai jasa pesawat, dalam dunia SOA, kita sudah bisa disebut sebagai service consumer dimana penyedia layanan pesawat disebut sebagai service producer. Yang kita perlu tahu adalah bagaimana cara memesan tiket, check-in ketika sampai di bandara, dan memasuki ruang boarding untuk masuk pesawat. Padahal, di balik layanan pesawat, ada puluhan atau bahkan ratusan service-service yang saling terhubung untuk dapat menyediakan layanan ini.

Amazon.com, bisa dikatakan adalah perusahaan besar yang hanya bermodal dengkul, eh, merangkai banyak service. Amazon.com tidak melakukan semuanya sendiri, tetapi dikerjakan oleh pihak lain. Toko buku, gudang, payment gateway, layanan kargo, dll. Banyak layanan itu dirangkai (istilah SOA-nya di-orchestrate) menjadi satu kesatuan service yang bisa kita nikmati.

Web Service dan Oracle SOA Suite Middleware

Implementasi SOA dalam ranah teknologi informasi mendasarkan diri pada XML sebagai standar. Dan yang umum dipakai sebagai ujung tombak komunikasi (end point) adalah Web Service. Ada dua madzab besar implementasi web service, yaitu SOAP dan RESTful. SOAP adalah sebuah protokol khusus web service yang berjalan di atas protokol HTTP. SOAP menyediakan banyak spesifikasi standar yang bisa digunakan dalam komunikasi antar web service. Sedangkan RESTful sifatnya lebih lightweight. Ia adalah webservice yang bisa diakses melalui protokol HTTP biasa — jadi operasinya murni melalui manipulasi URL.

Oracle SOA Suite Middleware adalah produk implementasi SOA keluaran Oracle. Barang aslinya adalah Aqualogic milik BEA. Karena BEA diakuisisi Oracle, maka Aqualogic menjadi roh dari Oracle SOA Middleware ini.Di dunia open source, kita mungkin mengenal Glashfish ESB yang juga merupakan salah satu implementasi dari SOA.

Ini adalah paket lengkap yang lebih dari cukup untuk mengimplementasikan pendekatan SOA di bidang IT. Dia menyediakan banyak adapter ke berbagai macam aplikasi seperti Database Adapter, Oracle EBS Adapter, Spring Context Adapter dll. Ia juga mendukung penuh fitur messaging (event-based service — lihat spesifikasi Java Messaging Service). Dan tentu saja, ia menyediakan fitur BPEL (Business Process Execution Language) sebagai bahasa dasar untuk merangkai dan meng-orchestrate banyak service untuk menjadi sebuah composite application. Fitur menarik lainnya adalah Oracle Service Bus (produk enterprise service bus-nya Oracle) yang digunakan untuk service virtualization, dan Oracle BAM (Business Activity Monitoring) untuk kebutuhan monitoring dan reporting. Semua itu dibundel dalam kardus yang harga lisensinya sangat mahal (sekitar USD 200 ribu).

Buat saya sebuah kehormatan bisa mencoba dan mempelajari “Ferrari” ini. Demikian. Mohon maaf saya tidak bisa men-share bahan presentasi karena ada banyak materialnya yang sangat spesifik tentang sistem di pabrik tempat saya bekerja ini.

The New Experience of Coding

Posted by: on Oct 28, 2011 | 6 Comments

Saya menemukan passion di pemrograman komputer beberapa bulan setelah saya menjalani perkuliahan di Teknik Informatika ITS, hampir sepuluh tahun yang lalu. Ketika mencari-cari bahasa yang akan dijadikan spesialisasi, saya menemukan sebuah quote dari majalah Oracle, “… because we believe in Java.” Sejak itu saya menyadari bahwa Java akan menjadi bahasa masa depan.

Sampai sekarang saya masih bekerja sebagai programmer (yg banyak orang bilang ini adalah jenjang karier terendah di dunia IT), meskipun sekarang lebih banyak analisis data. Saya ditugaskan di bagian ini setelah dua tahun mengotak-atik aplikasi Java Enterprise. Hal itu kadang-kadang menimbulkan kerinduan, sehingga kadang-kadang saya membuka kode Spring, Struts, dan Hibernate untuk membuat sebuah aplikasi kecil yang memakai PHP pun sebenarnya bisa.

Lha, awal bulan ini, atasan saya mengembalikan saya ke sisi programming lagi disamping tanggung jawab saya untuk analisa data sebuah sistem ERP untuk manajemen aset. Sebuah pengalaman baru bagi saya, yaitu bahasa deklaratif untuk arsitektur berorientasi pelayanan (halah… Service Oriented Architecture – SOA). Mendalami alur-alur proses dalam bahasa BPEL (Business Process Execution Language), mediator, web service, database adapter, dll.

Passion itu saya temukan lagi. Sudah lama saya tidak mengalami gairah yang meluap-luap, sebegitu penasarannya ketika web service saya tidak berjalan. Berusaha menemukan pintu ketika menabrak tembok, bukan malah membentur-benturkan kepala berharap temboknya jebol. Programming itu sebuah seni, karena dibutuhkan imajinasi dan kreativitas ketika membangunnya.

Seperti halnya dulu, saya rasa, SOA adalah arsitektur masa depan. Dan lagi-lagi Oracle yang membuat saya berpikir begitu. Oh iya, saya memakai Oracle SOA Suite 11g, yang merupakan bagian dari Oracle Fusion Middleware. Mungkin kapan-kapan saya akan ceritakan lebih detail tentang produk ini nanti.

Update Data Tabel dari Data di Tabel Lain

Posted by: on Jan 3, 2011 | 6 Comments

Ini adalah satu skill dasar tapi sering dilupakan dalam melakukan query database DML (Data Manipulation Language). Bagaimana cara melakukan update kolom sebuah tabel (katakanlah tabel baru) yang nilainya ada pada kolom di tabel lain (misalnya tabel lama)? Pada database Oracle, tentu saja.

Yang jelas, kita harus melakukan inner join pada dua tabel tersebut seperti halnya kalau kita melakukan query SELECT pada dua tabel master detail. Misalnya, kita akan mengupdate kolom satu, dua, dan tiga. Maka sintaksnya akan seperti begini:

UPDATE TABLE baru b SET (satu, dua, tiga) =
(SELECT satu, dua, tiga FROM lama b
WHERE b.primarykey1 = a.primarykey2 AND b.key2 = a.key2)
WHERE EXISTS
( SELECT 1 FROM lama b
WHERE b.primarykey1 = a.primarykey2 AND b.key2 = a.key2)

Pada klausa SET, kita melakukan query SELECT ke tabel lama dengan melakukan inner join tabel baru dengan penghubung kolom-kolom primary key-nya dan filter-filter kondisi yang diinginkan. Ini untuk mendapatkan nilai kolom satu, dua, dan tiga.

Namun ada satu hal lagi yang harus kita lakukan. Kita juga harus memfilter statement UPDATE dengan kondisi yang sama pada klausa SET. Hal itu dilakukan dengan menggunakan klausa EXISTS hanya sekadar untuk memeriksa ada atau tidaknya row yang bersangkutan pada tabel yang dijoin.

Basic skill, tapi saya sering lupa. Makanya saya tulis di sini, he he he…

Manipulasi Variabel PL/SQL pada Oracle Heterogeneous System

Posted by: on Jun 26, 2008 | 6 Comments

Oracle Heterogeneous System. Saya singkat Oracle HS biar enak nulisnya. Apa itu? Oracle HS adalah sistem yang memungkinkan untuk melakukan manipulasi database lain di luar sistem databse yang sedang dihubungi. Sistem lain itu bisa merupakan database Oracle, atau database non-Oracle, misalnya SQL Server atau bahkan MySQL.

Dengan pengaturan sistem Oracle HS ini, kita bisa melakukan query SQL pada database lain tersebut pada session Oracle kita. Misalnya kita ingin fetch data pada suatu tabel di database lain, maka query-nya akan menjadi semacam ini:

SELECT * FROM rfq@hsmsql

Ada penambahan @hsmsql yang menunjukkan database link Oracle HS yang telah di set-up sebelumnya (setup Oracle HS tidak dibahas pada posting ini).

Nah, masalah terjadi ketika Oracle HS digunakan di dalam script PL/SQL. Oracle HS tidak bisa membaca maupun mengisi variabel-variabel PL/SQL. Perhatikan query-query PL/SQL berikut ini:

SELECT Count( * ) INTO v_count FROM rfq@hsmsql

SELECT * FROM rfq@hsmsql WHERE rfqnum = v_rfqnum

Di query biasa tanpa Oracle HS, query di atas bisa berjalan dengan baik. v_count akan berisi jumlah row yang didapat dari tabel rfq, sedangkan query kedua akan terfilter khusus untuk baris yang memiliki rfqnum sama dengan v_rfqnum. Tapi di Oracle HS tidak. Oracle HS tidak dapat memasukkan jumlah Count( * ) ke dalam variabel v_count dan tidak dapat memfilter record rfqnum dengan isi variabel  v_rfqnum.

Solusinya, kita bisa menggunakan mekanisme yang dinamakan Passthrough-SQL. Ada package built-in dari Oracle yang bernama DBMS_HS_PASSTHROUGH yang khusus digunakan untuk mendapatkan data dan/atau sebaliknya dari/ke Oracle HS. Berikut ini adalah cara untuk mendapatkan hasil dari Oracle HS dan disimpan pada variabel PL/SQL

con := DBMS_HS_PASSTHROUGH.open_cursor@hsmsql.world;

DBMS_HS_PASSTHROUGH.parse@hsmsql.world (con,

‘SELECT COUNT( * ) FROM rfq_mxm
WHERE rfqnum = ”’
|| vrfq.rfqnum
|| ””
);

rs := DBMS_HS_PASSTHROUGH.fetch_row@hsmsql.world (con);

DBMS_HS_PASSTHROUGH.get_value@hsmsql.world (con, 1, vcount);

DBMS_OUTPUT.put_line (‘count: ‘ || vcount);

Jika kode di atas dijelaskan secara konseptual, maka langkah-langkahnya adalah sebagai berikut:

  1. Buka kursor HS (pengertian kursor di sini berbeda dengan pengertian PL/SQL cursor)
  2. Query dengan fungsi parse
  3. Tarik hasil setiap baris dan masukkan ke dalam variabel PL/SQL dengan fungsi get_value

Memang jauh lebih rumit, tetapi inilah cara yang paling aman untuk memanipulasi variabel-variabel PL/SQL dengan sistem heterogeneous (Oracle HS).

Artikel terkait:

SQL Tuning: Klausa EXISTS versus IN

Posted by: on Dec 17, 2007 | 10 Comments

Masih mengenai masalah performance tuning pada Oracle SQL Query. Dalam kasus correlated subquery, kita biasa menggunakan IN dan NOT IN. Misalnya

SELECT * FROM tabel1 a
WHERE a.kolom1 NOT IN
( SELECT b.kolom1 FROM tabel2 b)

Dalam kasus yang sama, kita juga bisa menggunakan klausa EXISTS dan NOT EXISTS. Misalnya

SELECT * FROM tabel1 a
WHERE a.kolom1 NOT EXISTS
( SELECT b.kolom1 FROM tabel2 b)

Apa beda dua statement SQL ini? Klausa IN dan NOT IN memeriksa apakah sebuah nilai terdapat dalam list (bisa array, bisa correlated subquery seperti contoh di atas) sedangkan klausa EXISTS dan NOT EXISTS hanya memeriksa keberadaan ada atau tidaknya row pada suatu list. Secara performance, tentu jauh lebih cepat EXISTS daripada IN dalam hal correlated subquery.

Kapan kita menggunakan IN? Sebisa mungkin, gunakan EXISTS, IN digunakan dalam hal seperti misalnya contoh di bawah ini:

SELECT * FROM tabel1 a
WHERE a.kolom1 IN (’1′, ’2′, ’3′)

SQL Tuning: Fungsi String di Klausa WHERE

Posted by: on Dec 11, 2007 | 3 Comments

Ini adalah Oracle SQL Performance Tuning tips and trick dari Mas FF. Katakanlah kita punya SQL seperti ini,

SELECT *
FROM tabel t
WHERE LOWER(t.kol)
LIKE ‘%hehe%’ AND SUBSTR(t.kol2,2,4) = ‘AB’

Terlihat familiar? Ini memang query standar kok. Tapi apakah Anda tahu implikasi fungsi LOWER dan SUBSTR di masalah kecepatan? Ternyata proses LOWER dan SUBSTR adalah me-lower-case-kan seluruh baris di kolom t.kol tersebut dan men-substring-kan seluruh baris di kolom t.kol2 sebelum membandingkannya dengan hehe dan AB. Jika jumlah barisnya terlalu banyak, tentu saja akan terjadi degradasi kecepatan yang sangat berarti (baca: signifikan).

Solusi: Gunakan fungsi-fungsi semacam LOWER dan SUBSTR secara bijak. Jika sudah yakin suatu kolom dalam lowercase, maka input sebelah kanan (dalam hal ini hehe) harus diubah ke lowercase juga. Demikian pula untuk fungsi SUBSTR.

Demikian tips dan trik singkat SQL Tuning.

Administrasi Oracle Container 4 J2EE

Posted by: on Feb 23, 2007 | 10 Comments

Oracle memiliki application server yang handal bernama Oracle Application Server yang sebenarnya roh di dalamnya adalah Orion Application Server. OAS merupakan application server yang lengkap dan kokoh, mendukung servlet hingga webservice. OAS sendiri merupakan produk komersial yang mahal, namun servlet containernya yang populer disebut Oracle Container for J2EE (OC4J) didistribusikan dengan free.

Nah, kali ini aku berhasil menyusun dokumentasi semacam “getting started” yang membahas bagaimana melakukan administrasi awal OC4J. Versi mayor OC4J yang kubahas adalah versi 10.1.2.x, kompatibel dengan spesifikasi J2EE 1.3, meskipun versi mayor terbaru adalah 10.1.3.x yang kompatibel dengan J2EE 1.4. Sebabnya adalah adanya bug yang sangat menjengkelkan pada OC4J 10.1.3 sehingga membuat aplikasi gabungan maut webwork+hibernate+spring menjadi tidak berjalan semestinya.

File-nya dapat didownload di link di bawah ini, maaf menggunakan format Microsoft Word karena tidak punya Adobe PDF creator. Terima kasih untuk Mas Aby yang mengkoreksi dokumentasi ini.

Silakan, ini lho link-nyah!!

Switch to our mobile site