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

Reply via email to