В настоящее время я пытаюсь удалить объект сеанса ConversationScoped Stateful Session (SFSB). ConversationScope управляется контейнером CDI, а жизненный цикл SFSB - контейнером EJB. Это правильно?
В моем контроллере я пытаюсь завершить разговор, вызывая метод SFSB и вызывая аннотированный метод @Remove для уничтожения SFSB.
Разговор можно закончить без проблем, но я не могу уничтожить SFSB.
Пример кода из Справочного руководства по сварке ( Область обсуждения WELD ):
@ConversationScoped @Stateful
public class OrderBuilder {
private Order order;
private @Inject Conversation conversation;
private @PersistenceContext(type = EXTENDED) EntityManager em;
@Produces public Order getOrder() {
return order;
}
public Order createOrder() {
order = new Order();
conversation.begin();
return order;
}
public void addLineItem(Product product, int quantity) {
order.add(new LineItem(product, quantity));
}
public void saveOrder(Order order) {
em.persist(order);
conversation.end();
}
@Remove
public void destroy() {}
}
Контроллер:
@Named
@SessionScoped
public class TestController implements Serializable{
@Inject
private OrderBuilder orderBuilder;
...
public String checkout(Order order){
orderBuilder.saveOrder(order);
orderBuilder.destroy();
return "success";
}
}
После того как я вызвал testController.checkout (order), я получаю это исключение:
javax.servlet.ServletException:
java.lang.reflect.InvocationTargetException
javax.faces.webapp.FacesServlet.service (FacesServlet.java:321)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter (ConversationPropagationFilter.java:67)
первопричина
javax.faces.el.EvaluationException:
java.lang.reflect.InvocationTargetException
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke (MethodBindingMethodExpressionAdapter.java:98)
com.sun.faces.application.ActionListenerImpl.processAction (ActionListenerImpl.java:98)
javax.faces.component.UICommand.broadcast (UICommand.java:311)
javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java:781)
javax.faces.component.UIViewRoot.processApplication (UIViewRoot.java:1246)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java:77)
com.sun.faces.lifecycle.Phase.doPhase (Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:114)
javax.faces.webapp.FacesServlet.service (FacesServlet.java:308)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter (ConversationPropagationFilter.java:67)
Есть идеи?
THX