Actually, here's what I do:

I have a Singleton Hashtable "Cache" class that I wrote, it holds the 
Templates, not the Transformers. In such a case you can get a 
transformer from the template instance in the cache without needing to 
read the xsl file again. When you don't find the template in the cache 
then you can stick a new instance in.

-M.

Mark R. Diggory wrote:

> Put it in the "ServletContext", then its available to all Sessions and 
> Servlets across the application.
>
> Are jaxp Transformers syncronized at all? If so, couldn't different 
> sessions grab the same transformer from the context and use it?
>
> -M.
>
> neal wrote:
>
>> Actually,
>>
>> Isn't the SessionContext analogous to the session object in JSP? If I 
>> were
>> to place the Transfomer object in their for cache it would be tied to a
>> specific user and I would have to hold numerous copies of it 
>> simultaneouly
>> whether they were in use or not.  Seems like this would eat up a lot of
>> resources.
>>
>> As for what I am currently trying to do ... I just created a single
>> Hashtable which should be available to the entire application (all 
>> servlets)
>> and it contains the Transformer objects for each XSLT.  My plan was 
>> to have
>> the servlet make a copy of one of these Transformer objects as needed 
>> and
>> perform a
>> transform and then destroy the copy, while the original would stay in 
>> cache
>> in the Hashtable.  I thought this way I could reduce the overhead of 
>> having
>> to (a) read from disk and (b) parse the file into a DOM-like 
>> structure each
>> time.
>>
>> It does not appear however that I can make a copy of a Transformer 
>> object
>> however since it does not appear to implement the Cloneable 
>> interface.  Is
>> it just me or is this a significant limitation of Java ... that you 
>> can't
>> make byVal copies of objects at will?  SO frustrating!!!
>>
>> Can anyone make a suggestion for caching my XSLTs?
>>
>> Thanks.
>> Neal
>>
>>
>> -----Original Message-----
>> From: Shannon Lal [mailto:[EMAIL PROTECTED]]
>> Sent: Wednesday, September 18, 2002 6:34 AM
>> To: [EMAIL PROTECTED]
>> Subject: RE: Caching / Cloning
>>
>>
>> Neal,
>> Have you thought about using SessionContext.  I believe the session 
>> context
>> is specific to the session of the servlet, so when the instance of the
>> servlet is run, it will have it s own copy of its Transforms to work 
>> with.
>> That way you don t have to worry about different servlet instances 
>> locking
>> of data.
>>
>> OR
>> Are is the Transforms hashtable shared by all servlet instances.  If so
>> e-mail with more information about what you are doing and I can give you
>> some more information.
>>
>> Nin
>>
>>
>>  
>>
>>> From: "neal" <[EMAIL PROTECTED]>
>>> Reply-To: "Tomcat Users List" <[EMAIL PROTECTED]>
>>> To: "Tomcat Users List" <[EMAIL PROTECTED]>
>>> Subject: RE: Caching / Cloning
>>> Date: Tue, 17 Sep 2002 22:35:55 -0700
>>>
>>> Siddarth,
>>>
>>> Thanks but I'm thinking of two possible issues:
>>>
>>> 1. using the ServletContext.getContext() - won't this still just 
>>> return a
>>> pointer rather than cloning the cache?  I looked at the API and 
>>> didn't see
>>> anything that said it was copying the object and creating a local copy.
>>>
>>> 2. Returning and having to handle the entire contents of the servlet
>>> context
>>> could imply alot of overheard, I would think....at least presuming your
>>> copying the context each time a page is called in ordert to obtain a 
>>> local
>>> copy of something, in this case an XsLT Transformer object.
>>>
>>> Am I misunderstanding your suggestion, or how this would work?
>>>
>>> Thanks.
>>> Neal
>>>
>>>
>>> -----Original Message-----
>>> From: Siddharth [mailto:[EMAIL PROTECTED]]
>>> Sent: Tuesday, September 17, 2002 10:30 PM
>>> To: Tomcat Users List
>>> Subject: Re: Caching / Cloning
>>>
>>>
>>> Neal,
>>> I have never worked with XSLT but I can show you the way where you 
>>> can have
>>> an
>>> initial copy of ServletContext which you can use independently.
>>> Interface ServletContext has a mathod called
>>> getContext(java.lang.String uripath)  returns  ServletContext
>>> You can use this method by giving uripath of same application to get 
>>> a copy
>>> of cache.
>>>
>>> I hope, This suggestion may help you.
>>> Siddharth
>>>
>>>
>>> ----- Original Message -----
>>> From: neal <[EMAIL PROTECTED]>
>>> To: Tomcat Users List <[EMAIL PROTECTED]>
>>> Sent: Wednesday, September 18, 2002 9:52 AM
>>> Subject: Caching / Cloning
>>>
>>>
>>>   
>>>
>>>> Is there a way to make a copy of what's in my cache
>>>>     
>>>
>>> (getServletContext())
>>>   
>>>
>>>> and make changes to that local copy, independent of whether the cached
>>>> object implements Cloneable()?
>>>>
>>>>
>>>> In order to speed up my XSLT I thought I would preload them (their
>>>> Transformer objects) into app scope and simply retrieve it as 
>>>> needed for
>>>> transforms.
>>>>
>>>> This works fine except I just remembered that I need to set attributes
>>>>     
>>>
>>> on
>>>   
>>>
>>>> these XsLT Transformer objects.  Now, I am PRESUMING that this means
>>>>     
>>>
>>> that
>>> I
>>>   
>>>
>>>> would then be locking up the servlet context each time I set one of
>>>>     
>>>
>>> these
>>>   
>>>
>>>> parameters so then it seems I should clone() the object locally.  That
>>>>     
>>>
>>> way
>>> I
>>>   
>>>
>>>> could set the params locally without affecting (or locking) the cached
>>>> version).  BUT Transfomer does not appear to implement the Cloneable()
>>>> interface.
>>>>
>>>> Is there a way around this?  Am I by any chance wrong about what's
>>>>     
>>>
>>> actually
>>>   
>>>
>>>> happening here?   Can anyone make a suggestion?
>>>>
>>>> Here's what I'm doing basically:
>>>>
>>>> ServletContext application = getServletContext();
>>>> application.setAttribute("TEMPLATES_HASH",templates);
>>>> (where templates is a Hashtable containing Transformer objects)
>>>>
>>>>
>>>> Thanks.
>>>> Neal
>>>>
>>>>
>>>> --
>>>> To unsubscribe, e-mail:
>>>>     
>>>
>>> <mailto:[EMAIL PROTECTED]>
>>>   
>>>
>>>> For additional commands, e-mail:
>>>>     
>>>
>>> <mailto:[EMAIL PROTECTED]>
>>>
>>>
>>> --
>>> To unsubscribe, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>> For additional commands, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>>
>>>
>>> --
>>> To unsubscribe, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>> For additional commands, e-mail:
>>> <mailto:[EMAIL PROTECTED]>
>>>   
>>
>>
>>
>>
>>
>> _________________________________________________________________
>> Send and receive Hotmail on your mobile device: http://mobile.msn.com
>>
>>
>> --
>> To unsubscribe, e-mail:
>> <mailto:[EMAIL PROTECTED]>
>> For additional commands, e-mail:
>> <mailto:[EMAIL PROTECTED]>
>>
>>
>> --
>> To unsubscribe, e-mail:   
>> <mailto:[EMAIL PROTECTED]>
>> For additional commands, e-mail: 
>> <mailto:[EMAIL PROTECTED]>
>>
>>  
>>
>
>
>
>
>
> --
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
>





--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to