#!/home/josh/apps/jruby-1.2.0/bin/jruby require 'java' BTM = Java::BitronixTm::bitronixTransactionManager TxnSvc = Java::BitronixTm::TransactionManagerServices PDS = Java::BitronixTmResourceJdbc::PoolingDataSource ds1 = PDS.new ds1.set_class_name 'org.postgresql.xa.PGXADataSource' ds1.set_unique_name 'pgsql1' ds1.set_max_pool_size 3 ds1.get_driver_properties.set_property 'databaseName', 'athos' ds1.get_driver_properties.set_property 'user', 'josh' ds1.init ds2 = PDS.new ds2.set_class_name 'org.postgresql.xa.PGXADataSource' ds2.set_unique_name 'pgsql2' ds2.set_max_pool_size 3 ds2.get_driver_properties.set_property 'databaseName', 'porthos' ds2.get_driver_properties.set_property 'user', 'josh' ds2.init c1 = ds1.get_connection c2 = ds2.get_connection btm = TxnSvc.get_transaction_manager btm.begin begin s2 = c2.prepare_statement "INSERT INTO ledger VALUES ('Bob', 100)" s2.execute_update s2.close s1 = c1.prepare_statement "INSERT INTO ledger VALUES ('Alice', -100)" s1.execute_update s1.close btm.commit puts "Successfully committed" rescue puts "Something bad happened: " + $! btm.rollback end c1.close c2.close btm.shutdown