Friday, September 12, 2008

Beware: Your App Server is NOT plug-and-play

Recently, I tried to build a simple application with a somewhat curious architecture: this web application forwards the request from user to a message queue, and another application reads from the message queue, executing an insert sql statement for each message. Netbeans 6.5 beta comes with Glassfish v2 Application Server, which is essentially a Sun Java Application Server 9.1-something with its JMS Message Queue implementation and database connection pool. With its default configuration, I created a JDBC connection to an Oracle Express 10g database, and also its connection pool. The first application is a JSF application, sending a JMS message to the JMS message queue. The second app is an EJB app, consisting a single message driven bean. Naturally the app server pools this bean too.
Ok, during manual application testing, all works well. During automated testing using ab (ApacheBench), things starts to get strange aft er more than 10 concurrent connections. With 50 concurrent connections, about 400 row from total of 2000 rows were missing.
The JDBC Connection pool is set to 32 connections, meanwhile the Oracle database allows only 20 or so connections. OK, I set the connection pool to 20 connections.
Now, there are still missing rows, and the server's log indicates message beans that cannot obtain connection resources. I'm reducing the message bean pool too - but still have missing rows.
I always thought that wrong pool size could affect performance, but wouldn't affect systems correct operation -- this case clearly demonstrated the opposite.

Thursday, September 11, 2008

integrasi ebox-usersandgroups dgn Apache-Subversion

Subversion adalah sebuah source control system yang dapat menyimpan file apapun. Prinsip kerjanya lebih mirip CVS daripada SourceSafe, dan memang merupakan hasil pengembangan orang-orang yg ingin memperbaiki CVS. Dalam Subversion, kita dapat menyimpan file source code ataupun binary (file PHP atau file Excel, misalnya), memberi akses terpusat ke banyak orang ke file tersebut, memberi access control (siapa yang boleh menulis, siapa yang hanya dapat membaca), mencatat tiap versi dari file (sehingga ada history/log revisi tiap file, diubah oleh siapa, kapan, dan apa pesan perubahannya).
Subversion memiliki fitur integrasi dengan Apache Web Server, sehingga kita dapat memanfaatkan salah satu dari metoda authentication yang tersedia bagi Apache, dan memungkinkan akses ke repository menggunakan protokol HTTP. Ya benar, bisa diakses dengan web browser, tapi hanya akses dasar saja yang dapat dilakukan. Ia juga mendukung protokol WebDAV - yang memungkinkan kita mengakses menggunakan macam-macam software seperti Windows Explorer, Microsoft Excel, Frontpage. Untuk mendapatkan fitur yang lengkap, Subversion repository dapat diakses menggunakan SVN Client seperti TortoiseSVN atau plugin subclipse.
Tadinya, saya gunakan metoda authentication dan access control yang berbasis file teks. Satu file merupakan output htpasswd, yang berisi username dan md5 hash, file yang lain ialah ACL untuk repository tersebut. Meskipun praktis, tetapi proses penambahan user tidak dapat dilakukan oleh orang yang awam.
OK, misalkan kita tidak butuh ACL per direktori, cukuplah ACL per repository. Ada opsi lain yaitu menggunakan autentikasi dan otorisasi LDAP, di mana Apache akan menghubungi server LDAP yang kita tunjuk untuk melakukan autentikasi dan otorisasi. Dan jika kita gunakan OpenLDAP di server yang sama, kita dapat menggunakan ebox - sebuah web-based GUI untuk melakukan administrasi server, termasuk memanage user & group di OpenLDAP server.
Saya menginstall package ebox & ebox-usersandgroups di sebuah VMWare Image Ubuntu Hardy. Btw, package ebox yang digunakan diambil dari situs di luar Ubuntu Package Repository - tambahkan ini di /etc/apt/sources.list anda:
deb http://ppa.launchpad.net/juruen/ubuntu hardy main
Persiapkan sebuah repository di /var/lib/svn :
sudo su
cd /var/lib
mkdir svn
svnadmin create svn
chown -R www-data:www-data svn
Kemudian, modul user and groups diaktifkan(lewat https interface-nya ebox). Berikutnya, lewat https interface pula, buat group reader dan writer. Kita dapat membuat user baru, mengassign user ke kedua group tersebut.

Tambahkan isi berikut ini ke /etc/apache2/conf.d/svn-repository.conf (buat file baru):

<location /svnrepo>
Dav svn
AuthType Basic
AuthName "SVN repository"
AuthBasicProvider ldap
SVNPath /var/lib/svn
AuthLDAPURL "ldap://127.0.0.1:389/dc=ebox"
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
<limitexcept GET PROPFIND OPTIONS REPORT>
Require ldap-group cn=writers,ou=Groups,dc=ebox
</limitexcept>
<limit GET PROPFIND OPTIONS REPORT>
Require ldap-group cn=writers,ou=Groups,dc=ebox
Require ldap-group cn=readers,ou=Groups,dc=ebox
</limit>
SVNAutoversioning on
</location>

Restart Apache Service setelah mensave file ini.
That's all...
I hope it works for you too ..