Oki all clear. The internal EntityManager will get closed when you leave the outer @Stateless method. @Stateless EJBSs really are nothing else than beans with an interceptor which opens and commits the transaction and EntityManager on the outermost EJB level.
Since the @ManagedBean is not an EJB anymore you don't have any transaction nor EntityManager open anymore in your render_response phase in JSF. Which means that OpenJPA cannot provide lazyloading for you. I personally prefer to use the entitymanager-per-request patter and using CDI with a @RequestScoped EntityManager. But that might be a bigger change in architecture for you. Other options are: * touching the required bits in your DAO * using eager fetching * using a fetch-plan * using DTOs LieGrue, strub > On Wednesday, 9 November 2016, 17:31, Matthew Broadhead > <matthew.broadh...@nbmlaw.co.uk> wrote: > > sorry for the delay in replying i was very busy > > as a simple example there is a generic Dao class to return the results > of a namedquery > @Stateless > public class DAO { > @PersistenceContext(unitName = "widgetDataSource") > private EntityManager em; > .... > @SuppressWarnings("unchecked") > public <E> List<E> namedFind(Class<E> clazz, String > query) { > return em.createNamedQuery(query, clazz).getResultList(); > } > .... > } > call the namedFind from another stateless > @Stateless > public class WidgetDAO { > @EJB > private DAO dao; > ... > public List<Widget> findAll() { > return dao.namedFind(Widget.class, "Widget.findAll"); > } > .... > } > this is loaded into a managedbean > @ManagedBean > @ViewScoped > public class WidgetBean { > @EJB > private WidgetDAO widgetDao; > private List<Widget> widgetList; > public void onload(){ > setWigdetList(widgetDao.fildAll()); > } > ...setter getter of widgetList > } > which is supposed to display in jsf > <?xml version="1.0" encoding="UTF-8"?> > <ui:composition xmlns="http://www.w3.org/1999/xhtml" > xmlns:h="http://java.sun.com/jsf/html" > xmlns:ui="http://java.sun.com/jsf/facelets" > xmlns:f="http://java.sun.com/jsf/core" > template="/WEB-INF/include/layout.xhtml"> > ... > <ui:repeat var="widget" > value="#{widgetBean.widgetList}"> > <ui:repeat var="subWidget" > value="#{widget.subWidgets}"> > ...where are the sub widgets? > </ui:repeat> > </ui:repeat> > </ui:composition> > > Like i say if i loop through the widgets (or maybe the subwidgets as > well) it then loads in the JSF. so it lazy loads in java but not in > JSF. should i change to eager when i generate the entities or is there > something else i can do? is it supposed to work the same as eclipselink? > > > On 02/11/2016 08:06, Mark Struberg wrote: >> Hi Matthew! >> >> Now I'm back on my notebook. >> What transaction mechanism are you using? JTA or ResourceLocal? >> And what technology to control the transactions? EJBs? CDI? Spring? >> >> It boils down to be more a question about appliction architecture than > about OpenJPA, but still very important to cover. So just go ahead, I'm > pretty sure we can help you. >> >> LieGrue, >> strub >> >>> Am 24.10.2016 um 10:34 schrieb Matthew Broadhead > <matthew.broadh...@nbmlaw.co.uk>: >>> >>> HI, I am using TomEE 7.0.1 and I just switched from Plume to Plus. I > was using eclipselink and now I am converting to OpenJPA. When I fetch a set > of > entities and then try to iterate through their associations in JSF the list > is > empty. in eclipselink they were populated by default. if i loop through the > entities in Java before displaying in JSF then they are populated (i guess > they > get lazy loaded). is there a setting that needs to be changed? like > generating > with all associations as eager or setting a flag in persistence.xml? what > would > give the same default as eclipselink? seemed like an easy question but i > could > not find anything by searching. >