Re: Hashcode/ETag for EOs
Re: Hashcode/ETag for EOs
- Subject: Re: Hashcode/ETag for EOs
- From: Farrukh Ijaz <email@hidden>
- Date: Sun, 29 May 2011 21:51:37 +0300
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. 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.
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
>>> email@hidden
>>>
>>> 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 (email@hidden)
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
>>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden