====== AIRS-2113 ENABLER: Analyze - Handling large single processes (200 MB) ====== ===== Common ===== ==== Way ==== We can send information about links to upload/download files at least in two different ways: * in special XML tags * as MIME part of message from type ''text/uri-list'' * more info: * https://www.iana.org/assignments/media-types/text/uri-list * https://tools.ietf.org/html/rfc2483#section-5 * http://amundsen.com/hypermedia/urilist/ ==== Check full chain ==== * The time to test the "full chain" should be planned. ==== Credentials ==== To download or upload attachments to / from a shared ressource we need credentials. Question: * how to get them? * from JBoss (''standalone.xml'' or something like this)? ==== FAT ==== * Can FAT work with big files? * At least DB column size (max. 2 GB) -> should work, but test it first * Maybe it is something already available for sending/receiving links? ==== Antivirus ==== * Can Antivirus work with big files? * Seems to work, because it seems that only the file name (and not payload) is transferred through the SOAP * **-** Test on DEV * Can the **Antivirus job** work with big files? * **-** test it locally * what is the job name? * com.seeburger.smarti.dao.DAOSysException: Unable to retrieve a database connection: javax.resource.ResourceException: IJ000460: Error checking for a transaction - caused by: com.seeburger.smarti.dao.DAOSysException: Unable to retrieve a database connection: javax.resource.ResourceException: IJ000460: Error checking for a transaction === Conclusion === * **[-]** FAT creates a temporary file to give it to antivirus, but it writes it bytewise = byte by byte (see ''AttachmentDAOImpl.getFileAttachmentBinary()'') and it takes very long time. For 1GB file my computer needs ca. 50 minutes. ==== Upload ==== * Is it possible to upload big files? * **No** * see ''AttachmentUploadHandler:77'' -> ''this.baos = new ByteArrayOutputStream();'' -> This means the file will be fully loaded into the memory. Which makes working with large files impossible. ===== Import ===== In ''com.seeburger.airsupply.base.exchange.MimeMessageImportHandler'': public void initializeHandlerObjects(SerializableInputStream in, MessageProperties props) { super.initializeHandlerObjects(in, props); this.mimeMessageImportProcessor = FATProcessorFactory.createMimeMessageImportProcessor(in, props, new XMLImportProviderImpl(), AttachmentProcessId.getIdBySmartiMType(props.getProperty(MessageProperties.MESSAGE_TYPE))); } Here we can use different ''mimeMessageImportProcessor'' depending on ''MESSAGE_TYPE''. ===== Misc ===== ==== Inserting BLOB for tests ==== To insert BLOB create a new record in FAT META table at first: INSERT INTO TFATATTACHMENTMETA (CMIMECONTENTID,CPROCESSID,CFILENAME,CORIGINATOR,CFILESIZE,CFILETYPE,CENCRYPTED,CDELETEFLAG,CCREATIONTIMESTAMP,CTRANSMISSIONTIMESTAMP,CSCANSTATUS,CSCANMODE,CLASTSCANTIMESTAMP,CWSPROCESSORNODE,CVIRUSIDS,CRETRYBLOCK,CATTACHMENTID,CREADSTATUS,CREADTIMESTAMP,CFLEXFIELD1) VALUES ('VVK_TEST_20190604',6,'attachment_1GB.txt','SUPPLIER',1048576000,'txt',0,0,1555482046306,-9223372036854775808,'STATUS_WATINGFORCHECK','ASYNC',0,null,null,0,3586,'NEW',-9223372036854775808,'COD'); After that run the small program "Main" from my test project "insertFat" (see ''D:\development\workspaces\insertFat''). ===== Conclusion ===== * All steps should be checked first * To check: * JMS as technology * **Checked** -> It is not possible. * JMS is not good technology to transfer big data. * BIS could not send/receive big files through JMS. (See email by Patrick Bruchhausen from 03.06.2019.) * Upload * **Checked** -> It is not possible at the moment. * FAT * **Checked** -> It is not possible at the moment. -> FAT creates a temporary file to give it to antivirus, but it writes it bytewise = byte by byte * Antivirus * Antivirus job * **Checked** -> It is not possible at the moment. -> FAT creates a temporary file to give it to antivirus, but it writes it bytewise = byte by byte * Antivirus service * **TBD** * Download * **TBD** * ... * **TBD** * The time to test “all steps” should be planned. * After that all necessary fixes should be done * At least: * Replace JMS with other technology * Proposal: shared directory * FAT * Read/Write files (don't read/write bytewise) * Upload * Read/write files (don't use ByteBufferedStream)