On 12/28/2010 03:50 AM, Simon Nash wrote:
Jean-Sebastien Delfino wrote:
Hi all,

The Javascript client code used in Tuscany's 'Web 2.0' apps like
samples/store doesn't seem to work with MS Internet Explorer.

To reproduce the problems start the samples/store app and point IE to
http://localhost:8080/store.

I tried two versions of IE with both Tuscany 2.0-beta1 and 1.6.1:
- IE6 v6.0.2900.2180.xpsp_sp2_rtm.040803-2158 just hangs using 100% cpu.
- IE8 v8.0.6001.18702 doesn't refresh the cart as you shop.

Are others seeing these problems with IE too?
 >
I have noticed the same issue and I believe I reported it to the list
about 2-3 years ago, but I can't find the message now.

I have tried a selection of other browsers as well. Firefox, Safari
and Chrome seem to be OK. I had problems with IE and Opera.

Simon


IE still represents a big chunk of the Web browser market, so you may want to fix these two problems for people trying to deploy Tuscany Web apps.

I found a fix for the hang problem with IE6. See my fix to the C++ runtime in SVN r1053559 [1]. Removing the 'type=feed/entry' parameter from the 'application/atom+xml' media type of ATOM docs makes IE happier.

The refresh problem is caused by IE not checking with the server for updates of cached content. I had to fix similar issues with the C++ runtime long time ago.

Here's what the Java runtime returns for an ATOM feed:
HTTP/1.1 200 OK
Content-Type: application/atom+xml;type=feed
ETag: "Feed96897824"
Transfer-Encoding: chunked

... XML content ...

Here's what the C++ runtime returns, which works with IE:
HTTP/1.1 200 OK
Date: Wed, 29 Dec 2010 07:44:58 GMT
Server: Apache
Expires: Tue, 01 Jan 1980 00:00:00 GMT
ETag: 8ac80137de06d087626be8cfc4fcae58
Content-Length: 1149
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/atom+xml

... XML content ...

IIRC, the combination of Date and Expires forces IE to revalidate its cache and check for updates instead of blindly using the cached content. The ETag header is then used to check with the server for updates using a conditional GET. The server will return a '304 Not Modified' status if the cached content is up to date and can be used, or the new content with a '200 OK' status.

For that to work, you'll also need to change AtomBindingListenerServlet to calculate the ETag from the feed content (or a representation of its state, like a modification time or version for example).

An alternative may be to change the Javascript client code to use HTTP Cache-Control headers. I didn't try that at the time as I was looking for an approach that also worked for page GETs without Javascript, as well as various HTTP caching proxies.

More info on these HTTP headers there [2].

Hope this helps.

[1] http://mail-archives.apache.org/mod_mbox/tuscany-commits/201012.mbox/%[email protected]%3e
[2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
--
Jean-Sebastien

Reply via email to