2013-05-15 1 views
0

Я использую следующий код, чтобы убедиться, что содержимое файла успешно записаны на дискполучать сброс соединения по сверстников исключением (TopLink)

public void copyFileFromUrl(URL source, File target, int count) throws IOException { 

    InputStream in = null; 
    OutputStream out = null;  
    if (target != null) { 
     try { 
      if (!target.exists()) { 
       target.createNewFile(); 
       if (source == null) { 
        return; 
       } else {  
        in = source.openStream(); 
       } 
       out = new FileOutputStream(target); 
       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = in.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       }    
       log.debug("The contents from the URL: " + source + " are successfully written to the file " + target);    
       //add for successfull 
      } else { 
       log.debug("skipping creation of asset"); 
      } 
     } catch (Exception e) { 
      if(count < 3){ 
       if (in != null) { 
        in.close(); 
       } 
       if (out != null) { 
        out.close(); 
       } 

       // Attempt to delete it 
       boolean success = target.delete(); 
       if (!success) { 
        log.debug("Unable to delete " + target);  
       } else {  
        copyFileFromUrl(source, target, ++count); 
       }  
      } else {  
       log.debug(e.getClass().getName()); 
       e.printStackTrace();    
      }  
     } finally { 
      if (in != null) { 
       in.close(); 
      } 
      if (out != null) { 
       out.close(); 
      }  
     } 
    } 
} 

Я звоню этот код, как этот

while(iter.hasNext()) { 
    CourseMaterials cm = iter.next();  
    String url; 
    try { 
     Asset asset = cm.getAsset(); 
     List<AssetVersion> av = asset.getAssetVersions(); 

    } catch (Exception e1) { 
     log.debug("Bad asset so skipping..."); 
     e1.printStackTrace(); 
     continue; 
    } 

    .... 

    try { 
     URL earl = new URL(visualElementURL); 
     scormFileWriter.copyFileFromUrl(earl, new File(absoluteFileName), 0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Теперь, как я пытаюсь, как, когда я пришел к функции copyFileFromUrl(), я отсоединяю кабель, он пытается два раза, затем в третий раз подключаю кабель. Функция возвращается успешно. Как я в цикле while. Теперь после этого, когда я прихожу на линию

Asset asset = cm.getAsset(); 

Я получаю Connection Reset by peer exception. Он пропускает этот актив, а затем снова начинает нормально. Зачем ? Почему я получаю connection Reset by peer exception? Если я получаю это исключение из-за отсоединения кабеля, я также должен получить его для всех других активов, но я получаю это исключение только для следующей итерации, тогда он начинает работать нормально, я имею в виду, тогда строка Asset asset = cm.getAsset(); не вызывает исключения после метания первый раз?

Почему это происходит? Как я могу его преодолеть?

Я использую SQL Server 2008 для базы данных.

Благодаря

ответ

0

Вы можете попробовать использовать метод Flush() перед закрытым способом()