Wednesday 27 May 2015

jPOS-EE version numbers - 2.0.8 Released

FYI, we are starting to put some order in jPOS-EE version numbers, following the standard we use in jPOS (even version numbers are considered stable, odd version numbers are considered development versions).

We generate releases for even versions, and just SNAPSHOTs for odd versions.

Right now, we just released 2.0.8 and moved development to 2.0.9-SNAPSHOT

Both are available in http://jpos.org/maven repo (we'll consider releasing stable versions to MavenCentral at some point, as we do with jPOS).

We have configured Travis (with its output pushed to gh-pages branch).

We didn't have a jPOS-EE ChangeLog, we started one now https://github.com/jpos/jPOS-EE/wiki/ChangeLog

We have some very good plans for jPOS-EE so we hope you keep an eye on the project. The best way to do that is to hang with us in jPOS' Slack (https://jpos.slack.com/).

Friday 3 October 2014

Referensi

Dibawah ini adalah referensi-referensi yang penulis gunakan ketika menyusun buku ini, semoga bisa menjadi bahan referensi jika tulisan saya dirasa masih membingungkan.
  1. Secondary Bitmap in jPOS
  2. Bit and Byte Conversion
  3. Wikipedia ISO 8583
  4. Introduction to ISO 8583
  5. Wikipedia Hexadecimal

Implementasi Menggunakan jPOS

Setelah kita mengetahui apa itu library jPOS, sekarang bagaimana penggunaan-nya secara nyata ? Pada bab kali ini, kita akan menulis ulang spesifikasi Network Management yang sebelum-nya sudah di implementasikan menggunakan Socket biasa. Nah untuk memulai-nya ada beberapa persiapan yang harus kita lakukan yaitu :

  • Persiapan Project
  • Pembuatan Aplikasi Server
  • Pembuatan Aplikasi Client

Pengenalan jPOS

Pada bab-bab awal implementasi, kita menggunakan class ServerSocket dan Socket dimana untuk melakukan parsing harus kita lakukan secara manual satu-persatu. Beruntunglah kita sebagai programmer Java :) , karena di bahasa pemrograman Java terdapat 1 library yang cukup bagus yaitu jPOS. Meskipun library jPOS ini opensource, tapi untuk dokumentasi-nya (jPOS Programmer’s Guide) kita diharuskan membeli sebesar $ 50 saja (sebuah harga yang tidak terlalu mahal bukan ?) :) Sedangkan untuk source code jPOS sendiri, bisa kita download menggunakan anonymous subversion pada alamathttps://jpos.svn.sourceforge.net/svnroot/jpos (untuk pengembangan menggunakan library jPOS, sangat dianjurkan untuk mendownload source code ini sebagai bahan referensi)
Apasih kelebihan dari library jPOS ini ? Yang jelas adalah, library ini memangkas semua proses manual yang harus kita lakukan ketika kita menggunakan Socket biasa. Selain itu, jPOS juga mendukung beberapa protokol-protokol yang biasa digunakan dalam implementasi ISO 8583. Untuk dapat menggunakan jpos ada beberapa hal dasar yang harus kita ketahui yaitu :
  • ISOPackager
  • ISOChannel
  • ISOServer Dan ISOMUX
  • ISOMsg


Implementasi Menggunakan Java

Nah setelah kita mengetahui format message ISO 8583, sekarang bagaimana meng-implementasikan-nya pada bahasa pemrograman Java ? Sebelum kita menulis kode, yang harus kita lakukan pertama kali yaitu adalah menyusun spesifikasi yang akan kita gunakan untuk berkomunikasi. Pada kenyataan-nya, spesifikasi ini sangat penting peranan-nya dan ada kemungkin tiap vendor mempunyai spesifikasi yang berbedaantara satu dengan yang lain. Sebagai catatan, perhatikan betul-betul spesifikasi yang sudah disepakati bersama. Dan sekarang, bagaimanakah cara membuat sebuah spesifikasi untuk message ISO 8583 dan implementasi-nya pada bahasa pemrograman Java akan kita bahas pada bab-bab dibawah ini :
  • Pembuatan Spesifikasi Message Network Management
  • Pembuatan Aplikasi Server
  • Pembuatan Aplikasi Client
  • Testing


Pembuatan Spesifikasi Message Network Management


Agar komunikasi antara server dan client dapat berjalan dengan sukses, maka diperlukan sebuah kesepakatan yang harus ditaati oleh kedua belah pihak. Beberapa persyaratan tersebut yaitu mencakup tentang :
  1. Message Protokol, protokol yang akan digunakan dalam contoh kasus ini adalah ISO 8583:1993 yang ditandai dengan angka 1 (satu) pada MTI (Message Type Indicator).
  2. Connection Type, mode koneksi yang akan digunakan adalah mode connection-oriented dimana client membuka koneksi ke server sekali dan mengirimkan banyak message (connect once -> many transaction)
  3. Message System, untuk seluruh message yang dikirimkan ke server harus menggunakan 4 bit header sebagai penanda panjang message yang dikirimkan
Dan dibawah ini adalah format message Network Management Request/Response :
  1. NETWORK MANAGEMENT REQUEST
    1. Message Type Identifier : 1800
    2. Sender : Client
    3. Purpose : Request network management action to Server
    4. Data ElementNameSubfieldTypeLengthFormatDescription
      MTIN4For request use 1800
      1BitmapH16Use field = 3,7,11,12,13,48 and 70
      3Processing CodeN6Default set to 000001
      7Transmission Date and TimeN8yyyyMMddTransmission Date and Time
      11System Trace Audit NumberN6zero-left-paddingUnique number from client
      12Local time transactionN6HHmmssTransaction time from client
      13Date local transactionN4mmddDate transaction from client
      48Additional Private DataN3zero-left-paddingLenght of Additional Private Data
      48Additional Private DataClientIDN7zero-left-paddingClient identification number
      70Network Information CodeN3001=sign-on, 002=sign-off, 003=echo-test
  2. NETWORK MANAGEMENT RESPONSE
    1. Message Type Identifier : 1810
    2. Sender : Server
    3. Purpose : Response network management action for Client
    4. Data ElementNameSubfieldTypeLengthFormatDescription
      MTIN4For request use 1800
      1BitmapH16Use field = 3,7,11,12,13,39,48 and 70
      3Processing CodeN6Default set to 000001
      7Transmission Date and TimeN8yyyyMMddTransmission Date and Time
      11System Trace Audit NumberN6zero-left-paddingUnique number from client
      12Local time transactionN6HHmmssTransaction time from client
      13Date local transactionN4mmddDate transaction from client
      39Response CodeN3Available Response Code :

      1. 000 = Successfull
      2. 001 = Timeout from Server
      3. 002 = Invalid Network Information Code
      4. 003 = Invalid Processing Code
      48Additional Private DataN3zero-left-paddingLenght of Additional Private Data
      48Additional Private DataClientIDN7zero-left-paddingClient identification number
      70Network Information CodeN3001=sign-on, 002=sign-off, 003=echo-test

Pembuatan spesifikasi untuk message Network Management sudah selesai, sekarang mari kita implementasikan dengan membuat sebuah aplikasi server-nya dahulu.

Sunday 21 September 2014

Data Element

Data Element ini sebenarnya merupakan sebuah inti dari keseluruhan message yang terdapat dalam ISO 8583, karena pada Data Element inilah isi informasi dari transaksi yang dilakukan sesungguhnya akan dikirimkan melalui jaringan menggunakan protokol ISO 8583. Terdapat 128 Data Element pada standart ISO 8583 versi 1987, sedangkan pada versi berikut-nya yaitu ISO 8583 versi 1993 naik menjadi 192 Data Element.

Data Element ini dapat diasumsikan seperti sekumpulan kotak sebanyak 128 atau 192 buah (tergantung dari versi ISO 8583 yang digunakan-nya), yang tiap-tiap kotak mempunyai ARTI dan FORMAT yang sudah ditentukan oleh standart ISO 8583. Dan agar mudah, tampilan Data Element pada ISO 8583 dapat digambarkan seperti gambar dibawah ini :



Contoh Representasi Sebuah Data Element








Setiap Data Element mempunyai format data yang di ijinkan pada tiap isinya (seperti numerik, binary atau yang lain-nya) dan mempunyai panjang data yang sudah ditentukan (baik secara variabel ataupun fix). Sedangkan format data yang terdapat dalam Data Element adalah seperti pada tabel dibawah ini :
Format Data Pada Data Element (Diambil dari http://en.wikipedia.org/wiki/ISO_8583)




















Bitmap

Seperti yang sudah sedikit dibahas pada bab Tipe Message ISO 8583 didepan, komponen kedua dari Application Data yang terdapat dalam ISO 8583 ini adalah Bitmap. Apasih sebenarnya Bitmap ini ? Bitmap ini adalah sebuah komponen yang mempunyai panjang 16 karakter (atau lebih, tergantung apakah Secondary atau Tertiary Bitmap aktif atau tidak) dalam hexadecimal, dan nilai yang terdapat dalam bitmap ini digunakan untuk me-representasikan field atau Data Element keberapa yang aktif.

Sebuah message ISO 8583 kurang lebih pasti mempunyai satu bitmap yang biasa disebut sebagai Primary Bitmap, yang menandakan bahwa Data Element 1 sampai 64 aktif. Sedangkan Secondary Bitmap akan muncul jika Data Element 65 sampai 128 aktif, begitu juga untuk Tertiary/Third Bitmap digunakan jika Data Element 129 sampai 192 aktif walaupun jarang sekali sebuah message sampai menggunakan Tertiary Bitmap.

Bitmap ini bisa merupakan 8 bytes data binari ataupun 16 karakter hexadecimal dari 0-9, A-F pada ASCII atau EBCDIC karakter, sebuah field atau Data Element akan aktif jika nilai bitmap ini bernilai TRUE (ditandai dengan nilai 1). Sedangkan untuk field atau Data Element yang tidak aktif, akan bernilai FALSE (ditandai dengan nilai 0 [nol]) pada bitmap.

Agar lebih memudahkan penjelasan, sekarang mari kita masuk ke pembahasan yang lebih detail tentang bitmap pada sub-bab dibawah ini :
  • Cara Menghitung Bitmap

Cara Menghitung Bitmap

Pada penjelasan sebelum-nya kita sudah mengetahui ciri-ciri sebuah Bitmap, dan untuk kepentingan menghitung sebuah Bitmap ada beberapa poin penting yang harus selalu di ingat ketika ingin membaca atau membuat sebuah Bitmap. Poin-poin penting yang perlu dicatat yaitu :
  1. Ada 3 macam Bitmap, yaitu :
    1. Primary Bitmap, semua message ISO 8583 pasti mempunyai ini. Field atau Data Element yang aktif adalah 1-64.
    2. Secondary Bitmap, ini digunakan jika field atau Data Element yang aktif adalah 65-128. Ciri-ciri adanya Secondary Bitmap ini adalah bit pertama dari PRIMARY BITMAP pasti bernilai 1 atau TRUE
    3. Tertiary/Third Bitmap, ini digunakan jika field atau Data Element yang aktif adalah 129-192. Identitas adanya Tertiary/Third Bitmap ini adalah aktif-nya field atau Data Element ke 65
  2. Seluruh field atau Data Element yang TIDAK AKTIF AKAN BERNILAI 0 (NOL/FALSE) DAN UNTUK YANG AKTIF AKAN BERNILAI 1 (TRUE)
  3. Bitmap dapat berisi 8 byte data binary, atau
  4. 16 karakter hexadecimal (0-9 dan A-F) pada ASCII atau EBCDIC (lihat pada penjelasan informasi dibawah ini)
  5. Untuk mengetahui field atau Data Element mana yang aktif, kita harus mengkonversi nilai hexadecimal ke binary.
  1. Jika dalam 1 message yang aktif hanya Primary Bitmap saja, maka panjang Bitmap tersebut adalah 64 bit. Dimana 8 Byte Primary Bitmap == 64 Bit (Ingat 1 byte = 8 bits) :D
  2. Jika Secondary Bitmap aktif, maka panjang Bitmap akan menjadi 64*2 yaitu 128 bit atau bisa juga disebut menjadi 32 karakter hexadecimal. Begitu juga jika Tertiary Bitmap aktif.
Setelah mengetahui beberapa poin penting dalam menghitung sebuah Bitmap dan sebelum mulai untuk melakukan konversi, ada baiknya kita segarkan dulu pikiran kita kembali ke bangku kuliah :D yang membahas tentang konversi dari HEXA to BINARY to DECIMAL. Mungkin ada yang masih ingat tentang tabel konversi dibawah ini ?? Karena tabel dibawah ini akan kita jadikan sebagai acuan untuk mengetahui fieldatau Data Element mana yang aktif :) :


Tabel Konversi Decimal to HexaDecimal to Binary