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
>
>
>

Reply via email to