Пожалуйста, посмотрите на этот фрагмент:EJB Bean связан с другим незавершенной сделки
@Stateless
public class A {
@EJB
B b; // B is stateful EJB
b.init(); // initialize Sets and List that are used in doSthInB(C c)
public void doSthInA(){
for(C c){
b.doSthInB(c); // doSthInB use REQUIRES_NEW transaction type
}
}
}
Мое намерение заключается в обрабатывать коллекцию объектов типа С. Метод doSthInB изменяет сущности и результат должен быть сохранен в конец вызова метода (вот почему я пользователь REQUIRES_NEW). Когда во время обработки какого-либо элемента из входной коллекции возникает некоторая ошибка, тогда только эта операция не должна сохраняться, она должна регистрироваться и обработка других элементов не должна останавливаться.
Что я получаю во время обработки является: javax.ejb.EJBException: java.lang.IllegalStateException: Bean is associated with a different unfinished transaction
Может быть, моя идея не так. Какие-нибудь советы?
ОК, ребята, я изменил Stateful на безгражданство. Теперь я получаю интересное исключение NPE. Кажется, что для некоторых сборников итераций, которые я инициализирую в b.init(), не создается. Я перебираю сотни объектов в цикле for, и я полагаю, что контейнер ejb использует более одного ejb для обработки каждого вызова b.doSthInB (c). Но только для первого ejb вызывается b.init(), и именно поэтому я получаю NPE. Я прав? –