This is a backend problem not a flex problem. Your java backend
application fetches the data lazily from the database, which means he
doesn't fetch it at all until you need it at runtime. When you send
this lazily loaded object through LCDS over the line to your flex
application it loses the ability to runtime fetch the lazy collection
from the database (because you are already on the client machine, not
on the server anymore, not in session). 

Just make sure whatever you send through LCDS over the wire is not
lazily loaded. So load all collection explicitly with hibernate before
you send them. Or better yet don't send hibernate objects of the wire
at all, create DTO (Data Transfer Objects; search for DTO design
pattern) objects instead. Load everything you need in your flex
application into the DTO and send that over to your flex app.

gr
marcel



--- In [email protected], "zdenekmikan" <[EMAIL PROTECTED]> wrote:
>
> I was able to solve my problem with following async loop, but I
wonder if there is some 
> simpler solution.
> 
> private var itemArray:ArrayCollection
> private var index:int;
> private var count:int;
> private var noIPE:Boolean;
> 
> public function execute(cgEvent:CairngormEvent):void
> {
>       count = itemArray.length;
>       index = 0;
>       noIPE = true;
>       
>       start();
> }
> 
> private function start():void
> {     
>       try
>       {
>               trace("start: " + index);
>               while((noIPE == true) && (index < count))
>               {
>                       processItem(null, itemArray.getItemAt(index) as 
> ItemDTO);
>               }
>       }
>       catch(ipe:ItemPendingError)
>       {
>               noIPE = false;
>               trace("item pending error: " + index);
>               ipe.addResponder(new ItemResponder(processItem, fetchError));
>       }
> }
>       
> private function fetchError(message:ErrorMessage):void
> {
>       trace("error fetching item: " + message.faultString);
> }
> 
> private function processItem(data:Object, item:ItemDTO = null):void
> {
>       trace("processItem: " + index);
>       if(item == null)
>               item = itemArray.getItemAt(index) as ItemDTO;
>       
>       .....
>       
>       index++;
>       if(index < count)
>       {
>               if(noIPE == false)
>               {
>                       noIPE = true;
>                       start();
>               }
>       }
>       else
>       {
>               finish();
>       }
> }
> 
> 
> --- In [email protected], Zdenek Mikan <zdenek@> wrote:
> >
> > I have an ArrayCollection which is filled from the LCDS/Hibernate 
> > destination with lazy=true. For display it is OK, but for export I
need 
> > to go through all items to send them to output. Is there any way
how to 
> > force fetch all items from the server?
> > 
> > BTW the sample in LCDS ES 2.6 Developer Guide on page 242-243 is
wrong - 
> > you will get the ipe exception on line with ipe.addResponder in catch 
> > clause.
> > 
> > Zdenek M
> >
>


Reply via email to