Hi Florian,
I investigated the streaming issue a bit and found that "parseEagerly=true" in
the JAX-WS annotation
@StreamingAttachment(parseEagerly = true, memoryThreshold = 4 * 1024 *
1204)
which is applied to OpenCMIS' ObjectService and VersioningService breaks
streaming.
Setting it to false has the following effect:
- no MIME*.temp files in Tomcat's temp directory
- the content stream's read() is called only a few times before the service is
invoked (whereas with parseEagerly=true the complete content was read before
the service's invokation and before all handler invokations)
- in a small dev environment no negative performance impact was observed
Would you please explain what was the intention to user eager parsing?
Would it make sense to make this a configurable parameter as the
memoryThreshold already is?
Thanks
Uwe
-----Original Message-----
From: Florian Müller [mailto:[email protected]]
Sent: Mittwoch, 23. Oktober 2013 19:36
To: [email protected]
Cc: Uwe Geisert
Subject: Re: Streaming capability with WS binding
Hi Uwe,
The abilities to stream, buffer in memory, buffer on disk, encrypt, and
dealing with attachments in general are implementation details of the JAX-WS
framework and not covered by the JAX-WS specification.
OpenCMIS supports streaming if the Sun JAX-WS RI is used. The WSConverter
checks for each stream if "read once" is available and use it, if it is
available.
But it is really easy to break. For example, putting a SOAP Handler in front
of the service can force the JAX-WS implementation to read the whole content
into memory.
OpenCMIS does not use mimepull directly. It's a dependency of the Sun JAX-WS
RI. We can't influence how the Sun JAX-WS RI uses it and when it uses the
feature you have mentioned.
The only way to get full control is to develop our own Web Services stack and
I doubt that we will do that.
- Florian
> Hi,
>
> With Webservice-binding uploaded content gets loaded completely on
> the server (either in memory or on disk, depending on the size, as
> specified in the StreamingAttachment's memoryThreshold).
> This issue has been discussed before in regards to encryption and
> configurability of the threshold.
> But I wonder why content must be buffered at all.
>
> According to https://mimepull.java.net, streaming should be possible
> if
> - "The parts are accessed in the same order as they appear in the
> stream"
> - "The parts are accessed only once."
> I believe the read-once condition is complied with by OpenCMIS
> (org.apache.chemistry.opencmis.commons.impl.WSConverter).
>
> So why is streaming not possible with OpenCMIS?
>
> Thanks for a short explanation (or even a solution ;-)
> Uwe