[ 
http://jira.nuxeo.org/browse/NXP-1829?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stéfane Fermigier updated NXP-1829:
-----------------------------------

    Fix Version/s:     (was: 5.2 M1)
                   5.2 M2

> Add streaming feature over the MTOM in the Web Service
> ------------------------------------------------------
>
>                 Key: NXP-1829
>                 URL: http://jira.nuxeo.org/browse/NXP-1829
>             Project: Nuxeo Enterprise Platform 5
>          Issue Type: New Feature
>    Affects Versions: 5.2 M1
>         Environment: JAXWS2.1.2-20070917, MTOM 1.0
>            Reporter: Radu Darlea
>            Assignee: Radu Darlea
>             Fix For: 5.2 M2
>
>
> The MTOM technology allows to send over SOAP the binary data as inline 
> attachments. This improves the performance with around 33%. But the data are 
> sent as one packet, no matter how big they are.
> I tried to send a 700MB file. Couldn't: after minutes when memory consumption 
> grew with 500MB, it started to bounce up and down with 200MB. I killed 
> process, it is clear it is not the way. In  order to overpass this I see 3 
> solutions:
> 1. Implement a kind of streaming in Stateful Web Service. Because it is 
> stateful, the Stream can be kept as internal member and feed the client upon 
> request with chunks of data (extended API required).
> 2. Save the file on HDD and make it available through an URL to the customer 
> (I believe this is worse than previous: extra HDD required, bug prone because 
> extra storage used, etc)
> 3. I saw that people are recommending StAX for streaming over XML. I heard 
> people saying it can be solution for MTOM streaming. StAX might help in 
> streaming over the net, but the API si far too complicated to allow a clean 
> solution / stable solution. 
> Regarding solution 1, a possible API could be like:
> Snippet only on the upload content
>     /**
>      * Opens a blob property content as a InputStream. The property is named 
> by the fieldName.
>      * @param repo
>      * @param docRef has to be not null
>      * @param fieldName has to be not null
>      * @return if the stream was open
>      * @throws ClientAuthenticationException
>      * @throws ItemNotFoundException
>      * @throws ServerProcessingException
>      */
>     public abstract boolean openFile(String repo, String docRef, String 
> fieldName)
>             throws ClientAuthenticationException,
>             ItemNotFoundException, ServerProcessingException;
>     /**
>      * Gets a chunk from a blob property content (previously open as 
> InputStream).
>      * @param chunk OUT parameter filled with the bytes read from stream
>      * @return the number of bytes filled
>      * @throws ClientAuthenticationException
>      * @throws ItemNotFoundException
>      * @throws ServerProcessingException
>      */
>     public abstract int getChunk(Holder<byte[]> chunk)
>             throws ClientAuthenticationException,
>             ItemNotFoundException, ServerProcessingException;
> This method reads from the open InputStream at most the length of supplied 
> byte array. Returns the number of read bytes. If the stream wasn't previously 
> successfully open, an exception is thrown. Only one stream can be open at one 
> time.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.nuxeo.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


_______________________________________________
ECM-tickets mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm-tickets

Reply via email to