blob: 03320acd130396e5e8d71763d07a6c5b053222cc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.jena.dboe.transaction.txn;
import org.apache.jena.dboe.transaction.Transactional;
/** Implementation side of a {@link Transactional}.
* {@link Transactional} presents the application facing view
* whereas this has all the possible steps of an implementation.
* Normally, the implementation of {@link #commit} is split up.
*/
public interface TransactionalSystem extends Transactional {
@Override
public default void commit() {
commitPrepare();
commitExec();
}
/** Do the 2-phase "prepare" step after which
* the transaction coordinator decides whether to commit
* or abort. A TransactionalSystem must be prepared for
* both possibilities.
*/
public void commitPrepare();
/** Do the 2-phase "commit" step */
public void commitExec();
/** Suspend this transaction, detaching from the current thread.
* A new transaction on this thread can performed but the detached
* transaction still exists and if it is a write transaction
* it can still block other write transactions.
*/
public TransactionCoordinatorState detach();
/**
* Attach a transaction to this thread.
* A transaction system implementation usually imposes a rule that
* only one thread can have a transaction attached at a time.
*/
public void attach(TransactionCoordinatorState coordinatorState);
/** Get the associated {@link TransactionCoordinator} */
public TransactionCoordinator getTxnMgr();
/** Return an information view of the transaction for this thread, if any.
* Returns null when there is no active transaction for this tread.
*/
public TransactionInfo getTransactionInfo();
/** Return the transaction object for this thread.
* Low-level use only.
* To get information about the current transaction, call {@link #getTransactionInfo}.
*/
public Transaction getThreadTransaction();
}