blob: 6a2802008571679686f50406ea21889e797eaa35 [file] [log] [blame]
/*
* Copyright (c) OSGi Alliance (2016). All Rights Reserved.
*
* 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.osgi.service.transaction.control;
import java.util.concurrent.Callable;
/**
* Implementations of this interface are able to run a piece of work within a
* transaction
*/
public interface TransactionStarter {
/**
* A transaction is required to run the supplied piece of work. If no
* transaction is active then it must be started and associated with the
* work and then completed after the transactional work has finished.
*
* @param work The work to execute
* @return The value returned by the work
* @throws TransactionException if there is an error starting or completing
* the transaction
* @throws TransactionRolledBackException if the transaction rolled back due
* to a failure in one of the resources or an internal error in
* the TransactionControl service
* @throws ScopedWorkException if the supplied work throws an
* {@link Exception}
*/
<T> T required(Callable<T> work) throws TransactionException,
TransactionRolledBackException, ScopedWorkException;
/**
* A new transaction is required to run the supplied piece of work. If an
* existing transaction is active then it must suspended and a new
* transaction started and associated with the work. After the work has
* completed the new transaction must also complete and any suspended
* transaction be resumed.
*
* @param work The work to execute
* @return The value returned by the work
* @throws TransactionException if there is an error starting or completing
* the transaction
* @throws TransactionRolledBackException if the transaction rolled back due
* to a failure
* @throws ScopedWorkException if the supplied work throws an
* {@link Exception}
*/
<T> T requiresNew(Callable<T> work) throws TransactionException,
TransactionRolledBackException, ScopedWorkException;
/**
* The supplied piece of work must be run outside the context of a
* transaction. If an existing transaction is active then it must be
* suspended and a "no transaction" context associated with the work. After
* the work has completed any suspended transaction must be resumed.
* <p>
* The "no transaction" context does not support resource enlistment, and
* will not commit or rollback any changes, however it does provide a post
* completion callback to any registered functions. This function is
* suitable for final cleanup, such as closing a connection
*
* @param work The work to execute
* @return The value returned by the work
* @throws TransactionException if there is an error starting or completing
* the transaction
* @throws ScopedWorkException if the supplied work throws an
* {@link Exception}
*/
<T> T notSupported(Callable<T> work)
throws TransactionException, ScopedWorkException;
/**
* The supplied piece of work may run inside or outside the context of a
* transaction. If an existing transaction or "no transaction" context is
* active then it will continue, otherwise a new "no transaction" context is
* associated with the work. After the work has completed any created
* transaction context must be completed.
* <p>
* The "no transaction" context does not support resource enlistment, and
* will not commit or rollback any changes, however it does provide a post
* completion callback to any registered functions. This function is
* suitable for final cleanup, such as closing a connection
*
* @param work The work to execute
* @return The value returned by the work
* @throws TransactionException if there is an error starting or completing
* the transaction
* @throws ScopedWorkException if the supplied work throws an
* {@link Exception}
*/
<T> T supports(Callable<T> work)
throws TransactionException, ScopedWorkException;
}