Попробуйте
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.definesPresentationContext = YES;
}
- (void)viewDidDisappear:(BOOL)animated {
self.definesPresentationContext = NO;
[super viewDidDisappear:animated];
}
, он отлично работает для меня, но не уверен, что это хорошее решение или нет?
Много методов развиваются, но проблема все еще достаточно ультрасовременна, что процесс стандартизации еще не предоставил нам полностью портативное решение.
Опция один, можно проинформировать транзакцию веб-сервисов. Это, конечно, предполагает, что Вы управляете ими хотя при записи транзакции, осведомленный прокси для нетранзакционных сервисов является также опцией в некоторых случаях.
WS - В и протоколы WS-BA является ведущими стандартами для транзакционных веб-сервисов. К сожалению, они указывают протокол только, не привязки к языку. Другими словами, нет никакого стандартного API на уровне языка программирования. Для Java ближайшей вещью является JSR-156, но это еще не готово.
Затем проблема становится: как связать EJB (т.е. JTA/XA) транзакция к WS один. Так как модели, используемые WS - В и протоколы XA, тесно связаны, это может быть достигнуто посредством моста протокола. Несколько серверов приложений предоставляют чему-то один эти строки. JBoss представил, их в JavaOne - видят http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp
Примечание, что протокол, соединяющий технику мостом, может также использоваться наоборот, для разрешения EJB, который использует, например, бэкенд базы данных XA, чтобы быть выставленным как транзакционный веб-сервис.
Однако модель блокировки, используемая транзакциями двухфазной фиксации, действительно только подходит, если коротко, жил транзакции в том же домене управления. Если Ваши услуги будут работать в том же центре обработки данных компании, то Вы, вероятно, выйдете сухим из воды. Для более широкого распределения, быть этим географический или административный, Вы, вероятно, хотите посмотреть на WS-BA, протокол транзакций веб-сервиса, специально предназначенный для такого использования.
WS-BA использует основанную на компенсации модель, которая более тверда к программе. Это по существу основано на технике, которую Вы упоминаете: эффект сервисных методов отменен путем вызова метода компенсации. Это может быть хитро для разбираний, но интерн JBoss сделал довольно хорошую платформу аннотации, которая позволяет Вам определять методы компенсации с минимальным усилием и управлять ими автоматически. Это не стандартизировано, но определенно стоящее проверки при выборе этого подхода: http://www.jboss.org/jbosstm/baframework
Координация веб-сервисов (WS-C) и Транзакция веб-сервисов (WST), спецификации, разработанные Microsoft, Системами BEA и IBM, используются в таких случаях, как я знаю. Можно запустить с чтения транзакции веб-сервисов и сравнение А протоколов транзакций веб-сервисов статьи, предоставленные IBM для прояснения.
На самом деле, обычно вам нужен не только настраиваемый метод отката, но и настраиваемый метод фиксации. В противном случае вы столкнетесь с проблемами, подобными тем, которые встречаются в стандарте WS-BA.
Просто ознакомьтесь с http://www.atomikos.com/Publications/TryCancelConfirm для получения подробной статьи. Упомянутые там функции доступны в Atomikos ExtremeTransactions ... Этот продукт также поддерживает транзакции веб-сервисов в классическом стиле «ACID».
HTH
Guy
Отказ от ответственности: я работаю на Atomikos