From: Frédéric Laurent (xml@opikanoba.org)
Date: 03/06/2002 - 07:26
the_peuffeur@voila.fr wrote:
> J'utilise la version de Xalan J 2.2 et j'ai lu quelque part qu'il
> fallait utiliser une nouvelle instance de xalan pour chaque appel à
> une xsl compilée (il semblerait y avoir des problèmes quand plusieurs
> threads utilisent la même instance de xalan).
> Dans mon appli Java je compile mes XSL une seule fois et je les stocke
> en attribut d'un singleton, puis à partir d'une servlet je fais appel
> à une méthode sur le singleton pour récupérer la xsl compilée et je ne
> semble pas rencontrer de problèmes, je suis en phase de dev donc j'ai
> essayé avec seulement 3 connexions simultanées.
> Quelqu'un peut-il me confirmer ou m'infirmer que je rencontrerai des
> problèmes, y a t-il une autre solution avec xalan sans recompiler les
> xsl ? Pour info la transformation se fait en environ 200 à 400 milli
> secondes au lieu de 2 à 3 secondes (suivant les flux XML) !
> Merci de vos remarques et suggestions.
Pour faire une transformation XSLT, il faut utiliser l'objet Transformer
(javax.xml.transform.Transformer). Celui-ci n'est pas thread safe,
d'ailleurs la doc l'indique clairement :
"An object of this class may not be used in multiple threads running
concurrently. Different Transformers may be used concurrently by
different threads."
C'est la raison pour laquelle, dans un contexte de processus
concurrents, l'utilisation de la classe Templates est un passage
obligé (javax.xml.transform.Templates). La doc est claire aussi sur
ce point :
"Templates must be threadsafe for a given instance over multiple threads
running concurrently, and may be used multiple times in a given session."
On utilisera alors un Transformer qui sera créé par l'instance de
Templates pour ne pas avoir de problème.
Templates t=...
Transformer tr = t.newTransformer()...
donc pour conclure, il y a effectivement des précautions à prendre
pour utiliser ces objets de façon concurrente.
Les objets Templates permettent d'y répondre, maintenant vous pouvez
toujours envisager de "synchroniser" la transformation pour éviter
la compilation des feuilles de styles, en ayant bien à l'esprit
le coût que cela peut avoir (goulet d'étranglement, attente des autres
processus, mise en place de thread pour pallier à ça... et j'en passe..)
De toute façon, les feuilles de style, qu'elles soient compilées par
vos soins (via l'objet Templates) ou par la machine (par son propre
mécanisme), elles le seront forcement (compilées) à un moment donné...
donc...
cordialement
--
Frédéric Laurent
http://www.opikanoba.org
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|