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 />

      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?