The MemberListProducer generated by the Weld JEE6 archetype is like this:
@RequestScoped
public class MemberListProducer {
@Inject
@MemberRepository
private EntityManager em;
private List<Member> members;
// @Named provides access the return value via the EL variable name "member" in the UI (e.g., Facelets or JSP view)
@Produces
@Named
public List<Member> getMembers() {
return members;
}
public void onMemberListChanged(@Observes(notifyObserver = Reception.IF_EXISTS) final Member member) {
retrieveAllMembersOrderedByName();
}
@PostConstruct
public void retrieveAllMembersOrderedByName() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
Root<Member> member = criteria.from(Member.class);
// Swap criteria statements if you would like to try out type-safe criteria queries, a new feature in JPA 2.0
// criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));
criteria.select(member).orderBy(cb.asc(member.get("name")));
members = em.createQuery(criteria).getResultList();
}
}Is it common to store the list of members, which will be the same for all the users, in the request scope? Isn't this going to consume a lot of extra memory, one list per request, rather than one list for the whole app?
Thanks in advance.
If your JPA implementation is using a second level cache, you'll be fine. In general though you probably would have a common app scoped list.