As you have a CMT bean, you must not use the commit, setAutoCommit or rollback methods.
It looks as if it is taking too long for the transaction to run. Typically, an
EJB container will have a default of, say, 30 seconds for a transaction to last. If the transaction is still running after this period of time, the container will rollback the transaction.
You can increase the transaction period, but it is best to find out what is taking the time. (I don't think
you should normally increase the transaction period by much, if at all.) For instance, how long does each PreparedStatement take to execute? You may eventually find that you can only send it in chunks of 30 per minute.
I've a few comments on your code.
You are swallowing exceptions. Never do this as you will lose valuable information if something goes wrong. At the least, log the getMessage().
You are not closing each PreparedStatement. This means that the PreparedStatement will most likely be closed on garbage collection, which could result in cursor leaks and/or a thread causing table locking.
You are getting a Connection three times. You only need to get one Connection from the pool, which will be returned to the pool when closed.
Incidentally, is your transaction attribute set to Required?