You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Glen Daniels <gd...@macromedia.com> on 2002/03/25 16:23:00 UTC
RE: Meta-data discussion (was: RE: cvs commit: xml-axis/java/test
/encoding TestArrayListConversi ons.java)
Hi Russell!
In particular, take a look at these msgs:
http://marc.theaimsgroup.com/?l=axis-dev&m=101421211014715&w=2
http://marc.theaimsgroup.com/?l=axis-dev&m=100629069510555&w=2
During that chat, we did explicitly discuss putting this stuff into the WSDD. Personally, I think the WSDD is a fine place for operation-specific info, in fact even before this change operation info about return types/qnames and element mappings for doc/lit was already in the WSDD. We needed to do this to pass the interop3 doc/lit tests.
Re: performance, I think you'll find that the way we work now probably performs BETTER than we did before, if nothing else because we're not doing an introspection for every single invocation - and that will improve still further when the method search code in RPCProvider gets cleaned up (working on it).
Re: pluggability, I'm very open to discussing in what ways this stuff should be pluggable, and how we can do it. However, I do see a need for the Axis core to have a well-defined mechanism for representing and dealing with services/invocations/XML dispatching. This is not least because I want to continue to support non-codegen'ed classes.
--Glen
> -----Original Message-----
> From: Russell Butek [mailto:butek@us.ibm.com]
> Sent: Friday, March 22, 2002 2:33 PM
> To: axis-dev@xml.apache.org
> Subject: Meta-data discussion (was: RE: cvs commit:
> xml-axis/java/test/encoding TestArrayListConversi ons.java)
>
>
> I understand what you're trying to do. You want to get rid of the
> skeleton. That's goodness. But we need the meta-data that
> lives on the
> skeleton to solve some immediate problems. So you moved this
> meta-data to
> deploy.wsdd.
>
> I've got 2 concerns.
>
> 1. This model puts operation-level info into the deploy file.
> operation-level info doesn't belong in the deploy file (I thought we'd
> discussed this). Perhaps it should be in a different file.
> What should we
> call that file? Hmmmm... skeleton.xml?
>
> 2. I don't want to completely eliminate the option of having
> a skeleton.
> Right now it has degenerated into holding meta-data and
> you've eliminated
> the need for it by moving the meta-data elsewhere. That's
> fine (except for
> my point 1 caveat). But what is the meta-data used for? To
> dispatch an
> incoming request to the proper method. In the CORBA world,
> we didn't need
> meta-data for this. The skeletons knew intrinsically how to dispatch
> requests. Querying meta-data is a form of introspection and
> introspection
> can be expensive. If we give the generated skeletons all the
> knowledge
> they need, dispatches can be less expensive. Yes,
> dispatching becomes more
> complex in the XML world, but we could still do it in a
> skeleton. Perhaps
> I'm just approaching this all wrong. Perhaps the
> 'skeleton'(dispatcher?)
> should really replace RPCProvider in this scenario and
> deploy.wsdd should
> list both the implementation and the dispatcher. In any
> case, I'm afraid
> of tying the runtime tightly into the meta-data model such
> that no other
> model can be plugged in.
>
> I've similar concerns on the client-side, but we've already
> tied ourselves
> into the Call object. If we tried to make the stubs more
> knowledgeable
> like my suggested skeleton/dispatcher, then we'd have to
> invent another way
> into the runtime outside of the DII Call object. So I can't
> whine as much
> on the client side.
>
> My short answer (if you've gotten all the way through this
> little tirade of
> mine) is that all this meta-data solves some immediate
> problems that we
> have, but the design as it's progressing seems to hinder
> future directions
> toward pluggability and performance improvements.
>
> Russell Butek
> butek@us.ibm.com
>
>
> Glen Daniels <gd...@macromedia.com> on 03/22/2002 12:20:00 PM
>
> Please respond to axis-dev@xml.apache.org
>
> To: "'axis-dev@xml.apache.org'" <ax...@xml.apache.org>
> cc:
> Subject: RE: cvs commit: xml-axis/java/test/encoding
> TestArrayListConversi ons.java
>
>
>
>
> *hands Russell some pepto-bismol*
>
> First off, understand that this metadata stuff
> (ServiceDesc/OperationDesc/ParameterDesc) is different from
> the TypeDesc
> stuff, although both being metadata about Java<->XML
> relationships, there
> are a few similarities. They are independent.
>
> The main point of the Service/Operation/Parameter descriptors
> is to act as
> a consistent common model across the engine of what a service
> is, what it
> can do, and the various mappings of XML names to things like
> Java methods
> and parameters. I'm in the midst of roughing in the core
> parts of these
> classes now, and I expect we'll improve them as we go - please don't
> consider this stuff a polished work yet, but it moves in a
> direction we've
> needed to go in for a long time now. We've been discussing
> these concepts
> for months/years. I agree a design/arch doc is needed, and
> I'll commit to
> doing one but I want to get this phase of development effort
> done first.
>
> Here's a summary. A service has a name, a pointer to a Java
> class, and a
> set of operations. An operation has a QName, a java method name,
> information about the return qname/type, and a set of ordered
> parameters.
> A parameter has a qname, an ordinal position, a mode
> (IN/OUT/INOUT), and a
> type. This should all feel pretty familiar - the idea is
> that this is an
> abstract model of what Axis cares about for a service which
> is not tied
> tightly to WSDL (though it can be used to generate WSDL or be
> built from
> WSDL).
>
> This data comes from one of two places. Either
> WSDD/deployment info or
> introspection. So if you want to specify that the third
> parameter for
> your calculateInterest() method has an XML QName of
> ["myNS", "term"], you
> can do that like this in WSDD:
> <service name="loanCalc">
> <operation name="calculateInterest">
> <parameter name="rate" type="xsd:float"/>
> <parameter name="principal" type="xsd:float"/>
> <parameter qname="foo:term" xmlns:foo="myNS" type="xsd:int"/>
> </operation>
> </service>
>
> If there is no info which defines this stuff in the WSDD, we
> will build it
> by introspecting. We only need to do this once now, because
> once we have
> built the OperationDescs from the introspection, everything
> else in the
> engine uses those directly.
>
> There is actually a third way this information gets into the
> system - on
> the client side via the Call APIs. A Call is really a mechanism which
> makes an operation happen, and it contains metadata about
> that operation.
> So we're moving towards a world where the Call stores all of
> this stuff
> (parameter info, etc) in the OperationDesc inside it, instead
> of in custom
> ways. Also, pointing a Call at a WSDL document should enable
> generation of
> OperationDescs from there.
>
> Each request gets an OperationDesc associated with it - for
> the client,
> this gets handed down from the Call. For the server, we
> figure it out by
> looking at the XML which came in (and then potentially resolving
> overloads).
>
> Now, here's an example of where the rubber meets the road. We're
> deserializing some XML like this on the server:
>
> <calculateInterest>
> <rate>6.625</rate>
> <principal>10000</principal>
> <ns1:term xmlns:ns1="myNS">48</term>
> </calculateInterest>
>
> We've already dispatched to a SOAPService (via
> URL/SOAPAction/NS), and we
> look in there for a ServiceDescription. Then we ask the
> ServiceDescription
> for an OperationDesc which matches <calculateInterest> - note
> that this can
> be an arbitrary QName match to allow document-style services
> to dispatch on
> any XML they want. Once we've got the OperationDesc, the
> RPCHandler can do
> the same trick when encountering each of the parameters <rate>,
> <principal>, and <ns1:term>. It asks the OperationDesc for a
> ParameterDesc
> which matches the XML, and that ParameterDesc contains the
> type to apply.
> We used to introspect the Java class on every request to
> figure this stuff
> out, now we just do a lookup.
>
> Because we get parameters by QName, we are now moving towards
> being able to
> support the "missing element == null value" pattern. If we can
> unambiguously determine the OperationDesc which we're calling
> (i.e. don't
> have overloaded methods), we now have the ability to set up
> the method call
> with the passed parameters in the right places and nulls for
> the missing
> ones.
>
> Note also that once this info is in the WSDD, we no longer
> need to generate
> the Skeleton classes for services built with WSDL2Java -s.
>
> This is just an initial summary, but I hope it conveys some
> of what's up
> with these classes and eases your "queasy feeling". You're
> right, this
> model is weaving its way into several parts of the runtime, which is
> exactly what it was designed to do. Discussion / questions /
> etc. most
> appreciated.
>
> --Glen
>
> > -----Original Message-----
> > From: Russell Butek [mailto:butek@us.ibm.com]
> > Sent: Friday, March 22, 2002 11:23 AM
> > To: axis-dev@xml.apache.org
> > Subject: Re: cvs commit: xml-axis/java/test/encoding
> > TestArrayListConversions.java
> >
> >
> > Hey, Glen! Where's your design doc for this stuff!?! I
> > would really like
> > to understand what you're doing here! There seem to be a lot of
> > dependencies on this meta-data model within the runtime.
> > That's giving me
> > a rather queasy feeling.
> >
> > Russell Butek
> > butek@us.ibm.com
>
>