Raw Xml Handling and Synchronized Collections

View: New views
3 Messages — Rating Filter:   Alert me  

Raw Xml Handling and Synchronized Collections

by d33mb33 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello All

I have invested time in getting Castor working to my satisfaction and the flexibility in the mappings have allowed me to generate xml that adheres to some difficult schemas.  Thank you.

I have two questions where I haven't found any information to help me.  It may be that I haven't looked properly so simply pointing me in the right direction would be appreciated.

1.  Some of my objects are marshalled into a database text field and then retrieved later through web services.  At the moment I am using Castor to unmarshall and then re-marshall them.  This is a waste of CPU and time, especially when the XML is a couple of megabytes.  Can I write a field handler to simply return the XML?  I have experimented and the best I have been able to do is get it out in a CDATA field.

2.  Some of my objects contain synchronised collections which may be being updated by other threads during marshalling.  When Castor iterates through these collections a ConcurrentModificationException is thrown.  I am working around this issue by creating a "safe" copy of the collection but again this isn't ideal.  Is there a recommended way to handle this?

I'm happy to provide clarifications if anything is unclear.

Thanks in advance

Dave

Re: Raw Xml Handling and Synchronized Collections

by Werner Guttmann-6 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

d33mb33 wrote:

> Hello All
>
> I have invested time in getting Castor working to my satisfaction and the
> flexibility in the mappings have allowed me to generate xml that adheres to
> some difficult schemas.  Thank you.
>
> I have two questions where I haven't found any information to help me.  It
> may be that I haven't looked properly so simply pointing me in the right
> direction would be appreciated.
>
> 1.  Some of my objects are marshalled into a database text field and then
> retrieved later through web services.  At the moment I am using Castor to
> unmarshall and then re-marshall them.  This is a waste of CPU and time,
> especially when the XML is a couple of megabytes.  Can I write a field
> handler to simply return the XML?  I have experimented and the best I have
> been able to do is get it out in a CDATA field.
Sorry, but somehow I am not sure I understand what the problem is. Can
you just rephrase your issue ?

> 2.  Some of my objects contain synchronised collections which may be being
> updated by other threads during marshalling.  When Castor iterates through
> these collections a ConcurrentModificationException is thrown.  I am working
> around this issue by creating a "safe" copy of the collection but again this
> isn't ideal.  Is there a recommended way to handle this?
Not really. Castor XML is not really thread-safe, and is not meant to
be. But out of cusiosity, what is it you are trying to achieve. Or
rather, why do you have a need to update those object instances you are
about to marshal ?

> I'm happy to provide clarifications if anything is unclear.
>
> Thanks in advance
>
> Dave

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email



Re: Raw Xml Handling and Synchronized Collections

by d33mb33 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks for the response.

These two questions arise from use cases in a batch system.  Long running jobs exist which create results objects that are marshalled into XML with Castor.  Users can ask for the status of jobs at any time.  When a job finishes the results are marshalled and stored in a database.

Issue 1 referred to finished jobs:
1.  User makes a web service request for the status of a finished job.
2.  The XML results are retrieved from the database.
3.  Castor unmarshalls the XML into object A.
4.  Object A is embedded inside the full results object (Object B).
5.  Object B is marshalled by Castor and sent as the Web Service response.

I want to avoid the unmarshall/remarshall for object A and simply return the database XML back as a property of Object B.

Issue 2 refers to unfinished jobs:
1.  User makes a web service request for the status of an unfinished job.
2.  Object B contains a results object (Object A).  Object A contains some java.util.SynchronizedList objects.
3.  Castor marshalls Object A to XML but does not synchronize when iterating through the SynchronizedList.  If a new result is added to the list during synchronization then an exception is thrown.

I can work around issue 2 by making a "safe" copy of the results but it is not ideal for a couple of reasons.

Any ideas?

Werner Guttmann-6 wrote:
Hi,

d33mb33 wrote:
> Hello All
>
> I have invested time in getting Castor working to my satisfaction and the
> flexibility in the mappings have allowed me to generate xml that adheres to
> some difficult schemas.  Thank you.
>
> I have two questions where I haven't found any information to help me.  It
> may be that I haven't looked properly so simply pointing me in the right
> direction would be appreciated.
>
> 1.  Some of my objects are marshalled into a database text field and then
> retrieved later through web services.  At the moment I am using Castor to
> unmarshall and then re-marshall them.  This is a waste of CPU and time,
> especially when the XML is a couple of megabytes.  Can I write a field
> handler to simply return the XML?  I have experimented and the best I have
> been able to do is get it out in a CDATA field.
Sorry, but somehow I am not sure I understand what the problem is. Can
you just rephrase your issue ?

> 2.  Some of my objects contain synchronised collections which may be being
> updated by other threads during marshalling.  When Castor iterates through
> these collections a ConcurrentModificationException is thrown.  I am working
> around this issue by creating a "safe" copy of the collection but again this
> isn't ideal.  Is there a recommended way to handle this?
Not really. Castor XML is not really thread-safe, and is not meant to
be. But out of cusiosity, what is it you are trying to achieve. Or
rather, why do you have a need to update those object instances you are
about to marshal ?

> I'm happy to provide clarifications if anything is unclear.
>
> Thanks in advance
>
> Dave

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email