I can think of two things that may help.
If you change the session bean to have a method that does one chunk of work. You mark that method with tx attribute reqires new. Then when you call that method (through a remote or local interface) the container will suspend the current transaction and start a new one. The new transaction commits independantly of the old transaction. When the new transaction is done (at the end of the method) the old tx is resumed.
That only works if you can isolate the code to a method. If that does not work you can manage the trasaction directly. I do not recomend this, as it is way more difficult to code an maintain.