Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [hyades-dev] The state of the HCE project

Alan,

There's been a heretical idea floating around amongst us naive and 
foolish Scapatons for a while (since before Christmas) that we just 
publish the agents as web services and speak to them across http/SOAP, 
or via native bindings if we absolutely need to, then we run a web 
services choreography in BPEL/WSDL/XSD (which we also incidently use to 
drive the interfaces to the systems under test) to configure and control 
them.  This is what Antony is up to at the moment in the M8 sandbox.

Mike

-----Original Message-----
From: apratt [mailto:apratt@xxxxxxxxxx]
Sent: 01 September 2004 01:37
To: Hyades-dev
Subject: [hyades-dev] The state of the HCE project


I want to start this conversation in advance of our face-to-face meeting 

in two weeks. I will be on vacation next week so I only have a few days 
to 
talk it over by mail. Here goes.

Does anybody else feel like this is a house of cards? Each time we come 
up 
with a new requirement we implement a new subsystem or command to deal 
with it, but there isn't much symmetry or logical structure (you don't 
have to call it "architecture") in evidence. Maybe it's just me.

Here are some examples of what I'm talking about: 

I'm very worried that we're inventing a wire protocol and dispatch 
system 
when we should be adopting an existing standard. We've got layers, 
payload 
normalizers, headers, and envelopes. magic numbers and MD5 codes, but we 

don't talk about whether you could really recover from data errors and 
lost bytes on the data stream. We have source and destination addresses, 

multiple interconnections, brokers and controllers. Hasn't this been 
done 
before?

We've got structures that must be serialized and deserialized. We have 
string encodings and byte orders. In the current proposals the 
structures 
have fixed form: each command in the protocol has arguments of known 
types 
in a known order. History is littered with such protocols, all thrown 
away 
when they proved too resistant to changes. It has been proven more than 
once that no matter how many predefined data structures you put into a 
design there is always going to be another one tomorrow. Are we going to 

figure it out the hard way? Again? We ourselves are throwing away the 
RAC's messaging system and inventing another. Formats like XML that are 
more tolerant of loosely-coupled endpoints emerged for a reason. 

We have created a variable getting/setting system for agents and used it 

to perform the task of a property/attribute query system also, but then 
when the question of versioning comes up we invent another command, a 
whole new interface, that all components must implement. Why not have 
them 
all implement the variable system, and have the version number be one of 

the variables? This would be more consistent and more streamlined. 

Moreover, the ability to query a component's version number is only a 
partial fix to a larger problem: which versions am I compatible with? 
Should I force the loading of an old version? Elsewhere this is called 
"DLL Hell" and requires very large and complex scaffolding to address. 
(Microsoft uses "side-by-side execution" and Manifests.) I can't tell if 

the query solution is adequate because I can't tell what problems we're 
trying to solve, and what problems we've decided to shrug off.

There's another danger signal here: When a software group says they 
should 
scrap an existing, working system and start over, one should be very 
skeptical. Will it really be better? Will it even work as well? Will the 

group finish reimplementing in finite time? The existing system 
represents 
many man-years of discovering and solving non-obvious problems with 
specialized, sometimes arcane and platform-specific solutions. Is it 
really better to throw that accumulated knowledge away and start over?

I'm not picking on any of these single ideas themselves - this whole 
system feels like it's getting built in the dark, a piece at a time. 
Partly, as I've harped on before, it's because we don't really know what 

we're building. What motivated this in the first place? We can't know if 

we're on a path to a solution, let alone a good path, if we don't know 
what the problem is. What's the scope for this effort? What's our 
charter? 
How do we know when we're finished? How can we tell when we're 
overreaching if we don't know the boundaries?

I think we should step back from byte-by-byte protocols and address 
these 
questions. I welcome discussion from both assenters and dissenters.

-- Allan Pratt, apratt@xxxxxxxxxx
Rational software division of IBM

_______________________________________________
hyades-dev mailing list
hyades-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/hyades-dev



Back to the top