litesoft
@ 949
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
// This Source Code is in the Public Domain per: http://unlicense.org package org.litesoft.orsup.nonpublic; import org.litesoft.commonfoundation.typeutils.gregorian.*; import org.litesoft.logger.*; import org.litesoft.orsup.transact.*; import java.sql.*; import java.util.*; public class TransCommitCollector { public static final Logger LOGGER = LoggerFactory.getLogger( TransCommitCollector.class ); private Timestamp mTransactionTimeStamp = Timestamps.now(); private Set<TransCommitEntry> mEntries = new HashSet<TransCommitEntry>(); private CA_LinkListNode mCommitAugmentors; public TransCommitCollector( CA_LinkListNode pCommitAugmentors ) { mCommitAugmentors = pCommitAugmentors; } public void augment( HistoryAugmentor pHistoryAugmentor ) { for ( TransCommitEntry entry : mEntries ) { entry.augment( pHistoryAugmentor, mTransactionTimeStamp ); } } public void add( List<PersistentObjectImpl<?>> pParticipants ) { for ( PersistentObjectImpl participant : pParticipants ) { TransCommitEntry entry = new TransCommitEntry( participant ); entry.checkShouldProcess_AboutToCommit( mCommitAugmentors, mTransactionTimeStamp ); if ( !mEntries.add( entry ) ) { LOGGER.error.log( "Duplicate (", participant, ") Entry on add(...)?" ); } } for ( int i = 9; i >= 0; i-- ) { boolean changes = false; for ( TransCommitEntry entry : mEntries ) { if ( entry.checkShouldProcess_AboutToCommit( mCommitAugmentors, mTransactionTimeStamp ) ) { changes = true; } } if ( !changes ) { return; } } throw new IllegalStateException( "Pre-Commit Changes did not stabilize" ); } public void justAdd( List<PersistentObjectImpl<?>> pParticipants ) { for ( PersistentObjectImpl participant : pParticipants ) { TransCommitEntry entry = new TransCommitEntry( participant ); entry.updateChangeNumber(); if ( !mEntries.add( entry ) ) { LOGGER.error.log( "Duplicate (", participant, ") Entry on add(...)?" ); } } } public void validateNoChanges( String pWhoToBlame ) { StringBuilder sb = null; for ( TransCommitEntry entry : mEntries ) { if ( entry.hasChanged() ) { if ( sb == null ) { sb = new StringBuilder( pWhoToBlame ).append( " caused changes in the following PO(s):" ); } sb.append( "\n " ).append( entry.getParticipant() ); } } if ( sb != null ) { throw new IllegalStateException( sb.toString() ); } } public Set<PersistentObjectImpl> getEntriesToCommit( DataStoreChangeCollector pCollector ) { Set<PersistentObjectImpl> commiting = new HashSet<PersistentObjectImpl>( mEntries.size() ); for ( TransCommitEntry entry : mEntries ) { PersistentObjectImpl participant = entry.getParticipant(); if ( participant.isDirty() ) { pCollector.add( participant, entry.getExtraPOinfo() ); participant.setCommitTimestamps( mTransactionTimeStamp ); if ( !commiting.add( participant ) ) { LOGGER.error.log( "Duplicate (", participant, ") Entry on getEntriesToCommit(...)?" ); } } else if ( participant.isForcedChangeNotification() ) { pCollector.add( participant, entry.getExtraPOinfo() ); } } return commiting; } public void commitSucceeded( String pTransactionSourceId, SucceededTransactionCommitListener[] pSucceededTransactionCommitListeners, TransParticipantsManager pTransParticipantsManager ) { for ( TransCommitEntry entry : mEntries ) { try { PersistentObjectImpl.BackDoor.transactionCommitSucceededDropTransactionOn( entry.getParticipant() ); } catch ( RuntimeException ignore ) { LOGGER.error.log( ignore, "successfulCommit?" ); // We have already succeeded, don't fail now } } for ( SucceededTransactionCommitListener zSucceededTransactionCommitListener : pSucceededTransactionCommitListeners ) { zSucceededTransactionCommitListener.successfulCommitBeforeClear( pTransactionSourceId, mEntries, pTransParticipantsManager ); } for ( TransCommitEntry entry : mEntries ) { try { PersistentObjectImpl.BackDoor.transactionCommitSucceededClearTransactionalChangesOn( entry.getParticipant() ); } catch ( RuntimeException ignore ) { LOGGER.error.log( ignore, "successfulCommit?" ); // We have already succeeded, don't fail now } } } } |
Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/orsup/nonpublic/TransCommitCollector.java
Revision | Author | Commited | Message |
---|---|---|---|
949 Diff | GeorgeS | Sun 08 Jun, 2014 17:19:33 +0000 | Normalization |
948 Diff | GeorgeS | Sat 07 Jun, 2014 23:42:39 +0000 | Jusefuls Formatter Updated to New Code Format |
947 Diff | GeorgeS | Fri 06 Jun, 2014 23:36:56 +0000 | Correct Spelling of package! |
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
819 Diff | GeorgeS | Sat 18 Aug, 2012 18:09:40 +0000 | |
49 Diff | GeorgeS | Mon 12 Apr, 2010 02:59:10 +0000 | License Text |
2 | GeorgeS | Sun 07 Feb, 2010 12:50:58 +0000 |