Stateful session beans don't keep state !!!
daziplqa Oct 7, 2009 9:46 PMHi folks,
I am new to EJB and statefull sessin beans on JBoss4.2 AS
I have the following urgent problem:
I have the following statefull session bean.
@Stateful
public class PlaceOrderBean implements PlaceOrder {
private ShippingInfo shippingInfo;
private BillingInfo billingInfo;
public void setShippingInfo(ShippingInfo shippingInfo) {
System.out.println("Call # : 1 " );
this.shippingInfo = shippingInfo;
}
public void setBillingInfo(BillingInfo billingInfo) {
System.out.println("Call # : 2 " );
this.billingInfo = billingInfo;
System.out.println(shippingInfo.getShippingInfo()); // << NullPointerException here !!!!! how come ??!!
}
}
The client :
// this class is a JSF managed bean that is used with 2 JSPs, each one of the two calles on of the below methods
public class OrderItemBean {
private PlaceOrder placeOrder;
public OrderItemBean() {
try {
logger.info("Getting PlaceOrder instance ...");
InitialContext ctx = new InitialContext();
placeOrder = (PlaceOrder) ctx.lookup("chapter2/" + PlaceOrderBean.class.getSimpleName() + "/local");
}catch(NamingException ex) {
ex.printStackTrace();
}
}
// Note, the class OrderItemBean get instantiated a new instance before calling the following method
// so, the JNDI code in the constructor above is being called to lookup the statefull bean
public String setShippingInfo() {
ShippingInfo shipInfo = new ShippingInfo();
shipInfo.setShippingInfo(getShippingInfoTxt().getValue().toString());
placeOrder.setShippingInfo(shipInfo);
System.out.println("shipping Info : " + shipInfo.getShippingInfo());
return SUCCESS + "_setShippingInfo";
}
// Note, the class OrderItemBean get instantiated a new instance before calling the following method
// so, the JNDI code in the constructor above is being called again to lookup the statefull bean
public String setBillingInfo() {
BillingInfo billingInfo = new BillingInfo();
billingInfo.setBillingInfo(getBillingInfoTxt().getValue().toString());
placeOrder.setBillingInfo(billingInfo);
setAdditionalInfo();
return SUCCESS + "_setBillingInfo";
}
}The code above get this exception
03:06:35,264 INFO [OrderItemBean] Getting PlaceOrder instance ... 03:06:35,274 INFO [STDOUT] Call # : 1 03:06:35,274 INFO [STDOUT] shipping Info : Cairo, Egypt, Elobour city 03:06:36,919 INFO [OrderItemBean] Getting PlaceOrder instance ... 03:06:36,929 INFO [STDOUT] Call # : 2 03:06:36,930 FATAL [application] javax.ejb.EJBException: java.lang.NullPointerException javax.faces.el.EvaluationException: javax.ejb.EJBException: java.lang.NullPointerException at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91) at javax.faces.component.UICommand.broadcast(UICommand.java:383) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) ............. ..............
How this come, Ain't it as stateFULL session bean !!!!!!
Please Help