2010-09-13 84 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();