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?