* First determine if the time is being spent in the streaming, or the JCR
saving, so you know what problem to solve

* Use System.currentMillis() or whatever to capture the begin+end times of
different sections, and subtract them to get the time. Then keep
a running total of those times. Then at end log out the total times, to see
what part is slow (low tech profiler!)

* Close your stream in a finally block.

* User Buffered stream (input stream)

* Don't save 1000s of times into the same session if you can avoid it.
Create new sessions every 100th time or so and close out the previous
session to be sure
it isn't draining resources.

* Print amount of free memory after calling GC(), like every 100th file, to
see if it's leaking, running low. (again low-tech profiler!)


Best regards,
Clay Ferguson
[email protected]


On Mon, Jan 9, 2017 at 12:03 PM, ravindar.singh <
[email protected]> wrote:

> Please check the below code. correct me if any thing wrong.
>
> After restarting the server it is quit normal then 1 day later it is taking
> 2 min to upload the file.
>
> private void contentStroe(UploadParameters repContent, List<ProjectProp>
> configParams,
>             String workspace, String table) throws Exception{
>         Session repSession = null;
>         Repository repository = null;
>         try{
>             String path = repContent.getModule();
>             Map<String, Object> nodeProps = repContent.getParams();
>             for(ProjectProp prop: configParams){
>                 if("1".equals(prop.getMppFolderYn())){
>                     Object value =
> nodeProps.get(prop.getMppParameterName());
>                     if(value!=null)
>                         path += "/" + value.toString();
>                 }
>             }
>             logger.info("Path => "+path);
>             Calendar cal = Calendar.getInstance();
>             DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd
> HH:mm:ss");
>             repository = getRepository();
>             repSession = repository.login(new SimpleCredentials("admin",
> "admin".toCharArray()), workspace);
>             Node folderNode = repSession.getRootNode();
>             String[] docPath = path.split("/");
>             long docSize = 0;
>             String docExtn = "", docVersion = "";
>             for(String nodes : docPath){
>                 if (folderNode.hasNode(nodes)) {
>                     folderNode = folderNode.getNode(nodes);
>                 } else {
>                     boolean versioned = isVersioned(folderNode);
>                     if(versioned)
>                         folderNode.checkout();
>                     Node subFolderNode = folderNode.addNode(nodes);
>                     subFolderNode.addMixin("mix:referenceable");
>                     subFolderNode.addMixin("mix:versionable");
>                     subFolderNode.setProperty("Created",
> dateFormat.format(cal.getTime()));
>                     subFolderNode.setProperty("CreatedBy",
> repContent.getUpdUser());
>                     repSession.save();
>                     if(versioned)
>                         folderNode.checkin();
>                     subFolderNode.checkin();
>                     folderNode = folderNode.getNode(nodes);
>                 }
>             }
>
>             if(repContent.getUpdFile()!=null){
>                 String name = repContent.getUpdFileName();
>                 docExtn = name.substring(name.lastIndexOf(".")+1);
>             }
>             repContent.setDocName(repContent.getDocName()+"."+docExtn);
>             logger.info("File Store
> Path=>"+path+"/"+repContent.getDocName());
>             if (folderNode.hasNode(repContent.getDocName())) {
>                 boolean versioned = isVersioned(folderNode);
>                 if(versioned)
>                     folderNode.checkout();
>                 Node fileNode = folderNode.getNode(repContent.
> getDocName());
>                 boolean fileversioned = isVersioned(fileNode);
>                 if(fileversioned)
>                     fileNode.checkout();
>                 fileNode.setProperty("lastModified",
> dateFormat.format(cal.getTime()));
>                 fileNode.setProperty("UpdateBy", repContent.getUpdUser());
>                 docSize = addRepoContents(repSession, fileNode, repContent,
> configParams);
>                 repSession.save();
>                 if(versioned)
>                     folderNode.checkin();
>                 if(fileversioned)
>                     fileNode.checkin();
>                 VersionManager versionManager =
> repSession.getWorkspace().getVersionManager();
>                 VersionHistory hist =
> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName());
>                 for (VersionIterator it = hist.getAllVersions();
> it.hasNext();) {
>                     Version version = (Version) it.next();
>                     logger.info("Version1 Name=>"+version.getName());
>                     docVersion = version.getName();
>                 }
>             } else {
>                 boolean versioned = isVersioned(folderNode);
>                 if(versioned)
>                     folderNode.checkout();
>                 Node fileNode = folderNode.addNode(repContent.
> getDocName());
>                 fileNode.addMixin("mix:referenceable");
>                 fileNode.addMixin("mix:versionable");
>                 fileNode.setProperty("Created",
> dateFormat.format(cal.getTime()));
>                 fileNode.setProperty("CreatedBy",
> repContent.getUpdUser());
>                 fileNode.setProperty("deleteOption", "Y");
>                 fileNode.setProperty("versioning", "Y");
>                 docSize = addRepoContents(repSession, fileNode, repContent,
> configParams);
>                 repSession.save();
>                 if(versioned)
>                     folderNode.checkin();
>                 fileNode.checkin();
>                 VersionManager versionManager =
> repSession.getWorkspace().getVersionManager();
>                 VersionHistory hist =
> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName());
>                 for (VersionIterator it = hist.getAllVersions();
> it.hasNext();) {
>                     Version version = (Version) it.next();
>                     logger.info("Version Name=>"+version.getName());
>                     docVersion = version.getName();
>                 }
>             }
>             repSession.save();
>             dao.insertDocDetails(table, repContent, configParams,
> docVersion, path, docSize, docExtn);
>         } catch (Exception e) {
>             throw e;
>         } finally {
>             if(repSession!=null){
>                 try{
>                     repSession.save();
>                 }catch(Exception e){logger.error("Exception in Session Save
> {}", e);}
>                 *repSession.logout();*
>                 repSession = null;
>                 repository = null;
>             }
>         }
>     }
>
>     private long addRepoContents(Session repSession, Node fileNode,
> UploadParameters repContent,
>             List<ProjectProp> configParams) throws Exception{
>         byte[] updFile = repContent.getUpdFileByte();
>         long res = 0;
>         if(updFile!=null){
>             res = updFile.length;
>             ByteArrayInputStream fileContentStream = new
> ByteArrayInputStream(updFile);
>             Binary fileContent =
> repSession.getValueFactory().createBinary(fileContentStream);
>             fileNode.setProperty("mimeType",
> repContent.getUpdFileContentType());
>             fileNode.setProperty("size", res);
>             fileNode.setProperty("data", fileContent);
>             fileContentStream.close();
>             fileNode.setProperty("fileName", repContent.getUpdFileName());
>             logger.info("File Name: "+repContent.getUpdFileName()+"; File
> Size: "+res+"; File Content Type: "+repContent.getUpdFileContentType());
>
>             fileNode.setProperty("Category", repContent.getCategory());
>             fileNode.setProperty("DocCode", repContent.getDocCode());
>             fileNode.setProperty("DocName", repContent.getDocName());
>             fileNode.setProperty("DocRemarks", repContent.getRemarks());
>
>             logger.info("Additional Params:");
>             Map<String, Object> nodeProps = repContent.getParams();
>             for (ProjectProp props : configParams) {
>                 Object value = nodeProps.get(props.getMppParameterName());
>                 logger.info("Name: "+props.getMppParameterName());
>                 logger.info("Type: "+props.getMppDataType());
>                 logger.info("Value: "+value);
>                 if("C".equals(props.getMppDataType())){
>                     fileNode.setProperty(props.getMppParameterDesc(),
> String.valueOf(value));
>                 } else if("N".equals(props.getMppDataType())) {
>                     fileNode.setProperty(props.getMppParameterDesc(),
> Long.valueOf(value==null?"0":value.toString()));
>                 } else if("D".equals(props.getMppDataType())) {
>                     fileNode.setProperty(props.getMppParameterDesc(),
> (Calendar)value);
>                 }
>             }
>         }
>         return res;
>     }
>
>
>
> --
> View this message in context: http://jackrabbit.510166.n4.
> nabble.com/Slowness-while-multiple-uploads-tp4666061p4666070.html
> Sent from the Jackrabbit - Dev mailing list archive at Nabble.com.
>

Reply via email to