Thanks Werner for your suggestion. Let me try creating one instance of Marshaller for every single thread.
Thanks again, Gopinath R. On Tue, Dec 16, 2008 at 12:40 PM, Werner Guttmann <[email protected]>wrote: > Hi, > > Gopinath Raghavan wrote: > > Hi Werner, > > > > Please find my answers inline. > > > > a) Do you have a test case that I can use to replay your probpem. > > [Gopi] We do not have a test case that could reproduce this problem. We > > have'nt been able to replay this problem in our test environments. From > the > > observation (looking at timestamps in the DB and log file) of the issue > we > > found that when two different xml messages are picked up for processing > by > > two different threads exactly at the same time (timing matches upto > > millisecond level) then one of the response xml is corrupted. > > > > b) How are you using Castor ? How are you creating Marshaller instances. > > [Gopi] We've a generic wrapper class that provides ability to configure > > castor or other xml data binding components. Please find the code below > on > > how we create marshaller/unmarshaller classes with in the wrapper > classes. > > // Marshaller Usage > > StringWriter sw = new StringWriter(); > > _marshaller = new Marshaller(sw); > > _marshaller.setResolver((XMLClassDescriptorResolver) > > _cdResolver); > > _marshaller.setSuppressXSIType(true); > > _marshaller.marshal(myObject); > > > > > > // Unmarshaller Usage > > _mapping = new Mapping(); > > _mapping.loadMapping(_xmlMappingFile); > > > > _cdResolver = > > > ClassDescriptorResolverFactory.createClassDescriptorResolver(BindingType.XML); > > > > MappingUnmarshaller mappingUnmarshaller = new MappingUnmarshaller(); > > > > MappingLoader mappingLoader = (MappingLoader) > > mappingUnmarshaller.getMappingLoader( > > _mapping, BindingType.XML); > > _cdResolver.setMappingLoader((XMLMappingLoader) mappingLoader); > > > > _unmarshaller = new Unmarshaller(); > > _unmarshaller.setResolver((XMLClassDescriptorResolver) _cdResolver); > > > > > > c) Do you share a Marshaller instance between the threads ? > > [Gopi] Yes we do share marshaller instances between threads. It is a > > singleton instance that is shared between the threads. > That is you problem, indeed. You should not share one Marshaller > instance between multiple threads; actually, you must not. In other > words, each thread must create its own instance of a Marshaller before > using it. > > As long as you resuse the ClassDescriptorResolver amongst all the > Marshallers, start-up tine for a Marshaller upon instantiation will be > minimal. > > Regards > Werner > > > > Thanks and Regards, > > Gopinath R. > > > > > > On Tue, Dec 16, 2008 at 5:38 AM, Werner Guttmann <[email protected] > >wrote: > > > >> Hi, > >> > >> to be honest with you, I have not heard a single person in the past four > >> years or so that reported a concurrency issue with Castor. Please note > >> that I am NOT saying that you are doing somethnig wrong, but I think it > >> is extremly unlikely that this is the case. > >> > >> Let me ask you a few questions: > >> > >> a) Do you have a test case that I can use to replay your probpem. > >> b) How are you using Castor ? How are you creating Marshaller instances. > >> c) Do you share a Marshaller instance between the threads ? > >> > >> Regards > >> Werner Guttmann > >> > >> Gopinath Raghavan wrote: > >>> Hi there, > >>> > >>> We are using castor 1.1 in a multi-threaded environment. > >>> > >>> Please find below a brief description about our usage of castor and our > >>> system - > >>> Our application consumes xml message from messaging queue then uses > >> castor > >>> to process the message and send back a response. This is a plain simple > >> POJO > >>> application that listens to the messaging queues and we've about 10 > >> threads > >>> listening to the queue. Whenever a message arrives one of the thread > >> picks > >>> up the xml message and starts processing. We use a mapping.xml. > >>> > >>> Observation of the issue - > >>> Recently after upgrading to castor 1.1 we are seeing that when two > >> threads > >>> pick up and process different xml messages at the same time we see that > >> the > >>> response of one thread has unwanted data attached to the response xml. > >> The > >>> corrupt xml response message has two parts first part was the correct > >>> repsonse xml and the second part actually has the Java object converted > >> to a > >>> xml message for e.g. it was not using the mapping file to generate the > >> xml > >>> rather the java object's attribute names were directly used as tag > names. > >>> There are no errors / exceptions thrown or logged in the log files. > >>> > >>> We havent seen this kind of issue before when we were using Cator > 0.9.5.3 > >>> > >>> Please let me know if someone has experienced the same issue or a some > >>> inputs towards what could possibly be causing the issue. > >>> > >>> Thanks and Regards, > >>> Gopinath R. > >>> > >> --------------------------------------------------------------------- > >> 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 > > >

