現在、ConversationScopedステートフルセッションBean(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