CannotSerializeTransactionException i DeadlockLoserDataAccessException są przestarzałe od wersji Spring 6.0.3

Ta reguła oznacza kod Java, który używa przestarzałych wyjątków związanych z blokowaniem Spring CannotSerializeTransactionException oraz DeadlockLoserDataAccessException.

Od wersji Spring Framework 6.0.3 wyjątki te zostały wycofane ze względu na niespójną semantykę sterowników JDBC. Deweloperom zaleca się korzystanie z CannotAcquireLockException która oferuje ujednolicony, spójny z frameworkiem sposób obsługi pesymistycznego blokowania i awarii izolacji transakcji.

Poniższy przykład pokazuje nieprawidłowe użycie, które zostanie oflagowane:


import org.springframework.dao.CannotSerializeTransactionException;
import org.springframework.dao.DeadlockLoserDataAccessException;
public class InvalidLockingUsage {
    public void simulateCannotSerialize() {
    	throw new CannotSerializeTransactionException("Simulated serialization failure");
    }
    public void simulateDeadlock() {
    	throw new DeadlockLoserDataAccessException("Simulated deadlock");
    }
}

Poniższy przykład pokazuje prawidłowe zmigrowane użycie:


import org.springframework.dao.CannotAcquireLockException;
public class ValidLockingUsage {
    public void method() {
    	throw new CannotAcquireLockException("Simulated issue");
    }
}

Więcej informacji na ten temat zawierają następujące zasoby: