Java 类org.hibernate.exception.LockAcquisitionException 实例源码
项目:lams
文件:PostgreSQL81Dialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
if ( "40P01".equals( sqlState ) ) {
// DEADLOCK DETECTED
return new LockAcquisitionException( message, sqlException, sql );
}
if ( "55P03".equals( sqlState ) ) {
// LOCK NOT AVAILABLE
return new PessimisticLockException( message, sqlException, sql );
}
// returning null allows other delegates to operate
return null;
}
};
}
项目:vsDiaryWriter
文件:SQLiteDialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException);
if (errorCode == SQLITE_TOOBIG || errorCode == SQLITE_MISMATCH) {
return new DataException(message, sqlException, sql);
} else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
return new LockAcquisitionException(message, sqlException, sql);
} else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOTADB) {
return new JDBCConnectionException(message, sqlException, sql);
}
// returning null allows other delegates to operate
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException,
String message, String sql) {
final String sqlState = JdbcExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException,
sql);
} else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
} else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message,
sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException,
String message, String sql) {
final String sqlState = JdbcExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException,
sql);
} else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
} else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message,
sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException, String message,
String sql) {
final String sqlState = JDBCExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException, sql);
}
else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
}
else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message, sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException, String message,
String sql) {
final String sqlState = JDBCExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException, sql);
}
else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
}
else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message, sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException,
String message, String sql) {
final String sqlState = JdbcExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException,
sql);
} else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
} else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message,
sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException,
String message, String sql) {
final String sqlState = JdbcExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException,
sql);
} else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
} else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message,
sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException, String message,
String sql) {
final String sqlState = JDBCExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException, sql);
}
else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
}
else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message, sqlException, sql);
}
}
return null;
}
};
}
项目:gemfirexd-oss
文件:GemFireXDDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException, String message,
String sql) {
final String sqlState = JDBCExceptionHelper
.extractSqlState(sqlException);
if (sqlState != null) {
if (SQL_GRAMMAR_CATEGORIES.contains(sqlState)) {
return new SQLGrammarException(message, sqlException, sql);
}
else if (DATA_CATEGORIES.contains(sqlState)) {
return new DataException(message, sqlException, sql);
}
else if (LOCK_ACQUISITION_CATEGORIES.contains(sqlState)) {
return new LockAcquisitionException(message, sqlException, sql);
}
}
return null;
}
};
}
项目:spletne-seje
文件:SQLiteDialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException);
if (errorCode == SQLITE_TOOBIG || errorCode == SQLITE_MISMATCH) {
return new DataException(message, sqlException, sql);
} else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
return new LockAcquisitionException(message, sqlException, sql);
} else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOTADB) {
return new JDBCConnectionException(message, sqlException, sql);
}
return null;
}
};
}
项目:Introspect-Framework
文件:SQLiteDialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException);
if (errorCode == SQLITE_TOOBIG || errorCode == SQLITE_MISMATCH) {
return new DataException(message, sqlException, sql);
} else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
return new LockAcquisitionException(message, sqlException, sql);
} else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOTADB) {
return new JDBCConnectionException(message, sqlException, sql);
}
// returning null allows other delegates to operate
return null;
}
};
}
项目:yeti
文件:SQLiteDialect.java
@Override
public SQLExceptionConverter buildSQLExceptionConverter() {
return new SQLExceptionConverter() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final int errorCode = sqlException.getErrorCode();
if (errorCode == SQLITE_CONSTRAINT) {
final String constraintName = EXTRACTER.extractConstraintName(sqlException);
return new ConstraintViolationException(message, sqlException, sql, constraintName);
} else if (errorCode == SQLITE_TOOBIG || errorCode == SQLITE_MISMATCH) {
return new DataException(message, sqlException, sql);
} else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
return new LockAcquisitionException(message, sqlException, sql);
} else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOTADB) {
return new JDBCConnectionException(message, sqlException, sql);
}
return new GenericJDBCException(message, sqlException, sql);
}
};
}
项目:open-cyclos
文件:ExceptionHelper.java
private static boolean isLockingException(final Throwable t, final boolean recurse) {
if (t instanceof LockingException || t instanceof LockAcquisitionException || t instanceof PessimisticLockException) {
return true;
}
if (t instanceof SQLException) {
final SQLException e = (SQLException) t;
return e.getErrorCode() == ER_LOCK_WAIT_TIMEOUT || ST_LOCK.equals(e.getSQLState());
}
if (recurse) {
for (final Throwable thr : ExceptionUtils.getThrowables(t)) {
if (isLockingException(thr, false)) {
return true;
}
}
}
return false;
}
项目:sqlite-dialect
文件:SQLiteSQLExceptionConversionDelegate.java
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException);
if (errorCode == SQLITE_CONSTRAINT) {
final String constraintName = EXTRACTER.extractConstraintName(sqlException);
return new ConstraintViolationException(message, sqlException, sql, constraintName);
} else if (errorCode == SQLITE_TOO_BIG || errorCode == SQLITE_MISMATCH) {
return new DataException(message, sqlException, sql);
} else if (errorCode == SQLITE_BUSY || errorCode == SQLITE_LOCKED) {
return new LockAcquisitionException(message, sqlException, sql);
} else if ((errorCode >= SQLITE_IO_ERR && errorCode <= SQLITE_PROTOCOL) || errorCode == SQLITE_NOT_ADB) {
return new JDBCConnectionException(message, sqlException, sql);
}
return new GenericJDBCException(message, sqlException, sql);
}
项目:sqlite-dialect
文件:SQLiteSQLExceptionConversionDelegateTest.java
@Test
public void returnsLockAcquisitionExceptionForSqliteBusy() {
when(JdbcExceptionHelper.extractErrorCode(sqlException)).thenReturn(5);
JDBCException exception = conversionDelegate.convert(sqlException, "message", "sql");
assertTrue(exception instanceof LockAcquisitionException);
assertEquals("message", exception.getMessage());
assertEquals("sql", exception.getSQL());
}
项目:sqlite-dialect
文件:SQLiteSQLExceptionConversionDelegateTest.java
@Test
public void returnsLockAcquisitionExceptionForSqliteLocked() {
when(JdbcExceptionHelper.extractErrorCode(sqlException)).thenReturn(6);
JDBCException exception = conversionDelegate.convert(sqlException, "message", "sql");
assertTrue(exception instanceof LockAcquisitionException);
assertEquals("message", exception.getMessage());
assertEquals("sql", exception.getSQL());
}
项目:lams
文件:SQLExceptionTypeDelegate.java
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
if ( SQLClientInfoException.class.isInstance( sqlException )
|| SQLInvalidAuthorizationSpecException.class.isInstance( sqlException )
|| SQLNonTransientConnectionException.class.isInstance( sqlException )
|| SQLTransientConnectionException.class.isInstance( sqlException ) ) {
return new JDBCConnectionException( message, sqlException, sql );
}
else if ( DataTruncation.class.isInstance( sqlException ) ||
SQLDataException.class.isInstance( sqlException ) ) {
throw new DataException( message, sqlException, sql );
}
else if ( SQLIntegrityConstraintViolationException.class.isInstance( sqlException ) ) {
return new ConstraintViolationException(
message,
sqlException,
sql,
getConversionContext().getViolatedConstraintNameExtracter().extractConstraintName( sqlException )
);
}
else if ( SQLSyntaxErrorException.class.isInstance( sqlException ) ) {
return new SQLGrammarException( message, sqlException, sql );
}
else if ( SQLTimeoutException.class.isInstance( sqlException ) ) {
return new QueryTimeoutException( message, sqlException, sql );
}
else if ( SQLTransactionRollbackException.class.isInstance( sqlException ) ) {
// Not 100% sure this is completely accurate. The JavaDocs for SQLTransactionRollbackException state that
// it indicates sql states starting with '40' and that those usually indicate that:
// <quote>
// the current statement was automatically rolled back by the database because of deadlock or
// other transaction serialization failures.
// </quote>
return new LockAcquisitionException( message, sqlException, sql );
}
return null; // allow other delegates the chance to look
}
项目:helium
文件:JobExecutorThread.java
private static boolean isLockingException(Throwable throwable) {
for (Throwable t = throwable; t != null; t = t.getCause()) {
if (t instanceof StaleStateException || t instanceof LockAcquisitionException) {
return true;
}
}
return false;
}
项目:ephesoft
文件:BatchInstanceServiceImpl.java
/**
* API to get a batch by applying Hibernate level optimistic locking and to set lock owner ino db.
*
* @param identifier long
* @param lockOwner {@link ServerRegistry}
* @throws LockAcquisitionException in case of error
*/
@Transactional
@Override
public void lockBatch(long batchId, ServerRegistry lockOwner) throws LockAcquisitionException {
BatchInstance batchInstance = batchInstanceDao.getBatch(batchId, LockMode.UPGRADE_NOWAIT);
if (batchInstance.getLockOwner() == null) {
batchInstance.setLockOwner(lockOwner);
batchInstanceDao.saveOrUpdate(batchInstance);
} else {
throw new LockAcquisitionException(DataAccessConstant.BATCH_ALREADY_LOCKED, null);
}
}
项目:ephesoft
文件:BatchInstanceServiceImpl.java
/**
* API to acquire lock on a batch instance.
*
* @param batchId long
* @throws LockAcquisitionException in case of error
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public void lockBatch(long batchId) throws LockAcquisitionException {
BatchInstance batchInstance = batchInstanceDao.getBatch(batchId, LockMode.UPGRADE_NOWAIT);
if (batchInstance.getStatus() == BatchInstanceStatus.NEW) {
batchInstance.setStatus(BatchInstanceStatus.LOCKED);
batchInstanceDao.saveOrUpdate(batchInstance);
} else {
throw new LockAcquisitionException(DataAccessConstant.BATCH_ALREADY_LOCKED, null);
}
}
项目:ephesoft
文件:PickupServiceImpl.java
@Override
public void pickupBatchInstance() {
List<BatchInstance> newBatches = batchInstanceService.getBatchInstByStatus(BatchInstanceStatus.NEW);
for (BatchInstance newBatchInstance : newBatches) {
try {
batchInstanceService.lockBatch(newBatchInstance.getId());
workFlowService.startWorkflow(newBatchInstance.getBatchInstanceID());
} catch (LockAcquisitionException e) {
log.trace("Batch instance -" + newBatchInstance.getIdentifier() + " is already locked.");
}
}
}
项目:mad-java
文件:HibernateExceptionHandler.java
public static void rethrowAsDatastoreLogAll( final HibernateException he, final Log log, final String message )
throws DatastoreException
{
final String internalMess = concMess( message, he );
if (he instanceof JDBCConnectionException || he instanceof GenericJDBCException
|| he instanceof SQLGrammarException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof ConstraintViolationException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof LockAcquisitionException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof QuerySyntaxException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof QueryException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
}
项目:mad-java
文件:HibernateExceptionHandler.java
public static void rethrowJdbcAsDatastore( final HibernateException he, final Log log, final String message, final int logErrorMask ) // NOPMD by dan on 01/02/15 07:21
throws DatastoreException
{
final String internalMess = concMess( message, he );
if (he instanceof JDBCConnectionException || he instanceof GenericJDBCException
|| he instanceof SQLGrammarException)
{
if ((logErrorMask & JDBC_IS_ERROR) != 0)
{
log.error( internalMess, he );
}
throw new DatastoreException( internalMess, he );
}
else if (he instanceof ConstraintViolationException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof LockAcquisitionException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof QuerySyntaxException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
}
项目:scheduling
文件:TransactionHelperTest.java
@Test
public void testExecuteReadWriteTransactionRetry() {
PASchedulerProperties.SCHEDULER_DB_TRANSACTION_MAXIMUM_RETRIES.updateProperty("5");
when(sessionWork.doInTransaction(session)).thenThrow(LockAcquisitionException.class)
.thenThrow(Throwable.class)
.thenReturn(null);
transactionHelper.executeReadWriteTransaction(sessionWork);
verify(session, times(3)).beginTransaction();
verify(sessionWork, times(3)).doInTransaction(session);
verify(transaction, times(2)).rollback();
verify(transaction).commit();
}
项目:openMAXIMS
文件:AppointmentOutcomeDialogImpl.java
public Boolean hasTCI(Booking_AppointmentRefVo appointment)
{
if (appointment == null)
return Boolean.FALSE;
long count = 0;
String query = "SELECT COUNT (tci.id) FROM TCIForPatientElectiveList AS tci LEFT JOIN tci.appointment AS appt WHERE appt.id = :APPT_ID and tci.isRIE is null";
//WDEV-23321
try
{
count = getDomainFactory().countWithHQL(query, new String[] {"APPT_ID"}, new Object[] {appointment.getID_Booking_Appointment()});
}
catch (RuntimeException e) {
if (e instanceof LockAcquisitionException)
{
try
{
count = getDomainFactory().countWithHQL(query, new String[] {"APPT_ID"}, new Object[] {appointment.getID_Booking_Appointment()});
}
catch (RuntimeException e1)
{
if (e1 instanceof LockAcquisitionException)
{
throw new StaleStateException(ConfigFlag.UI.STALE_OBJECT_MESSAGE.getValue());
}
}
}
}
//WDEV-23321 ends here
if (count > 0)
return Boolean.TRUE;
return Boolean.FALSE;
}
项目:java-retry
文件:HibernateTransientExceptionDetector.java
@Override
public boolean isTransient(Exception e) {
if (e instanceof LockAcquisitionException || e instanceof PessimisticLockException || e instanceof JDBCConnectionException) {
return true;
}
if (e instanceof GenericJDBCException) {
JDBCException se = (JDBCException) e;
return super.isTransient(se.getSQLException());
}
return false;
}
项目:dhus-core
文件:ODataProductSynchronizer.java
@Override
public boolean synchronize () throws InterruptedException
{
int retrieved = 0, updated = 0, deleted = 0;
LOGGER.info("Synchronizer#{} started", getId());
try
{
if (this.copyProduct)
{
if (checkDownloadTasks())
{
retrieved = getAndCopyNewProduct();
}
}
else
{
retrieved = getNewProducts();
}
if (Thread.interrupted ())
{
throw new InterruptedException ();
}
updated = getUpdatedProducts ();
if (Thread.interrupted ())
{
throw new InterruptedException ();
}
deleted = getDeletedProducts ();
}
catch (LockAcquisitionException | CannotAcquireLockException e)
{
throw new InterruptedException (e.getMessage ());
}
finally
{
// Writes the database only if there is a modification
if (this.dateChanged)
{
this.syncConf.setConfig("last_created", String.valueOf(this.lastCreated.getTime()));
SYNC_SERVICE.saveSynchronizer(this);
this.dateChanged = false;
}
}
return retrieved < pageSize && updated < pageSize && deleted < pageSize;
}
项目:lams
文件:SQLStateConversionDelegate.java
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
if ( sqlState != null ) {
String sqlStateClassCode = JdbcExceptionHelper.determineSqlStateClassCode( sqlState );
if ( sqlStateClassCode != null ) {
if ( SQL_GRAMMAR_CATEGORIES.contains( sqlStateClassCode ) ) {
return new SQLGrammarException( message, sqlException, sql );
}
else if ( INTEGRITY_VIOLATION_CATEGORIES.contains( sqlStateClassCode ) ) {
final String constraintName = getConversionContext()
.getViolatedConstraintNameExtracter()
.extractConstraintName( sqlException );
return new ConstraintViolationException( message, sqlException, sql, constraintName );
}
else if ( CONNECTION_CATEGORIES.contains( sqlStateClassCode ) ) {
return new JDBCConnectionException( message, sqlException, sql );
}
else if ( DATA_CATEGORIES.contains( sqlStateClassCode ) ) {
return new DataException( message, sqlException, sql );
}
}
if ( "40001".equals( sqlState ) ) {
return new LockAcquisitionException( message, sqlException, sql );
}
if ( "40XL1".equals( sqlState ) || "40XL2".equals( sqlState )) {
// Derby "A lock could not be obtained within the time requested."
return new PessimisticLockException( message, sqlException, sql );
}
// MySQL Query execution was interrupted
if ( "70100".equals( sqlState ) ||
// Oracle user requested cancel of current operation
( "72000".equals( sqlState ) && errorCode == 1013 ) ) {
throw new QueryTimeoutException( message, sqlException, sql );
}
}
return null;
}
项目:lams
文件:MySQLDialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
final String sqlState = JdbcExceptionHelper.extractSqlState( sqlException );
if ( "41000".equals( sqlState ) ) {
return new LockTimeoutException( message, sqlException, sql );
}
if ( "40001".equals( sqlState ) ) {
return new LockAcquisitionException( message, sqlException, sql );
}
return null;
}
};
}
项目:lams
文件:Oracle8iDialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(SQLException sqlException, String message, String sql) {
// interpreting Oracle exceptions is much much more precise based on their specific vendor codes.
final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
// lock timeouts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ( errorCode == 30006 ) {
// ORA-30006: resource busy; acquire with WAIT timeout expired
throw new LockTimeoutException( message, sqlException, sql );
}
else if ( errorCode == 54 ) {
// ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
throw new LockTimeoutException( message, sqlException, sql );
}
else if ( 4021 == errorCode ) {
// ORA-04021 timeout occurred while waiting to lock object
throw new LockTimeoutException( message, sqlException, sql );
}
// deadlocks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ( 60 == errorCode ) {
// ORA-00060: deadlock detected while waiting for resource
return new LockAcquisitionException( message, sqlException, sql );
}
else if ( 4020 == errorCode ) {
// ORA-04020 deadlock detected while trying to lock object
return new LockAcquisitionException( message, sqlException, sql );
}
// query cancelled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ( 1013 == errorCode ) {
// ORA-01013: user requested cancel of current operation
throw new QueryTimeoutException( message, sqlException, sql );
}
// data integrity violation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if ( 1407 == errorCode ) {
// ORA-01407: cannot update column to NULL
final String constraintName = getViolatedConstraintNameExtracter().extractConstraintName( sqlException );
return new ConstraintViolationException( message, sqlException, sql, constraintName );
}
return null;
}
};
}
项目:lams
文件:AbstractHANADialect.java
@Override
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
return new SQLExceptionConversionDelegate() {
@Override
public JDBCException convert(final SQLException sqlException, final String message, final String sql) {
final int errorCode = JdbcExceptionHelper.extractErrorCode( sqlException );
if ( errorCode == 131 ) {
// 131 - Transaction rolled back by lock wait timeout
return new LockTimeoutException( message, sqlException, sql );
}
if ( errorCode == 146 ) {
// 146 - Resource busy and acquire with NOWAIT specified
return new LockTimeoutException( message, sqlException, sql );
}
if ( errorCode == 132 ) {
// 132 - Transaction rolled back due to unavailable resource
return new LockAcquisitionException( message, sqlException, sql );
}
if ( errorCode == 133 ) {
// 133 - Transaction rolled back by detected deadlock
return new LockAcquisitionException( message, sqlException, sql );
}
// 259 - Invalid table name
// 260 - Invalid column name
// 261 - Invalid index name
// 262 - Invalid query name
// 263 - Invalid alias name
if ( errorCode == 257 || ( errorCode >= 259 && errorCode <= 263 ) ) {
throw new SQLGrammarException( message, sqlException, sql );
}
// 257 - Cannot insert NULL or update to NULL
// 301 - Unique constraint violated
// 461 - foreign key constraint violation
// 462 - failed on update or delete by foreign key constraint violation
if ( errorCode == 287 || errorCode == 301 || errorCode == 461 || errorCode == 462 ) {
final String constraintName = getViolatedConstraintNameExtracter().extractConstraintName(
sqlException );
return new ConstraintViolationException( message, sqlException, sql, constraintName );
}
return null;
}
};
}
项目:engerek
文件:BaseHelper.java
private boolean isExceptionRelatedToSerializationInternal(Exception ex) {
if (ex instanceof SerializationRelatedException
|| ex instanceof PessimisticLockException
|| ex instanceof LockAcquisitionException
|| ex instanceof HibernateOptimisticLockingFailureException
|| ex instanceof StaleObjectStateException) { // todo the last one is questionable
return true;
}
// it's not locking exception (optimistic, pesimistic lock or simple lock acquisition) understood by hibernate
// however, it still could be such exception... wrapped in e.g. TransactionException
// so we have a look inside - we try to find SQLException there
SQLException sqlException = findSqlException(ex);
if (sqlException == null) {
return false;
}
// these error codes / SQL states we consider related to locking:
// code 50200 [table timeout lock in H2, 50200 is LOCK_TIMEOUT_1 error code]
// code 40001 [DEADLOCK_1 in H2]
// state 40001 [serialization failure in PostgreSQL - http://www.postgresql.org/docs/9.1/static/transaction-iso.html - and probably also in other systems]
// state 40P01 [deadlock in PostgreSQL]
// code ORA-08177: can't serialize access for this transaction in Oracle
// code ORA-01466 ["unable to read data - table definition has changed"] in Oracle
// code ORA-01555: snapshot too old: rollback segment number with name "" too small
// code ORA-22924: snapshot too old
//
// sql states should be somewhat standardized; sql error codes are vendor-specific
// todo: so it is probably not very safe to test for codes without testing for specific database (h2, oracle)
// but the risk of problem is quite low here, so let it be...
// strange exception occurring in MySQL when doing multithreaded org closure maintenance
// alternatively we might check for error code = 1030, sql state = HY000
// but that would cover all cases of "Got error XYZ from storage engine"
if ((getConfiguration().isUsingMySQL() || getConfiguration().isUsingMariaDB())
&& sqlException.getMessage() != null
&& sqlException.getMessage().contains("Got error -1 from storage engine")) {
return true;
}
// this is some recent H2 weirdness (MID-3969)
if (getConfiguration().isUsingH2() && sqlException.getMessage() != null
&& sqlException.getMessage().contains("Referential integrity constraint violation: \"FK_AUDIT_ITEM: PUBLIC.M_AUDIT_ITEM FOREIGN KEY(RECORD_ID) REFERENCES PUBLIC.M_AUDIT_EVENT(ID)")) {
return true;
}
return sqlException.getErrorCode() == 50200
|| sqlException.getErrorCode() == 40001
|| "40001".equals(sqlException.getSQLState())
|| "40P01".equals(sqlException.getSQLState())
|| sqlException.getErrorCode() == 8177
|| sqlException.getErrorCode() == 1466
|| sqlException.getErrorCode() == 1555
|| sqlException.getErrorCode() == 22924
|| sqlException.getErrorCode() == 3960; // Snapshot isolation transaction aborted due to update conflict.
}
项目:ephesoft
文件:JbpmServiceImpl.java
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lockJobToResume(long jobId) throws LockAcquisitionException {
throw new UnsupportedOperationException("Operation not supported.");
}
项目:mad-java
文件:HibernateExceptionHandler.java
public static void rethrowJdbcAsDatastoreAndConstraintAsItself( final HibernateException he, final Log log, final String message,
final int logErrorMask ) throws DatastoreException, MAConstraintViolationException
{
final String internalMess = concMess( message, he );
if (he instanceof JDBCConnectionException || he instanceof GenericJDBCException
|| he instanceof SQLGrammarException)
{
if ((logErrorMask & JDBC_IS_ERROR) != 0)
{
log.error( internalMess, he );
}
throw new DatastoreException( internalMess, he );
}
else if (he instanceof ConstraintViolationException)
{
if ((logErrorMask & CONSTRAINT_IS_ERROR) != 0)
{
log.error( internalMess, he );
}
throw new MAConstraintViolationException( internalMess, he );
}
else if (he instanceof LockAcquisitionException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof QuerySyntaxException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof IdentifierGenerationException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else if (he instanceof PropertyValueException)
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
else
{
log.error( internalMess, he );
throw new DatastoreException( internalMess, he );
}
}
项目:DataHubSystem
文件:ODataProductSynchronizer.java
@Override
public boolean synchronize () throws InterruptedException
{
int retrieved = 0, updated = 0, deleted = 0;
LOGGER.info("Synchronizer#" + getId () + " started");
try
{
if (this.copyProduct)
{
retrieved = getAndCopyNewProduct();
}
else
{
retrieved = getNewProducts();
}
if (Thread.interrupted ())
{
throw new InterruptedException ();
}
updated = getUpdatedProducts ();
if (Thread.interrupted ())
{
throw new InterruptedException ();
}
deleted = getDeletedProducts ();
}
catch (LockAcquisitionException | CannotAcquireLockException e)
{
throw new InterruptedException (e.getMessage ());
}
finally
{
// Logs a summary of what it has done this session
StringBuilder sb = new StringBuilder ("Synchronizer#");
sb.append (getId ()).append (" done: ");
sb.append (retrieved).append (" new Products, ");
sb.append (updated).append (" updated Products, ");
sb.append (deleted).append (" deleted Products");
sb.append (" from ").append (this.client.getServiceRoot ());
LOGGER.info(sb.toString());
// Writes the database only if there is a modification
if (this.dateChanged)
{
SYNC_SERVICE.saveSynchronizer (this);
this.dateChanged = false;
}
}
return retrieved < pageSize && updated < pageSize && deleted < pageSize;
}
项目:midpoint
文件:BaseHelper.java
private boolean isExceptionRelatedToSerializationInternal(Exception ex) {
if (ex instanceof SerializationRelatedException
|| ex instanceof PessimisticLockException
|| ex instanceof LockAcquisitionException
|| ex instanceof HibernateOptimisticLockingFailureException
|| ex instanceof StaleObjectStateException) { // todo the last one is questionable
return true;
}
// it's not locking exception (optimistic, pesimistic lock or simple lock acquisition) understood by hibernate
// however, it still could be such exception... wrapped in e.g. TransactionException
// so we have a look inside - we try to find SQLException there
SQLException sqlException = findSqlException(ex);
if (sqlException == null) {
return false;
}
// these error codes / SQL states we consider related to locking:
// code 50200 [table timeout lock in H2, 50200 is LOCK_TIMEOUT_1 error code]
// code 40001 [DEADLOCK_1 in H2]
// state 40001 [serialization failure in PostgreSQL - http://www.postgresql.org/docs/9.1/static/transaction-iso.html - and probably also in other systems]
// state 40P01 [deadlock in PostgreSQL]
// code ORA-08177: can't serialize access for this transaction in Oracle
// code ORA-01466 ["unable to read data - table definition has changed"] in Oracle
// code ORA-01555: snapshot too old: rollback segment number with name "" too small
// code ORA-22924: snapshot too old
//
// sql states should be somewhat standardized; sql error codes are vendor-specific
// todo: so it is probably not very safe to test for codes without testing for specific database (h2, oracle)
// but the risk of problem is quite low here, so let it be...
// strange exception occurring in MySQL when doing multithreaded org closure maintenance
// alternatively we might check for error code = 1030, sql state = HY000
// but that would cover all cases of "Got error XYZ from storage engine"
if (getConfiguration().isUsingMySqlCompatible()
&& sqlException.getMessage() != null
&& sqlException.getMessage().contains("Got error -1 from storage engine")) {
return true;
}
// this is some recent H2 weirdness (MID-3969)
if (getConfiguration().isUsingH2() && sqlException.getMessage() != null
&& sqlException.getMessage().contains("Referential integrity constraint violation: \"FK_AUDIT_ITEM: PUBLIC.M_AUDIT_ITEM FOREIGN KEY(RECORD_ID) REFERENCES PUBLIC.M_AUDIT_EVENT(ID)")) {
return true;
}
return sqlException.getErrorCode() == 50200
|| sqlException.getErrorCode() == 40001
|| "40001".equals(sqlException.getSQLState())
|| "40P01".equals(sqlException.getSQLState())
|| sqlException.getErrorCode() == 8177
|| sqlException.getErrorCode() == 1466
|| sqlException.getErrorCode() == 1555
|| sqlException.getErrorCode() == 22924
|| sqlException.getErrorCode() == 3960; // Snapshot isolation transaction aborted due to update conflict.
}
项目:openMAXIMS
文件:WardViewImpl.java
public BedSpaceStateLiteVo getBedSpaceState(BedSpaceRefVo bed)
{
if(bed == null )
throw new DomainRuntimeException("Invalid BedRefVo");
String hql = "select bs,(select adm.healthyLodger from AdmissionDetail as adm where adm.pasEvent.id = bs.inpatientEpisode.pasEvent.id) from BedSpaceState as bs left join bs.bedSpace as bed where bed.id = " + bed.getID_BedSpace();
List<?> bedState = null;
//WDEV-23014 - Catch the Lock error and retry the entire transaction. After two retries, throw a SOE message.
try
{
bedState = getDomainFactory().find(hql);
}
catch (RuntimeException e) {
if (e instanceof LockAcquisitionException)
{
try
{
bedState = getDomainFactory().find(hql);
}
catch (RuntimeException e1)
{
if (e1 instanceof LockAcquisitionException)
{
throw new StaleStateException(ConfigFlag.UI.STALE_OBJECT_MESSAGE.getValue());
}
}
}
}
//WDEV-23014 ends here
//WDEV-11039
boolean hasAlerts = false;
BedSpaceStateLiteVoCollection voColl = new BedSpaceStateLiteVoCollection();
if (bedState != null && bedState.size() > 0 && bedState.get(0) instanceof Object[])
{
Object[] recordDO = (Object[]) bedState.get(0);
BedSpaceStateLiteVo bs = null;
for (int i =0;i<recordDO.length;i++)
{
if (recordDO[0] instanceof BedSpaceState)
{
BedSpaceState doBed = (BedSpaceState)recordDO[0];
if(doBed.getInpatientEpisode() != null && doBed.getInpatientEpisode().getPasEvent() != null && doBed.getInpatientEpisode().getPasEvent().getPatient() != null && doBed.getInpatientEpisode().getPasEvent().getPatient().getPatientAlerts() != null)
if(doBed.getInpatientEpisode().getPasEvent().getPatient().getPatientAlerts().size() > 0 && isOneActive(doBed.getInpatientEpisode().getPasEvent().getPatient().getPatientAlerts(), true))
hasAlerts = true;
bs = BedSpaceStateLiteVoAssembler.create((BedSpaceState)recordDO[0]);
}
if (bs.getInpatientEpisodeIsNotNull() && recordDO[1] != null && recordDO[1] instanceof HealthyLodger)
bs.getInpatientEpisode().setHealthyLodgerDetails(HealthyLodgerVoAssembler.create((HealthyLodger)recordDO[1]));
}
if (bs != null)
voColl.add(bs);
}
//BedSpaceStateLiteVoCollection voColl = BedSpaceStateLiteVoAssembler.createBedSpaceStateLiteVoCollectionFromBedSpaceState(bedState);
if (voColl != null && voColl.size() > 0)
{
if(voColl.get(0).getInpatientEpisodeIsNotNull() && voColl.get(0).getInpatientEpisode().getPasEventIsNotNull() && voColl.get(0).getInpatientEpisode().getPasEvent().getPatientIsNotNull())
voColl.get(0).getInpatientEpisode().getPasEvent().getPatient().setHasAlerts(hasAlerts);
return voColl.get(0);
}
return null;
}
项目:stdlib
文件:TransactionMethodInterceptor.java
/**
* Special-case for SQL Server deadlock errors, that look like:
* <pre>2017-12-01 07:49:48,504 ERROR Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
* 2017-12-01 07:49:48,539 ERROR z9ti8f0eai POST /automation/work-orders threw exception:
* javax.persistence.PersistenceException: org.hibernate.exception.LockAcquisitionException: could not execute query
* at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
* at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
* at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
* at org.hibernate.query.Query.getResultList(Query.java:146)
* at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:72)
* at com.peterphi.std.guice.hibernate.webquery.impl.jpa.JPAQueryBuilder.selectEntity(JPAQueryBuilder.java:512)
* at com.peterphi.std.guice.hibernate.webquery.impl.jpa.JPASearchExecutor.find(JPASearchExecutor.java:118)
* at com.peterphi.std.guice.hibernate.dao.HibernateDao.find(HibernateDao.java:552)
* at com.peterphi.std.guice.hibernate.module.TransactionMethodInterceptor.invoke(TransactionMethodInterceptor.java:84)
* at com.peterphi.std.guice.hibernate.dao.HibernateDao.find(HibernateDao.java:532)
* at com.peterphi.std.guice.hibernate.dao.HibernateDao.find(HibernateDao.java:525)
* at com.peterphi.std.guice.hibernate.dao.HibernateDao.findByUriQuery(HibernateDao.java:518)
* ...
* at com.peterphi.std.guice.hibernate.module.TransactionMethodInterceptor.createTransactionAndExecuteMethod(TransactionMethodInterceptor.java:164)
* at com.peterphi.std.guice.hibernate.module.TransactionMethodInterceptor.invoke(TransactionMethodInterceptor.java:105)
* ...
* Caused by: org.hibernate.exception.LockAcquisitionException: could not execute query
* at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
* at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
* at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
* at org.hibernate.loader.Loader.doList(Loader.java:2705)
* at org.hibernate.loader.Loader.doList(Loader.java:2685)
* at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2517)
* at org.hibernate.loader.Loader.list(Loader.java:2512)
* at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502)
* at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:384)
* at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
* at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1490)
* at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1445)
* at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
* ... 44 more
* Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
* at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)
* at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:6357)
* at com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1798)
* at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:1049)
* at org.hibernate.loader.Loader.processResultSet(Loader.java:997)
* at org.hibernate.loader.Loader.doQuery(Loader.java:959)
* at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:351)
* at org.hibernate.loader.Loader.doList(Loader.java:2702)
* ... 53 more</pre>
*
* @param t
*
* @return
*/
private boolean isDeadlockError(Throwable e)
{
// Looking for PersistenceException, wrapping a LockAcquisitionException
if (e != null && e instanceof PersistenceException)
{
e = e.getCause();
if (e != null && e instanceof LockAcquisitionException)
{
return true;
}
}
// Does not match
return false;
}
项目:midpoint
文件:BaseHelper.java
private boolean isExceptionRelatedToSerializationInternal(Exception ex) {
if (ex instanceof SerializationRelatedException
|| ex instanceof PessimisticLockException
|| ex instanceof LockAcquisitionException
|| ex instanceof HibernateOptimisticLockingFailureException
|| ex instanceof StaleObjectStateException) { // todo the last one is questionable
return true;
}
// it's not locking exception (optimistic, pesimistic lock or simple lock acquisition) understood by hibernate
// however, it still could be such exception... wrapped in e.g. TransactionException
// so we have a look inside - we try to find SQLException there
SQLException sqlException = findSqlException(ex);
if (sqlException == null) {
return false;
}
// these error codes / SQL states we consider related to locking:
// code 50200 [table timeout lock in H2, 50200 is LOCK_TIMEOUT_1 error code]
// code 40001 [DEADLOCK_1 in H2]
// state 40001 [serialization failure in PostgreSQL - http://www.postgresql.org/docs/9.1/static/transaction-iso.html - and probably also in other systems]
// state 40P01 [deadlock in PostgreSQL]
// code ORA-08177: can't serialize access for this transaction in Oracle
// code ORA-01466 ["unable to read data - table definition has changed"] in Oracle
// code ORA-01555: snapshot too old: rollback segment number with name "" too small
// code ORA-22924: snapshot too old
//
// sql states should be somewhat standardized; sql error codes are vendor-specific
// todo: so it is probably not very safe to test for codes without testing for specific database (h2, oracle)
// but the risk of problem is quite low here, so let it be...
// strange exception occurring in MySQL when doing multithreaded org closure maintenance
// alternatively we might check for error code = 1030, sql state = HY000
// but that would cover all cases of "Got error XYZ from storage engine"
if (getConfiguration().isUsingMySqlCompatible()
&& sqlException.getMessage() != null
&& sqlException.getMessage().contains("Got error -1 from storage engine")) {
return true;
}
// this is some recent H2 weirdness (MID-3969)
if (getConfiguration().isUsingH2() && sqlException.getMessage() != null
&& sqlException.getMessage().contains("Referential integrity constraint violation: \"FK_AUDIT_ITEM: PUBLIC.M_AUDIT_ITEM FOREIGN KEY(RECORD_ID) REFERENCES PUBLIC.M_AUDIT_EVENT(ID)")) {
return true;
}
return sqlException.getErrorCode() == 50200
|| sqlException.getErrorCode() == 40001
|| "40001".equals(sqlException.getSQLState())
|| "40P01".equals(sqlException.getSQLState())
|| sqlException.getErrorCode() == 8177
|| sqlException.getErrorCode() == 1466
|| sqlException.getErrorCode() == 1555
|| sqlException.getErrorCode() == 22924
|| sqlException.getErrorCode() == 3960; // Snapshot isolation transaction aborted due to update conflict.
}