All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jodd.jtx.JtxTransactionMode Maven / Gradle / Ivy

There is a newer version: 5.1.0-20190624
Show newest version
// Copyright (c) 2003-present, Jodd Team (http://jodd.org)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

package jodd.jtx;

import jodd.util.HashCode;
import static jodd.util.HashCode.hash;
import static jodd.jtx.JtxPropagationBehavior.*;
import static jodd.jtx.JtxIsolationLevel.*;

/**
 * Transaction mode is defined by {@link JtxPropagationBehavior propagation behavior},
 * {@link JtxIsolationLevel isolation level} and read-only flag.
 */
public class JtxTransactionMode {

	public JtxTransactionMode() {
		this.propagationBehavior = PROPAGATION_SUPPORTS;
		this.isolationLevel = ISOLATION_DEFAULT;
		this.readOnlyMode = READ_ONLY;
		this.timeout = DEFAULT_TIMEOUT;
	}

	// ---------------------------------------------------------------- propagation behaviour

	protected JtxPropagationBehavior propagationBehavior;

	public JtxPropagationBehavior getPropagationBehavior() {
		return propagationBehavior;
	}

	/**
	 * Specifies new propagation behaviour.
s	 */
	public void setPropagationBehaviour(JtxPropagationBehavior propagation) {
		this.propagationBehavior = propagation;
	}

	/**
	 * Propagation required.
	 * 
{@code
	 * None -> T2 (same session, new tx)
	 * T1 -> T1 (same session, join tx)
	 * }
*/ public JtxTransactionMode propagationRequired() { this.propagationBehavior = PROPAGATION_REQUIRED; return this; } /** * Propagation supports. *
{@code
	 * None -> None (same session)
	 * T1 -> T1 (same session, join tx)
	 * }
*/ public JtxTransactionMode propagationSupports() { this.propagationBehavior = PROPAGATION_SUPPORTS; return this; } /** * Propagation mandatory. *
{@code
	 * None -> Error
	 * T1 -> T1 (same session, join tx)
	 * }
*/ public JtxTransactionMode propagationMandatory() { this.propagationBehavior = PROPAGATION_MANDATORY; return this; } /** * Propagation requires new. *
{@code
	 * None -> T2 (same session, new tx)
	 * T1 -> T2  (new session, new tx)
	 * }
*/ public JtxTransactionMode propagationRequiresNew() { this.propagationBehavior = PROPAGATION_REQUIRES_NEW; return this; } /** * Propagation not supported. *
{@code
	 * None -> None (same session)
	 * T1 -> None (new session, no tx)
	 * }
*/ public JtxTransactionMode propagationNotSupported() { this.propagationBehavior = PROPAGATION_NOT_SUPPORTED; return this; } /** * Propagation never. *
{@code
	 * None -> None (same session)
	 * T1 -> Error
	 * }
*/ public JtxTransactionMode propagationNever() { this.propagationBehavior = PROPAGATION_NEVER; return this; } // ---------------------------------------------------------------- isolation private JtxIsolationLevel isolationLevel; public JtxIsolationLevel getIsolationLevel() { return isolationLevel; } public void setIsolationLevel(JtxIsolationLevel isolation) { this.isolationLevel = isolation; } public JtxTransactionMode isolationNone() { this.isolationLevel = ISOLATION_NONE; return this; } public JtxTransactionMode isolationReadUncommitted() { this.isolationLevel = ISOLATION_READ_UNCOMMITTED; return this; } public JtxTransactionMode isolationReadCommitted() { this.isolationLevel = ISOLATION_READ_COMMITTED; return this; } public JtxTransactionMode isolationRepeatableRead() { this.isolationLevel = ISOLATION_REPEATABLE_READ; return this; } public JtxTransactionMode isolationSerializable() { this.isolationLevel = ISOLATION_SERIALIZABLE; return this; } // ---------------------------------------------------------------- read-only public static final boolean READ_ONLY = true; public static final boolean READ_WRITE = false; private boolean readOnlyMode; public boolean isReadOnly() { return readOnlyMode; } public void setReadOnly(boolean readOnly) { this.readOnlyMode = readOnly; } public JtxTransactionMode readOnly(boolean readOnly) { this.readOnlyMode = readOnly; return this; } // ---------------------------------------------------------------- time-out public static final int DEFAULT_TIMEOUT = -1; private int timeout; /** * Returns transaction timeout in seconds. */ public int getTransactionTimeout() { return timeout; } /** * Sets transaction timeout in seconds. */ public void setTransactionTimeout(int timeout) { if (timeout < DEFAULT_TIMEOUT) { throw new JtxException("Invalid TX timeout: " + timeout); } this.timeout = timeout; } public JtxTransactionMode transactionTimeout(int timeout) { setTransactionTimeout(timeout); return this; } // ---------------------------------------------------------------- equals & hashCode @Override public boolean equals(Object object) { if (this == object) { return true; } if (this.getClass() != object.getClass()) { return false; } JtxTransactionMode mode = (JtxTransactionMode) object; return (mode.getPropagationBehavior() == this.propagationBehavior) && (mode.getIsolationLevel() == this.isolationLevel) && (mode.isReadOnly() == this.readOnlyMode) && (mode.getTransactionTimeout() == this.timeout); } @Override public int hashCode() { int result = HashCode.SEED; result = hash(result, propagationBehavior); result = hash(result, readOnlyMode); result = hash(result, isolationLevel); result = hash(result, timeout); return result; } // ---------------------------------------------------------------- to string /** * Returns tx description for debugging purposes. */ @Override public String toString() { return new StringBuilder().append("jtx{").append(propagationBehavior) .append(',').append(readOnlyMode ? "readonly" : "readwrite") .append(',').append(isolationLevel.toString()).append(',') .append(timeout).append('}').toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy