openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthew Broadhead <matthew.broadh...@nbmlaw.co.uk>
Subject Re: fetching associations
Date Mon, 14 Nov 2016 19:12:44 GMT
so if the managedbean is not an ejb anymore and therefore the 
transaction is closed how does it work for eclipselink?  do they use 
some magic?  are there any plans for implementing this "feature" in the 
future?  after spending a few months migrating to myfaces and openjpa on 
the suggestion of romain i now find that openjpa cannot lazy load 
entities from jsf which is fairly disappointing to say the least.  is my 
best route to go back to eclipselink?

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.broadhead@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.broadhead@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.
>>

Mime
View raw message