By Parameter I meant <property>. So the answer is really NO for now ? Not in a memory efficient way. Any time frames ?
Andreas Veithen-2 wrote: > > There are two things that need to be done to satisfy your requirement: > > 1. The message builders for text/plain (PlainTextBuilder) and > application/octet-stream (BinaryBuilder) need to be optimized using > techniques that we developed some time ago to efficiently handle large > text output from XSL transformations (TemporaryData, > WrappedTextNodeStreamReader and TextFileDataSource). This is > technically not difficult to do but it is a bit tricky at this moment > because we will have to move some code from Synapse to WS-Commons > transport (and maybe even to Axiom and Axis2) and we are in the middle > of a release process. Note that there was a discussion some time ago > to do a general overhaul and optimization of the message builders and > formatters after the Axis2 1.5 release and the > PlainTextBuilder/BinaryBuilder optimization issue is part of this. > > 2. We need to be able to store Axiom elements in properties during > mediation. I think this is supported by Synapse's core but not by the > <property> mediator. There was a discussion around this a few days > ago. We also need a mediator that takes an element from a property and > adds it to the current message (in a location specified by an XPath > expression). This is required because using XSLT or a scripting > mediator would indeed cause the content of the file to be read into > memory. > > By extending the message builder interface so that messages can be > build from DataSource objects (instead of InputStreams), we could even > go as far as allowing to stream the data from the FTP directly to the > target Web service without even using a temporary file. > > Regards, > > Andreas > > On Wed, Feb 25, 2009 at 23:58, kimhorn <[email protected]> wrote: >> >> >> An X12 EDI file is FTped to us. We want to submit that data to a Web >> Service.The file is essentially a single string of text data up to about >> 2MB >> in size.We want to submit that data to a 'Submit' Web Service that takes >> that data in a tag. e.g. <data>ISA....ISE<data/>.To use the 'Submit' Web >> Service, a transaction ID is required. A call to another Web Service >> prior >> to the submit is required to get a transaction ID. Hence thechain. >> >> If VFS reads a text file then the XML payload has all the data in one >> field. >> E.G. >> >> <?xml version="1.0" encoding="utf-8"?> >> <soapenv:Envelope >> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> >> <soapenv:Body> >> <axis2ns1:text >> xmlns:axis2ns1="http://ws.apache.org/commons/ns/payload"> >> "All the X12 Text data is here. One big blob...." >> </axis2ns1:text> >> </soapenv:Body> >> </soapenv:Envelope> >> >> So AXIOM does not help here; at all. Its all or none for that VFS <text> >> tag.The text could be up to 2 MB, once a day. Many smaller files, 500KB >> across the day. >> >> The final submit web service call will need to send this data. The data >> is >> provided by the VFS trigger. A web service call is required in between to >> get the transaction ID. SO the data has to be held temporarily in a >> parameter OR some alternative between the calls. SO: >> >> VFS Trigger - provides <data> - store temporarily somewhere. >> Web Servie Call-1 - get <Transaction ID> >> Web Service Call-2 - send <data> and <Transaction ID> >> >> However this backgorund in not necessary to answer the Technical Question >> above; that focuses on the specific technical risk. >> >> A Standalone Java application can sove this problem easily; Given most >> ESB's >> and B2B, integration products e.g. BEA Aqualogic, provide ways to process >> and temporarily store large data blobs. Given Synapse does not document >> its >> architecture or provide any information on Quality of Service limits. >> E.G. >> What is the 'implementation' of a Parameter; can it handle large blobs of >> data. If not what is the alternate Synapse Mechanism to do this ? >> >> FTP is traditionally used to move large amounts of data and integration >> products that include FTP adapters, provide mechanisms to process large >> amounts of data. Synapse includes an FTP VFS adapter but no documented >> mechanism to process large blobs of data. Is VFS just a 'TOY' add hoc >> addon >> or can it do real work ? Given Synapse does not have a tailored script >> mechanism for handling B2B data, and only uses other approaches ie, >> Javascript, etc that are not designed for integration tasks. >> >> Is the answer that Synapse should not be used to solve this type of >> integration problem, as it does not have mechanisms to process large >> data >> blobs ? If it can then what are the best Practises and Patterns that >> should >> be used for SYnapse to do this ? >> >> >> >> Asankha C. Perera wrote: >>> >>> Hi Kim >>>> The following example script is used for illustrative purposes. In two >>>> places >>>> the VFS payload is copied. Into a property, and in the JSScript. In >>>> full >>>> scenario the property value is used later in a chain of Web service but >>>> needs to be stored temporily, as the request will be replaced by >>>> request/responce of next web service. The file drop will be replaced by >>>> FTP. >>>> Issue is we get 'big' files by FTP that we need to submit to a Web >>>> Service. >>>> The Web Service is OK with the large data, but will Synapse cope. >>>> >>>> Issues: >>>> >>>> 1) What if the payload gets large; >>>> What is large (5MB, 20 MB ?) and >>>> What problems will this mean for this code e.g. Memory etc. >>>> >>> Synapse, especially the NIO transport, is written to never exhaust with >>> OOM with large payloads - i.e. it does not bite more than it can chew. >>> But this does not mean your configuration is safe - for example, reading >>> any payload into a String is bad.. even if its 1MB.. and I see your >>> script mediator doing that - which is worse.. You could maybe use a >>> simple class/POJO mediator to save or process large payload etc. >>>> 2) The JSScript could be replaced with a Java Mediator and use a >>>> stream to better copy the VFS text element {data}. However still >>>> means >>>> it would >>>> copy whole string into memory. >>>> >>> No, in Java, you could get the payload written safely into a file >>> stream, without reading into memory. >>>> 3) Storing the payload temporarily, e.g. alternative to property. How >>>> big >>>> can Property be ? >>>> >>> This will depend on how much memory you allocate and how many of these >>> messages are processed concurrently. Ideally, properties should not take >>> much space >>>> 4) using the XPath to get the payload into property. >>>> >>> Not sure I understand.. again, if you are dealing with large payloads, >>> you would need to be careful. Can you state how large your files are, >>> whats the frequency of processing, and the number of files per each >>> batch etc, and the type of file - XML, Text, CSV etc and what type of >>> operations you want to take on this data.. >>> >>> One thing I always ask users is to state their business problem or the >>> requirement, and ask us for the best technical solution. Once we >>> understand your problem, we could look into alternatives and weigh pros >>> and cons to help you decide >>> >>> cheers >>> asankha >>> >>> -- >>> Asankha C. Perera >>> http://adroitlogic.org >>> >>> http://esbmagic.blogspot.com >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/Large-Payload%3A-Issues-tp22196278p22213925.html >> Sent from the Synapse - User mailing list archive at Nabble.com. >> >> > > -- View this message in context: http://www.nabble.com/Large-Payload%3A-Issues-tp22196278p22215650.html Sent from the Synapse - User mailing list archive at Nabble.com.
