Monday, October 8, 2012

ADF - Table Pagination

Sebelum kita membahas Pagination di ADF, mari kita pahami dulu Pagination.

Apa sih Pagination itu ?
Pagination berasal dari kata page, yang artinya halaman. Jadi pagination adalah proses pembacaan data per-halaman atau per-bagian. Banyak sekali contoh pagination, salah satunya adalah aplikasi instagram. Dimana saat aplikasi tersebut di jalankan, instagram hanya menampilkan beberapa bagian data terbaru saja. Bukan semua data yang di tampilkan dalam gadget kita.

Kenapa harus menggunakan Pagination ?
Pagination digunakan saat proses pengambilan data yang besar (biasanya ratusan ribu atau jutaan data). Tidaklah bijak jika kita mengambil data dari database secara keseluruhan, bukan bagian per bagian. Dengan adanya pagination kita bisa mengefektifkan penggunaan memori dan tentunya data yang ditampilkan lebih cepat.

Lalu, apa yang bisa dilakukan oleh ADF ?
Seperti yang kita tahu, ADF adalah framework yang begitu mudah digunakan. Banyak sekali wizard yang disediakan di JDeveloper, untuk mempercepat kita dalam proses pembuatan aplikasi. Pagination pada ADF juga sangat mudah, cukup optimalisasi pada VO (View Object).

Bagaimana caranya ?
Sebelum kita membahas lebih lanjut, disini kita hanya menggunakan komponen ADF Table yang akan di tampilkan dalam bentuk Web. Kenapa table, karena pagination biasanya digunakan pada table.
Tanpa banyak membuang waktu, mari kita coba cara pembuatan pagination di ADF. Untuk itu ada beberapa hal yang harus kita lakukan, yaitu :
  1. Membuat aplikasi ADF dengan menggunakan JDeveloper. Pada bagian Model kita menggunakan EO (Entity Object) dan VO (View Object) yang terkoneksi ke database. Sedangkan di bagian ViewController kita menggunakan JSF Page dengan komponen ADF Table. Untuk langkah-langkah pembuatan aplikasi tersebut, nantikan blog saya selanjutnya, yaitu Step by step - ADF Pagination.
  2. Setelah aplikasi selesai dibuat, klik VO yang digunakan pada ADF Table.
  3. Pada bagian Tuning, ubah Access Mode menjadi Range Paging.
  4. Nilai yang kita isikan pada bagian range size sesuai dengan range size yang dipakai di iterator.
View Object
View Object

Setelah melakukan perubahan tersebut, aplikasi siap untuk di deploy dan di test. Jangan lupa klik tombol save sebelum melakukan proses deploy.

Tunjukan buktinya ?
Sebelum kita memberikan bukti, mari kita lakukan test sederhana berikut ini :

  1. Setelah aplikasi berhasil di deploy, buka aplikasi tersebut di browser.
  2. Tunggu beberapa saat hingga kita bisa melihat aplikasi secara sempurna.
  3. Lakukan scroll hingga mencapai akhir dari Vertical ScrollBar.
  4. Bandingkan hasilnya, antara yang menggunakan pagination dan yang tidak.
Ini lah buktinya. Kedua gambar di bawah, diambil dengan menggunakan jconsole dengan kisaran data mencapai 100 ribu.

Table tanpa pagination
Table tanpa pagination

Table dengan pagination
Table dengan pagination

Dari gambar disamping terlihat bahwa ada pergerakan penggunaan memori pada saat :

  • Aplikasi mulai di jalankan, dimana penggunaan memori berkisar antara 160Mb.
  • Sedangkan saat proses scroll data hingga mencapai akhir dari Vertical ScrollBar berkisar antara 250Mb.






Jika kita bandingkan dengan gambar di sebelah kanan terlihat sekali beda. Saat aplikasi di jalankan dan proses scroll data hingga akhir dari Vertical ScrollBar tidak lebih dari 200mb, atau kisaran 160Mb dari titik awal dan 170Mb untuk titik tertingginya.








Kok bisa seperti itu ?
Terlihat seperti magic bukan, apa yang dilakukan oleh ADF. Namun tidak ada yang magic di dunia komputer. Jadi apa yang dilakukan ADF adalah mengubah query yang ada dengan menambahkan hint dan range. Untuk lebih jelasnya perhatikan contoh query ini:

SELECT Sample.ID, Sample.DATA FROM SAMPLE Sample

Query diatas adalah bentuk awal sebelum kita ubah access mode-nya menjadi range paging. Apabila kita rubah menjadi range paging, query diatas berubah menjadi:


SELECT * FROM (SELECT /*+ FIRST_ROWS */ IQ.*, ROWNUM AS Z_R_N FROM (SELECT Sample.ID, Sample.DATA FROM SAMPLE Sample) IQ WHERE ROWNUM < :Bind_RangePage_High) WHERE Z_R_N > :Bind_RangePage_Low

Jadi adanya penambahan hit dan range pada saat kita melakukan proses pagination berlangsung.

Friday, September 28, 2012

Plugin Maven untuk WebLogic server

Petunjuk ini didapat dari http://docs.oracle.com/cd/E21764_01/web.1111/e13702/maven_deployer.htm untuk membuat maven plugin weblogic 10.3

Langkah-langkah untuk membuat plugin maven untuk weblogic server yaitu :

Buat jar plugin menggunakan WebLogic JarBuilder Tool (wljarbuilder)
*) Pastikan WebLogic server sudah diinstall pada pc.
*) Buka console, pindah direktori ke ${MIDDLEWARE_HOME}/wlserver_10.3/server/lib/
*) Jalankan perintah
java -jar wljarbuilder.jar -profile weblogic-maven-plugin

*) Hasilnya akan terbentuk file weblogic-maven-plugin.jar, didalam file tersebut terdapat pom.xml.
*) Ekstrak file pom.xml yang ada didalam file tersebut ke direktori ${MIDDLEWARE_HOME}/wlserver_10.3/server/lib/,
dengan cara :
jar xvf ${MIDDLEWARE_HOME}/wlserver_10.3/server/lib/weblogic-maven-plugin.jar META-INF/maven/com.oracle.weblogic/weblogic-maven-plugin/pom.xml

lalu copy file tersebut dengan perintah :
cp ${MWMIDDLEWAREHOME}/wlserver_10.3/server/lib/META-INF/maven/com.oracle.weblogic/ weblogic-maven-plugin/pom.xml ${MIDDLEWARE_HOME}/wlserver_10.3/server/lib

Setting tambahan untuk menyingkat prefix pemanggilan
*) Ubah file setting.xml yang ada di local repository, secara default akan ada di $HOME/.m2 dengan code dibawah ini :
<pluginGroups>
 <pluginGroup>com.oracle.weblogic</pluginGroup>
</pluginGroups>
*) Ubah file pom.xml di ${MW_HOME}/wlserver_10.3/server/lib, sesuaikan dengan kode dibawah ini :
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
        http://maven.apache.org/maven-v4_0_0.xsd">   
 <modelVersion>4.0.0</modelVersion>   
 <groupId>com.oracle.weblogic</groupId>   
 <artifactId>weblogic-maven-plugin</artifactId>   
 <packaging>maven-plugin</packaging>   
 <version>10.3.4</version>   
 <name>Maven Mojo Archetype</name>   
 <url>http://maven.apache.org</url>   
 <dependencies>     
  <dependency>       
   <groupId>org.apache.maven</groupId>
   <artifactId>maven-plugin-api</artifactId>      
   <version>2.0</version>     
  </dependency>   
 </dependencies>    
 <build>    
 <plugins>       
  <plugin>        
   <artifactId>maven-plugin-plugin</artifactId>        
   <version>2.3</version>        
   <configuration>          
    <goalPrefix>weblogic</goalPrefix>        
   </configuration>       
  </plugin>     
 </plugins>   
 </build>   
</project>

*) Install file weblogic-maven-plugin.jar ke local repository maven, dengan perintah :
mvn install:install-file  -Dfile=${MW_HOME}/wlserver_10.3/server/lib/weblogic-maven-plugin.jar -DpomFile=pom.xml

*) Note : perintah mvn install akan mendownload library-library Maven dari repository (local/internet) yang dibutuhkan supaya proses eksekusi berhasil.

Konfigurasi di file pom.xml untuk project Maven
*) Pada file pom.xml di project Maven tambahkan kode dibawah ini :
<plugin>        
 <groupId>com.oracle.weblogic</groupId> 
 <artifactId>weblogic-maven-plugin</artifactId> 
 <version>10.3.4</version> 
 <configuration> 
  <adminurl>t3:/${ipServerWebLogic}:${portServerWebLogic}</adminurl>
  <user>${userAdminWebLogic}</user> 
  <password>${passwordAdminWebLogic}</password> 
  <upload>true</upload>
  <remote>false</remote> 
  <verbose>true</verbose> 
  <targets>{nameServerWebLogic}</targets>
  <name>${project.build.finalName}</name>
 </configuration>
</plugin>


Deploy ke weblogic server menggunakan weblogic maven plugin *) Dari path project, jalankan perintah dibawah ini :
mvn weblogic:deploy –Dadminurl=t3://{serverHost}:7001 –Duser={userWebLogic} –Dpassword={password} –Dtargets={namaInstanceServer} –Dsource={path ke jar/war/ear} –Dname={namaAplikasi}

*) Note : apabila pada pom.xml sudah diset property adminurl, user, password, targets, name maka perintah deploy menjadi :
mvn weblogic:deploy –Dsource={path ke jar/war/ear}


Undeploy dari weblogic server menggunakan weblogic maven plugin
*) Dari path project, jalankan perintah dibawah ini :
mvn weblogic:undeploy –Dadminurl=t3://{serverHost}:7001 –Duser={userWebLogic} –Dpassword={password} –Dtargets={namaInstanceServer} –Dsource={path ke jar/war/ear} –Dname={namaAplikasi}

*) Note : apabila pada pom.xml sudah diset property adminurl, user, password, targets, name maka perintah deploy menjadi :
mvn weblogic:undeploy