public void performWork(Work work,
TransactionContext transactionContext) {
if ( transactionContext.isTransactionInProgress() ) {
Object transaction = transactionContext.getTransactionIdentifier();
PostTransactionWorkQueueSynchronization txSync = (PostTransactionWorkQueueSynchronization)
synchronizationPerTransaction.get( transaction );
if ( txSync == null || txSync.isConsumed() ) {
txSync = new PostTransactionWorkQueueSynchronization( queueingProcessor, synchronizationPerTransaction );
transactionContext.registerSynchronization( txSync );
synchronizationPerTransaction.put( transaction, txSync );
}
txSync.add( work );
}
else {
WorkQueue queue = new WorkQueue( 2 ); //one work can be split
queueingProcessor.add( work, queue );
queueingProcessor.prepareWorks( queue );
queueingProcessor.performWorks( queue );
}
}
|