Everything is a distributed object

Martin Drautzburg Martin.Drautzburg at web.de
Sun Oct 8 09:28:55 UTC 2006


On Saturday, 7. October 2006 21:34, Michael Latta wrote:
> The one thing
> that the web services people got right is that you need to know when you
> are talking to a remote object and handle that differently than those in
> memory. Any other approach produces toys or failures.

Thats bad news. maybe I shoud explain why I want to know this. This issue is 
not strictly sqeuak related, it is just that a lot of smart people are on 
this list.

We are currently in the situation where we need to support a larger user base 
of apx. 500 users. Our current application includes a fat client, a J2EE 
business logic layer and a databse backend.  There are two main problems:

(1) The client is too slow over a slow network (this is mostly our fault)
(2) We need 500+ client installations and we need to repeat those 500+ 
installations with every upgrade of the client.

Of course (2) can be attacked with clever remote installation mechanisms like 
java web start, and this is certainly an option, but I thought there might be 
a more elegant solution.

This idea is to install a "browser" on the users machine just once, a browser 
that can display about every possible application. With this approach I can 
see two obvious solutions:

(2a) Use a web browser and develop a web app. This has the drawback, that the 
possibilities you have to design your GUI are very limited and that you have 
to program things in strange ways. 

(2b) Use an X11 server on the user's machine. This eliminates the drawbacks of 
(2a), but is expensive memory-wise. With every session the application has to 
be started anew on the central machine. An experiment with a wxPython app 
showed that this can easily be 30MB of (non-shared) memory which adds up to 
15GB for 500 users. Another problem with this approach is that window 
repaints are sometimes visible, which looks irritating to most users, even if 
the overall time it takes is quite small. The good thing here is (contrary to 
what you said): you do not have to know when you are talking to a remote 
object.

Then I was looking at "pyrc" a remote python thingy, that promises transparent 
access to remote objects. So I thought: cool, I let the server (the user's 
machine) import the wxwidgets toolkit and I remote-control it from the 
client. So the client will not even have to import the wx toolkit (reducing 
memory footprint) and the client programmer can write the client code as 
usual.

But alas, an ubiquitous pattern in GUI development is subclassing widget 
classes from the toolkit. This does NOT work with pyrc. 

Generally speaking I would need a protocol (other than http) that intercepts 

- somewhere below the X11 level and communicates higher level objects (not 
just rectangles and events-in-a-rectangle), to eliminat the drawbacks of (2b)

- and above the database protocol (SQLNET) because that will result in a fat 
client again.












More information about the Squeak-dev mailing list