org.springframework.data.crossstore.ChangeSetBackedTransactionSynchronization.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.data.crossstore.ChangeSetBackedTransactionSynchronization.java

Source

/*
 * Copyright 2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.crossstore;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.transaction.support.TransactionSynchronization;

public class ChangeSetBackedTransactionSynchronization implements TransactionSynchronization {

    protected final Log log = LogFactory.getLog(getClass());

    private final ChangeSetPersister<Object> changeSetPersister;
    private final ChangeSetBacked entity;
    private int changeSetTxStatus = -1;

    public ChangeSetBackedTransactionSynchronization(ChangeSetPersister<Object> changeSetPersister,
            ChangeSetBacked entity) {
        this.changeSetPersister = changeSetPersister;
        this.entity = entity;
    }

    public void afterCommit() {
        log.debug("After Commit called for " + entity);
        changeSetPersister.persistState(entity, entity.getChangeSet());
        changeSetTxStatus = 0;
    }

    public void afterCompletion(int status) {
        log.debug("After Completion called with status = " + status);
        if (changeSetTxStatus == 0) {
            if (status == STATUS_COMMITTED) {
                // this is good
                log.debug("ChangedSetBackedTransactionSynchronization completed successfully for " + this.entity);
            } else {
                // this could be bad - TODO: compensate
                log.error("ChangedSetBackedTransactionSynchronization failed for " + this.entity);
            }
        }
    }

    public void beforeCommit(boolean readOnly) {
    }

    public void beforeCompletion() {
    }

    public void flush() {
    }

    public void resume() {
        throw new IllegalStateException(
                "ChangedSetBackedTransactionSynchronization does not support transaction suspension currently.");
    }

    public void suspend() {
        throw new IllegalStateException(
                "ChangedSetBackedTransactionSynchronization does not support transaction suspension currently.");
    }

}