2 Replies Latest reply on Aug 24, 2007 6:13 PM by Lloyd Closson

    PojoCache and s:selectItems Value is not valid Issue

    Lloyd Closson Newbie

      I have the following snippet in a page:

      <s:decorate id="creditCardTypeDecoration" template="/layout/edit.xhtml">
       <ui:define name="label">Credit Card Type:</ui:define>
       <h:selectOneMenu value="#{customerHome.instance.creditCardType}" required="true">
       <s:selectItems value="#{userDAO.creditCardTypeList}" var="ccType" label="#{ccType.creditCardType}" noSelectionLabel="Select Type" />
       <s:convertEntity />
       </h:selectOneMenu>
       </s:decorate>
      


      The userDAO has the following method:

      public List<CreditCardType> getCreditCardTypeList() throws CacheException
       {
       List<CreditCardType> creditCardType = (ArrayList<CreditCardType>)pojoCache.get( "reference", "creditCardTypeList" );
      
       if ( creditCardType == null )
       {
       creditCardType = entityManager.createQuery( "from CreditCardType creditCardType" ).getResultList();
       pojoCache.put( "reference", "creditCardTypeList", creditCardType );
       }
      
       return creditCardType;
       }
      


      When the data comes from the cache in the validation of the form I get a value is not valid error.

      When I use the following method all is well - however, a database call is made with all of the lookups. I have this pattern happening many times throughout the site and it is very expensive.

      public List<CreditCardType> getCreditCardTypeList() throws CacheException
       {
       return entityManager.createQuery( "from CreditCardType creditCardType" ).getResultList();
       }
      


      Any help will be appreciated.

      As an FYI I have tried to get this to work using the EJB3EntityTreeCache with no luck. I have the cache configured correctly with no errors, but it still goes to the database every time. Has anyone figured out how to get caching to work with a seam managed entity manager?