On 17/11/2012 13:05, Rainer Jung wrote:
> Hi,
> 
> I did some experiments about more flexible version mapping for contextes
> a while back and was a bit unhappy about the type unsafetyness of the
> Mapper. Internally it only uses plain Objects and the code using it has
> to cast everything.
> 
> There is a patch available at
> 
> http://people.apache.org/~rjung/patches/mapper-typesafe-trunk.patch

There is a lot to take in there. I am generally in agreement but find
myself rather overwhelmed by the patch. May I suggest you go ahead with
just the renaming of Host->MappedHost etc and commit that to trunk
(should be simple to do in an IDE) and then prepare a patch that makes
the mapper type safe.

If it would be easier for me to make the name changes and then you could
just svn up I'm happy to do so. Let me know.

> that makes the Mapper type safe. The only changes outside of the mapper
> package is the removal of the casts. The TestMapper class had to be
> adjusted to use Host, Context and Wrapper objects instead of Strings.
> 
> The test suite runs without errors.
> 
> One change is potentially problematic: MapperListener previously
> registered a new context using the Container returned by
> context.getParent(), ignoring whether it is a Host or something else. I
> had to cast to Host, because registering a Context for any type of
> Container is no longer possible. I doubt that previously it would have
> really worked, because all code using the container returned later by
> the mapper would have assumed it to be a Host.
> 
> The Context interface mentions in comments, that the parent might be
> something else than a Host. Does anyone know a good example?

I can't think of a single example.

> Would it have worked?

No. I see multiple places where the result would be an NPE if
Context->Host->Engine is not in place.

> What would the expected behaviour of MapperListener have
> been (where would it have registered that context in the mapper)?

I doubt the start up processes would have got that far.

I suspect that the initial design allowed for a different container
hierarchy but over time the Wrapper->Context->Host->Engine hierarchy has
become embedded in numerous places in the code. I see no reason to
unpick that so lets make it explicit and override getParent() for
Wrapper, Context and Host for Tomcat 8. It will enable us to remove lots
of casting and we may even find a few obscure bugs.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to