[q] EJB Transaction
От: Аноним  
Дата: 11.03.08 08:57
Оценка:
Всем привет!

Переделываю бины, в которых транзакции управляются контейнером на управляемые бином.
Есть несколько вопросов:

— если в методе бина с типом транзакции Container метод выбросит исключение, но setRollbackOnly() не был вызван — при каких типах исключений сервер для транзакции сделает откат?

— в методе (methodA) бина с типом транзакции Container вызываются другие методы (methodB) других бинов. Один из таких бинов имеет тип транзакции Bean.
Так как одном из предыдущих методов мог быть вызван setRollbackOnly(), то я в методе methodB перед тем как открыть транзакцию, проверяю ее состояние на Status.STATUS_ACTIVE — если метод вызывает внутри какой-то транзакции, то новой не открываю. А перед комитом проверяю на Status.STATUS_ROLLEDBACK и Status.STATUS_ROLLING_BACK. Нужно ли перед комитом проверять на еще какие-то состояния

Выглядит это как-то так
public void methodB(){
UserTransaction transaction=context.getUserTransaction();
try{
if(transaction.getStatus()!=Status.STATUS_ACTIVE)
   transaction.begin();

//process logic

if(transaction.getStatus()!=Status.STATUS_ROLLEDBACK && transaction.getStatus()!=Status.STATUS_ROLLING_BACK)
   transaction.commit();
else
   throw new Exception("rollback");
}catch(Exception e){
transaction.rollback
}
}
Re: [q] EJB Transaction
От: Аноним  
Дата: 11.03.08 14:26
Оценка:
Сложно читается вопрос.

>при каких типах исключений сервер для транзакции сделает откат

Если это не бизнес исключение. См. спецификацию или туториал.
Re[2]: [q] EJB Transaction
От: Аноним  
Дата: 11.03.08 14:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сложно читается вопрос.

Извините, это я не специально.

>>при каких типах исключений сервер для транзакции сделает откат

А>Если это не бизнес исключение. См. спецификацию или туториал.
Да спецификация помогла.

Остался открытым вопрос о взаимодействии методов от бинов с разным типом транзакции.
Допустим есть CMT(Container-Managed Transaction) Bean1.method1
и BMT Bean2.method2

Как нужно начать и закомитить транзакцию в method2 если он вызывается из method1 ?
Re[3]: [q] EJB Transaction
От: Аноним  
Дата: 11.03.08 15:51
Оценка:
А>Как нужно начать и закомитить транзакцию в method2 если он вызывается из method1 ?


Через JTA берем и коммитим.
На метод method2 попробуйте поставить аттрибут транзакции NotSupported в ejb-деплоймент-дискрипторе.

Вообще тема сложная.
Читайте
http://java.sun.com/javaee/5/docs/tutorial/doc/bncih.html

если не получится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.