Given that you posted this in the
EJB forum, presumably these database interactions are somehow implemented in EJB, e.g. entity beans. If so, another thing to take a look at are the vendor-specific deployment descriptor options that control how your database changes are actually processed during and at the end of the transaction. Sometimes you can get a very significant speedup by ensuring that all the writes happen just on the transaction commit. Particularly in WebLogic and I believe also in the most recent
JBoss 3.2.x and 4.0.x releases, you can see very big differences in CMP performance because the container can sometimes switch to using SQL batching.
The JMS approach works ok too, but only if you aren't expecting to forward the user to a page that reflects the committed results. Obviously those won't always be available if the changes are off processing in some other
thread of execution.