Le 2011-05-29 à 14:51, Farrukh Ijaz a écrit : > Hi Pascal, > > On 2011-05-29, at 9:20 PM, Pascal Robert wrote: > >> I did : >> >> ERXRouteResults results = (ERXRouteResults)response(someEntity, filter); >> String etagHash = >> ERXCrypto.sha256Encode(results.responseNode().toString(results.format(), >> this.restContext())); > > IMO, this is an expensive approach because of encryption algorithm. Unless > encryption of the data is key requirement, don't use it.
I only need a hash. Base64 or MD5 would be ok too. > Because normally the toString() if not overridden returns a String comprising > the memory address of the instance, this is the reason a simple hashCode() > call is not sufficient in your case. You can simply override the hashCode() > method and compute the values based on your entity attributes. The problem is that it had to be compute from the attributes that are part of the (ERXKeyFilter) filter. And I do think it should be using the format requested too, so that if someone ask for a JSON representation and someone ask for a XML one, the ETag would be different. But we can debate on that, because I'm not 100% sure that the same object but using represented in a different format should have a different ETag. > For caching use Hashtable but that will only benefit if your hashCode() > generates unique value. In my experience the best way to cache the values is > to maintain a binary tree using the hashCode() as the node value. If you want > to implement a better caching, try exploring Splay tree model. With a little > modification to it, you can make you caching super fast. > > These things are not normally practiced by API users but they do matter is > you develop your own API to be used by someone else :) > > Farrukh > >> >>> there's not a direct simple way to do it ... probably grab the snapshot off >>> the EO and compute a hash of the values (you can ignore the keys because >>> they're fixed). it might be something where you can make a new interface in >>> ERX that your EO's could implement to provide a more optimal impl (like >>> ERCStamped could use its lastModified as a basis). >>> >>> ms >>> >>> On May 25, 2011, at 1:55 PM, Pascal Robert wrote: >>> >>>> I'm trying to find a way to generate a HTTP ETag for EOs so that caching >>>> can be done for REST services. What I want to do is to have the same ETag >>>> value for each representation of the EO, so when one of the values change, >>>> the ETag value will also change, but if the EO have the same value, it >>>> will generate the same ETag as another request got. >>>> >>>> Problem is: I don't know what to use. I tried with myEO.hashCode() but I >>>> did some tests and every time I fetch the EO, the hashcode is different >>>> even if the data didn't change. I'm thinking of doing a MD5 digest of part >>>> of the EO, but I was wondering if another way exist? I could use a "last >>>> modified" date and generate a MD5 of that too, but that date is a better >>>> option for the Last-Modified header. >>>> >>>> -- >>>> Pascal Robert >>>> prob...@macti.ca >>>> >>>> WOWODC 2011 : July 1-2-3, Montreal. wowodc.com >>>> >>>> AIM/iChat : MacTICanada >>>> LinkedIn : http://www.linkedin.com/in/macti >>>> Twitter : pascal_robert >>>> >>>> >>>> >>>> _______________________________________________ >>>> Do not post admin requests to the list. They will be ignored. >>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>> Help/Unsubscribe/Update your Subscription: >>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com >>>> >>>> This email sent to msch...@pobox.com >>> >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >> Help/Unsubscribe/Update your Subscription: >> http://lists.apple.com/mailman/options/webobjects-dev/farrukh.ijaz%40fuegodigitalmedia.com >> >> This email sent to farrukh.i...@fuegodigitalmedia.com > _______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com