Monday, June 20, 2005

Oracle Toplink

Toplink adalah framework untuk mapping data dari Relational DB ke dalam Objek Java. Fungsinya hampir sama dengan tool ORM (Object/Relational Mapping) yang sering dipake saat ini seperti Hibernate dan iBATIS, dan hampir sama pula dengan standard spesifikasi dari Java yaitu JDO (Java Data Objects). Cuman perbedaannya sih hanya dalam algoritma implementasinya. Pada saat ini versi yang dipake adalah Toplink 10.1.3.

Menurut dari arsitekturnya, Toplink ini bisa dipake didalam DBMS yang berbeda, Application Server yang berbeda, dan arsitektur J2EE yang berbeda. Hmm ... jadinya bisa di sebut multi-??? ;p. Pada intinya Toplink akan support jika arsitektur yang dipake juga support JDBC karena Toplink akan menggunakannya. Dengan menggunakan Toplink maka objek dari RDBMS (Relational Database Management System) akan bisa dibaca di Java seperti Java Bean yang dalam hal ini disebut model. Jadinya nantinya kita akan bermain-main dengan setter/getter dari objek bean. Mengapa bisa terjadi ? karena Toplink punya file mapping , berupa xml, yang akan mendefinisikan konversi antara DB type dengan Java type. Toplink juga mendukung adanya constraint foreign key dengan cara merepresentasikan sebagai reference object dalam objek Java. Hmm... tapi kayaknya ga bakalan dipake klo RDBMS-nya pake MySQL (itu pun klo bisa pake Toplink) karena setauku di MySQL ga ada yang namanya foreign key :(.

Di project yang sedang aku kerjakan, aku juga pake Toplink. Tapi sayang kita cuman dikasih layer lagi berisi method2 buatan programmer Toplink untuk mengakses objek2 yang dihasilkan Toplink agar penggunaan sintaknya seragam. Meskipun begitu aku masih bica baca dari code2nya :D. Intinya didalam Toplink, session itu dimasukkan ke dalam Unit of Work, jadi paling hati2 klo main sessionnya. Misal jika session modenya Non transaction ya jangan coba2 untuk mengupdate data, trus jangan sampe dalam 1 method membikin dua session transaction karena session terakhir yang akan dipake untuk mengupdate data. Karena Toplink menyimpan perubahan dalam cache, nah setelah method selesai dikerjakan maka baru di commit, jadinya session yang sama akan tertindih dengan yang paling akhir. Dan itu merupakan kejadian paling menyusahkan ketika project memasuki phase integration :D, karena harus cross check dengan module lain. O ya klo pengen tau lebih detil coba kunjungi Oracle TopLink.
Selamat belajar dan mencoba :D.

Friday, June 17, 2005

JSPs (Java Stored Procedures )

Jangan lupa dengan huruf s kecil dibelakang, soalnya ntar keliru sama JSP (Java Server Page) meskipun masih kerabat keluarga Java :p. Apa itu JSPs ? store procedures yang memakai bahasa Java, mungkin bagi kita selama ini terbisa dengan penggunaan PL/SQL, JSPs bisa dijadikan alternatif untuk bahasa codingnya. JSPs ini didukung oracle mulai versi 8.1 , karena disitu ada JServer yang merupakan JVM dalam DBMS. Jadinya sekarang apa yang akan kita pake JSPs ato PL/SQL ? menurut pakarnya sih keduanya bisa dipake dengan disesuaikan kebutuhan. Misal jika program kita memang cuman berurusan dengan DB Object dan SQL maka kita lebih mengedepankan PL/SQL, nah klo berhubungan dengan SQL,XML, J2EE dan Web Services maka pakailah JSPs.

Gimana caranya ? Ada beberapa langkah utama yang harus dilakukan, aku coba testnya pake TOAD wizard :D, klo mau pake command line bisa merujuk pada referensi yang aku sertakan dibawah. Pertama yang harus dibikin adalah Java code, perlu diperhatikan dalam pemilihan type indentifiernya, karena ini nantinya akan diconvert ke type yang didukung oleh Oracle, Data Access and Manipulation: Oracle Types vs. Java Types. Kmu bisa bikin codenya pake notepad ato pake Java IDE seperti JBuilder, IDEA, eclipse dsb.

Yang kedua adalah melakukan load objek java kedalam DBMS, kmu bisa menggunakan loadjava tool command line ato pake DDL CREATE JAVA. Maksud disini adalah memasukkan objek java ke dalam DBMS agar nantinya bisa dipanggil lewat JVM DBMS. O ya klo di TOAD pake Java Manager :D. Setelah objek java ke load ke DBMS, langkah berikutnya adalah melakukan publish dari class java tersebut. Gunanya publish ini adalah untuk membuat wrapper PL/SQL yang digunakan untuk memanggil objek Java. Disini bisa dibuatkan package bisa juga tidak. Di dalam PL/SQL yang dihasilkan kmu dapat menambahkan implementasi method2 yang selalu ada pada objek java seperti : getClass, hashCode, toString, wait, notify dll. Nah PL/SQL inilah nantinya yang akan dipanggil oleh procedure PL/SQL yang lain.

Jika perlu memberikan privilege maka berikan kepada user2 tertentu saja yang boleh execute. Udah deh harusnya tinggal panggil aja dan cek hasilnya, klo masih belum berhasil coba baca step by step di bawah ini. Semoga bermanfaat :p.

Calling Java from PL/SQL
Simplify with Java Stored Procedures

Wednesday, June 15, 2005

PL/SQL , Using "Case"

Kemarin temen aku ada yang punya problem, misal dia punya table yang namanya TABLE_1 yang didalamnya ada 3 field yaitu A, B, dan C dengan isi terserah.
Table_1
A B C
--------------------------

Kemudian dia pengen melakukan select query untuk field A dan B dengan aturan :
1. Jika nilai B tidak sama dengan NULL maka isi B dengan '1'
2. Jika nilai B sama dengan NULL dan nilai C sama dengan NULL maka isi B dengan '2'
3. Selain itu isi B dengan '3'

Permasalahannya dia bingung bagaimana sintaknya yah ? :D
Klo menurutku sih kita bisa menggunakan sintaks CASE pada saat select query seperti di bawah ini :
SELECT T1.A,
(
CASE WHEN T1.B IS NOT NULL
THEN '1'
WHEN T1.B IS NULL
AND T1.C IS NULL
THEN '2'
ELSE
'3'
END
) B
FROM TABLE_1 T1
Dan seharusnya sih berhasil , soalnya aku udah coba dan jalan. Selamat mencoba :))