So how does the CompiledExpression differ from a JXPointer?
When I needed to cache a dictionary of paths I dused a Map.Entry where the key is the path string (JXPointer.asPath() )and the value is a JXPointer (which has the getValue() setValue() methods). ----- Original Message ----- From: "Dmitri Plotnikov" <[EMAIL PROTECTED]> To: "Ovidiu Predescu" <[EMAIL PROTECTED]>; "Ivelin Ivanov" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Saturday, April 27, 2002 11:46 PM Subject: Re: [jxpath] CompiledExpression [was: New features, bug fixes and documentation] > Ovidiu, > > I have added to JXPath the explicit caching you proposed in your earlier > submission: > > [... snip...] > > > > > > > > > > I've got a small suggestion for an optimization, if > > > > > you don't mind. In > > > > > the implementation I have, 0.1-dev from Jakarta's > > > > > CVS, I noticed > > > > > there's no way to compile an XPath, before using it. > > > > > Having a way to > > > > > compile the XPaths to be used later, would > > > > > considerably improve the > > > > > performance in repeated operations. > > > > > > > > > > E.g. right now you have something like this: > > > > > > > > > > Object bean = ...; > > > > > JPathContext context = > > > > > JPathContext.newContext(bean); > > > > > context.getValue("some XPath"); > > > > > > > > > > I'd like to also have the ability to do: > > > > > > > > > > Object bean = ...; > > > > > JPathContext context = > > > > > JPathContext.newContext(bean); > > > > > XPathObject xpath = new XPathObject("some XPath"); > > > > > context.getValue(xpath); > > > > > > > > > > With this approach, I can setup a dictionary of > > > > > already compiled XPath > > > > > expressions, and use compiled XPaths, instead of > > > > > having Xalan > > > > > interpret the XPath all the time. > > > > > > > > > > Last time I checked, Xalan did have the ability to > > > > > precompile XPaths > > > > > in its internal format, so maybe this is easy to > > > > > achieve. > > > > Actually JXPath is already doing something like that > > > > transparently to you. It maintains a static soft cache > > > > of parse trees (which are that internal representation > > > > you are talking about). The reason I am using soft > > > > cache as opposed to a regular map is that some > > > > applications will generate XPaths dynamically, in > > > > which case the size of the cache has a chance of going > > > > through the roof. The soft cache is cleared by > > > > garbage collector, which removes the possibility of > > > > running out of memory. > > > > > > > > I have been thinking about improving that mechanism a > > > > little bit. I now want to have a regular map of a > > > > limited size in addition to the soft cache. > > > > Everything that spills over the hard cache will still > > > > be stored in the soft cache. I think that will cover > > > > the 90% case. > > I now see the need for caching external to JXPath: you may want to > precompile some expression at application start time, you may want to check > syntax before you use an expression etc. > > I called "XPathObject" "CompiledExpression". You make an explicit call: > context.compile(xpath) to get a CompiledExpression. That method will in > fact check the internal cache before it proceeds with the compilation. > > Thanks again for the suggestion, > > Regards, > - Dmitri > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]