21 January 2012

Menggunakan TestNG dalam penggunaan Framework Spring dan Hibernate

Pembaca yang budiman, saat saya menulis artikel ini, saya sudah kurang lebih 2 bulan terdaftar sebagai karyawan baru pada sebuah perusahaan IT Consultant di Jakarta. Tapi bukan itu yang ingin saya share dalam tulisan kali ini. Dalam perusahaan ini, saya diharapkan bisa mengikuti development stack yang berlaku diperusahaan ini. Salah satunya adalah penggunaan Spring Framework dan Hibernate.
Sejak saya mengenal dunia pemrograman Java, terus terang saya akui bahwa saya memang tidak pernah melibatkan framework hibernate sebagai sebuah metode ORM(Object Relational Mapping) dalam development stack project-project yang pernah saya buat. Kalau Spring Framework, saya memang sudah aktif menggunakannya sejak dua tahun lalu. Keadaan ini membuat saya sedikit harus beradaptasi terhadap framework hibernate ini.
Saya sering menemui kesulitan yang sangat menguras emosi jika code-code dalam dao layer yang saya hadapi mulai menggunakan Hibernate Criteria. mungkin bagi pembaca yang biasa menggunakan framework hibernate, Criteria adalah makanan sehari-hari, jadi tidak akan pernah ada kesulitan, saya sangat yakin dengan hal tersebut. Sementara saya, benar-benar baru sentuh framework hibernate ini, jadi buat saya ini sangat menguras emosi saya.
Untuk mengetahui sebuah method dalam dao layer itu sudah berfungsi dengan baik atau belum, terkadang sangat tidak efektif sekali jika saya melakukan test dengan cara mendeploy seluruh aplikasi hanya untuk mengetest sebuah fungsi dao yang saya buat dalam dao layer. Dan akhirnya saya memutuskan untuk mengujji fungsi-fungsi dao layer ini menggunakan unit-test, sehingga saya tidak perlu men-deploy keseluruhan aplikasi.
Oke, dibawah ini adalah langkah-langkah dalam membuat unit test guna pengujian fungsi-fungsi dao layer yang dibuat dengan menggunakan Spring Framework dan Hibernate:
  1. Buat file hibernate configuration, Spring Context, dan semua file pendukung dalam dan letakkan dalam folder test/resources seperti gambar berikut ini:                                                                                                                                                                                                                                                                   
  2. Buat sebuah file bernama TestDao dan letakkan di dalam folder test/java. Adapun isi file tersebut seperti contoh berikut ini: 
 package com.mojo.maven.test;  
   
 import com.mojo.maven.dao.NewsCategoryDao;  
 import com.mojo.maven.dao.NewsDao;  
 import com.mojo.maven.model.News;  
 import com.mojo.maven.model.NewsCategory;  
 import org.apache.log4j.Logger;  
 import org.hibernate.SessionFactory;  
 import org.hibernate.classic.Session;  
 import org.hibernate.context.ManagedSessionContext;  
 import org.springframework.beans.factory.annotation.Autowired;  
 import org.springframework.test.context.ContextConfiguration;  
 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;  
 import org.testng.annotations.AfterMethod;  
 import org.testng.annotations.BeforeMethod;  
 import org.testng.annotations.Test;  
   
 @ContextConfiguration(locations={"classpath*:maven1ApplicationContext-test.xml"})  
 public class TestDao extends AbstractTestNGSpringContextTests{  
   private Logger logger = Logger.getLogger(TestDao.class);  
   
   @Autowired  
   public SessionFactory sessionFactory;  
   private Session session;  
   
   @Autowired  
   private NewsDao newsDao;  
   
   @Autowired  
   private NewsCategoryDao newsCategoryDao;  
   
   /**  
    * Inisialisasi hibernate context sebelum test  
    */  
   @BeforeMethod  
   void init() {  
     logger.debug("init session factory");  
     session = sessionFactory.openSession();  
     ManagedSessionContext.bind(session);  
   }  
   
   /**  
    * cleanup hibernate context setelah test  
    */  
   @AfterMethod  
   void destroy() {  
     logger.debug("destroy session factory");  
     session.close();  
     ManagedSessionContext.unbind(sessionFactory);  
   }  
   
   @Test  
   public void testGetNews(){  
     News news = newsDao.getById(1);  
     logger.info("News ID : " + news.getId());  
     logger.info("News Title : " + news.getNewsTitle());  
     logger.info("News URL : " + news.getNewsUrl());  
     logger.info("News Category : " + news.getNewsCategory().getCategoryName());  
     logger.info("News Category Description : " + news.getNewsCategory().getCategoryDescription());  
   }  
 }  
   
 .......  
 .......  
   

Yang harus kita perhatikan pada class tersebut adalah, class tersebut memiliki annotation @ContextConfiguration dan meng-extends class AbstractTestNGSpringContextTests yang memang diperuntukkan sebagai basis class untuk melakukan test dengan menggunakan Framework TestNG. Dalam annotation @ContextConfiguration didefinisikan pula lokasi dari Spring Context sehingga compiler dapat menemukan letak file Spring Context yang akan digunakan dalam test itu sendiri.
Hal berikutnya yang harus kita perhatikan adalah dua method yang ada dalam class tersebut, yaitu method void init() dan method void destroy(). Pada method void init, diberikan pula annotation @BeforeMethod yang berfungsi sebagai inisialisasi hibernate context sebelum method test lainnya dijalankan. Sementara  method void destroy() diberikan diberikan annotation @AfterMethod yang berfungsi menutup session hibernate setelah method test selesai di eksekusi.
Demikianlah yang bisa saya share untuk sementara ini. Jika memang percobaan diatas dirasakan masih kurang, silahkan pembaca semua mengembangkannya lagi agar lebih sempurna.



Semoga bermanfaat.

Josescalia

04 December 2011

Membuat Sendiri Local Ip Checker dengan Java

Dewasa ini penggunaan wireless atau access point sebagai sebuah rangkaian jaringan komputer merupakan suatu hal yang sudah biasa dan wajar. Bahkan tanpa adanya sebuah wireless router, sebuah jaringan komputer tidaklah lengkap.
Dalam tata cara penggunaannya wireless router ada 2 jenis, yang pertama menerapkan IP statis untuk client-nya dan yang kedua menerapkan IP dinamis untuk client-nya. Penggunaan IP statis maksudnya adalah, perangkat komputer yang akan terhubung dengan sebuah jaringan harus memiliki konfigurasi IP yang dilakukan setting-nya secara manual. Sementara penggunaan IP dinamis, adalah wireless router yang secara otomatis akan memberikan sebuah IP kepada sebuah perangkat pada saat perangkat tersebut hendak terhubung kedalam jaringan yang dimiliki oleh wireless router tersebut.
Penggunaan IP dinamis pada jaringan komputer wireless menerapkan teknologi DHCP (dynamic host configuration protocol), yang memungkinkan kita bisa saja mendapatkan IP berbeda dalam kesempatan melakukan hubungan dengan jaringan tersebut. Maksudnya begini, suatu kali kita terhubung ke jaringan wireless tersebut dan mendapatkan IP address sebagai 192.168.1.100 dan lain waktu kita terhubung kembali dengan jaringan yang sama, bisa saja kita mendapatkan IP address yang lain misalnya 192.168.1.101 dan seterusnya.
Ada kalanya jika perangkat komputer kita terhubung dalam sebuah jaringan komputer wireless berbasis DHCP, kemudian tiba-tiba ada seseorang yang bertanya berapa IP yang kita gunakan, pastinya kita akan cari tahu dengan cara yang khusus, bahkan tidak sedikit dari kita yang malah tidak tahu bagaimana mencari tahu IP address tersebut.
Sekarang mari kita permudah kasus tersebut, dengan cara membuat sebuah program kecil dengan bahasa pemrogaman java yang tugasnya memberi tahu kita, berapa sebenarnya IP address yang sedang kita gunakan dalam jaringan wireless DHCP yang ada. Perhatikan kode berikut ini:

  1. import java.net.InetAddress;
  2. /**
  3. *
  4. * @author Josescalia
  5. */
  6. public class ComputerInfo {
  7. public static void main(String[] args) {
  8. try {
  9. InetAddress ownIP = InetAddress.getLocalHost();
  10. System.out.println("IP Address System ini : " + ownIP.getHostAddress());
  11. } catch (Exception e) {
  12. System.err.print("Exception caught =" + e.getMessage());
  13. }
  14. }
  15. }
Jika kode tersebut di kompilasi kemudian hasil kompilasinya di eksekusi maka program tersebut akan bisa memberi tahu kita berapa IP address yang sedang kita pakai dalam terhubung ke jaringan. Sederhana sekali bukan, tapi amat bermanfaat buat kita yang mungkin senang menggunakan komputer jinjing dan sering berhubungan dengan wireless yang menggunakan DHCP sebagai media penghubung ke jaringan yang ada.
Oke, berdasar dari ide tersebut, saya mencoba membuat program sederhana ini dengan versi desktop yang sudah siap digunakan di sini, itu juga jika mungkin anda juga berkenan menggunakanya :P. Cara menggunakannya adalah dengan meng-klik dua kali file run_program.bat. Dan pastikan Java Runtime Environment versi 1.6 ke atas sudah terinstall dalam komputer anda.
Bagi pembaca yang penasaran dengan kode yang saya buat, silahkan juga download source code-nya dari sini.

 
Semoga bermanfaat.


Menteng, 04 Desember 2011
Josescalia

13 November 2011

Membuat Palindrome Checker dengan Java

Pembaca yang budiman, baru ada kesempatan lagi untuk menulis buat blog ini. Mohon maaf sebelumnya jika begitu lama tenggang artikel-artikel baru bisa saya tuliskan.
Sebelum kita mulai saya ingin sedikit berbagi kebahagiaan dengan pembaca semua. Alhamdullilah, anak kedua saya lahir pada tanggal 12 November 2011 pada pukul 4:10 pagi, laki-laki, beratnya 3.5 Kg dan panjangnya 49CM. Putra kami ini kami beri nama Erlangga Fahrizal Yusuf Putra. Mudah-mudahan ia bisa menjadi anak yang soleh dan berbakti terhadap orang tua, negara, bangsa dan agamanya, amin. :)
Baiklah mari kita lanjutkan tujuan tulisan dalam artikel ini. Menurut wikipedia "A palindrome is a word, phrase, number, or other sequence of units that can be read the same way in either direction, with general allowances for adjustments to punctuation and word dividers." Yang jika dibahasa indonesiakan berarti "Palindrome adalah kata-kata, frase, angka, atau urutan dari sebuah unit yang dapat dibaca dengan hasil yang sama dari sudut pandang yang berbeda dengan tunjangan umum untuk penyesuaian pemisah tanda baca dan kata". Maksudnya jika kita memiliki sebuah kata "katak" nah jika kita baca secara terbalik maka tulisan tersebut juga terbaca "katak" juga.
Hmm, ada beberapa konsep yang mungkin bisa kita terapkan untuk membuat algoritma dalam mencari penyelesaian kasus ini:
  1. Kita bisa mengeceknya dengan langsung menggunakan fungsi reverse yang mungkin ada dalam java.
  2. Kita bisa me-compare masing-masing karakter dengan urutan algoritma sebagai berikut. Misal ada satu kata terdiri dari 5 huruf, maka compare yag terjadi adalah huruf pertama di compare dengan huruf ke-5, kemudian huruf ke-2 di-compare dengan huruf ke 4, dan seterusnya.
Sekarang coba kita lihat source berikut ini:

  1. public static boolean isPalindrome(String sWordToCheck) {
  2. return sWordToCheck.equals(new StringBuffer(sWordToCheck).reverse().toString());
  3. }

Mari kita lihat source code tsb. Source ini adalah sebuah fungsi yang memiliki kembalian (return) berupa Boolean yang didalam fungsi tersebut hanya mengecek sebuah string yang menjadi parameter fungsi ini. Algoritma pengecekan dilakukan dengan cara merubah string parameter menjadi type StringBuffer sehingga StringBuffer tersebut bisa di terapkan fungsi reverse yang memang ada pada class StringBuffer secara default. 
Dalam pemakaiannya kita bisa membuat program dalam java seperti contoh berikut ini:

  1. public class PalindromeChecker {
  2. public static void main(String[] args) {
  3. String sWordToCheck = "malam";

  4. if(isPalindrome(sWordToCheck))
  5. System.out.println(sWordToCheck + " Is Palindrome ");
  6. else
  7. System.out.println(sWordToCheck + " Is Not Palindrome ");
  8. }

  9. public static boolean isPalindrome(String sWordToCheck) {
  10. return sWordToCheck.equals(new StringBuffer(sWordToCheck).reverse().toString());
  11. }
  12. }

Program diatas mengecek kata "malam" menggunakan fungsi "isPalindrome" yang memiliki parameter String "sWordToCheck". Silahkan dicoba :).


Untuk algoritma yang kedua mari kita lihat source code dibawah ini:

  1. public static boolean isPalindrome(String word) {
  2. int left = 0; // index of leftmost unchecked char
  3. int right = word.length() - 1; // index of the rightmost

  4. while (left < right) { // continue until they reach center
  5. if (word.charAt(left) != word.charAt(right)) {
  6. return false; // if chars are different, finished
  7. }
  8. left++; // move left index toward the center
  9. right--; // move right index toward the center
  10. }

  11. return true; // if finished, all chars were same
  12. }

Mari kita perhatikan source code diatas, source code diatas adalah sebuah fungsi yang mengembalikan (return) true atau false dari sebuah inputan String parameter word. Algoritma yang dilakukan adalah sebagai berikut: 
  • Kata yang menjadi parameter diberikan indeks dari depan dan dari belakang.
  1. int left = 0; // index of leftmost unchecked char
  2. int right = word.length() - 1; // index of the rightmost

  • Kemudian dibuat perulangan jika left masih lebih kecil dari pada right.
  1. while (left < right) { // continue until they reach center
  2. ..........
  3. ..........
  4. }
  • Didalamnya diperiksa apakah karakter 1 sama tidak sama dengan karakter terakhir, jika memang pemeriksaan pertama sudah tidak sama maka tidak perlu dilanjutkan ke pemeriksaan selanjutnya(return false).

  1. while (left < right) { // continue until they reach center
  2. if (word.charAt(left) != word.charAt(right)) {
  3. return false; // if chars are different, finished
  4. }
  5. ....... // move left index toward the center
  6. ....... // move right index toward the center
  7. }
  • Jika ternyata karakter sama maka kemudian masing-masing pointer(left dan right) dilakukan increment dan decrement. Dan jika semuanya sudah selesai maka bisa disimpulkan bahwa kata tersebut adalah palindrome (return true).

  1. while (left < right) { // continue until they reach center
  2. ..........
  3. }
  4. left++; // move left index toward the center
  5. right--; // move right index toward the center
  6. }

  7. return true; // if finished, all chars were same

Dalam sebuah program kecil java, kita bisa membuatnya seperti contoh berikut ini:
  1. public class PalindromeChecker {
  2. public static void main(String[] args) {
  3. String sWordToCheck = "malam";

  4. if(isPalindrome(sWordToCheck))
  5. System.out.println(sWordToCheck + " Is Palindrome ");
  6. else
  7. System.out.println(sWordToCheck + " Is Not Palindrome ");
  8. }

  9. public static boolean isPalindrome(String word) {
  10. int left = 0; // index of leftmost unchecked char
  11. int right = word.length() - 1; // index of the rightmost

  12. while (left < right) { // continue until they reach center
  13. if (word.charAt(left) != word.charAt(right)) {
  14. return false; // if chars are different, finished
  15. }
  16. left++; // move left index toward the center
  17. right--; // move right index toward the center
  18. }

  19. return true; // if finished, all chars were same
  20. }
  21. }

Silahkan dicoba :)

Demikianlah percobaan kita kali ini. Kali ini memang saya mengambil source dari luar dan tidak membuatnya sendiri, dengan harapan ada pesan moral yang tersampaikan yaitu "Maksimalkanlah Google sebagai mesin pencari, kalo memang sudah ada, kenapa harus buat, hanya masalahnya adalah source yang kita ambil harus benar-benar kita pahami algoritma dan flow yang ada".

Terima kasih dan semoga bermanfaat.


Menteng, 14 November 2011

Josescalia