Archive for April, 2007

How Open Source Projects Survive Poisonous People

Friday, April 27th, 2007

/by apr/

Google Techtalks: How Open Source Projects Survive Poisonous People

Hugo van der Zee (with the Cyclos project) pointed me to this nice Google TechTalk Video from the subversion guys.

We are a tiny little project compared with giant projects such as subversion, and we are lucky that we don´t have the problems that they describe, but it´s good to be aware of them before they happen.

Interesting enough, I´ve identified the power-plant problem a couple of times through these years (“Hey, my new version of jPOS is almost ready!! I will send it for your review soon — I´ll call it jPOS 7). Understanding that this is actually a problem is a good first step to solving it.

jPOS 1.6.0 has been released

Saturday, April 21st, 2007

/by apr/

jPOS 1.6.0 (aka jPOS 6) represents almost two years of hard work that include bugfixes, performance tuning and new components as described in our ChangeLog as well as a completely redesigned component-oriented build environment pioneered by the jPOS-EE project.

jPOS 6, distributed under a GPLv2 license, is considered a stable release and is being used by Fortune 500 companies to process millions of transactions per day.

You can download it here.

We will move our development version to 1.6.1.

TransactionManager Continuations

Friday, April 6th, 2007

/by apr/

I’m happy to announce a new and exciting TransactionManager’s feature — drum roll… PAUSE… :)CONTINUATIONS!.

You can now PAUSE a transaction (at a participant boundary) by returning PREPARED|PAUSE (or ABORTED|PAUSE).

The transaction gets suspended and resumes once you place it again in the TransactionManager’s queue (i.e. by calling txnmgr.queue (Context)).

Why this is important to us?

Imagine you have a transaction manager configured to run 100 simultaneous sessions. Even if 100 is a big number, when you depend on external components (such as a remote host) that can go slow you can easily exhaust all sessions.

When you have a single remote host and it goes slow, there’s nothing you can do about it, but when you connect to multiple acquirers and one of them goes slow, you don’t want to penalize the rest.

This problem has been described here where we use multiple TransactionManagers (one per remote host) with a pre-configured reasonable number of sessions and we forward transactions from one transaction manager to the next.

With continuations, we can split a participant that has to wait on remote events (i.e. a QueryHost or QueryHSM kind of participant). The first one just sends the request to the remote system and returns PREPARED|PAUSE. The session gets free and ready to process new transactions.

Once we receive a response, we just queue the Context back into the TransactionManager (I’ll add a Context.resume() method to ease finding the right space and queue) and the transaction continue processing.