"javax.ejb.NoSuchEJBException: не удалось найти компонент с состоянием:" - PullRequest
4 голосов
/ 16 августа 2010

Я продолжаю бороться за приключения с Jboss и EJB 3.0. Я присоединился к Spring 3.0 с EJB. У меня есть 3 модуля - веб-модуль с контроллерами Spring, модуль ejb с EJB-компонентами и Spring mogule с другими классами, такими как dao или некоторые помощники. Все в ухе.

Итак, в моем Spring Controller у меня есть следующий код:

@Controller
public class IndexController {

    @EJB
    PaymentRemote paymentRemote;

    @RequestMapping(value = "/index")
    public ModelAndView index() throws Exception {
        ModelAndView mav = new ModelAndView("index/index");     

        paymentRemote.savePayment(123, "bla222");
        paymentRemote.sayGoodbye();
           return mav;
}

В моем модуле EJB у меня есть следующий bean-компонент с состоянием:

@Stateful
@Interceptors( SpringBeanAutowiringInterceptor.class)
public class PaymentRemoteImpl implements PaymentRemote{

    @Autowired
    ExampleService exampleService;

    public void savePayment(long payment, String name) throws Exception {
        exampleService.savePayment(123, "kk");

    }

    @Remove
    public void sayGoodbye() {
        System.out.println("I want to finish my task here!");

    }
}

Каждая зависимость вводится правильно. Когда я тестирую этот код с bean-компонентами без состояния, он работает просто отлично. Когда речь заходит о бинах с состоянием, когда я вызываю метод sayGoodbye (), я не могу снова вызвать этот бин. Я получаю исключение:

javax.ejb.NoSuchEJBException: Could not find stateful bean: a74a2l-n1u5tx-gcwd0e6a-1-gcwd18fo-9h

Я не понимаю этой ситуации: / Я попросил контейнер удалить боб, но позже я хотел бы использовать его снова, но он хочет снова найти меня с тем же бобом. Я думал, что, хотя я попросил удалить это, это создаст по моему запросу снова. Может ли кто-нибудь любезно помочь мне с моей проблемой? Я застрял.

1 Ответ

5 голосов
/ 16 августа 2010

Вы не можете использовать внедрение Stateful Session Beans (SFSB) в многопоточный компонент, который может совместно использоваться несколькими одновременными клиентами, такими как сервлет или контроллер.Вместо этого выполните поиск JNDI и поместите компонент в HttpSession.

См. Также

...