Subversion Repository Public Repository

litesoft

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

Diff revisions: vs.
Revision Author Commited Message
949 Diff Diff GeorgeS picture GeorgeS Sun 08 Jun, 2014 17:19:33 +0000

Normalization

948 Diff Diff GeorgeS picture GeorgeS Sat 07 Jun, 2014 23:42:39 +0000

Jusefuls Formatter Updated to New Code Format

947 Diff Diff GeorgeS picture GeorgeS Fri 06 Jun, 2014 23:36:56 +0000

Correct Spelling of package!

939 Diff Diff GeorgeS picture GeorgeS Mon 02 Jun, 2014 21:30:31 +0000

Extracting commonfoundation

819 Diff Diff GeorgeS picture GeorgeS Sat 18 Aug, 2012 18:09:40 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000