I like the approach. Specific comments inline. - James Snell IBM Emerging Technologies [EMAIL PROTECTED] (559) 587-1233 (office) (700) 544-9035 (t/l) Programming Web Services With SOAP O'Reilly & Associates, ISBN 0596000952
Have I not commanded you? Be strong and courageous. Do not be terrified, do not be discouraged, for the Lord your God will be with you whereever you go. - Joshua 1:9 Glen Daniels <[EMAIL PROTECTED]> wrote on 12/04/2002 01:45:23 PM: > Thanks James for slicing out the FeatureEnabled thing for now, I > appreciate it. Notta problem > While we're on the topic, I'll squirt out this very brief version of > how I envision this stuff working. A full understanding / > explanation of this entails grokking the SOAP 1.2 extensibility > model, including URI-named Features/Properties/Bindings/Modules. > ===== > Bindings and Modules are the concrete things which can implement Features. > A Binding is the equivalent of an Axis Transport, but named with a > URI instead of a generic string. There are server side and client > side Bindings. Interesting. I can see us revamping the current Transport/Sender mechanism so that Binding jar files are dropped into a directory (e.g. /bindings/httpBinding.jar) and automatically discovered. Sounds like a great feature for Axis 2.0 that once we get through the Async stuff, I'll gladly explore helping out with. > A Module is a registered component, also named with a URI, which > implements some functionality using SOAP headers. A Module is > typically distributed as a jar containing a Module class, some > metadata, and zero or more Handlers. Very good, but we're going to also need a way of connecting modules (allowing them to work together) which would be a much more difficult task. > There is a registry of available Bindings > There is a registry of available Modules (perhaps discoverable jars > sitting in a /modules directory) > Modules: > * know how to deploy Handlers into global or service flows in order > to satisfy their needs > * expose an optional "friendly" API to control the functionality in > a clean way > So a couple of brief scenarios here: > 1) WSDL processing > - We see something like <soap:module uri="http://foo/securityModule" > required="true"/> in WSDL > - We go look in our Module registry to see if we have the desired > Module. If so, we hook it into the generated stub/server-impl. > This means Handlers automatically get deployed, and APIs are set up > appropriately to control the Module. > - If there are property values indicated in the WSDL, we simply map > those directly to properties on the Stub or the SOAPService so > they're available to the runtime. > - Same thing for bindings > 2) Using / tweaking a Module > Call call = getCallFromSomewhere(); > MyCustomModule module = (MyCustomModule)ModuleRegistry.getModule(uri); > module.setSpecialThingy(5); // These are custom APIs to make using > module.setSecurityLevel(3); // this particular Module more intuitive. > call.activateModule(module); > ===== > There's more, but them's the basics. We do need something very much > like James' FeatureEnabled interface, which Binding and Module would > both implement. I'm not sure that disable/enable functionality is > appropriate there, and I'd call it something like FeatureProvider or > FeatureSource. There's a lot of further discussion to be had here. At this point, I think I agree. At a minimum, the FeatureEnabled interface needs to have a getSupportedFeatures() method that returns an array of URI's identifying the features supported by a given component. disable/enable can probably be removed for now. > --Glen