Я создаю приложение, которое использует представления CDI (Weld Container) и @ConversationScope для представлений. Мне нужно будет начать транзакцию JTA в начале Разговора и совершить/откат в конце. Так что я закодированы это:Использование транзакции с CDI Разговор
@Named
@ConversationScoped
public class ConversationBean implements Serializable {
private @Inject UserTransaction utx;
private @Inject Conversation conversation;
public void startConversation(){
conversation.begin();
try {
utx.begin();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void stopConversation(){
conversation.end();
try {
utx.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Однако результат в том, что, когда я начинаю разговор/сделки
09: 23: 33795 ERROR [org.jboss.as.txn] (HTTP - 127,0 .0.1-8180-1) JBAS010152: APPLICATION ERROR: транзакция еще активна в запросе со статусом 0
И когда я выдаю коммита:
09: 23: 56513 ERROR [STDERR] (http-- 127.0.0.1-8180-1) java.lang .IllegalStateException: BaseTransaction.commit - ARJUNA016074: никаких транзакций!
Любая идея, как это могло бы работать? моя среда - сервер приложений JBoss 7.1.1 (контейнер Weld). Thanks Linda
Похоже, что у вас уже есть активная транзакция (возможно, из-за предыдущих вызовов EJB?) –
Спасибо за ответ, однако startConversation() и endConversation() вызывается непосредственно как действие со страницы JSF .... –