2 Replies Latest reply on Nov 16, 2006 12:15 PM by John

    Problem calling SFSB

    John Newbie

      I'm stuck and need help. I've got a simple page that has a panelGrid backed by an entity bean. When the page first loads, i'm assuming the entity bean is created (in the request context) and the default values are displayed. I have a commandButton that calls a method on my SFSB to retrieve a particular entity. The entity is annotated with @Out, but my page reloads with the same default values. How do I know the SFSB is even being called? I see that it's loaded during startup via the deployment scanner. I've been banging my head since last night.

      Entity bean:

      package com.myco.workforce;
      
      import java.io.Serializable;
      import java.util.Date;
      
      import javax.persistence.*;
      
      import org.jboss.seam.annotations.Name;
      
      @Entity
      @Name("revModel")
      @Table(name="RevenuePlanningModel", uniqueConstraints = {@UniqueConstraint(columnNames={"profitCenterId","startingQuarter","startingYear"})})
      public class RevenuePlanningModel implements Serializable {
       private long id;
       private long sapProfilingId;
       private Date lastModified;
       private String profitCenterId;
       private short startingQuarter;
       private short startingYear;
       private long plannedPersonnelPriorYear = 41560l;
       private long plannedPersonnel1 = 10000l;
       private long plannedPersonnel2;
       private long plannedPersonnel3;
       private long plannedPersonnel4;
       private long plannedPersonnel5;
       private long plannedPersonnel6;
       private double revenuePriorYear = 12158412;
       private double revenue1;
       private double revenue2;
       private double revenue3;
       private double revenue4;
       private double revenue5;
       private double revenue6;

      SFSB:
      package com.myco.workforce;
      
      import static javax.persistence.PersistenceContextType.EXTENDED;
      
      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      import org.jboss.seam.annotations.Begin;
      import org.jboss.seam.annotations.Destroy;
      import org.jboss.seam.annotations.End;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.core.Events;
      import org.jboss.seam.core.FacesMessages;
      import org.jboss.seam.log.Log;
      
      @Stateful
      @Name("revPlan")
      //@LoggedIn
      public class RevenuePlanningAction implements RevenuePlanning {
      
       @PersistenceContext(type=EXTENDED)
       private EntityManager em;
      
       /*
       @In
       private User user;
       */
      
       @In(required=false) @Out
       private RevenuePlanningModel revModel;
      
       @In(create=true)
       private FacesMessages facesMessages;
      
       @In(create=true)
       private Events events;
      
       @Logger
       private Log log;
      
       @Begin
       public void getRevenuePlanningModel() {
       revModel = (RevenuePlanningModel) em.createQuery(
       "select r from revenueplanningmodel r where r.id=:id")
       .setParameter("id", 1)
       .getSingleResult();
       //revModel = em.find(RevenuePlanningModel.class, 1);
       }
      
       @End
       public String saveRevenuePlanningModel() {
       em.persist(revModel);
       }
      
       @End
       public String deleteRevenuePlanningModel() {
       return null;
       }
      
       @End
       public String cancel() {
       return null;
       }

      xhtml page:
      <div class="section">
       <h:form>
       <h:panelGrid columns="9">
       <h:outputLabel styleClass="entry">
       <h:outputText value=""/>
       </h:outputLabel>
       <h:outputLabel styleClass="entry">
       <h:outputText value="PY"/>
       </h:outputLabel>
       <h:outputLabel styleClass="entry">
       <h:outputText value="Q1"/>
       </h:outputLabel>
       <h:outputLabel styleClass="entry">
       <h:outputText value="Q2"/>
       </h:outputLabel>
      <h:outputText value="Planned Personnel"/>
       <h:outputText value="#{revModel.plannedPersonnelPriorYear}">
       <f:convertNumber pattern="#,###,##0"/>
       </h:outputText>
       <h:inputText id="plannedPersonnel1" value="#{revModel.plannedPersonnel1}" required="true">
       <f:convertNumber pattern="#,###,##0"/>
       </h:inputText>
       <h:inputText id="plannedPersonnel2" value="#{revModel.plannedPersonnel2}" required="true">
       <f:convertNumber pattern="#,###,##0"/>
       </h:inputText>
      <h:outputText value="Revenue"/>
       <h:inputText id="revenuePriorYear" value="#{revModel.revenuePriorYear}" required="true">
       <f:convertNumber pattern="#,###,##0"/>
       </h:inputText>
       <h:inputText id="revenue1" value="#{revModel.revenue1}" required="true">
       <f:convertNumber pattern="#,###,##0"/>
       </h:inputText>
       <h:inputText id="revenue2" value="#{revModel.revenue2}" required="true">
       <f:convertNumber pattern="#,###,##0"/>
       </h:inputText>
      </h:panelGrid>
       <div class="entry errors">
       <h:messages globalOnly="true"/>
       </div>
       <div class="input">
       <h:commandButton value="Proceed" action="#{revPlan.getRevenuePlanningModel}" class="button"/> 
       <h:commandButton value="Save" action="#{revPlan.saveRevenuePlanningModel}" class="button"/>
       </div>
       </h:form>
       </div>

      Note, I'm working off of the Booking app example, so my setup is sound and I'm using a lot of existing framework.

      I appreciate the help.

      John

        • 1. Re: Problem calling SFSB
          Norman Richards Master

          A couple of obvious things:


          Your save method obviously doesn't compile, so you might want to verify you are running the code you think you are running.

          Your save method shouldn't return null or else the @End tag won't end the conversation.

          Your entity should be going to the conversation, not the the request context. You can monitor your conversation and the components in the conversation by using the debug page.

          To find out if your methods are being called, run in the debugger or add some logging statements.

          • 2. Re: Problem calling SFSB
            John Newbie

            Thanks for your suggestions. I hadn't finished coding the save/delete methods yet and I will remember not to return null. How should the entity get into the conversation? This is just test code, since I've got to integrate a tree component before I can hook it all together. Anyway, the first time the page loads, the SFSB hasn't been called. Just outputting bean values. Then, when the process button is clicked, the SFSB is called and the conversation has begun. That SFSB method is what outjects the newly loaded bean. I'll try debugging the page.

            John