Mike Lopke wrote: > I have a java servlet that queries a database and produces xml. > Part of this includes translating some of the data, like product > numbers, using a HashMap. The HashMap is built from an xml > source and is very large. Populating it takes a long time so I > set it up using a singleton class and a timer to provide an > update mechanism that wouldn't cause performance issues. > I was wanting the same functionality using Cocoon but want > to avoid the performance issues. Is there a transformer I can > use? Should I consider writing one?
We've done something similar - we have XML documents in a pipeline which we
transform based on a huge (1GB RAM) Topic Map. This is definitely a
singleton :-)
We used the JXTemplateTransformer, and I think it would also work in your
case.
Your sitemap would look like this:
<map:generate type="sql" ... />
<!-- transform sql resultset into a jxtemplate -->
<map:transform src="xslt/sql-to-jxt.xsl"/>
<!-- execute the resulting jxtemplate to query the hashmap -->
<map:transform type="jx"/>
...
<map:serialize ... />
So you just have to write this sql-to-jxt.xsl stylesheet, but this is
actually quite easy.
First, the JXTemplate you create should have a global variable containing
your hashmap:
<jx:set var="myHashMap" value=" (this is where you look up your singleton)
"/>
You can create this using an XSLT template like:
<xsl:template match="/">
<jx:template>
<!-- obtain the singleton hashmap -->
<!-- (could use jx:parameter here and pass hashmap from
flow) -->
<jx:set var="myHashMap" value="etc..."/>
<xsl:apply-templates/>
</jx:template>
</xsl:template>
Then you generate jxtemplate code to translate the Product Numbers.
If your data has this:
<sql:productNumber>foo</sql:productNumber>
... then you probably want to transform it to something like this:
<sql:productNumber>#{$myHashMap/foo}</sql:productNumber>
You would use an XSLT template like this:
<xsl:template match="sql:productNumber/text()">#{$myHashMap/<xsl:value-of
select="."/>}</xsl:template>
(And use an XSLT identity template to copy all the other sql data through
the pipeline, unchanged)
Hope that helps!
Con
<<attachment: winmail.dat>>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
