Monday, January 28, 2013

Tutorial Grails #4

Seri tutorial Grails ini lanjutan dari sebelumnya, dimana pembahasan kita masih seputar groovy. Kali ini kita akan membahas tentang :
  • Groovy Unit Testing
  • XML di Groovy
  • Expandos

Groovy Unit Testing

Sama seperti java, groovy mempunyai unit testing. Dimana kita tidak perlu men-download terpisah dan sudah terintegrasi dengan JUnit. Mari kita lihat contoh penggunaannya unit testing di groovy:
class RangeTest extends GroovyTestCase {

 def lowerCaseRange = 'a'..'z'
 def upperCaseRange = 'A'..'Z'

 void testLowerCaseRange() {
  assert 26 == lowerCaseRange.size()
  assertTrue(lowerCaseRange.contains('b'))
  assertFalse(lowerCaseRange.contains('B'))
 }

 void testUpperCaseRange() {
  assert 26 == upperCaseRange.size()
  assertTrue(upperCaseRange.contains('B'))
  assertFalse(upperCaseRange.contains('b'))
  }

 void testAlphaRange() {
   def alphaRange = lowerCaseRange + upperCaseRange
   assert 52 == alphaRange.size()
   assert alphaRange.contains('b')
   assert alphaRange.contains('B')
   }
}
      

cara menajalankan tinggal ketikkan groovy RangeTest di command line. Groovy Unit Testing di extend dari class GroovyTestCase dan setiap method menggunakan naming convention testXXX sebagai prefix.

XML di Groovy

Extensible Markup Language, biasa digunakan untuk persist atau share data di enterprise applications.

Kenapa harus XML ?

Karena XML adalah text-based, sudah ada standart dan sudah banyak yang framework atau libraries yang mendukung XML di berbagai platform. Mari kita compare pembuatan XML dengan java (complicated) dengan groovy (simple and elegant).
package com.yukibuwana.testing;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class GenerateXML {

 /**
  * @param args
  * @throws ParserConfigurationException 
  * @throws TransformerException 
  */
 public static void main(String[] args) throws ParserConfigurationException, TransformerException {
  DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  Document doc = builder.newDocument();
  
  Element todos = doc.createElement("todos");
  doc.appendChild(todos);
  
  Element task = doc.createElement("todo");
  task.setAttribute("id", "1");
  todos.appendChild(task);
  
  Element name = doc.createElement("name");
  name.setTextContent("Buy Beginning Groovy and Grails");
  task.appendChild(name);
  
  Element note = doc.createElement("note");
  note.setTextContent("Purchase book from Amazon.com for all co-workers.");
  task.appendChild(note);
  
  TransformerFactory tranFactory = TransformerFactory.newInstance();
  Transformer transformer = tranFactory.newTransformer();
  transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  transformer.setOutputProperty(
    "{http://xml.apache.org/xslt}indent-amount", "2");
  
  Source src = new DOMSource(doc);
  Result dest = new StreamResult(System.out);
  transformer.transform(src, dest);
 }
}  

Mari kita lihat dengan groovy way

def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
builder.setDoubleQuotes(true)
builder.todos {
    todo (id:"1") {
        name "Buy Beginning Groovy and Grails"
        note "Purchase book from Amazon.com for all co-workers."
    }
}

println writer.toString()      

Lalu hasil dari kedua seperti ini
Simple XML

Expandos

Expando adalah class di groovy.util yang digunakan untuk dynamically expandable bean. Artinya, kita bisa menambahkan properties atau closure di saat runtime. Untuk lebih mudahnya, mari kita lihat contoh berikut ini :
class User {
    String firstName;
    String lastName;
}

def user = new User(firstName: "Yuki", lastName: "Buwana")

println user.firstName + " " + user.lastName

Disini kita membuat class User dengan properties firstName dan lastName diawal. Sekarang kita lihat jika kita menggunakan Expando class
def user = new Expando()

user.firstName = "Yuki"
user.lastName = "Buwana"

println user.firstName + " " + user.lastName      

Yoooi... Kita bisa menambahkan properties pada saat runtime. It's amazing.

Banyak hal yang baru di groovy, seperti :

  • MOP
  • Generate Text with Template
Yang tidak kita bahas disini. Sebagai referensi groovy ada disini atau buku Groovy in Action. Disana dibahas lebih mendalam dan lebih detail.

Untuk tutorial selanjutnya, kita akan memulai dengan Grails itu sendiri.

Tuesday, January 22, 2013

Tutorial Grails #3

Tutorial ini lanjutan dari sebelumnya, dimana kita akan membahas tentang groovy lebih dalam. Disini kita akan membahas tentang :
  • Groovy Shell dan Groovy Console
  • Method dan closure
  • Collection di Groovy

Groovy Shell dan Groovy Console

Groovy Shell ataupun Groovy Console adalah interactive command line yang digunakan untuk menjalan perintah-perintah groovy. Mulai dari create, save ataupun load groovy script.
Groovy Shell
Cara menjalankan cukup ketikkan groovysh di command line.
Groovy Console
Cara menjalankan Groovy Console juga cukup mudah, sama seperti Groovy Shell. Cukup ketikkan groovyConsole. Untuk pemula disarankan menggunakan Groovy Console dibandingkan Groovy Shell.

Method dan Closure

Di java kita mengenal method sedangkan di groovy kita mengenal closure. Mari kita lihat perbedaannya :

Method in Java way
public String hello(String name) {
   return "Hello, " + name;
}
      

Method in Groovy way
def hello(name) {
   "Hello, ${name}"
}
      

Closure
def name = "Chris"
def printClosure = { println "Hello, ${name}" }

printClosure()

name = "Joseph"
printClosure()
      

Jadi perbedaannya method dengan closure adalah closure adalah object sedangkan method tidak.

Collection di Groovy

Collection berlaku juga di groovy, seperti :
  • List
  • Ranges
  • Sets
  • Arrays
  • Maps
Disini kita akan membahas Range Collection saja, karena range begitu mudah. Mari kita lihat contoh penggunaan range di groovy
def numRange = 0..9
println numRange.size()
numRange.each {print it}
println ""
println numRange.contains(5)

def alphaRange = 'a'..'z'
println alphaRange.size()
println alphaRange[1]

def reverseRange = 9..0
reverseRange.each {print it}


Sedangkan penggunaan range dalam pengulangan, seperti ini
println "Java style for loop"
for(int i=0;i<=9;i++) {
   println i
}

println "Groovy style for loop"
for (i in 0..9) {
   println i
}

println "Groovy range loop"
(0..9).each { i->
   println i
}
      

Jadi range adalah daftar uturan nilai. Range di implement dari java.lang.Comparable.

Banyak hal yang baru di groovy yang tidak bisa dituangkan disini. Next, kita akan membahas groovy lebih banyak lagi sebelum kita masuk ke grails.

Friday, January 4, 2013

Tutorial Grails #2

Tutorial ini melanjukan dari seri Tutorial Grails sebelumnya, yaitu Install Grails. Saat ini kita akan mempelajari Groovy.

Apa sih Groovy ?
Groovy adalah dynamic language yang berjalan diatas Java Virtual Language (JVM). Groovy diinspirasi oleh bahasa pemrograman lain seperti Ruby, Python, Perl dan Smaltalk. Groovy bisa berjalan sebagai interpreted atau compiled.

Cukup dengan teori, mari kita lanjutkan adalah Instalasi, yaitu:

  1. Download groovy versi terbaru di sini.
  2. Unzip groovy-binary-X.X.X.zip di lokasi yang anda inginkan.
  3. Set GROOVY_HOME
  4. Tambahkan GROOVY_HOME/bin di PATH
validate your installation

Next, kita akan melihat mudahkan migrasi dari java ke groovy. Berikut contoh program menggunakan java (Todo.java).

       
package com.yukibuwana.testing;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Todo {
 private String name;
 private String note;
 
 public Todo(String name, String note) {
  this.name = name;
  this.note = note;
 }
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getNote() {
  return note;
 }

 public void setNote(String note) {
  this.note = note;
 }

 public static void main(String[] args) {
  List<Todo> todos = new ArrayList<Todo>();
  todos.add(new Todo("1", "one"));
  todos.add(new Todo("2", "two"));
  todos.add(new Todo("3", "three"));
  
  for (Iterator<Todo> iterator = todos.iterator(); iterator.hasNext();) {
   Todo todo = (Todo) iterator.next();
   System.out.println(todo.getName() + " " + todo.getNote());
   
  }

 }

}
 

Setelah kita compile dan dijalankan, hasilnya seperti ini

       
1 one
2 two
3 three
 

Groovy-nya gimana ?

Cara termudah mengubah dari java menjadi groovy, yaitu :
  1. Ubah extensions file dari .java menjadi .groovy
  2. Compile file groovy (groovyc xxx.groovy).
  3. Hasil dari compile groovy adalah class, sama seperti java.
  4. Jalankan class file tersebut.
Yups... Hasil dari compile groovy adalah class file

Jadi apa yang dilakukan oleh groovy ? 

Mari kita lihat hasil dari decompiler dari file class tersebut.

       
package com.yukibuwana.testing;

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;

public class Todo
  implements GroovyObject
{
  private String name;
  private String note;

  public Todo()
  {
    Todo this;
    CallSite[] arrayOfCallSite = $getCallSiteArray();
    MetaClass localMetaClass = $getStaticMetaClass();
    this.metaClass = localMetaClass;
  }

  public static void main(String[] args)
  {
    CallSite[] arrayOfCallSite = $getCallSiteArray(); List todos = (List)ScriptBytecodeAdapter.castToType(arrayOfCallSite[0].callConstructor(ArrayList.class), List.class);
    arrayOfCallSite[1].call(todos, arrayOfCallSite[2].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "1", "note", "one" })));
    arrayOfCallSite[3].call(todos, arrayOfCallSite[4].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "2", "note", "two" })));
    arrayOfCallSite[5].call(todos, arrayOfCallSite[6].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "3", "note", "three" })));

    for (Iterator iterator = (Iterator)ScriptBytecodeAdapter.castToType(arrayOfCallSite[7].call(todos), Iterator.class); DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[8].call(iterator)); ) {
      Todo todo = (Todo)ScriptBytecodeAdapter.castToType(arrayOfCallSite[9].call(iterator), Todo.class);
      arrayOfCallSite[10].call(arrayOfCallSite[11].callGetProperty(System.class), arrayOfCallSite[12].call(arrayOfCallSite[13].call(arrayOfCallSite[14].call(todo), " "), arrayOfCallSite[15].call(todo)));
    }
  }

  static
  {
    __$swapInit();
  }
}
       

Yups... Banyak code yang di inject oleh groovy.

Bedanya dengan java apa donk ?

Betul.. Setelah di compile dengan groovy, file class jadi lebih rumit. Tetapi, groovy make java code become art. Mari kita lihat coding bergaya groovy


package com.yukibuwana.testing

import java.util.Iterator;

public class GroovySimple {
 String name
 String note
 
 public static void main(String[] args) {
  def todos = new ArrayList()
  todos.add(new GroovySimple(name:"1", note:"one"))
  todos.add(new GroovySimple(name:"2", note:"two"))
  todos.add(new GroovySimple(name:"3", note:"three"))
  
  for (Iterator iterator = todos.iterator(); iterator.hasNext();) {
   def todo = iterator.next()
   
   println "${todo.name} ${todo.note}"
   
  }
  
 }

}


Dan wooola... Groovy make it code become art and simple..

Thursday, December 27, 2012

Hello World BPEL

Langkah-langkah membuat aplikasi sederhana Hello World menggunakan Oracle BPEL dengan IDE JDeveloper 11.1.1.6.
1. Buka aplikasi JDeveloper yang sudah diupdate dengan plugin untuk SOA.

2. Buat aplikasi baru. Pilih Application Template SOA Application. Klik Next.

3. Lengkapi Project Name. Klik Next.

4. Pilih Composite with BPEL Process. Klik Next.

5.Beri nama untuk BPEL Process. Pilih Template Synchronous BPEL Process. Expose as a SOAP service. Klik OK.

6. Apabila menemukan Unexpected Error, pilih Continue, Check Remember settings and don't show this dialog again. Klik OK.

7. Drag Assign Activities dari Component Pallete BPEL 1.1 ke antara receiveInput dan replyOutput.

8. Rename assign activities menjadi AssignHelloWorld.

9. Double klik untuk mengedit AssignHelloWorld activities.

10. Drag icon fx (Expression) ke outputVariable payload untuk meng-assign value ke variabel tersebut.

11. Pilih inputVariable dari BPEL Variables yang tersedia, lalu klik Insert Into Expression. Lalu manipulasi menggunakan function concat pada String Functions. Klik OK.

12. Hasil setelah proses assign menggunakan Expression. Klik OK.

13. Deploy aplikasi BPEL dengan cara klik kanan pada project, pilih Deploy, BPELProcess.

14. Pilih Deploy to SAR

15. Pilih Next dan Finish.
16. Aplikasi BPEL selesai di-deploy ke dalam file SAR (jar extension with prefix name sca)

Sekarang kita memiliki file hasil build yang dapat dideploy ke SOA Server pada WebLogic. Cheers!

Merry Christmas and Happy New Year.

Friday, December 21, 2012

Tutorial Grails #1

Sebelum kita mulai dengan grails, mari kita bertanya dengan

APA ITU GRAILS ?

Grails adalah open source yang diperuntukan dalam pembuatan web application. Bahasa kerennya Web Application Framework. Grails menggunakan bahasa pemrograman groovy dan berjalan diatas JVM.

Sebelum kita memulai ada beberapa hal yang perlu di persiapkan, yaitu INSTALASI

Ada beberapa hal yang akan kita siapkan disini :

  1. Java
  2. Grails
  3. IDE

[ Java ]
Karena grails berjalan diatas JVM, Java harus di install terlebih dahulu. Untuk download java ada disini. Download sesuai dengan OS Environment kita masing-masing dan jangan lupa setting JAVA_HOME beserta PATH-nya.

[ Grails ]
Setelah kita meng-install java, kita lanjukan dengan instalasi pada grails. Download versi grail terbaru ada disini. Untuk proses instalasi grails sangatlah mudah, yaitu :

  1. Unzip file grails yang sudah kita download.
  2. Buat folder grails (mkdir grails) dan pindahkan file yang sudah kita unzip.
  3. Setting GRAILS_HOME beserta PATH-nya.
  4. Untuk membuktikan grails berhasil diinstall, ketik grails -version pada command line. Hasilnya adalah versi dari grail yang telah kita download.

[ IDE ]
Ada beberapa IDE yang bisa kita gunakan, yaitu :


  1. IntelliJ IDEA.
  2. Eclipse.
  3. NetBeans.
  4. TextMate.

Yang biasanya dipakai adalah GGTS (Groovy/Grails Tool Suites). GGTS adalah Eclipse yang didalam  sudah terinstall plug in Groovy dan Grails. Jadi kita tidak perlu install plug in tambahan. Download GGTS terbaru ada disini.

Setelah ini apa yang kita lakukan ?

TESTING GRAILS APPS

Caranya adalah

  1. Buka terminal dan ketik grails create-app demo.
  2. Setelah aplikasi terbentuk, masuk ke folder demo (cd demo).
  3. Ketik grails run-app untuk menjalankan aplikasi yang telah kita buat.
  4. Jalankan aplikasi melalui browser dengan alamat http://localhost:8080/demo