iReport Tutorial – Using JavaBean Datasource

iReport Tutorial – Using JavaBean Datasource

1010111chen's Blog

This post was made because i find it difficult to find tutorial about rendering report using JasperReport API with Java, especially about JavaBean Datasource and Advance Crosstab. This first post will cover a simple report application using JavaBean Datasource, we will get into Crosstab later. So, let us begin.

What you need is :

  1. Eclipse IDE(any version, i use Galileo though)
  2. iReport. I am using version 1.27 just because i familiar with it, doesn’t matter though if you want to use which version.
  3. Libraries(jar file that needed to create the report from java)

This is the list of library needed to create the report project(this is the version i use, i don’t experiment with other version, if you want to, then do it 😀 :

  1. jasperreports-3.0.0.jar
  2. common-beanutils-1.7.0.jar
  3. common-collections-3.1.jar
  4. common-digester.jar
  5. common-logging.jar

Step by step tutorial:

  1. Create a Java Project on Eclipse(i won’t give tutorial on this, you can google it).
  2. Right click…

View original post 557 more words

Posted in Uncategorized | Leave a comment

Sekilas Tentang BPMN

Badan Prostitusi Milik Negara(BPMN)

Business Process Model and Notation (BPMN) adalah sebuah grafik yang menjelaskan sebuah model process bisnis.

Sekilas Tentang si Dia:

Business Process Model and Notation (BPMN) adalah sebuah standar untuk memodelkan process bisnis yang menyediakan notasi grafis dalam menjelaskan sebuah proses bisnis didalam sebuah Business Process Diagram(BPD).  Teknik Flow pada BPMN sama persis dengan Activity Diagram Pada UML. Tujuan dari BPMN adalah untuk mendukung manajemen proses bisnis, baik untuk pengguna teknis dan pengguna bisnis, dengan menyediakan notasi yang intuitif bagi pengguna bisnis, namun mampu mewakili proses semantik yang kompleks. Tujuan yang paling utama dari BPMN is untuk menyediakan sebuah standar notasi yang mudah di mengerti oleh semua pelaku bisnis. Termasuk para Bisnis Analyst yang membuat dan menyempurnakan prosess bisnis, Developer yang bertanggung jawab mengimplementasikan prosess bisnis tersebut dan Bisnis Manager yang memantau dan memanage proses bisnis. Sehingga BPMN mengatasi perbedaan pemahaman yang terjadi antara desginer dan implementator dalam sebuah proses bisnis.

Elemen:

BPMP model terdiri dari beberapa diagram sederhana yang dibangun dari kumpulan grafik.  Berikut elemen yang terdapat pada bpmn : 

Flow objects
Events, activities, gateways

Event

Activity/Task

Gateways

Connecting objects
Sequence flow, message flow, association

Connections

Swim Lanes:

         Pool, lane

Pool dan Lane

Artifacts
Data object, group, annotation

Data

Group

Annotation

 
Terima Kasih
Posted in Uncategorized | Tagged | 1 Comment

StringBuffer VS String

Saya tahu dosen pemrograman anda sewaktu kuliah mengajarkan kepada anda untuk melakukan penggabungan Karakter pasti menggunakan operasi “+” , karena dosen saya juga begitu  :).. tidak salah sih 😀 tapi mari kita bahas apa kekurangannya

Java menyediakan StringBuffer Class dan  String Class yang digunakan untuk memanipulasi karakter yang tidak dapat dirubah. Objek tipe String digunakan untuk menyatakan kata yang read only dan tetap saja, sedangkan StringBuffer digunakan untuk menyatakan characters(kata) yang bisa berubah-ubah.

Perbedaan signifikan antara kedua Class tersebut adalah terletak pada performa. StringBuffer lebih cepat dibanding String ketika melakukan penggabungan karakter yang biasa dilakukan pada proses manipulasi String.
Menggunakan String Class penggabungan kata biasa dilakukan dengan cara berikut :

     String str = new String ("Adil  ");
     str += "Ganteng";

Jika menggunakan StringBuffer proses penggabungan kata dilakukan dengan cara sebagai berikut:

     StringBuffer str = new StringBuffer ("Adil ");
     str.append("Ganteng);

Developer biasanya berasumsi cara pertama lebih efficient, karena mereka berfikir cara kedua lebih rumit.

Menggunakan Operator + memang tidak salah, tetapi ada hal yang menarik ketika Code digenerate. Menggunakan StringBuffer untuk penggabungan kata faktanya menghasilkan code yang lebih cepat dibanding String. Untuk membahas masalah ini berikut 2 buah contoh bytecode generate dari masing” potongan kode diatas.
Menggunakan String :

0 new #7 <Class java.lang.String>
3 dup 
4 ldc #2 <String "Adil ">
6 invokespecial #12 <Method java.lang.String(java.lang.String)>
9 astore_1
10 new #8 <Class java.lang.StringBuffer>
13 dup
14 aload_1
15 invokestatic #23 <Method java.lang.String valueOf(java.lang.Object)>
18 invokespecial #13 <Method java.lang.StringBuffer(java.lang.String)>
21 ldc #1 <String "Ganteng">
23 invokevirtual #15 <Method java.lang.StringBuffer append(java.lang.String)>
26 invokevirtual #22 <Method java.lang.String toString()>
29 astore_1

Byte Code baris 0 – 9 menjalankan code bagian :

String str = new String("Adil ");

kemudian bytecode baris 10-29 menjalankan penggabungan kata :

   str += "Ganteng";

Ada hal yang menarik diatas. Byte code yang digenerate untuk melakukan penggabungan kata membuat object StringBuffer dan melibatkan method append. Object StringBuffer dibuat pada baris 10 dan method append dipanggil pada baris 23. Dikarenakan sifat dari String adalah tetap (immutable) maka mau tidak mau harus menggunakan StringBuffer untuk melakukan penggabungan karakter.

Setelah penggabungan dilakukan oleh StringBuffer object, maka hasilnya harus di rubah kembali ke object String dengan memanggil method toString pada baris 26. Method ini membuat object baru bertipe String dari object StringBufferobject. Semua proses ini jelas bukan proses yang kecil.
Kesimpulannya 2 baris Code String penggabungan menggunakan + akan membuat 3 object:

  1. A String object di baris 0
  2. A StringBuffer object dibaris 10
  3. A String object dibaris 26

Sekarang bandingkan dengan bytecode generated hasil dari StringBuffer:

0 new #8 <Class java.lang.StringBuffer>
3 dup
4 ldc #2 <String "Adil ">
6 invokespecial #13 <Method java.lang.StringBuffer(java.lang.String)>
9 astore_1
10 aload_1 
11 ldc #1 <String "Ganteng">
13 invokevirtual #15 <Method java.lang.StringBuffer append(java.lang.String)>
16 pop

Bytecode pada baris 0-9 digunakan untuk code StringBuffer pada baris pertama:

   StringBuffer str = new StringBuffer("Adil ");

Bytecode  pada baris 10 – 16 digunakan untuk menggabungkan karakter:

    str.append("Ganteng");

Tidak Seperti String, Code StringBuffer tidak membuat sebuah temporari StringBuffer Object dan merubahnya ke String Object, tetapi hanya membuat 1 kali object StringBuffer yaitu pada baris 0.

Kesimpulannya, StringBuffer dalam penggabungan karakter jauh lebih cepat dibanding String. Sebaiknya StringBuffer harus digunakan dalam proses manipulasi ketika memungkinkan.

Posted in Java Core | Tagged , , | Leave a comment

FetchType.LAZY vs FetchType.EAGER In Javax Persistance

Didalam dunia ORM java pasti ada sering mendengar, melihat atau bahkan sering menggunakann kata LAZY atau EAGER didalam sebuah relasi class.

Apa sih perbedaannya ? salah-salah pakai bakalan berdampak besar pada kinerja aplikasi 😀 (sok tw :D)..

contoh kasus :

  • Di Dunia Ninja , terdapat banyak Desa (ex : Konohagakure, Otogakure, Sunagakure)
  • Sebuah desa memiliki banyak Clan (ex : di Konohagakure memiliki clan Senju,Uchiha,Nara,Uzumaki)
  • Sebuah Clan memiliki banyak Shinobi(ex: Uchiha memiliki pengikut Uchiha Madara, Uchiha Itachi, Uchiha Sasuke, Uchiha Tobi)
  • Seorang Shinobi memiliki banyak Jurus (ex: Uchiha Itachi memiliki banyak jurus yaitu Sharingan, Ninjutsu, Taijutsu)

Kira-kira kalo di buat class seperti ini jadinya 😀

Apa perbedaan Eager dan Lazy?

Javadoc : The EAGER strategy is a requirement on the persistence provider runtime that data must be eagerly fetched. The LAZY strategy is a hint to the persistence provider runtime that data should be fetched lazily when it is first accessed. The implementation is permitted to eagerly fetch data for which the LAZY strategy hint has been specified. In particular, lazy fetching might only be available for Basic mappings for which property-based access is used.

Desa desa = desaService.getByName(“Konohagakure”);

Contoh di atas adalah menggunakan  EAGER dalam fetc. Ketika code itu dijalankan  maka kita akan mendapatkan data Desa beserta seluruh data Clan yang ada pada desa konohagakure, seluruh data shinobi yang ada pada clan  dan seluruh  data jutsu yang ada pada shinobi itu di sebut EAGER. tetapi bisa dibayangkan betapa beratnya proses tersebut 😀

LAZY kebalikan dari EAGER. Jadi ketika menjalankan kode diatas maka kita hanya akan mendapatkan data dari desa konohagakure saja 😀 tidak dengan relasi ke class lain itu disebut LAZY.

Lalu bagaimana jika kita ingin mendapatkan data clan,shinoby dan jutsu? kita bisa mendapatkan data clan ketika kita memanggil relasinya langsung. contoh :

Desa desa = desaService.getByName(“Konohagakure”);

List<Clan> clans = desaService.getByName(“Konohagakure”).getClans();

dan seterusnya:D

Namun Ada pengaturan session khususketika menggunakan LAZY, artinya session ke database tidak boleh ditutup dahulu 😀 Untuk pengaturannya next postingan aja 😀

Mau pake yang mana sekarang? sesuaikan dengan kebutuhan aja 😀

Posted in Common | Tagged , , , | Leave a comment

Simple Service SFTP Using JSCH

Selamat siang 😀

Masih tentang sftp.. berikut ini adalah potongan code dari service dasar (sederhana) dari jsch yang pernah saya pakai.. 😀  semoga bermanfaat.

Posted in SFTP | Tagged , , , , | 1 Comment

Java SFTP Connection Using JSCH

Masih tentang File Transfer Protocol. Berikut ini code bagaimana membuat koneksi ke SFTP menggunakan Jsch.

library yang digunakan:

  1. Jsch
  2. Log4j

Posted in SFTP | Tagged , , , | Leave a comment

FTP vs FTPS vs SFTP

1. FTP

File Transfer Protokol (FTP) adalah suatu protokol yang berfungsi untuk tukar-menukar file dalam suatu network yang mensupport TCP/IP protokol. Dua hal penting yang ada dalam FTP adalah FTP server dan FTP Client. FTP server menjalankan software yang digunakan untuk tukar menukar file, yang selalu siap memberian layanan FTP apabila mendapat request dari FTP client. FTP client adalah komputer yang merequest koneksi ke FTP server untuk tujuan tukar menukar file (mengupload atau mendownload file)

Pertukaran Data

Pertukaran data pada FTP protocol menggunakan 2 channel yang dikenal dengan command channel dan data channel.

Commmand channel :

  • Command channel biasanya berjalan di atas port 21 .
  • Bertanggung jawab atas koneksi yang datang dari client serta menangani  perintah (command) dari baik dari client atau server (contohnya autentikasi USER dan PASS).
  • Command channel akan slalu terbuka sampai client mengirimkan perintah QUIT untuk diskonek atau karena server memaksa untuk dikonek karena client iddle atau karena alasan lain.

Data channel

  • Data Channel  berjalan on-demand  pada port temporary di server (PASSIVE) dan di client (ACTIVE)  
  • Bertanggung jawab terhadap pertukaran data baik itu list direktory ataupun file transfer. LIST,STOR,RETR adalah contoh perintah yang digunakan untuk direktory listing, upload file dan download file pada data channel.
  • Data Channel akan ditutup ketika transfer data sudah selesai.

Security

Pada FTP channel command dan channel data tidak di encrypt. sehingga data apapun yang dikirim pada channel ini dapat di cegat atau dibaca.

Firewall

  • Server mengijinkan koneksi masuk pada port 21 dan PASSIVE on-demand port antara 2000-2500 .
  • Client mengijinkan koneksi keluar pada port 21 dan passive sama seperti server.

2. FTPS (FTP Secure)

Dikarenakan security pada FTP sangat beresiko karena tidak di encrypt  maka diusulkanlah dalam RFC 2228 untuk melindungi data FTP saat dikirimkan melalui jaringan menggunakan enkripsi SSL.

Security

  1. FTPS implicit SSL  
  2. FTPS Explicit SSL

FTPS Implicit SSL

  1. Implicit SSL  membutuhkan SSL session untuk menghubungkan antara client dan server sebelum terjadi pertukaran data.
  2. Setiap koneksi yang dibuat oleh client tanpa SSL akan di tolak oleh server.
  3. SSL implicit berjalan diatas port 990.
  4. Masih ada yang pakai  sudah dianggap  kuno 

FTPS Explicit SSL

  1. Di dalam Explicit SSL mode, client dan server bernegosiasi tentang level proteksi yang digunakan.
  2. Server akan menawarkan unencrypted FTP atau encrypted FTPS session dalam sebuah port.
  3. Session yang dibentuk ketika client melakukan koneksi pertama adalah unencrypted.
  4. Sebelum mengirimkan user credentials, client akan meminta kepada Server untuk menukar command channel ke SSL encrypted channel dengan mengirimkan perintah AUTH TLS atau AUTH SSLcommand. 
  5. Setelah berhasil melakukan konfigurasi SSL channel maka client akan mengirimkan user credentials ke  FTP server.
  6. Level dari proteksi data channel antara client dan server dapat dinegosiasikan dengan menggunakan perintah PROT.

Firewall

  • Server mengijinkan koneksi masuk pada port 21 atau 990 dan PASSIVE on-demand port antara 2000-2500 .
  • Client mengijinkan koneksi keluar pada port 21 dan passive sama seperti server.

3. SFTP

!SFTP.equals(“FTPS”) hahaha

SFTP berbasiskan SSH(Secure Shell) protokol. SSH menyediakan secure access ke shell account dalam sebuah remote server.

Pertukaran Data

  1. Tidak seperti FTP atas FTPS, SFTP tidak menggunakan command channel dan data channel.
  2. Kedua Channel tersebut di transformasikan menjadi packet dengan format yang spesial melalui sebuah koneksi.

Security

Semua data yang dikirim dari client ke server terencrypt dan menggunakan encryption cipher.

Firewall

Server – Mengijinkan koneksi masuk pada port 22

Client – Mengijinkan koneksi keluar pada port 22

Posted in Common | Tagged , , , , | Leave a comment