}
private void processWork(Work work, AbstractEvent event) {
if ( event.getSession().isTransactionInProgress() ) {
Transaction transaction = event.getSession().getTransaction();
PostTransactionWorkQueueSynchronization sync = (PostTransactionWorkQueueSynchronization)
queuePerTransaction.get( transaction );
if ( sync == null || sync.isConsumed() ) {
WorkQueue workQueue = new BatchLuceneWorkQueue( documentBuilders, lockableDirectoryProviders );
sync = new PostTransactionWorkQueueSynchronization( workQueue, queuePerTransaction );
transaction.registerSynchronization( sync );
queuePerTransaction.put(transaction, sync);
}
sync.add( work );
}
else {
WorkQueue workQueue = new BatchLuceneWorkQueue( documentBuilders, lockableDirectoryProviders );
PostTransactionWorkQueueSynchronization sync = new PostTransactionWorkQueueSynchronization( workQueue );
sync.add( work );
sync.afterCompletion( Status.STATUS_COMMITTED );
}
}