On Fri, 2008-09-05 at 14:59 +0200, Thorsten Scherler wrote: > Hi all, > > I will have some time in the next week to enhance the performance of the > dispatcher. The performance always have been the Achilles’ heel of the > dispatcher.
Regarding the implementation of the hook processing. There is a small downsides in the current implementation: the xpath injection are NOT working well when the injection point is within the main stream of the events. It is possible to inject e.g. to /html/head but injecting to /html/body/... will not inject the new events in the principal stream to the location that one w ould await. The main reason is that the generation of the result document is now as well based on StAX and not any more in DOM. However to have the same behavior as we have currently in the DispatcherTransformer I do not see any other possibility then using DOM again. Like with the xml properties I will make the usage configurable since I reckon in 90% of all cases the StAX based calculation is used. For the rest I am stil l investigating but it seems that DOM is the only possibility because every other possibility that me occur is imitating DOM. For the dispatcher/testing/org/apache/forrest/dispatcher/master.structurer.xml that I am using for testing I get: <?xml version='1.0' encoding='UTF-8'?> <html> <body> <!-- the normal stream of contract no xpath used in contract Using the xpath from structurer--> <hook id="example"> Content going to the location defined by the structurer. $test-inline: position:hook/contract $test-inline-xml: No xml parameter has been passed <hook id="level2"> Content going to the location defined by the structurer. $test-inline: position:hook/hook/contract $test-inline-xml: No xml parameter has been passed</hook> </hook> Another test! $test-inline: xxx $test-inline-xml: No xml parameter has been passed </body> <!-- xpath injection but to a path not in structurer default path --> <head> <meta name="Description" content=" Content going to a fixed location defined by the contract (here: /html/head)." /> <meta name="Description" content=" Content going to a fixed location defined by the contract (here: /html/head)." /> <meta name="Description" content="m2 - another test" /> </head> <!-- Injections from the contract to a specific xpath --> <body> <hook> <hook> <p>master-xxx</p> <p>master-xxx</p> </hook> </hook> </body> </html> Like you can see the 3 part is not in the desired nodes. To solve this, one need to localize the stream event that comes the closest to the xpath expression and then inject new events there. Somebody has an idea? Meanwhile I will add the DOM result creation as alternative. salu2 -- Thorsten Scherler thorsten.at.apache.org Open Source Java consulting, training and solutions