Hi, We use log4j for logging and our usual prod level is INFO. I checked the logs thoroughly and I have'nt seen a exception related to this. All that we see in the logs is the application metrics that we log. I have a sample xml message that was corrupted.
<TransactionDto><transaction-vo><tran-ind>N</tran-ind><original-transaction-number>6160</original-transaction-number><original-store-id>522</original-store-id><SQLTypeName>TRN_DTL_OBJ</SQLTypeName><original-transaction-time>1527</original-transaction-time><messageResponse><RetailStoreID>520</RetailStoreID><WorkstationID>7468</WorkstationID><TransactionNumber>4792</TransactionNumber><ErrorID>1</ErrorID><ErrorText>TransactionNotFound</ErrorText></messageResponse> Thanks, Gopinath R. On Tue, Dec 16, 2008 at 1:56 PM, Werner Guttmann <[email protected]>wrote: > Hi, > > in this case, I'd like to see some relevant parts of your LOG files, to > get an idea where and how things are going wrong. Would that be an option ? > > Regards > Werner > > > Gopinath Raghavan wrote: > > Werner, > > > > A small correction we do not share marshaller instances between threads. > It > > is actually our wrapper object's instance which is a singleton and shared > > across multiple threads. As far as the instance of marshaller goes we > create > > new instance for every single thread. Please see the following code. > > > > _marshaller = new Marshaller(sw); > > _marshaller.setResolver((XMLClassDescriptorResolver) > > _cdResolver); > > _marshaller.setSuppressXSIType(true); > > _marshaller.marshal(myObject); > > > > Apologies for the confusion. The marshaller instance shown above is not > > shared amongst threads. > > > > Thanks, > > Gopinath R. > > > > > > On Tue, Dec 16, 2008 at 12:46 PM, Gopinath Raghavan < > > [email protected]> wrote: > > > >> 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 > >>> > >>> > >>> > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > >

