cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jimi Hullegård <jimi.hulleg...@mogul.com>
Subject SV: When transfering an object with a DataHandler field, is it OK not to read from the InputStream?
Date Fri, 08 Oct 2010 14:15:52 GMT
This sounds very strange to me, since I was under the assumption that using an MTOM-enabled
CXF service and a DataHandler, one could stream the data without having to store it in its
entirety on either side. Ie, in theory one could transfer a 100GB file between two machines
that both has little RAM and were the client machine has a very limited disk space (ie smaller
then 100GB), as long as the client handles the data as it reads it from the stream, without
writing it to disk. Are you saying that this is impossible? So the answer in this thread:

http://stackoverflow.com/questions/3850399/transfer-large-messaeges-with-apache-cxf

...is wrong?

And what you are saying is that even if I never read the InputStream, if the InputStream is
mapped to a 100GB blob in the database, the entire 100GB data will be transfered? This is
really bad news for me, but good that I asked so I can fix it. The solution I'm leaning against
now is to split this entity into two different entities, one with the metadata, and one with
the Blob, so one has to specifically request the binary data in order to get it.

/Jimi

________________________________________
Från: Benson Margulies [bimargulies@gmail.com]
Skickat: den 8 oktober 2010 15:16
Till: users@cxf.apache.org
Ämne: Re: When transfering an object with a DataHandler field, is it OK not to read from
the InputStream?

On the wire, that blob has to travel as a MIME part. And there might
be several such MIME parts. Unless you traffic in interceptors, as far
as I know, the entire content will be pulled into memory, unless it's
very big, in which case it ends up in a temp file. CXF can't just
leave the socket that the data is arriving on sitting there waiting
for you to read the stream on the data handler.


2010/10/8 Jimi Hullegård <jimi.hullegard@mogul.com>:
> Hi,
>
> I have set up a simple webservice for testing, where the object to transfer contains
a bunch of simple fields, and then a DataHandler for some binary data (a Blob, actually).
It works just fine, and some test with large files (500MB) proved to me that it really works
without having the entire data in memory on the server or on the client.
>
> But then I realised that in most use cases, we will not need this binary data, so on
the client side we will not read from the InputStream of the DataHandler. But can that cause
any problem? Because when I think about it I don't really know how CXF handles this DataHandler.
Maybe it assumes that the entire content of the DataHandler InputStream will be sent, and
that it keeps the connection open until the client has finished reading, or until some timeout.
Or maybe it assumes the opposite, that it can close the connection after it has transfered
the "normal" data, and then open a new connection if the client starts to read from the InputStream
of the DataHandler.
>
> If it is something like the first scenario, that what can I do to transfer this object
the right way, without having to read the InputStream? I can't find any information about
this in the documentation.
>
> Regards
> /Jimi
Mime
View raw message