2010-09-13 77 views
2

我試圖用SVNKit並行使用不同的線程連接到很多SVN存儲庫。在一些代碼示例多線程時設置SVNKit

網上看,它看起來像使用SVNKit之前,我必須使用靜態方法

DAVRepositoryFactory.setup(); 
SVNRepositoryFactoryImpl.setup(); 
FSRepositoryFactory.setup(); 

顯然靜態方法讓我擔心在多線程環境進行初始化。我的問題是:

  1. 是否有可能使用SVNKit這種方式,並行?
  2. 什麼時候需要調用這些設置方法?只有在軟件的開始,每個線程一次,什麼?

我也很高興,如果有人能解釋我不得不稱呼這些方法的原因。

回答

2

在創建不同線程中的存儲庫實例之前,您只需調用一次該方法。

從SVNRepositoryFactoryImpl的javadoc:

在你的應用做一次就可以使用該庫之前,能使工作與通過SVN協議的存儲庫(超過SVN和SVN + SSH)

這裏是一個帶有2個存儲庫(單線程)的示例代碼:

SVNRepositoryFactoryImpl.setup(); // ONCE! 

String url1 = "svn://host1/path1"; 
SVNRepository repository1 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url1)); 
String url2 = "svn://host2/path2"; 
SVNRepository repository2 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url2)); 

在多線程環境中,您可以創建一個實現Runnable :

public class ProcessSVN implements Runnable { 

    private String url; 

    public ProcessSVN(String url) { 
     this.url = url; 
    } 

    public void run() { 
     SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url)); 
     // do stuff with repository 
    } 
} 

而且使用這樣的:

SVNRepositoryFactoryImpl.setup(); // STILL ONCE! 

(new Thread(new ProcessSVN("http://svnurl1"))).start(); 
(new Thread(new ProcessSVN("http://svnurl2"))).start();