blob: 05c63262c72dc3265f56d7989ac3c2a76e1418fa [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.exceptions;
import org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator;
/**
* <P><B>Purpose</B>: Concurrency deadlock or interupts will raise this exception.
*/
public class ConcurrencyException extends EclipseLinkException {
public final static int WAIT_WAS_INTERRUPTED = 2001;
public final static int WAIT_FAILURE_SERVER = 2002;
public final static int WAIT_FAILURE_CLIENT = 2003;
public final static int SIGNAL_ATTEMPTED_BEFORE_WAIT = 2004;
public final static int WAIT_FAILURE_SEQ_DATABASE_SESSION = 2005;
public final static int SEQUENCING_MULTITHREAD_THRU_CONNECTION = 2006;
public final static int MAX_TRIES_EXCEDED_FOR_LOCK_ON_CLONE = 2007;
public final static int MAX_TRIES_EXCEDED_FOR_LOCK_ON_MERGE = 2008;
public final static int MAX_TRIES_EXCEDED_FOR_LOCK_ON_BUILD_OBJECT = 2009;
public final static int ACTIVE_LOCK_ALREADY_TRANSITIONED = 2010;
/**
* INTERNAL:
* TopLink exceptions should only be thrown by TopLink.
*/
protected ConcurrencyException(String theMessage) {
super(theMessage);
}
/**
* INTERNAL:
* TopLink exceptions should only be thrown by TopLink.
*/
protected ConcurrencyException(String theMessage, Exception exception) {
super(theMessage, exception);
}
public static ConcurrencyException activeLockAlreadyTransitioned(Thread currentThread) {
Object[] args = { currentThread};
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, ACTIVE_LOCK_ALREADY_TRANSITIONED, args));
concurrencyException.setErrorCode(ACTIVE_LOCK_ALREADY_TRANSITIONED);
return concurrencyException;
}
public static ConcurrencyException maxTriesLockOnCloneExceded(Object objectToClone) {
Object[] args = { objectToClone, CR };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, MAX_TRIES_EXCEDED_FOR_LOCK_ON_CLONE, args));
concurrencyException.setErrorCode(MAX_TRIES_EXCEDED_FOR_LOCK_ON_CLONE);
return concurrencyException;
}
public static ConcurrencyException maxTriesLockOnMergeExceded(Object objectToClone) {
Object[] args = { objectToClone, CR };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, MAX_TRIES_EXCEDED_FOR_LOCK_ON_MERGE, args));
concurrencyException.setErrorCode(MAX_TRIES_EXCEDED_FOR_LOCK_ON_MERGE);
return concurrencyException;
}
public static ConcurrencyException maxTriesLockOnBuildObjectExceded(Thread cacheKeyThread, Thread currentThread) {
Object[] args = { cacheKeyThread, currentThread, CR };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, MAX_TRIES_EXCEDED_FOR_LOCK_ON_BUILD_OBJECT, args));
concurrencyException.setErrorCode(MAX_TRIES_EXCEDED_FOR_LOCK_ON_BUILD_OBJECT);
return concurrencyException;
}
public static ConcurrencyException signalAttemptedBeforeWait() {
Object[] args = { CR };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, SIGNAL_ATTEMPTED_BEFORE_WAIT, args));
concurrencyException.setErrorCode(SIGNAL_ATTEMPTED_BEFORE_WAIT);
return concurrencyException;
}
public static ConcurrencyException waitFailureOnClientSession(InterruptedException exception) {
Object[] args = { };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, WAIT_FAILURE_CLIENT, args), exception);
concurrencyException.setErrorCode(WAIT_FAILURE_CLIENT);
return concurrencyException;
}
public static ConcurrencyException waitFailureOnServerSession(InterruptedException exception) {
Object[] args = { };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, WAIT_FAILURE_SERVER, args), exception);
concurrencyException.setErrorCode(WAIT_FAILURE_SERVER);
return concurrencyException;
}
public static ConcurrencyException waitWasInterrupted(String message) {
Object[] args = { CR, message };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, WAIT_WAS_INTERRUPTED, args));
concurrencyException.setErrorCode(WAIT_WAS_INTERRUPTED);
return concurrencyException;
}
public static ConcurrencyException waitFailureOnSequencingForDatabaseSession(InterruptedException exception) {
Object[] args = { };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, WAIT_FAILURE_SEQ_DATABASE_SESSION, args), exception);
concurrencyException.setErrorCode(WAIT_FAILURE_SEQ_DATABASE_SESSION);
return concurrencyException;
}
public static ConcurrencyException sequencingMultithreadThruConnection(String accessor) {
Object[] args = { accessor };
ConcurrencyException concurrencyException = new ConcurrencyException(ExceptionMessageGenerator.buildMessage(ConcurrencyException.class, SEQUENCING_MULTITHREAD_THRU_CONNECTION, args));
concurrencyException.setErrorCode(SEQUENCING_MULTITHREAD_THRU_CONNECTION);
return concurrencyException;
}
}