Deploy jBPM-3.2.3 di JBoss-4.2.2.GA
November 10th, 2009Pendahuluan
Dua minggu ini saya dapet tugas untuk explore XForm dan jBPM. XForm sudah saya bahas sedikit-sedikit di postingan saya terdahulu, tapi belum ada tutorialnya, hehehe, nunggu benar-benar sudah bikin sesuatu baru deh nanti saya buatkan tutorialnya.
jBPM adalah framework dari JBoss untuk memanage Bussiness Process Management. BPM sendiri merupakan alat untuk mendokumentasikan flow aliran data dalam aplikasi. Tipikal aplikasi yang mempunyai BPM kompleks adalah proses Purchase Order dan settlement. Misalnya di sistem supply chain management perusahaan retail seperti Giant atau Hypermart, proses PO sangat panjang. Dimulai dari ERP perusahaan akan membuat PO, kemudian PO “somehow” harus sampe ke inbox supplier, kemudian supplier akan mengirim barang bersamaan dengan despatch advice, kemudian dilanjutkan dengan settlement jumlah barang yang dikirim dan harganya hingga disepakati invoice oleh kedua belah pihak. Kenapa perlu settlement? karena ternyata nggak semua barang yang dikirim supplier diterima, mungkin karena rusak atau nggak sesuai standard, harga juga masih perlu ada settlement mungkin karena ada perubahan atau karena ada kondisi tertentu di kontrak yang menyebabkan harga yang sudah disepakati berubah.
BPM digunakan dalam proses seperti diatas untuk mengatur aliran flow data (dokumen) dan action apa yang bisa dikenakan terhadap data yang sedang aktif. Misalnya di data (dokumen) despatch advice bisa ditolak atau diterima, sedangkan dokumen invoice tidak bisa diapa2kan karena sudah final. Nah semua action dan flow data ini diatur dalam BPM engine.
Agar tidak penasaran, saya kasih sedikit screenshoot dari jBPM console :
Gambar diatas memperlihatkan flow diagram dari sebuah Process didalam jBPM. Lebih jauh tentang konseptual jBPM bisa baca buku dari packt jBPM practical guide
Persiapan
Sebelum bisa menjalankan jBPM console, ada beberapa file yang harus didownload, antara lain:
1. JBoss 4.2.2.GA.zip
2. Jbpm-jpdl-3.2.3.zip
3. Mysql
4. MySQL connector (JDBC Driver)
5. Java JDK
Link mysql download silahkan dicari di mysql.com atau cukup install mysql untuk OS yang digunakan. Java yang digunakan adalah JDK versi 1.4 keatas, saya sendiri menggunakan versi 1.6.0_12 dan berjalan dengan lancar.
Setelah proses download selesai, install mysql dan Java JDK. Kemudian extract jboss 4.2.2.GA dan jbpm-jpdl-3.2.3 ke folder yang diinginkan.
Konfigurasi
1. Instalasi dan persiapan mysql.
Setelah mysql berhasil diinstall, buat sebuah database baru untuk menyimpan data jbpm. Setelah itu buat user yang diberi akses ke database baru tersebut. Jangan dibiasakan menggunakan user root dalam konfigurasi aplikasi. Gunakan satu user khusus yang diberi akses hanya ke database yang digunakan aplikasi.
Login ke mysql dan jalankan perintah ini :
mysql> create database jbpmdb; mysql> grant all on jbpmdb.* to jbpm@localhost identified by 'jbpm';
2. Create table jBPM
jBPM memerlukan table-table dalam database untuk menyimpan semua data yang diperlukanya. Setelah extract file jbpm-jpdl-3.2.3.zip, buka folder db dan cari file jbpm.jpdl.mysql.sql. Di dalam file tersebut terdapat DDL untuk membuat schema, nah anehnya ternyata DDL tersebut tidak benar secara sintaks, harus dilakukan manipulasi agar DDLnya bisa dijalankan di mysql. Pertama hapus semua statement alter table dan drop table di bagian atas kira-kira ada 122 baris. Kemudian untuk sisanya, tambahkan ; di bagian belakang setiap barisnya. Yang terakhir adalah ganti statement type=InnoDB menjadi engine=InnoDB. hfff, sepertinya pada waktu dibuat versi 3.2.3 ini mysql masih versi < 5, jadi sintaksnya banyak yang error kalau digunakan di mysql-5.
Setelah selesai diedit, simpan file jbpm.jpdl.mysql.sql dan flush ke mysql. Caranya, pertama buka console (command prompt) dan cd ke folder di mana file jbpm.jpdl.mysql.sql berada, lalu jalankan perintah di bawah ini dari console:
$ mysql -u root -p jbpmdb < jbpm.jpdl.mysql.sql
Pastikan proses flush berhasil tanpa ada pesan error. Setelah proses flush table ke database selesai, coba test hasilnya dengan login ke mysql dan periksa jumlah tablenya :
$ mysql -u jbpm -p jbpmdb mysql> show tables;
Gunakan password jbpm dan pastikan ada 33 table di dalam database jbpmdb.
3. Menyiapkan Mysql Data Souce dan Drivernya
Sebelum bisa mendeploy jbpm di jboss, persiapan berikutnya adalah membuat Data Source agar jbpm bisa akses database dan table yang sudah dipersiapkan tadi.
Periksa folder hasil extract file jbpm-jpdl-3.2.3.zip dan cari file jbpm-console.war, nah file war inilah yang nantinya akan dideploy di dalam jboss. File war sebenarnya adalah file zip biasa, coba gunakan winzip atau zip tools lain untuk mengextract file war tersebut.
Setelah berhasil mengextract file war, coba cari file jboss-web.xml, disana terdapat konfigurasi nama datasource yang digunakan jbpm, kira-kira seperti ini konfigurasinya:
<resource-ref> <res-ref-name>jdbc/JbpmDataSource</res-ref-name> <jndi-name>java:JbpmDS</jndi-name> </resource-ref>
Terlihat dalam konfigurasi diatas, jbpm memerlukan JbpmDS yang dibind ke JNDI name. Nah di JBoss 4.2.2 harus disiapkan datasource yang dimaksud. Caranya tidak susah, karena jboss sudah menyediakan contoh bagaimana membuat mysql-ds, file contohnya ada di ${jboss_home}/docs/examples/jca/mysql-ds.xml
Buka file mysql-ds.xml kemudian edit isinya menjadi :
<jndi-name>JbpmDS</jndi-name>
<connection-url>jdbc:mysql://mysql-hostname:3306/jbpmdb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>jbpm</user-name>
<password>jbpm</password>
Copy mysql-ds.xml yang sudah diedit ke folder ${JBOSS_HOME}/server/default. Konfigurasi diatas memerlukan driver mysql, oleh karena itu copy mysql jdbc driver yang sudah didownload dalam langkah persiapan ke folder ${JBOSS_HOME}/server/default/lib
4. Menyiapkan Security untuk login
jbpm-console menggunakan JAAS sebagai security mechanismnya. Form-based authentication merupakan teknik autentikasinya. Tutorial kali ini hanya membahas konfigurasi JAAS yang digunakan oleh jbpm-console, mungkin penjelasan saya malah bikin bingung, ya mohon maklum, ini cuma tutorial howto saja, kalau mau lebih jelas lagi tentang mekanisme security JAAS di JBoss silahkan membaca buku JBoss in Action.
Konfigurasi security JAAS untuk jboss tersebar di beberapa file :
- jboss-web.xml
Letaknya di dalam WEB-INF dari jbpm-console.war, konfigurasinya :
<security-domain>java:/jaas/jbpm</security-domain>
Di dalam konfigurasi ini disebutkan bahwa jbpm-console menggunakan mekanisme security JAASdengan domain jbpm. Nah untuk sekarang cukup ingat-ingat bahwa nama domain securitynya adalah jbpm, nama ini nanti digunakan di file konfigurasi login-config.xml.
- web.xml
Letaknya di WEB-INF dalam file jbpm-console.war dan kita tidak perlu melakukan modifikasi apa-apa.
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/sa/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/ua/login-example.jsf</form-login-page>
<form-error-page>/ua/login-example.jsf?error=true</form-error-page>
</form-login-config>
</login-config>
Konfigurasi dalam Web.xml ini menandakan url apa saja yang diamankan, dalam hal ini adalah /sa/*, kemudian role user bisa masuk ke dalam url /sa/*, sedangkan user dengan role lain bisa masuk juga, konfigurasinya ada di server.xml, nanti kita bahas di bagian selanjutnya.
- server.xml
Letaknya ada di ${JBOSS_HOME}/server/default/deploy/jboss-web.deployer. Konfugurasi yang ada dalam file ini ada konfigurasi yang mengijinkan user lain dalam role selain user role bisa mengakses /sa/*
<Realm className="org.jboss.web.tomcat.security.JBossSecurityMgrRealm"
certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping"
allRolesMode="authOnly"
/>
Lihat atribute allRolesMode, disana isinya “authOnly”, konfigurasi ini mengjinkan user lain dengan role selain role user bisa login, sedangkan user lain yang tidak masuk ke role apapun tidak bisa login. Selain mode authOnly, JBoss menyediakan 2 mode lainya: strict dan strictAuthOnly. Penjelasan lebih lanjut silahkan cari di buku JBoss In Action tentang 2 mode lainya ini.
Selain itu di dalam server.xml terdapat konfigurasi agar JAAS menggunakan https (SSL/TSL) dalam aplikasi, silahkan lihat bagian <Connecto port=”8443″ yang di-remark secara default. Connector inilah yang digunakan sebagai provider Https di JBoss.
- login-config.xml
Letaknya di ${JBOSS_HOME}/server/default/conf. Di bagian web.xml ada konfigurasi untuk mendefinisikan security domain, dalam hal ini namanya jbpm. Security domain jbpm harus didefinisikan dalam login-config.xml. Konfigurasi security domain ini hanya digunakan kalau data user dan rolenya disimpan di dalam file properties. Sedangkan kalau menggunakan user dan role yang ada dalam database, tidak perlu mendefinisikan security domain di login-config.xml. Pertama saya akan menjelaskan konfigurasi kalau menggunakan file properties dan nanti saya akan menjelaskan konfigurasi untuk menggunakan data user dan role yang ada di dalam database.
Tambahkan konfigurasi ini ke dalam login-config.xml :
<application-policy name="jbpm">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required">
<module-option name="usersProperties">props/jbpm-users.properties</module-option>
<module-option name="rolesProperties">props/jbpm-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
Konfigurasi ini menyaratkan adanya file jbpm-users.properties dan jbpm-roles.properties di dalam folder props yang sejajar dengan file login-config.xml. Isi dari file jbpm-users.properties adalah :
user=user manager=manager admin=admin shipper=shipper
Konfigurasi diatas adalah pasangan antara username dan passwordnya.
File jbpm-roles.properties :
manager = user,manager,admin user = user shipper = user admin = user,admin
Konfigurasi diatas adalah pasangan antara username di sebelah kiri dan role yang dipunyai user tersebut.
Kalau ingin user dan role mengambil entry dari database, konfigurasi di login-config.xml diubah. Entrinya menjadi :
<application-policy name = "jbpm">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag="required">
<module-option name="dsJndiName">java:/JbpmDS</module-option>
<module-option name="principalsQuery">
SELECT PASSWORD_ FROM JBPM_ID_USER WHERE NAME_=?
</module-option>
<module-option name="rolesQuery">
SELECT g.NAME_ ,'Roles'
FROM JBPM_ID_USER u,
JBPM_ID_MEMBERSHIP m,
JBPM_ID_GROUP g
WHERE g.TYPE_='security-role'
AND m.GROUP_ = g.ID_
AND m.USER_ = u.ID_
AND u.NAME_=?
</module-option>
</login-module>
</authentication>
</application-policy>
Kemudian perlu insert user, role dan membership di dalam table, nah berikut ini statement untuk insertnya, masukkan ke database jbpmdb yang sudah dibuat di proses sebelumnya:
insert into `JBPM_ID_GROUP`(`ID_`,`CLASS_`,`NAME_`,`TYPE_`,`PARENT_`) values (1,'G','sales','organisation',NULL), (2,'G','manager','security-role',NULL), (3,'G','hr','organisation',NULL), (4,'G','admin','security-role',NULL), (5,'G','user','security-role',NULL); insert into `JBPM_ID_USER`(`ID_`,`CLASS_`,`NAME_`,`EMAIL_`,`PASSWORD_`) values (1,'U','user','user@sample.domain','user'), (2,'U','manager','manager@sample.domain','manager'), (3,'U','admin','admin@sample.domain','admin'), (4,'U','shipper','shipper@sample.domain','shipper'); insert into `JBPM_ID_MEMBERSHIP`(`ID_`,`CLASS_`,`NAME_`,`ROLE_`,`USER_`,`GROUP_`) values (1,'M',NULL,NULL,2,2), (2,'M',NULL,NULL,2,4), (3,'M',NULL,NULL,3,4), (4,'M',NULL,NULL,2,5), (5,'M',NULL,NULL,1,5), (6,'M',NULL,NULL,4,3), (7,'M',NULL,NULL,4,5), (8,'M',NULL,NULL,3,5), (9,'M',NULL,NULL,3,3), (10,'M',NULL,NULL,2,3), (11,'M',NULL,'boss',2,1), (12,'M',NULL,NULL,1,1);
5. Deploy
Setelah selesai konfigurasi yang sangat melelahkan, langkah berikutnya adalah mendeploy jbpm-console.war di JBoss. Cukup copy file jbpm-console.war dan letakkan di folder ${JBOSS_HOME}/server/default/deploy
Jalankan file ${JBOSS_HOME}/bin/run untuk linux atau ${JBOSS_HOME}/bin/run.bat untuk windows.
Buka browser dan akses url http://localhost:8080/jbpm-console/ kemudian masukkan user dan password yang ada di jbpm-users.properties atau yang ada di table JBPM_ID_USER (tergantung mana datastore yang digunakan, properties atau table di database).
hff, lanjut lagi kapan2 dengan topik development JBPM dengan JBoss tools di Eclipse, what the, eclipse? yak yak, untuk sementara babay dulu netbeans

