Hi, I have just returned from the W-JAX in Munich, and I have a very similar discussison on thread safety of the ClassDescriptorResolver [CDR] with a committer of the spring-ws project. Even though CDR might not be thread-sdafe as it is, I am sure we will (have to) have another look at this codebase, as imho it should be, indeed.
Regards Werner > -----Original Message----- > From: Michael Crozier [mailto:[EMAIL PROTECTED] > Sent: Freitag, 03. November 2006 21:40 > To: [email protected] > Subject: Re: [castor-user] ClassDescriptorResolver & thread safety > > > Ralf, > > I looked at the code and it all makes sense now. The > ClassCache and DescriptorCache objects are definitely not > thread safe. In practice they might be, provided the first > invocation was isolated and completely covered all the > classes & descriptors that will ever be seen. > > Most of that could be solved with some read and write locking > in the inner classes. I think I'll go with the thread-local > approach for now. > > Thanks for your help, > Michael > > > > Michael, > > > > XmlClassDescriptorReslover internally holds an instance of > > DescriptorCache which holds various instances of HashMaps and > > ArrayLists. If you only get objects from the cache which > consults the > > maps and lists I would not expect problems to use the CDR with > > multiple threads. Having said that I am not 100% sure about that. > > > > The problem may happen if you request a XML name (tag) or a > class that > > the CDR has not loaded before. At this cache miss it uses various > > strategies to search for a matching class or descriptor and > adds this > > to the cache. This modification of the cache is what I fear > may cause > > you headage. > > > > Having said that you should take a look at resolve() and > > resolveXml() methods of XmlClassDescriptorResolver yourself > to verify > > my above statement. It should not be to difficult to understand the > > basics that are happening there. > > > > Regards > > Ralf > > > > Michael Crozier schrieb: > > > Tom & Ralf, > > > > > > Thanks for the answers. > > > > > > One additional question: Is ClassDescriptorResolver not > thread safe > > > during the use of the Unmarshaller and Marshaller > objects, or just > > > during the construction? > > > > > > For example, if I locked the ClassDescriptorResolver during the > > > invocation of marshaller.setResolver(), would that provide thread > > > safety? > > > > > > Or is the opposite true, that I need a distinct > > > ClassDescriptorResolver for each Marshaller and > Unmarshaller object > > > that is being used concurrently? > > > > > > If the latter is true, then I will likely maintain thread-local > > > ClassDescriptorResolver objects. > > > > > > Thanks again, > > > > > > Michael > > > > > >> Hi Tom, > > >> > > >> you are right that the XML best practice document should > point out > > >> that ClassDescriptorResolver is not thread safe. Sorry for that > > >> confusion. I'll take care to update docs or make > > >> ClassDescriptorResolver thread safe for next release. > > >> > > >> Regards > > >> Ralf > > >> > > >> Carey, Tom schrieb: > > >>> This link below talks about reusing ClassDescriptorResolvers to > > >>> achieve best performance. Is this link suggesting that it is > > >>> thread-safe? > > >>> If so, maybe > > >>> this page should be updated. > > >>> > > >>> http://www.castor.org/xml-best-practice.html > > >>> > > >>> Tom > > >>> > > >>> -----Original Message----- > > >>> From: Ralf Joachim [mailto:[EMAIL PROTECTED] > > >>> Sent: Friday, November 03, 2006 2:50 AM > > >>> To: [email protected] > > >>> Subject: Re: [castor-user] ClassDescriptorResolver & > thread safety > > >>> > > >>> Hello Michael, > > >>> > > >>> as far as I can see when looking at the source of > > >>> XMLClassDescriptorResolver it isn't thread safe by > design. While I > > >>> think there should be no problem if all ClassDescriptor's are > > >>> loaded before starting to un-/marshal, I'd suggest to > go safe and > > >>> use them in a thread safe way. E.g. one CDR per thread or by > > >>> implementing a CDR pool. > > >>> > > >>> Regards > > >>> Ralf > > >>> > > >>> Michael Crozier schrieb: > > >>>> Hello, > > >>>> > > >>>> As outlined in the best practices document, I'm using > > >>>> ClassDescriptorResolver to load and cache mappings. I > understand > > >>>> that Marshaller and Unmarshaller objects are not > thread safe, but > > >>>> ClassDescriptorResolver has no mention of thread-safety. I am > > >>>> using this mechanism to load mappings from String objects and > > >>>> well as from > > >>> > > >>> Files. > > >>> > > >>>> Is it thread-safe to share a single ClassDescriptorResolver > > >>>> instance between many threads, in which new > marshalling objects > > >>>> are created > > >>> > > >>> per-invocation? > > >>> > > >>>> Many thanks, > > >>>> > > >>>> Michael > > >>>> > > >>>> > > >>>> -------------------------------------------------------------- > > >>>>------- To unsubscribe from this list please visit: > > >>>> > > >>>> http://xircles.codehaus.org/manage_email > > >>> > > >>> --------------------------------------------------------------- > > >>>------ To unsubscribe from this list please visit: > > >>> > > >>> http://xircles.codehaus.org/manage_email > > >>> > > >>> --------------------------------------------------------------- > > >>>------ To unsubscribe from this list please visit: > > >>> > > >>> http://xircles.codehaus.org/manage_email > > >> > > >> -- > > >> > > >> Syscon Ingenieurbüro für > > >> Meß- und Datentechnik GmbH > > >> Ralf Joachim > > >> Raiffeisenstraße 11 > > >> D-72127 Kusterdingen > > >> Germany > > >> > > >> Tel. +49 7071 3690 52 > > >> Mobil: +49 173 9630135 > > >> Fax +49 7071 3690 98 > > >> > > >> Email: [EMAIL PROTECTED] > > >> Web: www.syscon-informatics.de > > >> > > >> ---------------------------------------------------------------- > > >>----- To unsubscribe from this list please visit: > > >> > > >> http://xircles.codehaus.org/manage_email > > > > > > ----------------------------------------------------------------- > > >------- > > > > > > ----------------------------------------------------------------- > > >---- To unsubscribe from this list please visit: > > > > > > http://xircles.codehaus.org/manage_email > > -- > > Conducive Technology Corporation > Taking Worldwide Flight information > to the next level. > > http://www.conducivetech.com > http://www.pathfinder-web.com > http://www.flightstats.com > > Michael Crozier [EMAIL PROTECTED] > > Voice: 503.445.4233 > Fax: 503.274.0939 > > > --------------------------------------------------------------------- > To unsubscribe from this list please visit: > > http://xircles.codehaus.org/manage_email > > > --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email

