On 8 Oct 2009, at 11:35, Felix Meschberger wrote:

Hi,

Ian Boston schrieb:
Hi,
While looking at making it possible to bind more than one
ResourceProvider to a URL  see [1], I noticed that the
ResourceProviderEntry appeared to be a very active area of code with a
lot of recursion, especially when you actually start to deploy a
reasonable number of servlets. This lead me to think that it should be possible to convert the loops into lookups and speed it up. I thought it
was simple, a week later I now know its not so simple.

Yes, because the providers are organized in a tree of
ResourceProviderEntry instances where each entry acts as a node and has
a list of child entries.

Each Entry has a prefix, which is a partial path.

To find a matching child entry, the list has to be scanned for an entry
whose prefix matches.

If the prefix would be just names (or labels) instead of partial paths, we could build a map of child entries indexed by name and then just walk
down the tree by indexing into the map.

To do this we would have to create a lot of intermediate entries  ....

Now, you can say that the price to pay is the memory consumption of the
"empty" entries and splitting the path to walk down the tree. But you
gain faster access (may well be true) and have simpler access -- in fact
it would probably also simplify the synthetic resource case in the
getResource(ResourceResolver, String, String) method.

yes, that is what I thought.



Since the whole concept of binding ResourceProviders is probably going to be highly contentious [2] since its intended to allow virtualization of the mapping between URLs and jcr URI's I haven't committed anything.
I have put the patch set (which is not completely working ) up [3] at
codereview.

I have a question before I spend more time.

Am I wasting my time ?

The question is, where are you heading ?

At the moment looking at your patch I cannot understand what the
ResourceProviderEntry2 is all about ....


Its the re-implementation of ResourceProviderEntry converting from a recurse and test to a map of maps based lookup.

I have left ResourceProviderEntry for reference.


Are you just adding support to add more than one ResourceProvider to a
ResourceProviderEntry -- which would kind of solve the issue of
registration collision.

yes, this is included in the refactor, but could have been done to the original


Or do you want to refactor the ResourceProviderEntry tree ?

Both are ok for me...

yes both.



(Obviously if I am not, I will clean the patch set up and make it work,
I believe it may also fix some issues with Servlet Registration)

which ? the ones with servlet path collisions ?

yes, servlet path collision, I need to check that de-registration really works.

*but*

with 2 servlets registered to the same path I haven't worked out the order in which they should be used, probably part of the sort order thats required.


Regards
Felix

Ian

1 http://markmail.org/thread/jeh4a7z4i6skkfci
2 http://markmail.org/thread/roumyelolpciboci
3 http://codereview.appspot.com/124094


Reply via email to