[TransWarp] naming.lookup requires kwarg creationParent
Phillip J. Eby
pje at telecommunity.com
Sat May 10 10:05:13 EDT 2003
At 01:20 PM 5/10/03 +0200, ueck at net-labs.de wrote:
>Hi Phillip,
>
>one thing that often happens to me lately is, that when i do:
>
>something = naming.lookup(context, "some://url")
>
>the configuration-context is not set properly.
>
>to make it work i need to write:
>
>something = naming.lookup(context, "some://url", creationParent=context)
This:
context.lookupComponent("some://url")
works correctly; I want to encourage its use as the canonical lookup
mechanism, because it can lookup relative names as well as absolute ones,
and it handles properties and utilities too. And, if 'context' is not a
component, you can do:
binding.lookupComponent(context,"some://url")
to get the same effect.
In other words, if you want implicit binding (to the context), you must use
the binding tools. The naming tools currently require you to be explicit
about any bindings involved.
>only then, the configuration-machinery works as expected.
>
>is this wanted in favour to "explicit is better than implicit"??
>
>it smells like we'll need a FAQ entry for that case ;-) if this
>behaviour stays as is.
It won't. See below.
>In what situations would one want to lookup something in context
>and not "plugging" it into the configuration-machinery ??
>
>I'ld expect not having to supply a creation-parent when already
>specifying a context (the possiblity to do it explicit should
>stay .. but if not given one might automagically use the context
>as creation-parent).
>
>what do you think?
I think it should do as you suggest, and assume the context is the creation
parent. And, I thought it already did.
But I think I know why it doesn't, now that you bring it up. When I first
introduced the 'creationParent' mechanism there was a separate
"InitialContext" class that defaulted 'creationParent' to the context's
parent (which is the object passed to 'naming.lookup()'). Regular naming
contexts just acquired their creationParent value from their parent
component. So it worked without the keyword argument. Later, I refactored
to remove the InitialContext class because it was getting in the way of
something, I forget what. lookupComponent then still worked as expected,
because it passed creationParent explicitly. And, naming.lookup() still
worked more-or-less okay, because of the old implicit configuration roots.
So, removing the implicit configuration roots exposed this problem, and
that's good, because it means that prior to now we didn't know what parents
were being used for things found using naming.lookup()!
Anyway, I'll change 'naming.spi.getInitialContext()' to default
'creationParent' from 'parentComponent', if it is not supplied. And, as I
looked up where to do that, I found that there are several places in the
naming package where "paramegeddon" wasn't completed, because they are at
the SPI level rather than the API level. So, I'll tackle these today as
well. :)
More information about the PEAK
mailing list