Размножение требует осветления пружины - PullRequest
1 голос
/ 31 августа 2011

хотел уточнить фундаментальные требования распространения с приведенными ниже сценариями.,Пожалуйста, дайте мне знать, если ниже понимание правильно.

Class MyClass1{

//Propagation is Propagation required
public void method1();
{

method1A();
method1B();
MyClass2 myClass2= new MyClass2();
myClass2.method2A();
myClass2.method2B();
}


// No porapgation is defined here so default will be reuired
public method1A()
{
//Some Transaction
}


// No porapgation is defined here so default will be reuired
private method1B()
{
//Some Transaction
}

}



Class MyClass2{

//Propagation is Propagation required
public void method2()
{

method2A();
method2B();
}


// No porapgation is defined here so default will be required
public method2A()
{
//Some Transaction
}


// No porapgation is defined here so default will be required
public method2B()
{
//Some Transaction
}

}

Теперь вот сценарии

, которые мы вызываем method1 () MyClass1 внутри основного метода

Сценарий1: -

Нет исключений.транзакция будет создана до метода method1A () и будет зафиксирована после myClass2.method2B ();

Scenarion2: -

Исключительная ситуация во время выполнения во время метода1B.Завершенная транзакция будет откатана

Сценарий3: -

Исключительная ситуация во время выполнения во время метода 2A (транзакция в методе 2A будет рассматриваться как часть транзакции, созданной в методе 1 в классе 1).Завершенная транзакция будет откатана

Сценарий4: -

Исключительная ситуация во время выполнения во время метода 2B (транзакция в методе 2A будет обрабатываться как часть транзакции, созданной в методе 1 в классе 1).Завершенная транзакция будет откатана

Редактировать: -

Теперь, если мы рассмотрим те же сценарии с распространением, что и Nested для методов method2A и method2B.

Scenarion1: -

Нет исключений.транзакция будет создана при входе в метод1A () и будет зафиксирована при выходе из метода1A ()

Scenarion2: -

Исключительная ситуация во время выполнения во время метода 1B.Полная транзакция будет откатана

Сценарий3: -

Исключительная ситуация во время выполнения во время метода 2A. Откат будет выполняться только в рамках метода 2A, а остальная часть транзакции будет зафиксирована ввыход из метода1

Сценарий4: -

Исключительная ситуация во время выполнения метода 2B.Откат только транзакции по методу 2B будет выполнен, а остальная часть транзакции будет зафиксирована при выходе из метода 1

1 Ответ

1 голос
/ 31 августа 2011

Ваше понимание (в целом) правильно, но ваш пример ошибочен.Позвонив:

MyClass2 myClass2= new MyClass2();

Вы убедились, что вызовы методов на myClass2 не будут перехватываться транзакционным прокси-сервером, и поэтому любая семантика , необходимая для распространения *1005*, подразумеваемая здесь, на самом деле не имеет значенияони не будут применяться.В этом случае, однако, вы попадете в транзакционные границы метода method1, и, поскольку вы пометили его как необходимое для распространения, ваш код будет выполняться так, как вы описали.Вы бы хорошо подошли к SSCCE , если вам потребуются дополнительные разъяснения.

Кроме того, документация Spring по Управление транзакциями - одна из лучшихнайти, я настоятельно рекомендую вам взглянуть на это.

...