For the AS class, try implementing a toString():String method which
returns a unique identity from the composite id object. Data
management uses this to build a key to store the items in the cache.
Jeff
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of parkerwhirlow
Sent: Thursday, April 12, 2007 7:29 PM
To: [EMAIL PROTECTED]
Subject: [flexcoders] Odd behavior when calling DataService.getItem for
multiple items.
I'm using the same DataService repeatedly in my Cairngorm delegates,
and calling getItem() as needed to get items.
I'm using the call token to add a responder, and the strange thing is
that in the result method of the responder, the event.result property
is the SAME instance each time with the new object properties in it.
Somehow the instance returned in event.result is re-used across calls
to getItem. This causes all my items to end up being the same one!
(whatever the most recent one fetched is)
One thing that may be affecting this (not sure though) is that the ID
property of my item (and DataService destination) is a typed object.
This is because the item has a composite primary key, and I've
implemented the recommended "Components as composite identifiers"
method as advocated by the Hibernate guide:
http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#component
s-compositeid
<http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#componen
ts-compositeid>
I have set the destination ID type attribute as follows also:
Looking at the event.message.body[0], I can see a different (unique)
instance of the item... and strange thing is, the event.result
instance and the event.message.body[0] instance share the SAME
instance of the id property!
Any ideas? See sample code below
thanks,
Parker Whirlow
item delegate_
public function getItemPreference(itemID:String):AsyncToken
{
var service:DataService =
DataServiceManager.getInstance().getService(DataServiceManager.CONFIG_SE
RVICE_PREF);
// create the ID object (ID is combination of user and item)
var iid:PrefIDVO = new PrefIDVO();
iid.userID = SecurityManager.getInstance().userPrincipal;
iid.itemID = itemID;
var call:AsyncToken = service.getItem({ id: iid });
call.iid=iid;
call.addResponder(responder);
return call;
}
item responder_
protected function getItemPrefResult(event:ResultEvent):void
{
// get the item pref. (this is always the same object instance!)
// why does this same instance keep getting updated
// with the newly fetched object properties?!?
var pref:PrefVO = event.result as PrefVO;
...
}