can you point me to any examples of a strategy i can use which will give
it the same behaviour as eclipselink? ideally i want to grab the
objects and view them in jsf without any messing around
On 09/11/2016 17:40, Mark Struberg wrote:
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.