Friday 3 October 2014

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



ISOPackager

Packager atau ISOPackager pada library library jPOS ini digunakan sebagai definisi panjang dan tipe data tiap-tiap Data Element yang akan digunakan dalam komunikasi. Ada banyak contoh packager yang dapat kita lihat dalam direktori jpos/dist/cfg/packager yang salah satu contoh-nya yaitu packager untuk iso93ascii.xml seperti dibawah ini:



Selain menggunakan file xml, packager juga dapat dikonfigurasikan melalui file java dengan ketentuan kita harus meng-extends class ISOBasePackager seperti dibawah ini :



Sedangkan cara penggunaan-nya adalah sebagai berikut :



Sampai disini sudah mengerti ? Jika sudah, mari kita masuk ke pembahasan ISOChannel :)


ISOChannel

Class ISOChannel atau Channel pada library jPOS ini digunakan untuk membungkus detail implementasi dari protokol-protokol yang digunakan oleh setiap vendor. Selain itu ISOChannel ini juga digunakan untuk mengirimkan dan menerima object ISOMsg. Beberapa Channel yang telah didukung oleh library jPOS ini antara lain :
Channel NameDescriptionURL
AmexChannelImplementasi ISOChannel untuk American Expressdetail
ASCIIChannelISOChannel yang menggunakan 4 ASCII karakter header sebagai penanda panjang messagedetail
Base24ChannelImplements an ISOChannel capable to exchange messages with ACI’s BASE24[tm] over an X.25 link.detail
BASE24TCPChannelImplements an ISOChannel able to exchange messages with ACI’s BASE24 over a TCP link.detail
BCDChannelTalks with TCP based NCCs Sends [LEN][TPDU][ISOMSG] (len=2 bytes HEX).detail
ChannelPool-detail
CSChannelISOChannel implementation – CS standard Channel.detail
FSDChannel-detail
GZIPChannelISOChannel implementation.detail
HEXChannelSends a four ASCII hex characters indicating message length (up to 0xffff).detail
LogChannelExtracts blocks from standard jPOS log.detail
LoopbackChannel-detail
NACChannelTalks with TCP based NACs Sends [LEN][TPDU][ISOMSG] (len=2 bytes network byte order).detail
NCCChannelTalks with TCP based NCCs Sends [LEN][TPDU][ISOMSG] (len=2 bytes BCD).detail
PADChannelImplements an ISOChannel suitable to be used to connect to an X.25 PAD.detail
PostChannelISOChannel implementation – Postilion Channel Send packet len (2 bytes network byte order MSB/LSB) followed by raw data.detail
RawChannelISOChannel implementation – RAW Channel Send packet len (4 bytes network byte order) followed by raw data.detail
RBPChannelImplements Record Boundary Preservation protocol.detail
TelnetXMLChannelImplements an ISOChannel able to exchange jPOS generated (or compliant) XML based ISO-8583 messages through a Telnet session the telnet commands are simply ignored.detail
VAPChannelISOChannel implementation – VISA’s VAP framing.detail
X25ChannelImplements an ISOChannel suitable to be used to connect to an X.25 PAD.detail
XMLChannelImplements an ISOChannel able to exchange jPOS generated (or compliant) XML based ISO-8583 messages.detail

Channel atau ISOChannel disini mempunyai peran yang sangat penting sekali dalam proses tersambung atau tidak-nya antara vendor yang satu dengan yang lain dan biasanya implementasi tiap vendor berbeda-beda :) Sedangkan pada library jPOS, penggunaan Channel ini sangat mudah seperti terlihat pada potongan kode dibawah ini :


ISOServer Dan ISOMUX

Jika pada implementasi sebelum-nya kita menggunakan class ServerSocket sebagai implementasi sebuah server dan class Socket sebagai implementasi sebuah client, pada library jPOS kita dapat menggunakan class ISOServer sebagai implementasi Server-nya dan class ISOMUX sebagai implementasi client-nya. Agar message yang kita kirimkan ke server tidak tertukar dengan message yang lain, maka ketika kita melakukan inisialisasi pada ISOMUX overridelah method getKey(ISOMsg isoMsg) seperti contoh dibawah ini :



Sedangkan cara untuk menggunakan class ISOServer adalah sebagai berikut :


ISOMsg

Class ISOMsg pada library jPOS ini adalah merupakan inti dari message yang akan kita kirim dan kita terima. Dibandingkan dengan cara manual yang telah kita lakukan pada tahap implementasi di bab sebelum-nya, untuk mengisi nilai pada data element tertentu pada class ISOMsg dapat kita lakukan secara langsung dengan cara seperti dibawah ini :



Sedangkan untuk mengirimkan-nya pada sebuah server, kita dapat membungkus ISOMsg kedalam object ISORequest dan mengirimkan object ISORequest tersebut ke method queue(ISORequest isoRequest) pada class ISOMUX seperti contoh dibawah ini :


Dan untuk mendapat respon dari server, kita bisa menggunakan method getResponse(Integer TIMEOUT) dari class ISORequest seperti kode dibawah ini :


Sampai disini pembahasan tentang apa itu jPOS sudah bisa dikatakan selesai :) Nah sekarang bagaimanakah implementasi menggunakan jPOS ? Mari kita lihat pada bab selanjut-nya :)


3 comments:

  1. sangat membantu banget.. tks sharingnya

    ReplyDelete
  2. Kursus jPos dimana ya ??? penasaran saya

    ReplyDelete
    Replies
    1. Bisa coba ke artivisi.com pak klo pingin tahu lebih detail :)

      Delete