There are two primary differences between web services and the GPG
paradigm: reflection and dynamic binding.
1. reflection
In web services, if I tell you that I have a port type named "IService"
under the namespace "urn:foo.soap", there is no way you can know the port
type's definition unless I give you its WSDL file. There is no
authoritative definition of the type either - anyone can create a new WSDL
file to give a random definition to that port type. Knowing a type's name
alone is not enough to know what it is.
In contrast, if I tell you that I have an abstract interface named
"imop:foo.com/IService", the name is associated with a globally unique
definition - the one you can reflect from foo.com using IMOP. Knowing the
name alone is enough to know what it is, no matter where you are in the
world. I believe this is essential to facilitate interoperability in a
large-scale open system.
2. dynamic binding
With the reflection capability, our programs can interact with unknown
remote resources at runtime. For example:
import imop:foo.com/IService;
...
void func( IService obj ) {
obj.foo();
}
At runtime, I can pass any unknown remote reference, say
"imop:bar.com/MyObject", to the method, and the runtime system will be able
to use reflection to decide whether to accept it as an argument:
// pseudo code
ref = imop:bar.com/MyObject;
if ( ref instanceof imop:foo.com/IService )
assign_ref_to_obj();
else
throw_runtime_exception();
We use interface types this way everyday in our Java programs, but we are
yet able to do the same thing in a distributed system. It is not obvious
to me that how we can do this with web services.
Hope this help :-)
Stefan
--
You received this message because you are subscribed to the Google Groups "The
Java Posse" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/javaposse/-/H3qXFOxWBXkJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/javaposse?hl=en.