/*
* Don't use foreach iteration here, so that we can handle the
* possibility that a beforeCompletion call adds another listener.
*/
for (int i = 0; i < listeners.size(); i++) {
TransactionListener listener = listeners.get(i);
try {
if (listenerDetailMap != null) {
detail = listenerDetailMap.get(listener.getTypeName());
startTime = System.currentTimeMillis();
}
listener.beforeCompletion();
if (detail != null) {
long time = System.currentTimeMillis() - startTime;
detail.setCalledBeforeCompletion(false, time);
}
} catch (RuntimeException e) {